0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GameEdition3
{
class Program
{
    static void Main(string[] args)
    {

        Data classData = new Data();

        Console.WriteLine("{0}", classData.TitleMenu());

        while (true) 
        {
            ConsoleKeyInfo PressKey;
            PressKey = Console.ReadKey();

            while (PressKey.Key == ConsoleKey.Backspace)
            {
                Console.Clear();
                Console.WriteLine("{0}", classData.TitleMenu());
                PressKey  = Console.ReadKey();
            }



            while (PressKey.Key == ConsoleKey.I)
            {
                Console.Clear();
                Console.WriteLine("{0}", classData.Information());
                PressKey =Console.ReadKey();
            }

            while (PressKey.Key == ConsoleKey.D1)
            {
                Console.Clear();
                Console.Write("Please type in the Item you want. Warhammer, Heavy Armor, Boots, or Sword: ");
                Console.WriteLine("{0}", classData.myFunction());
                Console.WriteLine("\nPress Backspace to go back to the menu and you can view your item in the Display all Items tab");
                PressKey = Console.ReadKey();
            }

            while (PressKey.Key == ConsoleKey.D2)
            {
                Console.Clear();
                Console.WriteLine("{0}", classData.result);
                PressKey = Console.ReadKey();


            }

            while (PressKey.Key == ConsoleKey.D3)
            {
                Console.Clear();
                PressKey = Console.ReadKey();

            }


            if (PressKey.Key == ConsoleKey.D4)
            {
                return;

            }

            Console.Read();
        }
    }


    }
}

**/

こんにちは。キーを押して別のメニューと一連の方向を取得するこの初心者向けゲームを作成しました。問題は、キーを押してその特定のメソッドに移動すると、戻ることができないことです。キーを押してプログラムの別の部分に移動できるように、PressedKey をループさせ続けたいと思います。これを十分に説明したことを願っています。

例: キー I を押します。キー I は一連の方向に進みます。メイン メニューに移動するには、バックスペースを押す必要があります。バックスペースが機能しません。これらの ConsoleKey を機能させるにはどうすればよいですか?

PS: while、if ステートメント、do while、および while(true) を試しました。

誰かが試してみたい場合に備えて、付属のクラスを次に示します。 http://pastebin.com/GivANrwC クラスに Data.cs という名前を付けます。

ありがとう。

4

1 に答える 1

2

1 つの問題はConsole.Read();、ループの最後の行です。これにより、プログラムはテキスト行が入力されてから Enter キーが押されるまで待機するように指示されます。入力したテキストの最初の文字はどこにも保存されず、失われます。

その行を削除した後でも、呼び出しConsole.ReadKey()が多すぎます。そのメソッドを呼び出すたびに、入力されたキーが消費されます。たとえば、「I」を押すと、次のセクションに入ります。

    while (PressKey.Key == ConsoleKey.I)
    {
        Console.Clear();
        Console.WriteLine("{0}", classData.Information());
        PressKey =Console.ReadKey();
    }

の後、WriteLineを呼び出しReadKey()、そうでない場合ConsoleKey.Iは、小さなループを終了してから、より大きなループを再開します。しかし、より大きなループの開始時にReadKey()、最後に押されたキーの値を確認せずに再度呼び出します。

代わりにこのバージョンを試してください:

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

namespace GameEdition3
{
class Program
{
    static void Main(string[] args)
    {

        Data classData = new Data();

        Console.WriteLine("{0}", classData.TitleMenu());

        while (true) 
        {
            ConsoleKeyInfo PressKey;
            PressKey = Console.ReadKey();

            if (PressKey.Key == ConsoleKey.Backspace)
            {
                Console.Clear();
                Console.WriteLine("{0}", classData.TitleMenu());
            }
            else if (PressKey.Key == ConsoleKey.I)
            {
                Console.Clear();
                Console.WriteLine("{0}", classData.Information());
            }
            else if (PressKey.Key == ConsoleKey.D1)
            {
                Console.Clear();
                Console.Write("Please type in the Item you want. Warhammer, Heavy Armor, Boots, or Sword: ");
                Console.WriteLine("{0}", classData.myFunction());
                Console.WriteLine("\nPress Backspace to go back to the menu and you can view your item in the Display all Items tab");
            }
            else if (PressKey.Key == ConsoleKey.D2)
            {
                Console.Clear();
                Console.WriteLine("{0}", classData.result);
            }
            else if (PressKey.Key == ConsoleKey.D3)
            {
                Console.Clear();
            }
            else if (PressKey.Key == ConsoleKey.D4)
            {
                return;
            }
        }
    }


}
}

whileこれは、どのキーが押されたかを確認するときに、小さなループを使用する必要がないことも示しています。すべてのループを外側のループで行うようにします。

于 2012-11-11T06:44:00.413 に答える