c - 在函数中更新值后更新 main 中的值,无需指针

标签 c function

我试图在不使用指针的情况下根据函数中所做的更改更新 main 中的值

我正在做一个贪吃蛇游戏,为了移动我将头部和尾部的行和列发送给一个空函数,在它的内部我根据所采取的 Action 改变它们,但它们不是在 main 中更新,因此下一步不会正确执行,我如何在 main 中更新它们但不使用指针?(这是一项作业,他们指定不使用指针) 下面的代码适用于一种情况,即当玩家想要向下移动时(2 是敌人向下),最后我更改了尾部的列和头部的行,但是当我在 main 中更新它们时发送下一步 Action

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 - right,它会打印出该步棋是非法的,因为它仍然有头部在右边的 body

最佳答案

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_headsnake_tail 之间的数组snake_rowsnake_col 表示蛇当前占据的位置。这使得 board[][] 成为可选的,因为您可以通过迭代缓冲区来检查自交叉。

关于c - 在函数中更新值后更新 main 中的值,无需指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53933985/

相关文章:

C:返回 void 与从子函数返回 double *

c - 使用 union 存储的值显示不正确

c - 命令行参数存储在哪个内存段中?

javascript - 将值传递给 .bind() 方法

JavaScript - 在 &lt;input&gt; 更改时运行函数 - 无 JQUERY

c++ - 静态函数和类变量?

c - 读取 Ogg/Flac 文件的标签数据

c - 使用 Cups Api 检测打印机状态变化

bash - 嵌套函数调用中的变量赋值意外地更改了调用者作用域中的局部变量

c - '=' token 之前出现错误 : expected ',' , ';' 、 'asm' 、 '__attribute__' 或 '{' |具有冒泡排序功能