我正在尝试创建一个控制台应用,让用户可以控制屏幕中某个单词的动画。基本上我显示单词然后它开始根据用户按下的键移动。 它几乎可以正常工作,但由于某种推理我无法弄清楚,用户必须按下左键的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);
}
}
}
答案 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);