如何在贪婪的蛇游戏中找到蛇尾在二维阵列中的位置?

时间:2017-09-16 14:45:56

标签: c++ arrays

我正在尝试用C ++编写一个贪婪的蛇游戏。我有一个2d数组,在这个数组中有一些地方设置了一些特定的数字,例如,grid [3] [2] = 1; grid [3] [3] = 2; grid [2] [3] = 2;那些地方像蛇一样粘在一起。当数字为1时,它将在网格中显示“@”作为蛇的头部,当它为2时,它将显示“*”作为主体。 所以我试图保持蛇的移动,例如,如果我想让蛇上升直到改变方向。我只将网格[2] [2]指定为1,然后将网格[3] [2]指定为4,其余的2位也成为3。然后重置那些3到2的地方;像这样:

void keep_moving_snake()
{
    //an example of going up
    for(int i = 0; i < 20; i++) {
        for(int j = 0; j < 20; j++) {
            if(grid[i][j] == 1) { //where the head is
                grid[i - 1][j] = 4;
                grid[i][j] = 3;
            }
            if(grid[i][j] == 2) {
                grid[i][j] = 3;
            }
        }
    }
    for(int i = 0; i < 20; i++) {
        for(int j = 0; j < 20; j++) {
            if(grid[i][j] == 4) { //set the new place as head
                grid[i][j] = 1;
            }
            if(grid[i][j] == 3) {
                grid[i][j] = 2;
            }
        }
    }
}

我把上面的代码放到一个循环中,所以蛇一直在移动:

while(true) {
    keep_moving_snake();
    system("cls");
    show_grid();
    Sleep(500);
}

但是我需要找到蛇尾的位置并将数字设置为0.或者蛇会变得越来越长。那我该怎么做才能解决这个问题呢?感谢。

1 个答案:

答案 0 :(得分:0)

我建议为头部和尾部保留一个Point变量。更新蛇时,请更新这些变量。比搜索矩阵要快很多。 Point结构可以像std::pair<int, int>

一样简单
struct Point
{
  int row;
  int column;
};

Point snake_head;
Point snake_tail;

可以在board[snake_head.row][snake_head.column]访问蛇的头部。