配列と真偽値の問題。
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(); } }
コメント