作成しているもので、教えてほしいことがあるので投稿させていただきました。
当方の環境は、WindowsXP。コンパイラはVC2008。DXライブラリを使用しています。
一組目と二組目での並び順を表示するプログラムを作成しています。
int x[5];
int y[5];
retu1[3]
retu2[3]
xとyは座標となっています。
例えば
1 2
3 4 5
という並びならば、
retu1[0] = 1
retu1[1] = 2
retu2[0] = 3
retu2[1] = 4
retu2[2] = 5
となっています。そして、これ以上増やすことはできません。
そこで悩んでしまったのが、この並びを判定するプログラムです。
現在は、
if(kazu == 3) // 選ばれた人数。4人選ばれたらkazu == 4となる { if(retu1[0] == 1) { if(retu1[1] == 2) { if(retu2[0] == 3) { x[0] = 0; y[0] = 0; x[1] = 10; y[1] = 0; x[2] = 0; y[2] = 10; func1(x[0], y[0]); // retu1[0]の表示 func2(x[1], y[1]); // retu1[1]の表示 func3(x[2], y[2]); // retu2[0]の表示 } } } } 結果 1 2 3としています。(func は表示をさせる関数です。実際には画像を表示させています。)
もしも並びが
1 2
3 4 5
と、連番ならば簡単になるかもしれませんが、このプログラムは
3 1 5
2 4
という並びもできるようにしています。
プログラムでは
if(kazu == 5) { if(retu1[0] == 3) { if(retu1[1] == 1) { if(retu1[2] == 5) { if(retu2[0] == 2) { if(retu2[1] == 4) { x[0] = 0; y[0] = 0; x[1] = 10; y[1] = 0; x[2] = 20; y[2] = 0; x[3] = 0; y[3] = 10; x[4] = 10; y[4] = 10; func3(x[0], y[0]); // retu1[2]の表示 func1(x[1], y[1]); // retu1[0]の表示 func5(x[2], y[2]); // retu1[1]の表示 func2(x[3], y[3]); // retu2[1]の表示 func4(x[4], y[4]); // retu2[0]の表示 } } } } } }このように記述しています。
ですが、これだと一つ一つ判定させていくと大変で膨大な数になってしまいます。
これを何とか簡単に書くことは出来ないでしょうか?お力を貸してください。