- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:excel VBAでオセロを作る)
Excel VBAでオセロを作る
このQ&Aのポイント
- VBA初心者のため、オセロを作りましたがダブルクリックではなく座標入力で石を置ける仕様のゲームを作りたい。
- ダブルクリックのコードを飛ばして作ってみたが、置ける場所がなくなってもパスにならず、座標入力画面が出て詰んでしまった。
- どのようにコードを修正すれば、座標入力仕様でパスや両者パスでゲームを終了させることができるか教えてほしい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
sub mainが壊れています。 4日目のmainの修正(judge処理の追加)が行われていません。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
回答No.1
3日目のworksheet_beforedoubleclickを追加した「あとの」main関数の改変を元に戻し(=3日目上段、main関数に「flip_main関数を追加してください。(下記の赤い行を1行だけ追加)」を実施したところまで)ます。 引き続き4日目以降を同じように追加していけば、よさそうに見えます。
質問者
お礼
sub_mainに4日目のjudge処理をさせていませんでした・・・。 解決しました。 回答ありがとうございました!
質問者
補足
回答ありがとうございます。 私もそれでいけると思いました。 しかし、もちろん座標指定仕様には戻るのですが、置けない場合でもパスにならず、座標入力ボックスが表示されてしまいます。 ダブルクリック仕様ではちゃんとパスになるのですが・・・。
お礼
回答ありがとうございます。 とんでもなく初歩的な欠陥でした・・・。 Sub main(ByVal row_put As Integer, col_put As Integer) Dim a As Integer '返せる石の個数(turnable関数の戻り値を入れる) Dim strturn As String Dim judge As Integer If check_pos(ban(), row_put, col_put) = OK Then a = turnable(ban(), row_put, col_put, turn_main) If a > 0 Then ban(row_put, col_put) = turn_main flip_main ban, row_put, col_put, turn_main display ban() turn_main = turn_main * -1 round = round + 1 '以下パス・終了判定 '石の色はここでは既に次の番に変わっているが、パスだったらまた元に戻す judge = ispass(ban(), turn_main) If judge = PASS Then MsgBox ("石を置けないのでPASSします") turn_main = turn_main * -1 ElseIf judge = GAME_END Then MsgBox ("ゲーム終了です。") End End If Else MsgBox ("そこには置けません") End If Else MsgBox ("そこには置けません") End If End Sub で、見事 パス&終了判定が行われました! ありがとうございました。