im试图根据函数中所做的更改来更新main中的值,而无需使用指针
我正在从事蛇类游戏并采取行动,我将头部和尾部的行和列都发送到void函数,并且在其内部我根据所采取的行动对其进行了更改,但并非如此在main中进行了更新,因此下一步操作不会正确进行,如何在main中进行更新而不使用指针?(这是一项作业,他们指定不使用指针) 下面的代码适用于一种情况,即当玩家想要向下移动(向下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-正确,它将打印此举是非法的,因为它仍然具有头部在右侧的身体
答案 0 :(得分:1)
C提供了三种将值传递回调用函数的通用方法:
struct
类型,并将其返回给调用方。请注意,仅保留蛇的头部和尾部的位置是不够的:您需要存储蛇所占据的所有位置,以便能够将其尾巴前进到下一步。可以使用Circular Buffer大小和蛇的最大长度很容易地实现这一点:
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[][]
是可选的,因为您可以通过迭代缓冲区来检查自交叉。