题目描述:
编写一个猜字游戏。随机产生一个单词,提示用户一次猜测一个字母,如运行示例所示。单词中的每个字母显示为一个星号。当用户猜测正确后,正确的字母显示出来。当用户猜出一个单词,显示猜错的次数,并且询问用户是否继续对另外一个单词进行游戏。声明一个数组来存储单词,如下所示:
代码:
import java.util.Scanner;
public class Test25 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String[] words = {"write","happy","sun","love","study","cat"};
int[] words_guessed = new int[words.length]; //定义数组保存已经猜过的单词的下标
for(int i =0; i < words.length; i++) //初始化数组元素
words_guessed[i] = words.length;
for(int i =0; i < words.length; i++)
{
int r = getRandom(words.length,words_guessed);
words_guessed[i] = r;
guessGame(words[r]);
System.out.print("Do you want to guess another word?Enter y or n:");
while(true)
{
char option = new java.util.Scanner(System.in).next().charAt(0);
if(option == 'n')
{
in.close();
return;
}
else if(option != 'y')
System.out.println("Enter error!Re-enter:");
else
break;
}
}
System.out.println("No more words");
in.close();
}
//游戏主体
public static void guessGame(String word) {
String[] answer = new String[word.length()];
int miss_count = 0;
char your_answer;
int flag; //0:猜错 1:猜对 2:已经猜过
for(int i = 0; i < answer.length; i++)
answer[i] = "*";
while(true)
{
flag = 0;
System.out.print("(Guess) Enter a letter in word ");
printArrays(answer);
System.out.print(" > ");
your_answer = new java.util.Scanner(System.in).next().charAt(0);
for(int i = 0; i < word.length(); i++)
{
if(your_answer == word.charAt(i))
{
if(your_answer != answer[i].charAt(0))
{
answer[i] = String.valueOf(your_answer);
flag = 1;
}
else
{
flag = 2;
break;
}
}
}
if(overGuess(answer))
{
System.out.print("The word is ");
printArrays(answer);
System.out.println(". You missed "+miss_count+" time");
return;
}
if(flag == 0)
{
System.out.println(your_answer+" is not in the word");
miss_count++;
}
else if(flag == 2)
{
System.out.println(your_answer+" is already in the word");
}
}
}
//随机数选择:返回[0,upper_bound)的随机整数,不包括numbers
public static int getRandom(int upper_bound,int... numbers)
{
int random = (int)(Math.random() * upper_bound);
for (int i = 0;i < numbers.length;i++)
{
if (random == numbers[i])
{
random = (int)(Math.random() * upper_bound);
i = 0;
}
}
return random;
}
//判断是否猜完
public static boolean overGuess(String[] answer) {
for(int i = 0; i < answer.length; i++)
{
if(answer[i].charAt(0) == '*')
return false;
}
return true;
}
//输入数组元素
public static void printArrays(String[] array) {
for(int i = 0; i < array.length; i++)
System.out.print(array[i]);
}
}