プレーヤーを切り替える小技
※a,bは各プレーヤーを表す番号
1.利用シーン
将棋やオセロなどの対戦ゲームの場合、攻撃側のプレーヤーを切り替える必要があります。一般的には、if文を使ってプレーヤーを切り替えることになります。しかし、小技を使えば、もっとすっきりとプログラムすることができます。
2.小技を使わない場合
(1) よくあるやり方 その1
if文を使って、現在のプレーヤーではないプレーヤーに切り替えています。
int a = 5;int b = 10;int turn = a;
for(int i = 0; i<10 ;i++){ println("プレイヤー", turn, "番の攻撃!"); if (turn == a) { turn = b; } else if (turn == b) { turn = a; }}
(2) よくあるやり方 その2
turnを 0 か 1 、または -1 か 1 にして「0と1の切り替え」や「-1と1の切り替え」を使います
turn = 1 - turn; // 0と1の切り替えturn = -turn; // -1と1の切り替えturn *= -1; // -1と1の切り替え
として、下記のようになります。(下記は0と1の切り替えの場合)
int a = 5;int b = 10;int turn = 0;
for (int i = 0; i<10; i++) { if (turn == 0) { println("プレイヤー", a, "番の攻撃!"); } else if (turn == 1) { println("プレイヤー", b, "番の攻撃!"); } **turn = 1 - turn;** // 0と1の切り替え}
(3) よくあるやり方 その3
turnをboolean変数にしてtrueとfalseで切り替えています
int a = 5;int b = 10;boolean turn = true;
for (int i = 0; i<10; i++) { if (turn) { println("プレイヤー", a, "番の攻撃!"); } else { println("プレイヤー", b, "番の攻撃!"); } **turn = !turn;** // trueとfalseの切り替え}
3.小技を使った場合
if文を使わずにもっと短くプログラムすることができます。
int a = 5;int b = 10;int turn = a;
for (int i = 0; i<10; i++) { println("プレイヤー", turn, "番の攻撃!"); **turn = (a + b) - turn;**}
4.(おまけ)3プレーヤー以上の場合の小技
プレーヤーが3人以上の場合は、配列と%(割った数の余り)を使うと良いでしょう。
int[] finalist={5, 10, 30};int turn = 0;
for (int i = 0; i<10; i++) { turn = i % finalist.length; println("プレイヤー", finalist[turn], "番の攻撃!");}