原题:
编写一个猜成语的小游戏。
要求:使用一个字符串数组来保存10个四字成语,例如:
String[] idioms = {“凉拌黄瓜”, “红烧肘子”, …};
使用一个字符数组来保存20个无关字符,例如:
String [] chars = {‘吃’, ‘喝’, ‘胡’, …};
每次游戏开始时,随机选择一个成语,然后提取其中的4个汉字,再从字符数组中随机选择另外6个汉字,组成一个10个汉字的数组(汉字顺序随机)。注意!如果成语中,有重复的汉字,则只算一个,那么要从字符数组中多选出汉字。然后提示用户成语中包含这10个汉字,让用户猜测成语,用户输入汉字的编号,程序反馈汉字在成语中的位置。用户只有6次猜错机会,当6次机会用完后,游戏结束(猜对不占用次数)。当用户完全猜测出成语后,程序输出用户猜错的次数。
提示:使用java.util.Random类产生随机数。使用方法如下(具体方法请参见Java API文档):
Random random = new Random(1000); //参数表示随机数种子
int index = random.nextInt(10); //产生[0,10)之间的随机整数
游戏过程如下:
第一次:
四字成语中包含的汉字如下:
1.王; 2.中; 3.力; 4.习; 5.努; 6.可; 7.时; 8.学; 9.我; 10.成;
[○○○○]
剩余猜测次数为6次,请输入你的猜测:1
对不起,“王”字不在成语中,剩余猜测次数为5次,请再次输入你的猜测:2
对不起,“中”字不在成语中,剩余猜测次数为4次,请再次输入你的猜测:8
[○○学○]
恭喜你,“学”字在成语中的位置是:3
剩余猜测次数为4次,请再次输入你的猜测:9
对不起,“我”字不在成语中,剩余猜测次数为3次,请再次输入你的猜测:9
对不起,“我”字你已经猜过了,剩余猜测次数为2次,请再次输入你的猜测:5
[努○学○]
恭喜你,“努”字在成语中的位置是:1
剩余猜测次数为2次,请再次输入你的猜测:6
对不起,“可”字不在成语中,剩余猜测次数为1次,请再次输入你的猜测:10
对不起,“成”字不在成语中,并且你已经Game Over了!
第二次(假设还是同样的成语):
四字成语中包含的汉字如下:
1.王; 2.中; 3.力; 4.习; 5.努; 6.可; 7.时; 8.学; 9.我; 10.成;
[○○○○]
剩余猜测次数为6次,请输入你的猜测:1
对不起,“王”字不在成语中,剩余猜测次数为5次,请再次输入你的猜测:8
[○○学○]
恭喜你,“学”字在成语中的位置是:3
剩余猜测次数为5次,请再次输入你的猜测:9
对不起,“我”字不在成语中,剩余猜测次数为4次,请再次输入你的猜测:5
[努○学○]
恭喜你,“努”字在成语中的位置是:1
剩余猜测次数为4次,请再次输入你的猜测:3
[努力学○]
恭喜你,“力”字在成语中的位置是:2
剩余猜测次数为4次,请再次输入你的猜测:4
[努力学习]
恭喜你,“习”字在成语中的位置是:4
太棒了!你一共猜错了2次,已经猜出了整个成语!
代码:
package hw_2;
import java.util.Random;
import java.util.Scanner;
public class mask_3 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
Game game=new Game();
char[] a_char=game.plus_char();
char[] match=game.iii.toCharArray();
char[] aim= {'○','○','○','○'};
int ans;
int t=4;
boolean is=false;
int[] times=new int[10];
System.out.println("四字成语中包含的汉字如下:");
for(int j=0;j<10;j++) {
System.out.print(j+"."+a_char[j]+";");
}
System.out.println(" ");
System.out.println("["+aim[0]+aim[1]+aim[2]+aim[3]+"]");
System.out.print("剩余猜测次数为6次,请输入你的猜测:");
for(int i=0;i<6;i++) {
ans=in.nextInt();
if(times[ans]!=0) {
System.out.println("对不起,“"+a_char[ans]+"”字你已经猜过了,剩余猜测次数为"+(6-i-1)+"次,请再次输入你的猜测:");
continue;
}
int k=0;
for(int j=0;j<4;j++) {
is=false;
if(a_char[ans]==match[j]) {
aim[j]=match[j];
is=true;
k++;
}
if(is&&k==1) {
System.out.println("["+aim[0]+aim[1]+aim[2]+aim[3]+"]");
System.out.print("恭喜你,“"+a_char[ans]+"”字在成语中的位置是:"+j);
i--;
t--;
}
else if(is&&k>1){
System.out.print(" "+j);
i--;
t--;
}
}
if(k>0) {
System.out.println(" ");
if(t>0)
System.out.print("剩余猜测次数为"+(6-i-1)+"次,请再次输入你的猜测:");
}
if(k==0) {
System.out.print("对不起,"+a_char[ans]+"字不在成语中,");
if(i==5) {
System.out.print("并且你已经Game Over了!");
}
else {
System.out.print("剩余猜测次数为"+(6-i-1)+"次,请再次输入你的猜测:");
}
}
if(t==0) {
System.out.println("太棒了!你一共猜错了"+i+"次,已经猜出了整个成语!");
return;
}
times[ans]++;
}
}
}
class Game{
String[] idioms = {"扬名立万","走马观花","春暖花开","一穷二白","千军万马","白手起家","张灯结彩","风和日丽","万里长城","人来人往"};
String[] chars = {"吃","喝","胡","时","会","海","机","草","王","立"};
String iii=this.get_idiom();
//随机产生一个成语;
public String get_idiom() {
Random random=new Random(System.currentTimeMillis()); //参数表示随机数种子;
int index=random.nextInt(10); //产生[0,10)之间的随机整数;
return this.idioms[index];
}
//随机选择六个汉字
public char[] single_char() {
char[] ch=new char[6];
int index;
int lengths=9;
for(int i=0;i<6;i++) {
Random random=new Random(System.currentTimeMillis()); //参数表示随机数种子;
index=random.nextInt(lengths+1); //产生随机整数;
ch[i]=chars[index].charAt(0);
chars=change(chars,index,lengths); //chars个数不变,用lengths变量储存当前对于此程序来说的有效长度;
lengths--;
}
return ch;
}
public String[] change(String[] charr,int index,int lengths) { //相当于删除第i位(但位数实际上不变);
String temp=charr[index]; //把当前最后和该字换顺序;
charr[index]=charr[lengths];
charr[lengths]=temp;
return charr;
}
//将成语四个字分开
public char[] single_idiom() {
String ch=this.iii;
char[] idiom=new char[ch.length()];
for(int i=0;i<ch.length();i++) {
idiom[i]=ch.charAt(i);
}
return idiom;
}
//把取出的十个字随机组合成一个序列;
public char[] plus_char() {
char[] idioms=single_idiom();
char[] charr=single_char();
char[] a_char=new char[10];
int num_idiom=4;
for(int i=0;i<10;i++) { //初始化待组合数组;
a_char[i]=' ';
}
int index;
int num=0;
//判断成语里面的叠字,决定放入数组的字的个数,更改原成语数组
for(int i=0;i<4;i++) {
for(int j=i+1;j<4;j++) {
if(idioms[i]==idioms[j]) {
idioms[j]=' ';
num++;
}
}
}
num_idiom=num_idiom-num;
num=0;
char[] idiom=new char[num_idiom];
for(int i=0;i<4;i++) {
if(idioms[i]!=' ') {
idiom[num]=idioms[i];
num++;
}
}
//把成语里面的字放入数组;
for(int i=0;i<num_idiom;i++) {
Random random=new Random(System.currentTimeMillis());
index=random.nextInt(10);
if(a_char[index]==' ') {
a_char[index]=idiom[i];
}
else {
i--; //如果该数的位置已放有汉字,就重新取随机数;
}
}
//把单字放入数组;
for(int i=0;i<10-num_idiom;i++) {
Random random=new Random(System.currentTimeMillis());
index=random.nextInt(10);
if(a_char[index]==' ') {
a_char[index]=charr[i];
}
else {
i--;
}
}
return a_char;
}
}