サイコロをふって進み20の地点のゴールを目指す処理を作成せよ。
詳しくは実行例を参考のこと。
初級課題
人数を入力しエンターを押すと
プレイヤー名…今回出た目(到達した地点)
到達した地点の数分だけの[*] ゴール地点[|]
が表示される。
エンターを押すことによって次の人の結果が表示される。
これを2ターン(人数分*2)分表示する処理を作成せよ。
[実行例]
何人>3 [enter] P1...6(6) ****** | [enter] P2...3(3) *** | [enter] P3...6(6) ****** | [enter] P1...6(12) ************ | [enter] P2...2(5) ***** | [enter] P3...1(7) ******* | [enter]
中級課題
初級課題に続き、もし誰か一人がゴール地点を超えたらWinメッセージを表示して終了する処理を作成せよ。初級と同様に[enter]によって処理が進むようにする。
なお、ゴールを超えた分の*は表示しなくてよい
何人>3 P1...6(6) ****** | P2...3(3) *** | P3...6(6) ****** | P1...6(12) ************ | P2...2(5) ***** | P3...1(7) ******* | P1...4(16) **************** | P2...2(7) ******* | P3...5(12) ************ | P1...5(21) ******************** Goal! P1 Win!
上級課題
中級の処理を修正し、ゴール地点をオーバーしてしまった場合そのオーバーした分を戻る処理を加えよ。(ピッタリ20になったときのみゴールとなる)
何人>3 P1...3(3) *** | P2...1(1) * | P3...4(4) **** | P1...4(7) ******* | P2...1(2) ** | P3...3(7) ******* | P1...6(13) ************* | P2...5(7) ******* | P3...4(11) *********** | P1...1(14) ************** | P2...1(8) ******** | P3...2(13) ************* | P1...4(18) ****************** | P2...2(10) ********** | P3...6(19) *******************| P1...4(18) Overしたので 2 戻った ****************** | P2...5(15) *************** | P3...5(16) Overしたので 4 戻った **************** | P1...1(19) *******************| P2...2(17) ***************** | P3...1(17) ***************** | P1...1(20) ******************** Goal! P1 Win!
[解答例]
import java.util.*;
public class Sugoroku {
public static void main(String[] args) {
final int GOAL_POS = 20;
System.out.print("何人>");
int num = new Scanner(System.in).nextInt();
int[] membersPos = new int[num];
while (true) {
for (int i = 0; i < num; i++) {
int dice = new Random().nextInt(6) + 1;
membersPos[i] += dice;
int backStep = 0;
if (membersPos[i] > GOAL_POS) {
backStep = membersPos[i] - GOAL_POS;
membersPos[i] = GOAL_POS - backStep;
}
System.out.printf("P%d...%d(%d)%n", i + 1, dice, membersPos[i]);
if (backStep > 0) {
System.out.printf("Overしたので %d 戻った%n", backStep);
}
for (int j = 0; j < GOAL_POS; j++) {
if(membersPos[i] != GOAL_POS && j==GOAL_POS-1){
System.out.print("|");
}else if(j<membersPos[i]){
System.out.print("*");
}else{
System.out.print(" ");
}
}
if (membersPos[i] == GOAL_POS) {
System.out.printf("%nGoal! P%d Win!%n", i + 1);
return;
}
new Scanner(System.in).nextLine();
}
System.out.println();
}
}
}
コメント