обновление значения в main после обновления в функции без указателей - PullRequest
0 голосов
/ 26 декабря 2018

я пытаюсь обновить значения в основном в соответствии с изменениями, внесенными в функцию, без использования указателей

я работаю над игрой в змею, и чтобы сделать ход, я отправляю строку и столбец головы ихвост функции void, и внутри нее я изменяю их в зависимости от того, какой ход был сделан, но они не обновляются в основном, и поэтому следующий ход не будет корректным, как я могу обновить их в основном, но без использования указателей?(это домашняя работа, они указали, не используя указатели) приведенный ниже код для одного случая, когда игрок хочет перейти вниз (2 - противник), и в конце я изменил столбец хвоста и ряд головы, но это не обновляет их в основном для того, когда я отправляю следующий ход

if(move==2){
   if (board[head_row+1][head_cal] != 0) 
            {print_finsih_msg(player,ILLEGAL_MOVE);exit(0);}
   if(head_row == tail_row && head_cal < tail_cal) {               
            board[head_row+1][head_cal] = SHTRODEL_HEAD ; 
            board[head_row][head_cal] = '+' ;
            board[tail_row][tail_cal] = 0;
            tail_cal--;
            head_row++;}

, так что для рассмотрения, если следующий ход - 6 - правильно, это напечатает, что движение незаконно, потому что у него все еще есть то, что головаимеет свое тело справа

1 Ответ

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

C предлагает три основных способа передачи значений обратно в вызывающую функцию:

  1. Возвращение значения - это наиболее распространенный способ возврата данных для примитивных типов.Однако вам разрешено создать тип struct и вернуть его вызывающей стороне.
  2. Передача указателя - Это часто встречается в ситуациях, когда необходимо изменить несколько переменных.
  3. Использование переменных, видимых как для вызывающей функции, так и для вызываемой функции - это могут быть статические или глобальные переменные.

Обратите внимание, что этого недостаточно для сохраненияположение для головы и хвоста змеи: вам нужно сохранить все позиции, занятые вашей змеей, чтобы иметь возможность продвинуть свой хвост к следующему шагу.Это может быть легко реализовано с помощью кольцевого буфера с максимальной длиной змеи:

static int snake_row[MAX_LENGTH+1];
static int snake_col[MAX_LENGTH+1];
static int snake_head = 0;
static int snake_tail = 0;

Массивы snake_row и snake_col между индексами snake_head и snake_tail представляют позиции, в настоящее время занятые змеей.Это делает board[][] необязательным, потому что вы можете проверить самопересечение путем итерации буфера.

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