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(); } }
コメント