在draw_end中不直接清除游戏界面,而是直接在游戏界面打印文字,覆盖在游戏界面之上,修改代码
时间: 2024-10-18 09:18:24 浏览: 12
pygame游戏之旅 添加游戏界面按键图形
若要在 `draw_end` 函数中保留游戏结束前的画面,并在其上绘制“Game Over”信息而不是清空整个设备上下文,可以调整该函数如下:
```c
void draw_end() {
setbkcolor(BLACK); // 设置背景色为透明或选择一个不会覆盖游戏画面的颜色
setfillcolor(EGERGB(255, 0, 0)); // 设置填充颜色,这里设置为红色作为示例
setfont(40, 0, "楷体");
char str[4][30] = {{"Game Over"}, {"Score:"}, {NULL}, {"Press R to restart"}};
sprintf(str[1], "Score: %d", score);
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;
}
}
}
}
```
在这个版本中,我们并没有调用 `cleardevice()` 来清屏,而是通过设置背景颜色为半透明或者一个不会影响到游戏画面上信息的颜色来达到不完全清除的效果。然后在屏幕中央打印出 Game Over 消息和分数以及重启提示。这样玩家可以看到最后的游戏局面以及相关的信息。注意需要根据实际环境选择合适的背景颜色,使其既不会完全覆盖游戏画面也不会显得过于突兀。
阅读全文