优化这段代码 int main() { x = 50; srand((unsigned int)time(NULL)); hwnd = initgraph(800, 480); IMAGE img; loadimage(&img, "2.jpg", 650, 480); IMAGE img1; loadimage(&img1, "3.jpg", 150, 480); initsnake(); food.flag = 0; food.eatgrade = 0; while (1) { cleardevice(); //刷新 putimage(0, 0, &img); putimage(650, 0, &img1); drawfood(); drawsnake(); Sleep(x); if (snakedie()) { break; } if (food.flag == 0) { initfood(); } eatfood(); movesnake(); snakedie(); while (_kbhit()) //判断用户是否按下键盘 { keydown(); //调用键盘控制函数 } showgrade(); } getchar(); //防止闪屏 closegraph(); //关闭图形系统 return 0; }
时间: 2024-01-22 13:02:44 浏览: 137
这段代码可以优化的地方有:
1. 使用双缓冲技术来避免闪屏。可以使用 `initgraph` 函数的第四个参数来指定使用双缓冲,代码示例如下:
```c
hwnd = initgraph(800, 480, INIT_RENDERMANUAL | INIT_DOUBLEBUFFER);
```
然后在绘制完图形后,使用 `FlushBatchDraw` 函数来将缓冲区的内容显示在屏幕上,代码示例如下:
```c
FlushBatchDraw();
```
2. 避免重复调用 `snakedie` 函数。在 `while` 循环中已经调用了一次 `snakedie` 函数,可以将第二次调用删掉。
3. 避免重复调用 `keydown` 函数。在 `while` 循环中已经使用 `_kbhit` 函数判断了用户是否按下键盘,可以直接在条件语句中调用 `keydown` 函数。
综上,优化后的代码如下:
```c
int main() {
x = 50;
srand((unsigned int)time(NULL));
hwnd = initgraph(800, 480, INIT_RENDERMANUAL | INIT_DOUBLEBUFFER);
IMAGE img, img1;
loadimage(&img, "2.jpg", 650, 480);
loadimage(&img1, "3.jpg", 150, 480);
initsnake();
food.flag = 0;
food.eatgrade = 0;
while (1) {
cleardevice();
putimage(0, 0, &img);
putimage(650, 0, &img1);
drawfood();
drawsnake();
Sleep(x);
if (snakedie()) {
break;
}
if (food.flag == 0) {
initfood();
}
eatfood();
movesnake();
if (_kbhit()) {
keydown();
}
showgrade();
FlushBatchDraw();
}
getchar();
closegraph();
return 0;
}
```
阅读全文