<import java.util.Scanner;
import java.util.Random;
public class CaiShuZi {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//初始化游戏 游戏说明
System.out.println("---------------------猜数字-----------------------");
System.out.println();
System.out.println(" 游戏说明 ");
System.out.println();
System.out.println("游戏时会随机产生四个0-9之间的数字,依次输入四个数(数字可以重复)");
System.out.println("如果位置和数字都正确,相应位置显示R");
System.out.println("如果数字存在但位置错误,相应位置显示O");
System.out.println("如果数字不存在,相应位置显示X");
System.out.println("过关条件:在8次之内能猜出正确的数字");
System.out.println();
System.out.println();
boolean fg=false; //用于判断闯关是否成功
String rt=""; //用于存储随机产生的四个数
while(true) {
System.out.println("1.开始游戏");
System.out.println("2.退出游戏");
System.out.println();
System.out.println("请输入您的选择");
int xh=sc.nextInt();
if(xh==2){break;}
else {
//进行游戏
rt=init(); //获取生成的随机数
for(int i=1;i<8;i++) {
String rl=getInfo(rt,i); //游戏结果
String rl0="RRRR";
int bt=rl.compareTo(rl0);
if(bt==0) {
fg=true;
break;
}
else
System.out.println(rl);
}
}
if(fg) {
System.out.println("------------恭喜你过关了----------------");
System.out.println();
System.out.println();
System.out.println("退出游戏请输入0,继续游戏请输入其他数字键");
int dh=sc.nextInt();
if(dh==0){break;}
}
else {
System.out.println("--------------很遗憾,您输了--------------------------");
System.out.println();
System.out.println("正确答案是:\t"+rt);
System.out.println();
System.out.println();
System.out.println("退出游戏请输入0,继续游戏请输入其他数字键");
int dh=sc.nextInt();
if(dh==0){break;}
}
}
}
//加载游戏 返回产生的随机数
public static String init() {
//随机产生四个数
Random rd=new Random();
int a1=rd.nextInt(10);
int a2=rd.nextInt(10);
int a3=rd.nextInt(10);
int a4=rd.nextInt(10);
System.out.println("游戏初始化完成!");
String rt="";
rt+=a1;
rt+=a2;
rt+=a3;
rt+=a4;
return rt;
}
//判断游戏结果
public static String getInfo(String a,int i) {
Scanner sc=new Scanner(System.in);
//拆分目标数 (游戏初始化时产生的随机数)
int a1 = Integer.parseInt(a.substring(0,1));
int a2 = Integer.parseInt(a.substring(1,2));
int a3 = Integer.parseInt(a.substring(2,3));
int a4 = Integer.parseInt(a.substring(3,4));
System.out.println();
System.out.println("请输入四个数字,进行第"+i+"次尝试");
int num=sc.nextInt();
//声明四个变量,用于接收用户输入的四个数字
int n1,n2,n3,n4; //分别代表千位,百位,十位 ,个位
n1=num/1000;
n2=num%1000/100;
n3=num%100/10;
n4=num%10;
String result=""; //用于存储判断结果
//判断各个数位的结果
if(n1==a1) { a1=10; result+="R"; } //当第一位数字匹配时 ,目标第一位中的数字不能参与后继判断了,因为这样会后继数字的判断
else {
if(n1==a2 || n1==a3 ||n1==a4) {
result+="O"; //数字存在,但位置不正确
}
else { result+="X";} //数字和位置都不正确
}
if(n2==a2) { a2=10; result+="R"; }
else {
if(n2==a4 || n2==a3 ||n2==a1) {
result+="O";
}
else { result+="X";}
}
if(n3==a3) { a3=10; result+="R"; }
else {
if(n3==a2 || n3==a4 ||n3==a1) {
result+="O";
}
else { result+="X";}
}
if(n4==a4) { a4=10;result+="R"; }
else {
if(n4==a2 || n4==a3 ||n4==a1) {
result+="O";
}
else { result+="X";}
}
return result;
}
}
>
游戏规则已在游戏初始化界面给出,就不再赘述:
感觉在游戏提示结果的判断上有点小问题
正常的需求是:
如果目标数字是 2005
玩家输入的数字 0000
正确的提示结果 XRRX
我的提示结果是 ORRX
玩家输入的数字 5555
正确的提示结果 XXXR
我的提示结果是 OOOR
我的思路是:
1.从第一位判断,如果目标第一位数字与玩家输入的第一位相同,提示结果的第一位就置为R,并将目标结果的第一位数字置为10,以免影响后面的判断结果,否则就拿玩家输入的第一位数字分别于与目标的第二位,第三位、第四位进行比较,如果有相等的,提示结果的第一位就置为O,否则置为X。
2.进行第二位,第三位,第四位的判断,重复步骤1的过程。
通过分析,我发现了问题的所在,但不知道如何解决,求大神指教 |
|