[英]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.