- ベストアンサー
三目並べのコードの続きについて
- 三目並べのコードの続きについて
- 三目並べのゲームの表示をダイアログボックスに変更したい
- 引き分けのプログラムの設定方法を知りたい
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こちらが作ると、このようになってしまいますが、お分かりになるでしょうか? BlankCount で、空白を数えるわけです。 If BlankCount() < 1 Then で、リセットされずに、最後まで来たら、Tie になるわけですね。 '// Private _Buttons As New List(Of Button) Private GameCount As Integer Private XCount As Integer Private OCount As Integer Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load GameCount = 0 '配列に格納 Me._Buttons.Add(Me.Button1) Me._Buttons.Add(Me.Button2) Me._Buttons.Add(Me.Button3) Me._Buttons.Add(Me.Button4) Me._Buttons.Add(Me.Button5) Me._Buttons.Add(Me.Button6) Me._Buttons.Add(Me.Button7) Me._Buttons.Add(Me.Button8) Me._Buttons.Add(Me.Button9) For i As Integer = 1 To 9 With Button(i) Button(i).Text = "" End With Next i End Sub Function BlankCount() Dim Cnt As Integer For i As Integer = 1 To 9 With Button(i) If .Text = "" Then Cnt = Cnt + 1 End If End With Next i BlankCount = Cnt End Function Private Function Button(ByVal index As Integer) As Button Return DirectCast(Me.Controls("Button" & index.ToString), Button) End Function Private Sub win() If Button1.Text = "X" And Button2.Text = "X" And Button3.Text = "X" Or _ Button4.Text = "X" And Button5.Text = "X" And Button6.Text = "X" Or _ Button7.Text = "X" And Button8.Text = "X" And Button9.Text = "X" Or _ ' 省略 MessageBox.Show("X is the winner!") Call DisableButtons() Call Reset() XCount = XCount + 1 'Winカウント ElseIf _ Button1.Text = "O" And Button2.Text = "O" And Button3.Text = "O" Or _ ' 省 略 MessageBox.Show("X lose the game") OCount = OCount + 1 Call DisableButtons() Call Reset() End If If BlankCount() < 1 Then MessageBox.Show("Tie") Call DisableButtons() Call Reset() End If End Sub Reset の中で、GameCount = GameCount + 1 として数えます。
その他の回答 (3)
- layy
- ベストアンサー率23% (292/1222)
プログラムは作ってないので考え方、参考。 エクセル1回起動し終了までの勝敗ですか?。 昨日起動、今日起動とかの過去の通算の勝敗ですか?。 外部データに勝敗を保持すれば、どちらでも問題なくできます。 9マス埋まらないものはゲームに含めない、なら、 「勝ち」「負け」以外が「引き分け」となるので、 =「勝ち」でもなく「負け」でもないのが「引き分け」 9マスしかない、○×2択ということで 9ビット「000-000-000」をイメージした構造でもできる、と思います。 2列同時に並んだ「勝ち」もあるのでしょうか?。 (人対戦ではないと思いますがプログラム的にはパターンあり得ますので。)
補足
過去ではなく、ただプログラムを起動してから終了するまでの回数を記録したいのです。 外部データの保持は皆様の回答からStaticを使う、という事なので頑張ってみようと思います。 2列同時はなく、本当にシンプルに3つ揃ったら勝ち、と簡単なものです。
- shinkami
- ベストアンサー率43% (179/411)
途中参加です 9つのボタンのXとOを指定して何十通りもコードを打つしかないのでしょうか。 同じ式を繰り返し使うときは「ユーザー定義関数」はいかがでしょう VBはないので EXCEJのVBAですが 例 Function 勝敗(カードA, カードB, カードC) If カードA = "○" Then A = 1 Else A = 0 If カードB = "○" Then B = 1 Else B = 0 If カードC = "○" Then C = 1 Else C = 0 勝敗 = "引分" If A + B + C = 0 Then 勝敗 = "負" Else If A * B * C = 1 Then 勝敗 = "勝" End Function Private Sub 判定ボックス_Click() 判定ボックス = 勝敗(札A, 札B, 札C) End Sub シリーズの質問は前回のURLがあれば途中参加でも… ツイッター気分でした
お礼
わかりやすいコードありがとうございます!毎回シリーズの質問をさせて頂いておりますので是非次も参加して頂ければとても助かります!
- Wendy02
- ベストアンサー率57% (3570/6232)
>”勝ち”と”負け”のプログラムは成功しましたが”引き分け” 1 2 3 4 5 6 7 8 9 ----- 1,2,3 4,5,6 7,8,9 1,4,7 2,5,8 3,6,9 1,5,9 3,5,7 縦が、3通り 横が、3通り 斜めが、2通り ------ 合計: 8 通りです。 >地道に9つのボタンのXとOを指定して何十通りもコードを打つしかないのでしょうか この部分が良く分からないのですが、 X, ○ の片方ずつ、文字として調べるか、ひとつにまとめるなら、数値化して、X = 1, ○ = -1, 未入力= 0 として、3 が成り立つのを調べか、どちらかで、Win, Lose になるのは、もうお済みのことだと思います。 Tie を求めるというのは、結果的に、未入力を探すことになるのだと思います。未入力がない状態で、どちらにも、Win がでていないなら、Tie ということになると思います。 簡単な方法としては。 --------- X の8通りの組み合わせチェック ○の8通りの組み合わせチェック 未入力のチェック >8 (>7 ですと、複雑になります) --------- で、Xか○に、該当が立たないなら、Tie ですね。 (8回目まで入れて、最後を入力しなくても、Tie になることがあることは、今は、調べていません) >三目並べのゲームのある”同じページ”に表示するのではなく、新しく追加したダイアログボックスの中に表示したいのです。 その集計を、モジュールレベル変数(Form の外に変数を置くか、Static 変数)を設けて、その変数に、記録を残します。 >勝った回数:1回 >負けた回数:2回(相手の勝った数) そして、Game数を決めて、別のDialog(MessageBox?)を出せば良いと思います。 ここまで来ると、私自身、こういうものは作ったことがありませんので、同じものを作ってみないと、どこに問題が出てくるのか分からないですね。
お礼
コードまで的確に書いて下さり、本当になんと感謝していいのかわかりません。これからも慣れない英語で頑張ってシリーズと化したVBの最後の課題を頑張って参りますのでなにとぞご指導よろしくお願いいたします。