Java实现猜字母小游戏(有注释,可运行)

package day3;


import java.util.Scanner;


public class caizimugame {


public static void main(String[] args) 
{
// TODO Auto-generated method stub
        char[] chs=new char[5];        //保存随机生成的5个字母
        char[] input=new char[5];      //保存用户输入的5个字母
        int times=0,right=0,position=0;//尝试次数、猜对几个字母、几个字母的正确位置
        int score=0;                   //分数
        char[] realtime=new char[5];   //保存实时显示猜对位置字母的数组
        String inStr="";               //临时保存从控制台录入的字符串
        generates(chs);
        for(int i=0;i<chs.length;i++)
        {
        System.out.print(chs[i]+",");
        }
        /*主程序循环*/
        Scanner sc= new Scanner(System.in);
        System.out.println("游戏开始");
        while(!inStr.equals("EXIT")&&position!=chs.length)
        {//step1:提示用户输入5个字母
        System.out.println("请输入5个字母,按回车继续...(exit退出)");
        /*step2:获得用户输入
         * 获得用户输入的字符串:sc.next()--返回输入的整个字符串
         * 防止、去掉空格.trim()--去掉字符串前后的空格
         * 将输入的字符串中所有小写字母转化为大写字母:
         * 字符串.toUpperCase()
         * 
         * */
        inStr=sc.next().trim().toUpperCase();
        //Step3:如果用户输入的不是exit,才继续
        if(!inStr.equals("EXIT"))
        {
        //step4:将字符转化为字符数组,保存到input数组中
        //将字符串转化为字符数组的API,字符数组=字符串.toCharArray()
        input=inStr.toCharArray();
        //step5:比较chs和input两个数组的相似程度
        //得到right
        //得到 
        int[] result =compare(chs,input,realtime);
        right=result[0];
        position=result[1];
        //没有都猜对
        if(position!=chs.length)
        {
        times++;
        System.out.println("第"+times+"次尝试:"
        +"猜对了"+right+"个字母,"
        +"其中"+position+"个位置正确");
        for(int i=0;i<realtime.length;i++)
        {
        System.out.print(realtime[i]+",");
        }
        System.out.println();
        }
       
        }
        }
        if(inStr.equals("EXIT")){
        System.out.println("欢迎下次再来");
        }else{
        score=100*chs.length-10*times;
        System.out.println("恭喜您,猜对啦!本次得分:"+score);
        }
}
/**
* 比较两个数组
* 1.求出才对几个字母,有几个字母位置正确
* 2.将比较结果分别保存再返回值数组中的第一个和第二个元素
* 3.将位置正确的字母在realtime中实时显示
* @param chs      随机生成的目标数组
* @param input    用户输入内容的数组
* @param realtime 实时显示猜对位置的元素的数组
* @return 1个数,   [0]保存猜对字母的个数
*                 [1]猜对位置的个数
*/
public static int[] compare(char[] chs,char[] input,char[] realtime)
{   //数组第一个元素[0],表示有几个相同字母
//数组第二个元素[1],表示
int[] result=new int[2];//新建一个2个元素的数组

for(int i=0;i<input.length;i++){
for(int j=0;j<chs.length;j++){
if(input[i]==chs[j])
{
result[0]++;
if(i==j)
{
result[1]++;
realtime[i]=input[i];
}
}
}
}
return result;
}
/**
* 自动生成5个不重复的字母,直接保存在数组chs中
* @param chs:传入一个数组
* 方法内,对数组进行更改,直接作用于原数组
*/          
     public static void generates(char[] chs)
     {
    int i=0;
     
    while(i<chs.length)
    {
    int r=(int)(Math.random()*(90-65+1)+65);
    boolean enable=true;
    for(int j=0;j<i;j++)
    {
    /*判断随机生成的字母是否有重复,有重复就去掉*/
    if(chs[j]==r)
    {
    enable=false;
    break;
    }
    }
    /*若没有重复,则把字母放进数组中,若enable为false,则去掉*/
    if(enable){
    chs[i]=(char)r;
    i++;
    }
    }
     }
}

猜你喜欢

转载自blog.csdn.net/sunxiaopangpang/article/details/80624935