我在做一款生挂文字游戏,作为速成的编码练习。现在,我的 空白 应该变成正确选择的字母,同时留下下划线作为其他字母的占位符,但相反,我所有的 空白 被转换为当前选择的正确字母。例如,如果我的单词(分词)是'bag',我猜是'a',我所有的空白都变成了'a';而不是想要的输出'_ a _'。
using System;
using System.Text;
class Hang {
public static string blanks = "_";
public static string hangParts = "_____,|___|, | , O , /|\\ , / \\ ";
public static int tries = 0;
public static void PrintHang(){
Console.WriteLine("What's your word? ");
string wordDisp = Console.ReadLine();
char[] charDisp = wordDisp.ToCharArray();
string stringDisp = charDisp.ToString();
StringBuilder temp = new StringBuilder();
for(var i=0; i<charDisp.Length;i++){
temp.Append(blanks);
}
Console.WriteLine(charDisp.Length);
Console.WriteLine(temp);
while(tries < 6){
for(var s=0;tries<6; s++){
Console.WriteLine("What's your letter? ");
var pick = Console.ReadLine();
if(charDisp[s].ToString().Contains(pick)){
temp.Replace(temp[s],Convert.ToChar(pick));
Console.WriteLine(temp);
}
else{
tries++;
Console.WriteLine(hangParts[s]);
}
}
}
}
}
class Prog{
public static void Main(){
Hang.PrintHang();
}
}
问题是 temp.Replace(temp[s],Convert.ToChar(pick))
你将下划线替换为Console.ReadLine()中字符串的第1个字符,但temp的所有字符都以下划线开始。 所以每个字母都被设置为你输入的第1个字母。
你需要以某种方式映射目标字符串中每个字母的索引位置。 你还需要考虑到输入字符串中有多个字母是相同的 "hello",例如有2个 "l"。
然后你可以根据目标字符串中的索引,用正确的字母替换你的下划线。
还有一些其他的事情...
你可能不需要使用char数组。 你可以直接用字符串 wordDisp.Contains(pick)来进行包含。
另外,你在使用 "tries "的方式上有个错误。 你应该去掉 "for "循环,在 "misses "达到一定数量后退出即可。 你还需要考虑到用户已经成功匹配了所有字母--打印一些东西让他们知道他们匹配了,然后退出。