按下r后的确回到了welcome界面,但是在这个新的welcome界面按下s去到的不是游戏界面而是直接到达end界面,修改部分代码解决这个问题
时间: 2024-10-17 12:09:34 浏览: 16
要解决按下 `R` 后回到欢迎界面但再次按下 `S` 却直接进入结束界面的问题,需要确保在重新启动游戏时正确初始化所有相关变量和状态。具体来说,需要在 `draw_end` 函数中调用 `init_game` 来重置游戏状态。
以下是修改后的 `draw_end` 函数:
```c
void draw_end() {
cleardevice();
setbkcolor(EGERGB(116,206,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) {
while(kbmsg) {
msg = getkey();
if(msg.key == 'r' || msg.key == 'R') {
// 检测 R/r 键
flag = false;
game_over = false; // 游戏不再处于结束状态
closegraph(); // 关闭当前图形窗口
initgraph(Interval * Width, Interval * Height); // 重新打开图形窗口
draw_welcome(); // 重新绘制欢迎界面
int ret = choose(); // 等待用户选择是否开始游戏
if (ret == 0) {
init_game(); // 重新初始化游戏
begin_game(); // 如果用户选择开始游戏,则开始游戏
}
} else if(msg.key == key_esc && msg.msg == key_msg_down) {
flag = false;
}
}
}
}
```
### 修改说明:
1. **调用 `init_game`**:在检测到 `R` 或 `r` 键后,调用 `init_game` 函数来重置游戏的所有初始状态。
2. **确保 `begin_game` 被调用**:在 `choose` 返回 `0` 后,调用 `begin_game` 函数开始新游戏。
通过这些修改,可以确保按下 `R` 后重新开始游戏时,所有状态都被正确重置,从而避免直接进入结束界面的问题。
阅读全文