【发布时间】:2022-12-31 17:04:03
【问题描述】:
感谢您的时间。 这是我在 Stack Overflow 上的第一篇文章,如果结果不合标准,请务必告诉我,并请告诉我我应该改进什么。
我试图让我的函数嵌套在一个 while 循环中,更改一个变量来控制是否会有另一个循环。
这是我参考的代码:
bool alive = true;
while (alive = true) { // I want MoveForward function to change alive to false if condition happens.
MoveForward(mapa, alive, Snake);
getch();
}
getch();
endwin();
return 0;
}
这是一个 MoveForward 函数。它需要 [16][16] 个字符数组、bool alive 和由结构实例组成的向量 Snake:
void MoveForward(char mapa[0][16],bool &alive ,vector <Segment> &Snake) {
for (int i = 0; i < Snake.size(); i++) {
//If snake segment is the last one.
if (i == Snake.size() - 1) {
mapa[Snake[i].position_y - 1][Snake[i].position_x] = Snake[i].symbol;
Snake[i].position_y--;
mapa[Snake[i].position_y + 1][Snake[i].position_x] = ' ';
}
//If snake segment is not the last one.
else {
mapa[Snake[i].position_y + -1][Snake[i].position_x] = Snake[i].symbol;
Snake[i].position_y--;
}
}
//Display prints each array element on the screen.
Display(mapa);
//If cell in front of Snake's head is a wall.
if (mapa[Snake[0].position_y - 1][Snake[0].position_x] == '=') {
printw("You are dead!");
alive = false; // <-- I'm trying to make it change alive flag to false.
}
}
显示SN-P:
void Display(char mapa[][16]) {
//Displaying borders, and the snake.
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 16; j++) {
mvaddch(i, j, mapa[i][j]);
}
}
}
我不确定我是否为您提供了足够的代码,但我不想让您丢掉整整 160 行代码。
我想要发生的是 MoveForward 函数的最后一个条件语句将 alive 标志更改为“false”,这样当 Snake 在下一个循环中撞到墙上时游戏会自行关闭。我试图将“void MoveForward”更改为“bool MoveForward”并以这种方式返回 alive=false,但无济于事。它确实阻止了蛇出去,但也只是不断重复“你死了!”,这不是我想要的。
我敢肯定答案很简单,但我就是想不通,而且我完全陷入了 while 循环将蛇推出界限并给我“分段错误(核心转储)”。 这是我大学项目的第一个学期,我发现它真的很难。 对于丑陋的代码,我深表歉意,谢谢。
【问题讨论】:
-
我只是更正了我认为是您的代码清单中的拼写错误,但我意识到这实际上可能是问题的原因。请确认
while (alive = true)语句是否实际存在于您的真实代码中,我将恢复编辑并发布答案。 -
@ComicSansMS 是的,先生,它最初在我的代码中是 while(alive = true)。我已经将这部分修复为:while(alive == true),但是我仍然不断越界,所以我认为这不是唯一的问题。
-
@ComicSansMS 抱歉,看来您是对的。我最终草率地从 void MoveForward(char mapa[0][16],bool &alive ,vector <Segment> &Snake) 中删除了那个 & 符号。返回它完全解决了这个问题。非常感谢你。
-
不会修复该死的东西,但考虑删除
alive变量以支持从MoveForward返回bool。你变干净一点了while (MoveForward(mapa, Snake)) { getch(); }未来关注:你是怎么控制蛇的方向的? -
@user4581301 稍后我将在这个 while 循环中放置 getch() 来捕获用户输入,这就是我决定需要一个“活动”变量的原因。总共有 4 个函数,当蛇的头距离撞墙或尾巴只有一个循环时,每个函数都应该能够更改“alive”变量。然而,我发现这项任务很困难,我正试图一次增强程序的一个功能。自从先生。 ComicSansMS 帮助我修复了循环,我现在可以继续处理用户输入了。