在没有函数的情况下在main中更新值后更新main中的值

时间:2018-12-26 15:29:44

标签: c function

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-正确,它将打印此举是非法的,因为它仍然具有头部在右侧的身体

1 个答案:

答案 0 :(得分:1)

C提供了三种将值传递回调用函数的通用方法:

  1. 返回值-这是为原始类型提供数据的最常用方法。但是,您可以创建struct类型,并将其返回给调用方。
  2. 传递指针-在需要修改多个变量的情况下,这很常见。
  3. 使用对调用者函数和被调用函数均可见的变量-这些变量可以是静态或全局变量。

请注意,仅保留蛇的头部和尾部的位置是不够的:您需要存储蛇所占据的所有位置,以便能够将其尾巴前进到下一步。可以使用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_rowsnake_col之间的数组snake_headsnake_tail代表当前被蛇占据的位置。这使board[][]是可选的,因为您可以通过迭代缓冲区来检查自交叉。