Javaで4桁の数字を当てるHit&Blow(ヒット&ブロー)ゲームを作ってみよう!
通常Hit&Blowゲームは4桁で行うが今回はこれを拡張して任意桁で行えるものとする。
★Hit&blow今回の仕様
何桁で出題するかを入力する。その桁数で重複のない数値の並びをランダムに生成する。例えば5桁なら
02815
この際先頭に0がきても良い。
そのランダムに生成された数字が何かを当てるゲームだ。
プレイヤーはその数字が何かを予測し、入力する。
01234
この場合0は数字も位置も同じこの場合Hitとする。
1は数字は一致しているが位置が違うこれはBlowだ。
同様に2も数字が一致していて位置が違う。
結果この入力に対しては
Hit=1/Blow=2
と表示される。
これを繰り返し正解までの試行回数を競う。
詳しくは実行例を参照のこと。
[Hint]
String str="982"; int n=Character.getNumericValue(str.charAt(0))
とした場合、nに9が代入される。(CharAt()で指定した文字を数値に変換する)
[実行例]
要素数(10以下):4 4桁の数字を入力せよ>1234 Hit=0/Blow=1 4桁の数字を入力せよ>5678 Hit=0/Blow=1 4桁の数字を入力せよ>2345 Hit=0/Blow=1 4桁の数字を入力せよ>3456 Hit=0/Blow=1 略 4桁の数字を入力せよ>3790 Hit=0/Blow=4 4桁の数字を入力せよ>0973 Hit=2/Blow=2 4桁の数字を入力せよ>0793 Hit=1/Blow=3 4桁の数字を入力せよ>7903 Hit=4/Blow=0 Nice Hit!! 正解=7903 Count:14
import java.util.Random;
import java.util.Scanner;
public class HitAndBlow {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
Random rand=new Random();
final int[] nums=new int[10];
for(int i=0;i<nums.length;i++){
nums[i]=i;
}
System.out.print("要素数(10以下):");
int ansLength=scan.nextInt();
int[] answer=new int[ansLength];
int[] userAns=new int[ansLength];
//問題生成
for(int i=0;i<answer.length;i++){
int index=rand.nextInt(nums.length-i);
answer[i]=nums[index];
int temp=nums[index];
nums[index]=nums[nums.length-1-i];
nums[nums.length-1-i]=temp;
}
int count=0;
while(true){
System.out.printf("%d桁の数字を入力せよ>",ansLength);
String input=scan.next();
if(input.length() != ansLength){
continue;
}
count++;
for(int i=0;i<input.length();i++){
userAns[i]=Character.getNumericValue(input.charAt(i));
}
//判定
int hit=0,blow=0;
for(int i=0;i<userAns.length;i++){
if(userAns[i]==answer[i]){
hit++;
}else{
for(int j=0;j<answer.length;j++){
if(userAns[i]==answer[j]){
blow++;
}
}
}
}
System.out.printf("Hit=%d/Blow=%d%n",hit,blow);
if(hit==answer.length){
System.out.println("Nice Hit!!");
System.out.println("正解="+input);
System.out.println("Count:"+count);
break;
}
}
scan.close();
}
}


コメント