DreyerVorster Ответов: 2

Создайте игру в угадайку слов


Привет, я новичок в C # и студент, так что, пожалуйста, простите меня. Я создаю игру в Windows Forms. Мне нужно создать массив из 5 слов, а затем игра в угадывание слов должна выбрать случайное слово из пяти. Когда программа запускается, первая буква должна отображаться в lblSecretWord. Когда пользователь вводит слово в текстовое поле и нажимает кнопку, чтобы проверить правильность слова, а затем оно неправильное, должна отображаться следующая буква. Например, допустим, секретное слово - папа. Когда программа запускается, буква «D» должна показывать, если пользователь угадал неверно, то должно отображаться «Da» и так далее. Если пользователь не угадал правильно, в конце должно появиться окно сообщения, но если пользователь угадал правильно, в окне сообщения должно быть указано, что вы выиграли. Окна сообщений, в которых я могу выполнять свою случайную функцию, я не могу понять, и мой цикл for не работал, поэтому я вынул его ... пожалуйста, помогите

Что я уже пробовал:

Я создал массив со словами, которые работают. У меня есть случайная функция, но она работает неправильно или я ввел ее не в ту область, в которой я не уверен. Я могу показать первую букву в lblSecretWord, но не могу показать следующую и так далее.

namespace GuessingGame_Pretest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            

        }

        Random random = new Random();
        string[] Word = new string[5] { "Nicole", "Kyle", "Clayton", "Jason", "Wynand" };
      


        private void Form1_Load(object sender, EventArgs e)
        {

            //string s = Word[random.Next(4)];

            // char FirstLetter = s[1];
            //lblSecretWord.Text = FirstLetter.ToString();

        }

        private void btnStartGame_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Game has started");
            btnCheckWord.Enabled = true;
            txtGuessWord.Enabled = true;
            lblstart.Text = "Guess the word!";

            string s = Word[random.Next(4)];

            char FirstLetter = s[0];
            lblSecretWord.Text = FirstLetter.ToString();

            
        }

        
        private void btnCheckWord_Click(object sender, EventArgs e)
        {
            
            char FirstLetter = s[0];
            lblSecretWord.Text = FirstLetter.ToString();

            if (txtGuessWord.Text == "Clayton")
            {
                MessageBox.Show("Word is Correct");
            }
            else
            {
                MessageBox.Show("Word is incorrect");
                char SecondLetter = s[1];
                lblSecretWord.Text = (FirstLetter.ToString() + SecondLetter.ToString());
            }

        }

        private void txtGuessWord_TextChanged(object sender, EventArgs e)
        {

        }

        private void lblSecretWord_Click(object sender, EventArgs e)
        {
            
        }
    }
}

2 Ответов

Рейтинг:
5

F-ES Sitecore

Вам нужно сохранить текущую позицию слова и буквы, чтобы они могли быть использованы в вашем событии клика

// store the current word being guessed and the current
// letter index
private string currentWord;
private int currentLetter;

private void btnStartGame_Click(object sender, EventArgs e)
{
    MessageBox.Show("Game has started");
    btnCheckWord.Enabled = true;
    txtGuessWord.Enabled = true;
    lblstart.Text = "Guess the word!";

    // get the word to use
    this.currentWord = Word[random.Next(Word.Length - 1)];

    // start at position 0
    this.currentLetter = 0;

    char letter = this.currentWord[currentLetter];

    lblSecretWord.Text = letter.ToString();
}

private void btnCheckWord_Click(object sender, EventArgs e)
{
    // check guess against current word
    if (txtGuessWord.Text == currentWord)
    {
        MessageBox.Show("Word is Correct");
    }
    else
    {
        MessageBox.Show("Word is incorrect");
        // move to next letter position
        this.currentLetter++;
        // get the letter from the current word
        char letter = this.currentWord[this.currentLetter];
        // add the next letter to the label
        lblSecretWord.Text += letter.ToString();

        // TODO: This code needs updated so it knows when there
        // are no more letters left and stop the game
    }
}


Рейтинг:
17

CPallini

Вы должны отслеживать текущее секретное слово (например, вы можете хранить в переменной-члене класса случайно выбранный индекс).
Вы также можете сохранить текущую длину подстроки секретного слова. Оба сохраненных значения должны использоваться в btnCheckWord_Click обработчик: первый-чтобы проверить, правильно ли угадал пользователь, второй-чтобы увеличить подстроку подсказки (и в конечном итоге установить, проиграл ли пользователь игру).