我假设您在MS-DOS中(不确定是模拟的还是真实的或只是 Windows 控制台),但动画和随机化的完成方式略有不同。
由于各种限制(因此它适用于每个平台并且不使用任何高级东西)主循环的程序结构应该看起来更像这样:
// main loop
const int dt=40; // [ms] approximate loop iteration time
int col_t=0,col_T=3000; // [ms] time and period for changing the colors
int col;
randomize();
col=random(16);
for (;;)
{
// 1. handle keyboard,mouse,joystick... here
// do not forget to break; if exit button is hit like: if (Key==27) break;
// 2. update (world objects positions, score, game logic,etc)
col_t+=dt;
if (col_t>=col_T)
{
col_t=0;
col=random(16);
}
// 3. draw you scene here
setcolor(col);
// 4. CPU usage and fps limiter
sleep(dt); // 40ms -> 25fps
}
这种结构不需要任何中断,所以对于菜鸟来说很容易理解。但是游戏通常需要更快的速度,而事件处理程序也更快。为此,您需要对键盘、PIT 等内容使用中断 ISR...
使用sleep()
并不精确,因此如果您想要精确测量时间,您应该使用PIT
或者RDTSC
但这可能会在模拟环境中产生不兼容性......
很久没有在MS-DOS中编码了,所以我不确定它们在哪个 lib 中,random
并且randomize
它们也可能被称为Random,Randomize
我敢打赌它们在stdio.h
or中conio.h
。只需random
在程序中输入光标,然后点击ALT+F1
以显示上下文帮助。在那里您将阅读要包含的库。我也不确定是否使用random(15)
或random(16)
阅读那里也是正确的。
如果您正在编写游戏,那么您可能需要一些菜单。要么将它们合并到主循环中,要么为每个游戏页面设置单独的主循环,并将每个页面goto
作为单独的函数使用或编码。
看看我的一些相关QA:
和setcolor 文档