Excelのこととか色々

Excel のこととか楽天とか いろいろ書いてみます・・・

【Excel で OXゲームを作る4】マクロ編3

【OXゲームを作る】

   

  まるばつGame

 

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 を開いた時にも

起動させることができます。

 

 

 

同じ記述をいっぱいしてしまいましたが、

初級レベルの割には良くできたと思っています。

 

バツは、乱数を発生させて、空いているフィールドに置く

という方法なので、負けないように考えて置く ということはできません。

 

なので、ゲームとして遊ぶのであれば、

小学生前のお子さんにちょうど良いレベルかなと思います。

(あまり説明せずに自由に遊んでもらう)

 

時間があったら、先攻後攻を決めてからとか、

負けないようにバツを置くなどに挑戦してみます。

 

これで完遂と思ったら・・・

マルを置かずにけってボタンを押したら、バツだけ置かれていった・・・

この分も入れないとね・・・ 

できるかな?

 

 

/_/_/_/_/_/_/_/_/_/_/_/_/_/_

 

個人用マクロブックについてはこちら

www.tuna-kichi.com

 

リボンに登録についてはこちら

www.tuna-kichi.com

 

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/