我有这个代码,是蛇游戏的一部分 当你按下一个键时,它必须向下,但是垂直,在开始时我的蛇会水平移动,当我按下一个键时它会向下移动,但不是垂直的,它会水平向下,这不是真的,怎么能我解决了这个问题?
#include <iostream>
#include <vector>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
using namespace std;
void gotoxy(int eex, int eey)
{
COORD coord;
coord.X = eex;
coord.Y = eey;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
int main()
{
int x=0,y=10,lx=0,ly=0;
for(int i=10;;i++)
{
gotoxy(i,y);
cout<<"***";
Sleep(100);
lx=i;
ly=y;
gotoxy(lx,ly);
cout<<" ";
if(kbhit())
{
for(int j=ly;;j++)
{
gotoxy(lx,j);
cout<<"***";
Sleep(100);
ly=j;
gotoxy(lx,ly);
cout<<" ";
}
}
}
return 0;
}
答案 0 :(得分:1)
您的问题是&#34;如何修复此代码&#34;,而不是&#34;给我正确的代码&#34;。我不会给你正确的代码。我会回答原来的问题。这个问题的答案是:
问题在于你cout << "***"
。这将水平地绘制三个星号。该命令永远不会做任何其他事情。要垂直绘制项目,或者蛇可能形成任何形状,你必须在它自己的坐标上单独绘制每个星号。
您必须拥有蛇的每个部分的坐标,而不是只有一个坐标(变量x
和y
)。使用std::queue<COORD>
记住蛇的每个部分的坐标。让蛇移动队列中最后一个项目的空间(&#34;&#34;)并从队列后面删除最后一项(pop_back
),并在前面添加新项目队列(push_front
)并在那里绘制星号(&#34; *&#34;)。
如果你想让蛇更大,不要从队列中删除项目,只需添加新的。