[英]Snake game in c++ using a 2d array
我使用二维数组在 c++ 中编写了一个贪吃蛇游戏。 我使用符号“o”作为头部,使用符号“*”作为尾部。 如果我的尾巴大于一颗星 *,我如何更改二维数组中的尾巴 position。 因为有一颗星就可以了。
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]);
}
}
}
}
我想让蛇尾动起来。 我尝试搜索尾部“*”最远的 position 但这不是个好主意。
您将需要在单独的数据结构(例如队列或链表)中跟踪尾部位置,我认为没有更优化的方法。
例如,您可以创建一个结构(或 class,首选项)来表示尾部的每个部分,其中包含该部分的 x 和 y 坐标。 然后,在您的 Movement function 中,您可以使用队列来跟踪尾部段。 当蛇吃苹果时,您会将一个新的尾部片段放入队列中,而当蛇移动时,您会将最旧的尾部片段从队列中取出并在二维数组中更新其 position。
就像是:
#include <queue>
struct TailSegment {
int x;
int y;
};
std::queue<TailSegment> tail;
...
if(tail == true)
MoveTail(grid);
...
Theend:
if(iA == i && jA == j){
RandomPlaceApple(grid);
tail.push({ibefore, jbefore});
}
...
void MoveTail(char grid[gridsize][gridsize])
{
TailSegment last = tail.front();
grid[last.x][last.y] = '*';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.