using System;
namespace ConsoleApp1
{
class Program
{
static void Main()
{
//最大猜测次数
int maxCount = 5;
//当前猜测次数
int guessCount = 0;
//谜语字典
string[] words = { "apple", "orange", "pear", "banana", "melon" };
Random rnd = new Random();
//随机选择字典中的一个词
int rndIndex = rnd.Next(words.Length);
string rndWord = words[rndIndex];
//生成一个与选择词相同长度的“下划线词”
string[] blanks = new string[rndWord.Length];
for (int i = 0; i < blanks.Length; i++)
{
blanks[i] = "- ";
}
Console.WriteLine();
while (true)
{
//首次和每次猜完,都打印出当前的进度
foreach (string word in blanks)
{
Console.Write(word);
}
Console.WriteLine();
//当blanks的下划线全部替换成正确字母时,打印胜利
if (!blanks.Any(ele => ele == "- "))
{
Console.WriteLine("你胜利了!");
break;
}
//声明一个数组,当一个字母在单词中出现多次时,用来存储这个字母的每个索引
List<int> indexList = new List<int>();
char inputCharacter = char.Parse(Console.ReadLine());
//当单词中存在输入的字母时
if(rndWord.IndexOf(inputCharacter) != -1)
{
//将字母的所有索引存入indexList
for (int i = 0;i < rndWord.Length; i++)
{
if (rndWord[i] == inputCharacter)
{
indexList.Add(i);
}
}
//将blanks中的下划线替换成对应的字母
foreach (int index in indexList)
{
blanks[index] = $"{inputCharacter} ";
}
}
//当单词中没有输入的字母时
else
{
guessCount++;
if (guessCount == maxCount)
{
Console.WriteLine($"你输了!!这个单词是{rndWord}");
break;
}
else
{
Console.WriteLine($"你还有{maxCount-guessCount}次机会!");
}
}
}
}
}
}
4.27更新,添加了一些注释