自己写的一个猜数字小游戏-查看文章

自己写的一个猜数字小游戏

发表于:2017-06-24 08:10:22 分类:JAVA 阅读:1420次

image

代码很糟糕,前面初始化了一个0-9四位数的全组合。

不知道怎么才能优雅地实现,写了n重循环……


这段代码有两个功能,一个是玩家模式,用来随机生成,

然后玩家猜。根据猜的数字与结果比较给予提示;

另一个是解谜模式,实际上就是输入所有条件,然后穷举运算,没有技术含量……


要说特别的话,这段代码是在手机上敲的。

上代码:

import java.util.Random;
import java.util.Scanner;
public class NumGuass {	
private String[] allNum=new String[5040];	
private String[] in;	
private String guassNum="";	
Scanner scanner = new Scanner(System.in);	
public NumGuass(){		
    int index=0;	
	for(int i=0;i<=9;i++){
		for(int j=0;j<=9;j++){
			if(j==i){
				continue;
			}				
		    for(int k=0;k<=9;k++){	
			    if(k==i||k==j){		
				continue;	
				}				
			    for(int l=0;l<=9;l++){	
				    if(l==i||l==j||l==k){	
					continue;		
					}		
					String num=i+""+j+""+k+""+l;	
					allNum[index]=num;		
					index++;			
					}		
				}		
			}		
		}	
	}	
public void setIn(String[] in){	
   this.in=in;	
}	
public static void main(String[] args) {	
    NumGuass guass = new NumGuass();	
	//guass.autoCalculate();		
	guass.guassNum();	
}
/*
* 根据输入的条件自动计算结果;
*/	
public void autoCalculate(){	
    System.out.println("请输入条件,格式示例:7654 2A3B,1234 1A1B");	
	String line = scanner.nextLine();	
	in=line.split(",");		
	for(int i=0;i<allNum.length;i++){	
	    if(equNum(allNum[i])){	
		    System.out.println("答案:"+allNum[i]);		
			break;		
	    }	
	}		
}	
/**	
* 系统随机生成一个4位不同的数字,由用户猜 。	
*/	
public void guassNum(){		
//生成结果数字		
    int index=new Random().nextInt(5040);		
	guassNum=allNum[index];		
	//System.out.println(guassNum);		
	boolean isGuassed=false;		
	int i=0;		
	while (!isGuassed) {		
    	i++;		
		System.out.println("请输入您要猜的数字(四位数字,每一位不允许重复,第一个数可以为0):");	
		String sin=scanner.next();		
		String res = getRes(sin, guassNum);		
		if(res.equals("4A0B")){			
		    System.out.println("恭喜你猜对了,答案为:"+guassNum+"。您共猜了"+i+"次!");	
			isGuassed=true;		
	    }else{			
		    char c = res.charAt(0);		
			char d = res.charAt(2);		
			String str=c+"个数字的位置和数值相同,"+d+"个数字数值相同,位置不同。";			
			System.out.println("请根据提示再试!提示为:"+str);		
			}			
		}	
	}
	/**
	* 匹配所有条件,是否全满足
	* @param num 需要匹配的数字字符串
	* @return 全满足返回true,否则false
	*/	
	private boolean equNum(String num) {	
    	boolean re=false;		
		int count=0;		
		for(int i=0;i<in.length;i++){		
		    String[] ins = in[i].split(" ");	
			if(!ins[1].equals(getRes(num,ins[0]))){			
			    break;			
			}else{		
			    count++;		
			}		
		}		
		if(count==in.length){		
		    re=true;	
		}		
		return re;	
	}
	/**
	* 比较两个数字字符串的相似情况。位数与数字全一致则A前的数字+1,
	* 不同位置的数字相同则B前数字+1。
	* @param num 数字字符串1
	* @param str 数字字符串2
	* @return 返回相似度比较结果,如3A0B表示两个数字字符串有三个位置是相同的。
	*/	
	private String getRes(String num, String str) {		
	    int Anum=0;		
		int Bnum=0;		
		for(int i=0;i<4;i++){		
		    if(num.charAt(i)==str.charAt(i)){	
    			Anum++;		
			}else if(str.contains(new String(new char[]{num.charAt(i)}))){		
			    Bnum++;		
			}		
		}		
		return Anum+"A"+Bnum+"B";	
		}
	}


关键词:java,猜数字,游戏


验证码:

  1. author
    焦木和尚(伪装者) 2017-11-21 13:56:38
    1111
  2. author
    书记(伪装者) 2017-06-28 06:53:14
    回复:乔寨主

    http://git.oschina.n...

    我也把它弄了个安卓版,就是太简单了……
  3. author
    乔寨主(伪装者) 2017-06-27 14:04:57
    http://git.oschina.net/yadong_C/NumberGuess 我之前也写了一个..android版本的 ^^
  4. author
    钱青健(伪装者) 2017-06-26 07:47:23
    js注入成功..
  5. author
    胖子(伪装者) 2017-06-26 07:45:54
    js注入成功..
  6. author
    窝阔台(伪装者) 2017-06-26 07:45:05
    “”“”“”“”“”“”“”“”“”“”“”
  7. author
    胖妇人(伪装者) 2017-06-26 07:43:36
    js注入成功..
  8. author
    郭靖(伪装者) 2017-06-26 07:42:36
    js注入成功..
  9. author
    曲三(伪装者) 2017-06-26 07:40:16

    21

  10. author
    赤老温(伪装者) 2017-06-25 22:40:31
    这玩意蛮好玩的。
  11. author
    黎生(伪装者) 2017-06-25 10:24:43
    回复:胖子

    1

    为什么能回复1
  12. author
    胖子(伪装者) 2017-06-24 08:36:13
    1