Помещение Змеи в C - PullRequest
       2

Помещение Змеи в C

0 голосов
/ 13 декабря 2018

Я пытаюсь сделать простую игру змеи.У меня есть доска char board[N][N]={{'\0'}}; И я хочу разместить свою змею, которая должна быть на первой линии с головой в 0; 0 и телом в 0; 1 и 0; 2.Чтобы отследить хвост и тело (для дальнейшего перемещения змеи) я создаю 2D-массив для координат змеи.

int coord_percent[2][N*N] = { -1 };

coord_percent [0][0] = 0;
coord_percent [1][0] = 0;

coord_percent [0][1] = 0;
coord_percent [1][1] = 1;

coord_percent [0][2] = 0;
coord_percent [1][2] = 2;

int  size_percent = 3;

Так что теперь я вызываю функцию для размещения змеи:

void place_snake (char board[N][N],int coord_snake[2][N*N],int size_snake) {

    int i;
    board[coord_snake[0][0]][coord_snake[1][0]] = '%'; // the head will always be the first in the array_coord

    for (i=1 ; i<size_snake ; i++) {
        board[coord_snake[0][i]][coord_snake[1][i]] = '*';

    }

}

Я не знаю, где моя ошибка ... Спасибо за ваше время:)

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

@ Ричард прав, что круговая очередь - лучший подход к отслеживанию баллов, но вы должны упростить свою жизнь, начав примерно так:

typedef struct
{
    int x; int y;
} 
Point;

typedef struct
{
    Point segments[MAX_LEN];
    int length;
}
Snake;

Потому что тогда drawфункция намного проще:

void draw(Snake *snake)
{
    for (int i = 0; i < snake->length; i++)
    {
        Point seg = snake->segments[i];
        board[seg.x][seg.y] = '*';
    }
}

Конечно, главное - иметь указатель головы, который будет перебирать массив points, чтобы вы могли легко удалить хвост и добавить голову.

0 голосов
/ 13 декабря 2018

Использование 2D-массива для координат змеи не очень хорошая идея, так как вам придется пройти весь 2D-массив, чтобы выяснить, где находится змея.

Лучше использовать deque или круговая очередь для реализации змеи.

Тогда сегменты тела вашей змеи располагаются концептуально как:

C D E F G H I

Для перемещенияЗмея вперед, вы не красите часть его тела справа (I) и добавляете часть тела слева (B), чтобы получить:

B C D E F G H

В своем коде вы будетезаменить заглавные буквы двумерными координатами сегментов тела змеи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...