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++;
}
}
}
}
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++;
}
}
}
}