gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:47:14 25 4
gpt4 key购买 nike

我试图在不使用指针的情况下根据函数中所做的更改更新 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com