gpt4 book ai didi

c# - 连续显示字符串的字符并为标签 c# 制作计时器

转载 作者:太空狗 更新时间:2023-10-29 21:56:17 24 4
gpt4 key购买 nike

我正在尝试使用 C# 在 Windows 窗体中制作刽子手。

我想显示点或其他东西而不是字母。
示例:“你好”将是:

. . . . . or _ _ _ _ _ 

我也可以向字母展示那些点上的优点吗?

例子:

 word: Hello.
player try: e.
Output: Correct.
Show: . e . . . or _ e _ _ _.

当玩家给出一个正确的字母时,会出现一个“正确”的标签,我可以让这个标签在几秒钟后消失吗?我已经知道了:

if (woord.Contains(letter))
{
labelJuist.Text = "Juist!";
}
else
{
labelFout.Text = "Fout!";
}

最佳答案

如果你有一个 string称为 WordToGuess代表实际的词,你有一个 BindingList<char>称为 guesses , 然后只显示他们猜到的单词的字符,你可以使用类似的东西:

lblWord.Text = string.Join(" ", 
WordToGuess.Select(chr => guesses.Contains(chr) ? chr : '_'));

这将只显示来自 WordToGuess 的字符存在于 guesses , 并将为其他人显示下划线字符。通过使用 string.Join , 我们还可以在每个字符之间插入一个空格,以便下划线更好地突出。

此外,为了将字符存储在一个位置,您可能希望将它们放在 BindingList<char> guesses 中。 , 然后设置 DataBindingListBoxguesses列表。然后,每次用户提交新的猜测时,将其添加到列表中。绑定(bind)列表应该是一个类级别范围的字段,以便它保留它的内容。这样列表框会自动显示字母,您仍然可以使用私有(private)列表(这比列表框的 Items 属性稍微容易一些)。

这是一个可复制/粘贴的示例,您可以将其放入新的 WinForms 中项目(使用“StackOverflow”作为硬编码词):

public partial class Form1 : Form
{
private Button btnSubmit;
private Label lblGuess;
private TextBox txtGuess;
private Label lblWord;
private Label lblGuessedLetters;
private ListBox lstGuessedLetters;
private readonly BindingList<char> guesses = new BindingList<char>();

private const string WordToGuess = "StackOverflow";

private const int controlHeight = 20;
private const int controlWidth = 200;
private const int controlPadding = 10;

public Form1()
{
InitializeComponent();

lblWord = new Label
{
Left = controlPadding,
Top = controlPadding,
Height = controlHeight,
Width = controlWidth,
Text = new string('_', WordToGuess.Length)
};
Controls.Add(lblWord);

lblGuessedLetters = new Label
{
Left = controlPadding,
Top = lblWord.Bottom + controlPadding,
Height = controlHeight,
Width = controlWidth,
Text = "Guessed Letters:"
};
Controls.Add(lblGuessedLetters);

lstGuessedLetters = new ListBox
{
Left = controlPadding,
Top = lblGuessedLetters.Bottom + controlPadding,
Height = controlHeight * 5,
Width = controlWidth,
Enabled = false,
DataSource = guesses,
SelectionMode = SelectionMode.None
};
Controls.Add(lstGuessedLetters);

lblGuess = new Label
{
Left = controlPadding,
Top = lstGuessedLetters.Bottom + controlPadding,
Height = controlHeight,
Width = controlWidth,
Text = "Enter your guess below"
};
Controls.Add(lblGuess);

txtGuess = new TextBox
{
Left = controlPadding,
Top = lblGuess.Bottom + controlPadding,
Height = controlHeight,
Width = controlWidth
};
Controls.Add(txtGuess);

btnSubmit = new Button
{
Left = controlPadding,
Top = txtGuess.Bottom + controlPadding,
Height = controlHeight,
Width = controlWidth,
Text = "Submit Guess"
};
btnSubmit.Click += BtnSubmit_Click;
AcceptButton = btnSubmit; // Make this button default - just press Enter
Controls.Add(btnSubmit);
}

private void BtnSubmit_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(txtGuess.Text))
{
MessageBox.Show("enter a guess in the textbox");
}
else
{
// Grab the first letter in case they typed more than one
var letter = txtGuess.Text[0];

if (guesses.Contains(letter))
{
MessageBox.Show("you already guessed that letter!");
}
else
{
guesses.Add(letter);
lblWord.Text = string.Join(" ",
WordToGuess.Select(chr => guesses.Contains(chr) ? chr : '_'));
}
}

txtGuess.Focus();
txtGuess.Text = "";
}
}

输出

enter image description here

关于c# - 连续显示字符串的字符并为标签 c# 制作计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51845733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com