有两个问题:第一,困难模式蛇可以错误地进入四周的墙壁格子,第二,无法正确进入显示Gameover的界面。请修改代码使正确运行,只用给出发生修改的函数
时间: 2024-10-18 17:20:24 浏览: 27
为了修复这两个问题,我们需要对 `judge_border` 函数和 `draw_end` 函数进行修改。以下是具体的修改:
### 修改 `judge_border` 函数
在 `judge_border` 函数中,需要确保蛇不会穿过墙壁。如果蛇撞到墙壁,应该直接判定游戏结束而不是让蛇从另一边出现。
```c
void judge_border() {
if (snake[0].row < 0 || snake[0].row >= Height || snake[0].col < 0 || snake[0].col >= Width) {
game_over = true;
}
}
```
### 修改 `draw_end` 函数
在 `draw_end` 函数中,确保游戏结束界面能够正确显示,并且等待用户输入重新开始或退出游戏。
```c
void draw_end() {
cleardevice();
setbkcolor(EGERGB(116, 222, 222));
char str[4][30] = {{"Game Over"}, {"Score:"}, {NULL}, {"Press R to restart"}};
sprintf(str[1], "Score: %d", score);
setfont(40, 0, "楷体");
for (int i = 0; i < 4; i++) {
outtextxy(Height / 2 * Interval - 70, Width / 2 * Interval + 50 * i, str[i]);
}
key_msg msg;
bool flag = true;
while (flag) {
if (kbhit()) {
msg = getkey();
if (msg.key == 'r' || msg.key == 'R') {
flag = false;
game_over = false; // 游戏不再处于结束状态
closegraph(); // 关闭当前图形窗口
initgraph(Interval * Width, Interval * Height); // 重新打开图形窗口
int selected_mode = choose(); // 等待用户选择是否开始游戏
if (selected_mode != -1) {
init_game(selected_mode); // 重新初始化游戏
begin_game(selected_mode); // 如果用户选择开始游戏,则开始游戏
}
} else if (msg.key == key_esc && msg.msg == key_msg_down) {
flag = false;
}
}
}
}
```
### 总结
1. **`judge_border` 函数**:修改了蛇撞墙的逻辑,使其直接判定游戏结束。
2. **`draw_end` 函数**:确保游戏结束界面能够正确显示,并且等待用户输入重新开始或退出游戏。
这些修改应该能解决您提到的问题。
阅读全文