我正在制作一个刽子手游戏。这是一个2人游戏,一个玩家将一个单词输入文本框。该单词显示有问号。
例如:
单词Hello
将在?????
中显示为TextBox
。
我遇到的问题是当玩家猜到一封信时,如何更改TextBox
中的文字。如果玩家猜到TextBox
中的“H”并输入它,我希望其他文字更改为H????
。怎么做?
答案 0 :(得分:0)
您可以使用类似以下BuildMask()方法的内容。当文本在第一个文本框中更改时,将其字符添加到哈希集中,调用BuildMask,然后将结果放入第二个TextBox。如果你想要不区分大小写,可以在hashset构造函数中添加IEqualityComparer,如果你谷歌它可以找到解决方案。
static void Main(string[] args)
{
var guessThis = "Hello";
var letters = new HashSet<char>();
Console.WriteLine(BuildMask(guessThis, letters));
letters.Add('l');
Console.WriteLine(BuildMask(guessThis, letters));
letters.Add('H');
Console.WriteLine(BuildMask(guessThis, letters));
}
static string BuildMask(string toGuess, HashSet<char> letters)
{
var result = new StringBuilder();
foreach (var c in toGuess)
{
if (letters.Contains(c))
result.Append(c);
else
result.Append('?');
}
return result.ToString();
}
答案 1 :(得分:0)
检查此完整代码
public partial class MainWindow : Window
{
string CurrentString = null;
string modifiedstring = null;
public MainWindow()
{
InitializeComponent();
}
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
var textBox = sender as TextBox;
string value = textBox.Text.Replace("\r\n", "").Replace("\n", "").Replace("\r", "");
if (null != CurrentString)
{
if (CurrentString.Contains(value))
{
StringBuilder newstring = new StringBuilder();
foreach (char c in CurrentString)
{
if (value.ToLower().Equals(c.ToString()))
{
newstring.Append(value);
}
else
{
newstring.Append("?");
}
}
modifiedstring = newstring.ToString();
text1.Text = modifiedstring;
}
}
}
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
var textBox = sender as TextBox;
string value = textBox.Text.Replace("\r\n", "").Replace("\n", "").Replace("\r", "");
CurrentString = value;
StringBuilder newstring = new StringBuilder();
for (int i = 0; i < value.Length; i++)
{
newstring.Append("?");
}
textBox.Text = newstring.ToString();
}
}
}
}