【发布时间】:2021-06-15 19:43:12
【问题描述】:
角色没有流畅地移动,停止并且没有向左或向右移动。我不太了解移动字符,但我想学习在我的蛇项目中使用它,代码有什么问题吗?
while(true)
{
system("CLS");
for(int i=0;i<10;i++)
{
cout<<map[i]<<endl;
}
system("pause>nul");
if(GetAsyncKeyState(VK_DOWN))
{
int y2=y+1;
if(map[y2][x]==' ')
{
map[y][x]=' ';
y++;
map[y][x]='@';
}
}
if(GetAsyncKeyState(VK_UP))
{
int y2=y-1;
if(map[y2][x]==' ')
{
map[y][x]=' ';
y--;
map[y][x]='@';
}
}
if(GetAsyncKeyState(VK_RIGHT))
{
int x2=x+1;
if(map[x2][x]==' ')
{
map[y][x]=' ';
x++;
map[y][x]='@';
}
}
if(GetAsyncKeyState(VK_LEFT))
{
int x2=x-1;
if(map[x2][x]==' ')
{
map[y][x]=' ';
x--;
map[y][x]='@';
}
}
}
return 0;
}
【问题讨论】:
-
提示:不要调用
CLS之类的命令,只需输入ANSI escape 序列以清除屏幕。在这里依赖system()是一个非常不好的习惯,与简单的打印或获取字符调用相比,这些调用的成本可能是巨大的。 -
据我了解,您希望您的蛇在释放钥匙后移动。不仅仅是添加一些变量来指向你的蛇应该移动的方向,然后移动到这个方向
-
您真正需要的是适当的游戏循环和输入机制。这个循环尽可能快地运行这些命令(并按键?)。一个正常的游戏循环不会等待按键本身被“按下”,它会检查各种按键的按键状态,就像你在这里大致做的那样,然后移动。请注意,以这种方式更新游戏网格,通过字面操作 2D 矩阵,效率非常低。更好的是有一个与图层一起使用的绘制例程,例如绘制背景,然后移动光标来绘制玩家。
-
如果你想制作简单的类似 DOS 的游戏,别忘了有 ton 的 resources out there 可以帮助你解决这个问题,许多游戏的源代码可用于免费。
标签: c++ windows c++11 visual-c++