最近ちゃんとプログラミングを勉強をしていく中で自分でなにか作ってみたいと思い始めその足かかりとして誰でも知ってるゲームを作ってみようと思いました。
ということでオセロを作ってみます。
使うのはVB.netのFrameWork。初心者向けと言われ主にWindowsのフォーム作成に使われているそうです。
特徴はツールボックスを使い視覚的にボタンやテキストボックスなどを配置できること。これが便利でもあり厄介でもある。
そんなこんなで初心者の知ってる知識だけで作ってみる。一応誰が読んでわかるものになるはず。。。
1 フォームの配置(道具を用意する)
まず、オセロに必要なものは黒と白の駒、盤面、マス目。
これをそれぞれ
黒と白の駒→黒と白色のテキスト(●)
盤面→FlowLayoutPanel(この中に入れたオブジェクトを自動整列してくれる)
マス目→8×8=64個のボタン
というように割り当てた。また、ボタンには下の図のように1~64までの数字が割り当てられるように設定した、イメージはカレンダーの日付。
実際のフォーム、四角の部分はボタンでそこに「●」を書いている
これはまだ配置しただけなのでそれぞれのボタンはなにも反応しないから少しずつ機能を追加していく。
2 ボタンを押したら●が表示される機能 (駒を置く)
まずボタンを押したときに駒を配置する機能を追加します。
実際のコードはこんな感じ
Private Turn_Mode As Short = 0 '先行後攻のフラグ 0=先行 1=後攻 'ボタンの処理 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'テキストが入ってないときのみ動かす If Button1.Text = "" Then stnPlace(Button1) trnChange() End If End Sub '先行後攻の切り替え Public Function trnChange() If Turn_Mode = 0 Then Turn_Mode = 1 'フラグの切り替え lblTurn.Text = "後攻●" '先行後攻表示 lblTurn.ForeColor = Color.White 'テキストの色変更 Else Turn_Mode = 0 lblTurn.Text = "先行●" lblTurn.ForeColor = Color.Black End If End Function '盤面の状態を変更 Public Function stnPlace(ByVal bName As Button) As Boolean '先行なら黒後攻なら白 If Turn_Mode = 0 Then bName.ForeColor = Color.Black Else bName.ForeColor = Color.White End If 'テキストの配置 bName.Text = "●" End Function
ちょっとしつこいけど一段落ずつ確認しておく
Private Turn_Mode As Short = 0 '先行後攻のフラグ 0=先行 1=後攻
まずは先行後攻のフラグの設定。0になってるときは先行、1になってるときは後攻
'ボタンの処理 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'テキストが入ってないときのみ動かす If Button1.Text = "" Then stnPlace(Button1) trnChange() End If End Sub
これはボタンを押したときの処理をあらわしている。
if文を使ってボタンのテキストが入ってないときのみ関数を動かすように設定。
これをボタン1~64まで同じように動くように設定。
'先行後攻の切り替え Public Function trnChange() If Turn_Mode = 0 Then Turn_Mode = 1 'フラグの切り替え lblTurn.Text = "後攻●" '先行後攻表示 lblTurn.ForeColor = Color.White 'テキストの色変更 Else Turn_Mode = 0 lblTurn.Text = "先行●" lblTurn.ForeColor = Color.Black End If End Function
先行後攻切り替えの関数。ついでに下にラベル(lblTurn)をターンに合わせて切り替わるようにしてわかりやすく表示。
内容としてはIf文を使い、先行のときは後攻に、後攻のときは先行にフラグを切り替える簡単なもの
'盤面の状態を変更 Public Function stnPlace(ByVal bName As Button) As Boolean '先行なら黒後攻なら白 If Turn_Mode = 0 Then bName.ForeColor = Color.Black Else bName.ForeColor = Color.White End If 'テキストの配置 bName.Text = "●" End Function
ボタンにテキストを表示し、場合に応じて黒色か白色かを変更する関数。
ここでもTurn_Mode変数が大活躍。先行なら黒色、後攻なら白色で●を書く。
引数はボタンの型にしてボタン1~64が入れられるようにした。
実際の動作
実際の動作はこんな感じ、ひっくり返らないし、どこにでも駒が置けるけどそれっぽくはなってきた?
まとめ
ここまでは思ったよりシンプルにまとまった!
次はひっくり返す動作をつける、ここからが大変や!
以上!