我用二维数组写了一个蛇游戏。我用符号"o"表示头部,用符号"*"表示尾部。如果尾部大于一颗星,我如何改变尾部在二维数组中的位置。因为只有一颗星就可以了。
void Movement(char grid[gridsize][gridsize]){
char move;
int i, j ;
bool check = true, tail = false;
cout << "Make Your move w/s/a/d " << endl;
cin >> move ;
for(i = 0; i < gridsize; i++)
{
for(j = 0; j < gridsize; j++)
{
if(grid[i][j] == 'o')
{
goto Theend;
}
}
}
Theend:
int ii, jj;
for(ii = 0; ii < gridsize; ii++)
{
for(jj = 0; jj < gridsize; jj++)
{
if(grid[ii][jj] == '*')
{
tail = true;
goto Thefinalend;
}
}
}
Thefinalend:
switch (move)
{
case 'w':
grid[i-1][j] = 'o';
break;
case 'a':
grid[i][j-1] = 'o';
break;
case 's':
grid[i+1][j] = 'o';
break;
case 'd':
grid[i][j+1] = 'o';
break;
default:
cout << "Not correct input " << endl;
break;
}
grid[i][j] = ' ';
AppleEat(grid, i, j);
if(tail == true)
Swaptail(grid, i, j);
}
void AppleEat(char grid[gridsize][gridsize], int ibefore, int jbefore)
{
int i, j;
for(i = 0; i < gridsize; i++)
{
for(j = 0; j < gridsize; j++)
{
if(grid[i][j] == 'o')
{
goto Theend;
}
}
}
Theend:
if(iA == i && jA == j){
RandomPlaceApple(grid);
grid[ibefore][jbefore] = '*';
}
}
void Swaptail(char grid[gridsize][gridsize], int ibefore , int jbefore )
{
for(int ii = 0; ii < gridsize; ii++){
for(int jj = 0; jj < gridsize; jj++){
if(grid[ii][jj] == '*')
{
swap(grid[ii][jj], grid[ibefore][jbefore]);
}
}
}
}
我想让蛇的尾巴移动。我试图寻找尾巴"*"的最远位置,但这不是个好主意。
1条答案
按热度按时间t2a7ltrp1#
你需要在一个单独的数据结构中跟踪尾部的位置,比如一个队列或者一个链表,我不认为有一个更好的方法。
例如,您可以创建一个结构(或类、首选项)来表示尾巴的每一段,其中包含该段的x和y坐标。然后,在Movement函数中,您可以使用队列来跟踪尾巴段。当蛇吃苹果时,您可以将新的尾巴段入队到队列中,当蛇移动时,您将使最老的尾段从队列中出队并更新其在2D阵列中的位置。
比如:
...
...
...