配列と真偽値の問題。
Q
以下のダイスゲームを作成せよ。
ルール
サイコロをいくつか振って勝敗を決める。
ゾロ目 VS 非ゾロ目 ー> ゾロ目の勝ち
ゾロ目 VS ゾロ目 ー>サイコロの合計が多い方の勝ち
非ゾロ目 VS 非ゾロ目 ー>サイコロの合計が多い方の勝ち
詳しくは実行例を参照せよ。
[実行例]
ダイスを振りますか?yes...1/no...2:1 サイコロの個数を入力>5 プレイヤー:4,1,1,2,5 PC:6,4,1,6,6 ******result****** プレイヤー合計:13 PC合計:23 LOSE ダイスを振りますか?yes...1/no...2:1 サイコロの個数を入力>2 プレイヤー:1,1 PC:6,2 ******result****** プレイヤー合計:2(ゾロ!) PC合計:8 WIN ダイスを振りますか?yes...1/no...2:1 サイコロの個数を入力>2 プレイヤー:3,4 PC:3,6 ******result****** プレイヤー合計:7 PC合計:9 LOSE ダイスを振りますか?yes...1/no...2:1 サイコロの個数を入力>2 プレイヤー:5,4 PC:4,4 ******result****** プレイヤー合計:9 PC合計:8(ゾロ!) LOSE ダイスを振りますか?yes...1/no...2:2 アプリケーションを終了します
import java.util.Random;
import java.util.Scanner;
public class Dice {
public static void main(String[] args) {
Scanner scan =new Scanner(System.in);
Random rand=new Random();
final String[] PLAYERS={"PLAYER","PC"};
final int PLAYER=0,PC=1;
while(true){
System.out.print("ダイスを振りますか?yes...1/no...2:");
int select=scan.nextInt();
if(select==2){
break;
}
System.out.print("サイコロの個数を入力>");
int diceNum=scan.nextInt();
int[][] data=new int[PLAYERS.length][diceNum];
boolean[] isZoro=new boolean[PLAYERS.length];
int[] sums=new int[PLAYERS.length];
//ゾロ目の判定はダイスが2個以上のとき
if(diceNum > 1){
for(int i=0;i<isZoro.length;i++){
isZoro[i]=true;
}
}
for(int i=0;i<data.length;i++){
System.out.print(PLAYERS[i]+":");
for(int j=0;j<data[i].length;j++){
data[i][j]=rand.nextInt(6)+1;
System.out.print(data[i][j]+(j==data[i].length-1 ? "":","));
if(data[i][0] != data[i][j]){
isZoro[i]=false;
}
sums[i]+=data[i][j];
}
System.out.println();
}
//勝敗判定
String result;
if(isZoro[PLAYER]==isZoro[PC] && sums[PLAYER]==sums[PC]){
result="DRAW";
}else if((isZoro[PLAYER]==isZoro[PC] && sums[PLAYER] > sums[PC]) || (isZoro[PLAYER] && isZoro[PC]==false)){
result="WIN";
}else{
result="LOSE";
}
//出力
System.out.println("******result******");
for(int i=0;i<PLAYERS.length;i++){
System.out.println(PLAYERS[i]+"合計:"+sums[i]+(isZoro[i] ? "(ゾロ!)":""));
}
System.out.println(result);
}
System.out.println("アプリケーションを終了します");
scan.close();
}
}
コメント