C# - 动画问题,使用readkey()方法

时间:2017-07-01 05:24:13

标签: c# animation word readkey

我正在尝试创建一个控制台应用,让用户可以控制屏幕中某个单词的动画。基本上我显示单词然后它开始根据用户按下的键移动。  它几乎可以正常工作,但由于某种推理我无法弄清楚,用户必须按下左键的6或3次左箭头,所以单词向左移动,其他键upArrow,RightArrow和downArrow也是如此。 用户应该只按一次键,然后单词会朝那个方向移动。

我知道我仍然需要处理屏幕结束的异常(indexoutofrange),但这将完成。 首先,我想让控件工作。

感谢您的帮助

using System;
using System.Threading;

namespace Annimation
{
    class Program
    {
        static void Main(string[] args)
        {
            Boolean endOfCanvas = false;
            int x = 20, y = 25;
            ConsoleKeyInfo dir = new ConsoleKeyInfo();
            String word = "@@@@@@@@@@@";

            Console.WriteLine(word);

            do
            {
                do
                {
                    dir = Console.ReadKey(true);
                    while (Console.KeyAvailable == false)
                    {
                        if (dir.Key == ConsoleKey.DownArrow)
                        {
                            System.Console.Clear();
                            Console.SetCursorPosition(x, y);
                            Console.WriteLine(word);
                            Thread.Sleep(100);
                            Console.WriteLine("down");
                            y++;
                        }
                        else if (dir.Key == ConsoleKey.UpArrow)
                        {
                            System.Console.Clear();
                            Console.SetCursorPosition(x, y);
                            Console.WriteLine(word);
                            Thread.Sleep(100);
                            Console.WriteLine("up");
                            y--;
                        }
                        else if (dir.Key == ConsoleKey.LeftArrow)
                        {
                            System.Console.Clear();
                            Console.SetCursorPosition(x, y);
                            Console.WriteLine(word);
                            Thread.Sleep(100);
                            Console.WriteLine("Left");
                            x--;
                        }
                        else if (dir.Key == ConsoleKey.RightArrow)
                        {
                            System.Console.Clear();
                            Console.SetCursorPosition(x, y);
                            Console.WriteLine(word);
                            Thread.Sleep(100);
                            Console.WriteLine("Right");
                            x++;
                        }

                    }
                } while (Console.ReadKey(true).Key == ConsoleKey.DownArrow ||
                                Console.ReadKey(true).Key == ConsoleKey.UpArrow ||
                                Console.ReadKey(true).Key == ConsoleKey.RightArrow ||
                                Console.ReadKey(true).Key == ConsoleKey.LeftArrow);
            } while (!endOfCanvas);
        } 
    }
}

2 个答案:

答案 0 :(得分:0)

似乎问题出在你的下面的循环中。

while ((Console.ReadKey(true).Key == ConsoleKey.DownArrow ||
                                Console.ReadKey(true).Key == ConsoleKey.UpArrow ||
                                Console.ReadKey(true).Key == ConsoleKey.RightArrow ||
                                Console.ReadKey(true).Key == ConsoleKey.LeftArrow);

让循环继续并根据dir = Console.ReadKey(true);决定中断。如果输入的密钥不是预期的那么你可以破解。

您可以通过在while(true)之类的条件下替换上方然后运行您的程序来感受您的错误。

答案 1 :(得分:0)

试试这个

...
do {
    ...
} while (dir.Key == ConsoleKey.DownArrow ||
         dir.Key == ConsoleKey.UpArrow ||
         dir.Key == ConsoleKey.RightArrow ||
         dir.Key == ConsoleKey.LeftArrow);

而不是这个

...
do {
    ...
} while (Console.ReadKey(true).Key == ConsoleKey.DownArrow ||
         Console.ReadKey(true).Key == ConsoleKey.UpArrow ||
         Console.ReadKey(true).Key == ConsoleKey.RightArrow ||
         Console.ReadKey(true).Key == ConsoleKey.LeftArrow);