コンテンツにスキップ

プレーヤーを切り替える小技

※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], "番の攻撃!");
}