VC++で3行3列の○×ゲーム作ってるのですが(交互に○とX書いて先に1列そろった方が勝ちというゲーム)
今単純に9個のコンボックスに○と×データ用意して9個のリストボックスに貼り付けるという感じにしてるのですが
それだとbuttonも9個用意しなきゃならないし、1つ1つに関数用意してるから判定ができないです・・
何かいい方法ないですか?
○×ゲーム
Re:○×ゲーム
①②③
④⑤⑥
⑦⑧⑨
とするとそれぞれの番号には○と×のデータが入っていてどちらか決めてbuttonを押しますと(①に○をいれる場合)
○②③
④⑤⑥
⑦⑧⑨
と表示していくようにしてるのです。
交互に○とXをつけていきたいので、butanが1つだと
2回目以降は次の行に書かれます。
交互に○とXをつけて一行そろった時点で勝利判定の文字を表示したいのです。
※コンボボックスのことです。
少し質問が意味不明になってしまったのでまとめさせていただきますね。
目的:○Xゲームを作る。
プログラム内容:交互に○と×を入れ一行そろった時点で勝利。ゲームの経過を表示する。
MessageBoxなどで勝利です などいれる
わからないこと:クラスなど構想内容や判定の仕方など
自分で考えたこと:ぐちゃぐちゃすぎるので忘れてください・・
④⑤⑥
⑦⑧⑨
とするとそれぞれの番号には○と×のデータが入っていてどちらか決めてbuttonを押しますと(①に○をいれる場合)
○②③
④⑤⑥
⑦⑧⑨
と表示していくようにしてるのです。
交互に○とXをつけていきたいので、butanが1つだと
2回目以降は次の行に書かれます。
交互に○とXをつけて一行そろった時点で勝利判定の文字を表示したいのです。
※コンボボックスのことです。
少し質問が意味不明になってしまったのでまとめさせていただきますね。
目的:○Xゲームを作る。
プログラム内容:交互に○と×を入れ一行そろった時点で勝利。ゲームの経過を表示する。
MessageBoxなどで勝利です などいれる
わからないこと:クラスなど構想内容や判定の仕方など
自分で考えたこと:ぐちゃぐちゃすぎるので忘れてください・・
Re:○×ゲーム
すみません、何点か確認させてください。
123
456
789
という風に並んでいるのはボタンですか、それともコンボボックスですか?
>>とするとそれぞれの番号には○と×のデータが入っていてどちらか決めてbuttonを押しますと(①に○をいれる場合)
この『どちらかを決める』というのはどのようなインターフェースを想定されていますか?
『どちらかを決める』という事は、○か×かを選択できる箇所があって、選択した後に決定ボタンのような物を押すという事でしょうか?
通常、○か×は自動で切り替わりますが、それは考慮しなくてもいいという事でしょうか?
※ここからは私ならば、こうするという仕様です
1:必ず○が先手とする。
2:9個のボタンを用意する。初期状態では何も書かれていない状態にしておく。
3:○か×かの表示はボタンが押された際に直接描画する(SetWindowText関数を使用する)
4:ボタンが押された際に既に○か×かがセットされていたら、メッセージボックスで別のボタンを押すように促す。
5:勝利判定を行う。
6:9回繰り返した時点で勝敗がつかなった場合は引き分けとする。
7:勝敗がついてない場合は○と×を切り換えて、3に戻る
123
456
789
という風に並んでいるのはボタンですか、それともコンボボックスですか?
>>とするとそれぞれの番号には○と×のデータが入っていてどちらか決めてbuttonを押しますと(①に○をいれる場合)
この『どちらかを決める』というのはどのようなインターフェースを想定されていますか?
『どちらかを決める』という事は、○か×かを選択できる箇所があって、選択した後に決定ボタンのような物を押すという事でしょうか?
通常、○か×は自動で切り替わりますが、それは考慮しなくてもいいという事でしょうか?
※ここからは私ならば、こうするという仕様です
1:必ず○が先手とする。
2:9個のボタンを用意する。初期状態では何も書かれていない状態にしておく。
3:○か×かの表示はボタンが押された際に直接描画する(SetWindowText関数を使用する)
4:ボタンが押された際に既に○か×かがセットされていたら、メッセージボックスで別のボタンを押すように促す。
5:勝利判定を行う。
6:9回繰り返した時点で勝敗がつかなった場合は引き分けとする。
7:勝敗がついてない場合は○と×を切り換えて、3に戻る
Re:○×ゲーム
ありがとうございました。一応自分が考えたのでも不恰好ですができました。
>という風に並んでいるのはボタンですか、それともコンボボックスですか?
コンボボックスです。コンボボックスには通常データを入れておけて垂直バーで選択できますよね。
それに○と×を入れてます。
>通常、○か×は自動で切り替わりますが、それは考慮しなくてもいいという事でしょうか?
すいません。よくわかりません;
私が作った簡易版は
①コンボボックスに○と×を入れておき選択してButtonを押すとStaticに貼り付けるようにする。
SetDlgItemTextを使いました。
②それを3X3行列だから9個用意する
③前レスの例だと
①②③
④⑤⑥
⑦⑧⑨
①④⑦
②⑤⑧
③⑥⑨
③⑤⑦
①⑤⑨
がそれぞれ○かXで揃ったとき勝利判定にしました。
後バグさんの仰られた先手のときと引き分けのときとかも考えてみます。
>という風に並んでいるのはボタンですか、それともコンボボックスですか?
コンボボックスです。コンボボックスには通常データを入れておけて垂直バーで選択できますよね。
それに○と×を入れてます。
>通常、○か×は自動で切り替わりますが、それは考慮しなくてもいいという事でしょうか?
すいません。よくわかりません;
私が作った簡易版は
①コンボボックスに○と×を入れておき選択してButtonを押すとStaticに貼り付けるようにする。
SetDlgItemTextを使いました。
②それを3X3行列だから9個用意する
③前レスの例だと
①②③
④⑤⑥
⑦⑧⑨
①④⑦
②⑤⑧
③⑥⑨
③⑤⑦
①⑤⑨
がそれぞれ○かXで揃ったとき勝利判定にしました。
後バグさんの仰られた先手のときと引き分けのときとかも考えてみます。
Re:○×ゲーム
>(a)の条件から今まで1つの関数に詰め込んでいたのが
>関数9つ作らないといけませんよね。そのせいで判定がややこしくなってわからなくなってしまいました。
判定でしたら(b)ではないですか?
とりあえず(b)という前提で言いますが。
3つのコンボボックスを特定できる情報(例えば1~9や0~8の整数とか、コンボボックスのハンドルとか)を受け取って判定結果を返す関数を作れれば、あとは比較的簡単です。
例えばそれがint f(int, int, int);という関数だとすると、全ての判定を行う関数は例えば以下のようにできます。
>関数9つ作らないといけませんよね。そのせいで判定がややこしくなってわからなくなってしまいました。
判定でしたら(b)ではないですか?
とりあえず(b)という前提で言いますが。
3つのコンボボックスを特定できる情報(例えば1~9や0~8の整数とか、コンボボックスのハンドルとか)を受け取って判定結果を返す関数を作れれば、あとは比較的簡単です。
例えばそれがint f(int, int, int);という関数だとすると、全ての判定を行う関数は例えば以下のようにできます。
int g(int input){ int n = 0; switch(input){ case 1: n = n ? n : f(1, 2, 3); n = n ? n : f(1, 4, 7); n = n ? n : f(1, 5, 9); break; case 2: n = n ? n : f(1, 2, 3); n = n ? n : f(2, 5, 8); break; ・・・ } return n; }データをどのように扱ってるかにもよりますが、多分こんな感じでできるのではないかと思います。