检查ReadKey仅用于字符串中的字母(字母)

时间:2016-11-01 12:35:51

标签: c# string readkey

我正在做游戏" Hangman"但我有一个问题。我正在使用ReadKey来查找玩家的猜测,但他可以使用偶数或按钮,例如" Enter"我想阻止这个,但我不知道如何:/你能帮我吗?我想要控制,如果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 个答案:

答案 0 :(得分: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.");
    }
}