修改后,三种难度的蛇移动速度在实际运行中完全相同,并且在游戏结束时,并未正确跳转Game over和score界面,请修改代码解决问题并给出包含修改处的完整函数
时间: 2024-10-18 15:20:29 浏览: 30
为了解决您提到的问题,我们需要进行以下修改:
1. **修正三种难度下的蛇移动速度**:确保 `speed` 变量在不同难度下设置不同的值,并在 `begin_game` 函数中使用这个变量来控制 `Sleep` 的时间。
2. **修正游戏结束时的界面显示**:确保在游戏结束时正确调用 `draw_end` 函数,并且在 `draw_end` 函数中处理好重新开始游戏的逻辑。
以下是修改后的相关函数:
### 修改 `init_game` 函数
```c
void init_game(int mode) {
for (int i = 0; i < Width; i++) {
grid[i][0] = Wall;
grid[0][i] = Wall;
grid[i][Height - 1] = Wall;
grid[Width - 1][i] = Wall;
}
game_over = false;
food_exist = false;
ege_enable_aa(true);
setbkcolor(EGERGB(116, 206, 222));
setcolor(GREEN);
switch (mode) {
case 1: // 简单模式
speed = 110;
break;
case 2: // 中等模式
speed = 70;
break;
case 3: // 困难模式
speed = 30;
break;
}
init_snake();
prod_food();
len = 3;
init_grid();
score = 0;
dir = LEFT; // 重置方向为默认值(向左)
}
```
### 修改 `begin_game` 函数
```c
void begin_game(int mode) {
init_game(mode); // 初始化游戏时传入模式
while (is_run()) {
cleardevice();
draw_snake();
if (!food_exist) {
inc_len(dir);
prod_food();
}
move(dir);
judge_gameover();
if (game_over) {
draw_end();
break;
}
eat_food();
KeyEvent();
Sleep(speed); // 使用速度变量来控制延迟时间
}
}
```
### 修改 `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;
}
}
}
}
```
通过以上修改,三种难度下的蛇移动速度将有所不同,并且在游戏结束时会正确跳转到“Game Over”和得分界面。希望这些修改能解决您的问题。
阅读全文