c# - 我想在 C# 控制台中制作蛇游戏,移动问题
问题描述
要改变蛇的方向,我首先必须按向上箭头,然后按蛇的新方向,蛇会朝那个方向前进,直到我再次击中向上箭头。因此,要向左改变方向,您需要按向上箭头,然后按向左箭头。当我按左键使蛇向左移动时,我希望它消失。基本上向上箭头正在暂停游戏,我不知道为什么。
if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.UpArrow)
{
keyinfo = Console.ReadKey();
Console.WriteLine(ConsoleKey.UpArrow);
}
if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.DownArrow)
{
keyinfo = Console.ReadKey();
Console.WriteLine(ConsoleKey.DownArrow);
}
if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.LeftArrow)
{
keyinfo = Console.ReadKey();
Console.WriteLine(ConsoleKey.LeftArrow);
}
if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.RightArrow)
{
keyinfo = Console.ReadKey();
Console.WriteLine(ConsoleKey.RightArrow);
}
if (keyinfo.Key == ConsoleKey.UpArrow)
{
j--;
}
if (keyinfo.Key == ConsoleKey.DownArrow)
{
j++;
}
if (keyinfo.Key == ConsoleKey.LeftArrow)
{
k--;
}
if (keyinfo.Key == ConsoleKey.RightArrow)
{
k++;
}
解决方案
你打电话ReadKey
的次数太多了。您应该调用它一次,然后将结果存储在一个变量中:
if (Console.KeyAvailable)
{
keyinfo = Console.ReadKey(true);
Console.WriteLine(keyinfo);
if (keyinfo.Key == ConsoleKey.UpArrow)
{
j--;
}
if (keyinfo.Key == ConsoleKey.DownArrow)
{
j++;
}
if (keyinfo.Key == ConsoleKey.LeftArrow)
{
k--;
}
if (keyinfo.Key == ConsoleKey.RightArrow)
{
k++;
}
}
推荐阅读
- sql - 查询部分日期搜索
- assembly - 程序集将值存储在给定位置
- python - 如何正确地将“脚本轮”添加到 python 路径?
- javascript - 如何在 mongoDB 中删除 - nodejs
- ag-grid - AG-Grid RowStyle 行为
- javascript - 使用 jQuery 对表格行进行分页
- java - Batik Canvas 的 getUpdateManager 返回 null
- python - 在任务开始之前选择时强制 tkinter 列表框突出显示项目
- javascript - 根据 id 以外的属性查找元素
- sql - Int 列上的 SQL 条件过滤