サイコロをふって進み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();
}
}
}
コメント