【OXゲームを作る】
Excel で OXゲームを作る、4回目です。
マクロ
決定ボタン
Private Sub cmdEnter_Click()
Dim CompPosition As Long 'バツを置く位置の数値を格納します
'マルが入ったフィールドのフラグを立てる
'フラグが立ったらそのフィールドを変更できないようにする
If lbl001.Picture <> 0 And A = 0 Then
A = 1 'このフィールドはマルが確定したことを意味する
Ax = 0 '重複チェックフラグをリセットする
End If
・
・
・
'lbl002 ~ lbl009 の分を記述してください
'一度勝敗の判断をする
Call Judge
'Compの番。バツを置く位置を決定する
Do
If lblResult.Caption = "" Then
'無限ループを回避するために使う。モジュールレベル変数で定義
Flg = 0
'この関数で1~9の乱数を発生させる
CompPosition = Int(Rnd * 9) + 1
Select Case CompPosition
Case Is = 1
If A = 0 Then 'マルが置かれていなければ
lbl001.Picture = imgX.Picture 'バツを置く
A = 10 'このフィールドはバツが確定したことを意味するフラグ
Flg = 1 'バツの位置が確定したのでループを抜けるためのフラグ
End If
・
・
・
'Case 2 ~ 9 に lbl002 ~ lbl009 の分を記述してください
End Select
Else
Exit Sub
End If
Loop Until Flg <> 0
'バツが確定されたところでもう一度勝敗の確認をする
Call Judge
※アルファベットは上図のように対応させています。
勝敗判定
・A ~ B には、1 か 10 が入ります。
・1 はマルが、10 はバツが確定されています。
・合計が 3 の場合は、マルが3つ入っていることを意味し、
マルの勝利と判定します。
・合計が 30 の場合は、バツが3つ入っていることを意味し、
バツの勝利と判定します。
Sub Judge()
Select Case A + B + C 'ヨコ
Case Is = 3
lblResult.Caption = "あなたの勝ち"
Case Is = 30
lblResult.Caption = "コンピュータの勝ち"
End Select
Select Case D + E + F 'ヨコ
Case Is = 3
lblResult.Caption = "あなたの勝ち"
Case Is = 30
lblResult.Caption = "コンピュータの勝ち"
End Select
Select Case G + H + I 'ヨコ
Case Is = 3
lblResult.Caption = "あなたの勝ち"
Case Is = 30
lblResult.Caption = "コンピュータの勝ち"
End Select
Select Case A + D + G 'タテ
Case Is = 3
lblResult.Caption = "あなたの勝ち"
Case Is = 30
lblResult.Caption = "コンピュータの勝ち"
End Select
Select Case B + E + H 'タテ
Case Is = 3
lblResult.Caption = "あなたの勝ち"
Case Is = 30
lblResult.Caption = "コンピュータの勝ち"
End Select
Select Case C + F + I 'タテ
Case Is = 3
lblResult.Caption = "あなたの勝ち"
Case Is = 30
lblResult.Caption = "コンピュータの勝ち"
End Select
Select Case A + E + I 'ナナメ
Case Is = 3
lblResult.Caption = "あなたの勝ち"
Case Is = 30
lblResult.Caption = "コンピュータの勝ち"
End Select
Select Case C + E + G 'ナナメ
Case Is = 3
lblResult.Caption = "あなたの勝ち"
Case Is = 30
lblResult.Caption = "コンピュータの勝ち"
End Select
'引分けを判定します。
'勝敗が付かず、フィールドがすべて埋まっている場合、
'A ~ I の合計は 45 になります。(マル 5個 x 1、バツ 4個 x10)
Score = A + B + C + D + E + F + G + H + I
If lblResult.Caption = "" And Score = 45 Then '合計が45だったら
lblResult.Caption = "引分け" '引分けと表示する
End If
'結果を表示の有無でゲーム終了の判断をして、
'フィールドと決定ボタンを無効にします
If lblResult.Caption <> "" Then
lbl001.Enabled = False
lbl002.Enabled = False
lbl003.Enabled = False
lbl004.Enabled = False
lbl005.Enabled = False
lbl006.Enabled = False
lbl007.Enabled = False
lbl008.Enabled = False
lbl009.Enabled = False
cmdEnter.Enabled = False
'このプロシージャを抜けると Do Loop に戻るので、
'抜けるために、フラグを立てます。
Flg = 1
Exit Sub
End If
End Sub
OXゲームの起動
'※このマクロは標準モジュールに記述してください
Sub OXGame()
frmOXGame.Show
End Sub
Excel の標準モジュールに記述したら、
シート上に起動ボタンを設置するといいかもしれません。
個人用マクロブックの標準モジュールに記述したなら、
リボンに登録して、どんな Excel を開いた時にも
起動させることができます。
同じ記述をいっぱいしてしまいましたが、
初級レベルの割には良くできたと思っています。
バツは、乱数を発生させて、空いているフィールドに置く
という方法なので、負けないように考えて置く ということはできません。
なので、ゲームとして遊ぶのであれば、
小学生前のお子さんにちょうど良いレベルかなと思います。
(あまり説明せずに自由に遊んでもらう)
時間があったら、先攻後攻を決めてからとか、
負けないようにバツを置くなどに挑戦してみます。
これで完遂と思ったら・・・
マルを置かずにけってボタンを押したら、バツだけ置かれていった・・・
この分も入れないとね・・・
できるかな?
/_/_/_/_/_/_/_/_/_/_/_/_/_/_
個人用マクロブックについてはこちら
リボンに登録についてはこちら
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/