Проверяйте ReadKey только для букв (алфавита) в строке

Я играю в игру "Палач", но у меня есть проблема. Я использую ReadKey, чтобы найти догадку игрока, но он может использовать даже цифры или кнопки, такие как "Ввод" и т. Д. Я хочу остановить это, но я не знаю как:/ Можете ли вы помочь мне, пожалуйста? Я хочу контроль, если в результате ReadKey является буква из алфавита или нет (но это должно быть в формате "строки", потому что я работаю позже со строкой). Спасибо большое ребята, вот мой код:)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hangman
{
    class MainClass
    {
        /// <summary>
        /// Hra Oběšenec
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        { 


            Console.WriteLine("Vítejte ve hře Oběšenec!");
            //List slov, které bude hráč hádat
            string[] words = new string[5];
            words[0] = "car";
            words[1] = "school";
            words[2] = "apple";
            words[3] = "orange";
            words[4] = "xamarin";
            //Získávám délku slova (hádaného slova)

            for (int X = 0; X < words.Length; X++)
            {
                string guessWord = words[X];
                short lifes = 5;
                short guessedLetters = 0;
                char GuessingLetter;
                char[] lettersOfWord = new char[guessWord.Length];
                //
                for (int I = 0; I < guessWord.Length; I++)
                {
                    //Length of word is changing to *
                    lettersOfWord[I] = '*';
                }
                bool InGame = true;
                //When this while is true, the game is still going, when it will be false, the game will end
                while (InGame)
                {
                    //Ochrana proti špatnému inputu
                    try
                    {


                        Console.WriteLine(lettersOfWord);
                        Console.WriteLine("Stiskněte klávesu. Životy:" + lifes);
                        ConsoleKeyInfo result_guess = Console.ReadKey(true);
                        string result = result_guess.KeyChar.ToString();



                    if (result.Length == 0)
                    {
                        continue;
                    }
                    //Hráč hádá slovo
                    GuessingLetter = result[0];
                    lifes--;
                    for (int I = 0; I < lettersOfWord.Length; I++)
                    {
                        if (lettersOfWord[I] == '*')
                        {
                            //Pokud hráč uhádne písmenko ve slově 
                            if (guessWord[I] == GuessingLetter)
                            {
                                lettersOfWord[I] = GuessingLetter;
                                guessedLetters++;
                                lifes++;
                                Console.WriteLine("Správně!");
                            }                            
                        }
                    }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Nastala neočekávaná chyba!" + e);
                    }
                    //Pokud prohraje(promrhá všechny pokusy) hra skončí, avšak pokud slovo uhádne (a zůstane alespoň jeden život) vyhrál hru
                    if (lifes== 0 || guessedLetters == guessWord.Length)
                    {
                        //Konec hry 
                        InGame = false;
                        if (lifes == 0)
                        {
                            Console.WriteLine("Smůla prohrál jsi!");
                            Console.ReadKey();
                            break;
                        }
                        else
                        {
                            //Vítězství nad levlem
                            Console.WriteLine("Uhodnul jsi celé slovo! Gratuluji!!");
                        }
                    }
                }
            }
        }
    }
}

1 ответ

Решение

Проверьте, является ли keychar буквой с помощью метода IsLetter, и продолжайте запрашивать буквы, если это не так. Что-то вроде этого:

bool isLetter = false;
while (!isLetter)
{
    var pressedKey = Console.ReadKey();
    if (char.IsLetter(pressedKey.KeyChar))
    {
        isLetter = true;
    }
    else
    {
        Console.WriteLine("Please input a letter.");
    }
}
Другие вопросы по тегам