java
1 2 3import java.io.Console; 4import java.util.Scanner; 5public class sampul1{ 6 public static void main(String[] args) { 7 8 //ゲーム説明 9 System.out.print("このゲームは3桁の数字を当てるゲームです"); 10 System.out.println("正解するまでの回数が少なかった方が勝利です"); 11 System.out.println("数字と桁が両方合っていればHit,数字のみならばBlowと表示されます"); 12 13 //数字設定 14 Scanner sc=new Scanner(System.in); 15 Console cons=System.console(); 16 if(cons==null) { 17 System.out.println("cons==null"); 18 return; 19 } 20 String name1="player1"; 21 System.out.println(name1+"さん3桁の数字を設定してください"); 22 while(true) { 23 boolean number=true; 24 char[] answer1=cons.readPassword(); 25 String input=new String(answer1); 26 char []a=input.toCharArray(); 27 int il=input.length(); 28 for(int i=0; i<3; i++) { 29 for(int j=i+1; j<3; j++) { 30 if(a[i]==a[j]||il!=3) { 31 number=false; 32 } 33 } 34 } 35 if(number==false) { 36 System.out.println("数字は重複せず、3桁です"); 37 continue; 38 } 39 String name2="player2"; 40 System.out.println(name2+"さん3桁の数字を設定してください"); 41 while(true) { 42 boolean num=true; 43 char[] answer2=cons.readPassword(); 44 String reinput=new String(answer2); 45 char[]b=reinput.toCharArray(); 46 int rl=reinput.length(); 47 for(int i=0; i<3; i++) { 48 for(int j=i+1; j<3; j++) { 49 if(b[i]==b[j]||rl!=3) { 50 num=false; 51 } 52 } 53 } 54 if(num==false) { 55 System.out.println("数字は重複せず、3桁です"); 56 continue; 57 } 58 //player1 59 System.out.println(name1+"さん相手の3桁を予想してください"); 60 int count=1; 61 while(true) { 62 boolean nu=true; 63 String c=sc.nextLine(); 64 char[] d=c.toCharArray(); 65 int cl=c.length(); 66 for(int i=0; i<3; i++) { 67 for(int j=i+1; j<3; j++) { 68 if(d[i]==d[j]||cl!=3) { 69 nu=false; 70 } 71 } 72 } 73 if(nu==false) { 74 System.out.println("数字は重複せず、3桁です"); 75 continue; 76 } 77 78 int hit=0, blow=0; 79 for(int i=0; i<3; i++) { 80 if(d[i]==b[i]) { 81 hit++; 82 }else{ 83 for(int j=0; j<3; j++) { 84 if(d[i]==b[j]) { 85 blow++; 86 } 87 } 88 } 89 } 90 if(hit!=3) { 91 System.out.println(hit+"Hit "+blow+"Blow"); 92 count++; 93 } 94 if(hit==3) { 95 System.out.println(name1+"さんは"+count+"回目で正解しました。"); 96 break; 97 } 98 } 99 100 101 102 //player2 103 System.out.println(name2+"さん相手の3桁の数字を予想してください"); 104 int recount=1; 105 while(true) { 106 boolean n=true; 107 String e=sc.nextLine(); 108 char[] f=e.toCharArray(); 109 int el=e.length(); 110 for(int i=0; i<3; i++) { 111 for(int j=i+1; j<3; j++) { 112 if(f[i]==f[j]||el!=3) { 113 n=false; 114 } 115 } 116 } 117 if(n==false) { 118 System.out.println("数字は重複せず、3桁です"); 119 continue; 120 } 121 int ahit=0, ablow=0; 122 for(int i=0; i<3; i++) { 123 if(f[i]==a[i]) { 124 ahit++; 125 }else{ 126 for(int j=0; j<3; j++) { 127 if(f[i]==a[j]) { 128 ablow++; 129 } 130 } 131 } 132 } 133 if(ahit!=3) { 134 System.out.println(ahit+"Hit "+ablow+"Blow"); 135 recount++; 136 } 137 if(ahit==3) { 138 System.out.println(name2+"さんは"+recount+"回目で正解しました。"); 139 if(count==recount) { 140 System.out.println("引き分けです"); 141 } 142 if(count<recount) { 143 System.out.println(name1+"さんの勝利です!"); 144 } 145 if(count>recount) { 146 System.out.println(name2+"さんの勝利です!"); 147 } 148 break; 149 } 150 } 151 152 153 154 155 156 157 158 159 } 160 } 161 162 } 163} 164 165 166 167 168
java初心者です。一応完成形?に近い形まで出来ました。
①readPassword以外で自分で数字を設定できてかつ非表示にする方法はないのでしょうか?(readPasswordはターミナルでしか実行できなくなるので。)
②このコードは同じ構文を繰り返していますが、他にもっと短縮簡素化できるコードは何かありますか?
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/12/25 12:57
2021/12/25 14:15