猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩。
通常由两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4个数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数字,
出数者就要根据这个数字给出几A几B,其中A前面的数字表示数字正确且位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。
如正确答案为 5234,而猜的人猜 5346,则是 显示1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,
因此记为 2B,合起来就是 1A2B。
接着猜的人再根据出题者的几A几B继续猜,直到猜中(即 4A0B)为止。
锻炼逻辑思维能力,快去试试吧!
代码如下:
public static void main(String[] args) {
welcome();
boolean flag = caiDan();
int[] suiJiShu = suiJiShu();
String fanHuan = "";
int ciShu = 6;
if (flag) {
while (true) {
int[] shuRu = shuRu(ciShu);
fanHuan = panDuan(suiJiShu,shuRu,ciShu);
ciShu--;
if (ciShu < 0) {
exit2();
daAn(suiJiShu);
}else if (fanHuan.equals("4A0B")){
gonXi();
}
}
} else {
exit();
}
}
public static void welcome() {
JOptionPane.showMessageDialog(null, "欢迎进入 BULLS and COWS");
}
public static void exit() {
JOptionPane.showMessageDialog(null, "游戏结束!");
}
public static void exit2() {
JOptionPane.showMessageDialog(null, "机会已用完,游戏结束!");
}
public static void gonXi() {
JOptionPane.showMessageDialog(null, "恭喜您,猜对了!!\n游戏结束!");
System.exit(0);
}
public static boolean caiDan() {
int zhi = JOptionPane.showConfirmDialog(null, """
游戏规则:
输入一个四位数猜数字,电脑根据输入数字返还?A?B
如正确答案为 5234,而猜的人猜 5346,则是 显示1A2B,
其中有一个5的位置对了,记为 1A,
而3和4这两个数字对了,而位置没对,因此记为 2B,
合起来就是 1A2B。
接着您根据返还的?A?B继续猜,直到猜中(即 4A0B)为止。""");
if (zhi == 0) {
return true;
} else {
return false;
}
}
public static int[] suiJiShu() {
int[] suiJi = new int[4];
int[] score = new int[9];
for (int i = 0; i < score.length; i++) {
score[i] = i + 1;
}
for (int i = 0; i < suiJi.length; i++) {
int zhongJian = (int) (Math.random() * 9);
if (score[zhongJian] != -1) {
suiJi[i] = score[zhongJian];
score[zhongJian] = -1;
} else {
i--;
continue;
}
// System.out.println(suiJi[i]);
}
return suiJi;
}
public static void daAn(int[] suiJi){
String a = "";
for (int i = 0;i<suiJi.length;i++){
a+=suiJi[i];
}
System.out.print("正确答案为"+a);
System.exit(0);
}
public static int[] shuRu(int ciShu) {
String shuRuStr = JOptionPane.showInputDialog(null, "请输入一个四位数:");
System.out.println("输入提醒(第"+(7-ciShu)+"次输入):"+shuRuStr+"\t");
int shuRu = Integer.parseInt(shuRuStr);
int[] shuRuArray = new int[4];
for (int i = shuRuArray.length-1; i >= 0; i--) {
shuRuArray[i] = shuRu % 10;
shuRu /= 10;
}
return shuRuArray;
}
public static String panDuan(int[] suiJiShu,int[] shuRu,int ciShu) {
int a = 0,b = 0;
for (int i =0;i<suiJiShu.length;i++){
if (suiJiShu[i]==shuRu[i]){
a++;
}else {
for (int j = 0; j <shuRu.length ; j++) {
if (suiJiShu[i]==shuRu[j]){
b++;
}
}
}
}
JOptionPane.showMessageDialog(null,a+"A"+b+"B"+"\n"+"您还有"+ciShu+"次机会");
return a+"A"+b+"B";
}