-3

正在开发一个家庭不和游戏,我想随机将变化的颜色应用到一组圆圈

我尝试在这个给定的代码中使用 for 循环,但我知道它错了。我如何随机化?

    //looping set1

for(x=0;x<=15;x++)
{
    setcolor(x);
    sleep(3000);
}
setfillstyle(1,1);
fillpoly(13,lyt1);
fillpoly(9,lyt2);
fillpoly(9,lyt3);
fillpoly(12,lyt4);

//looping set2

for(x=0;x<=15;x++);
{
    setcolor(x);
    sleep(3000);
}
setfillstyle(1,1);
fillpoly(11,lyt5);
fillpoly(12,lyt6);
fillpoly(13,lyt7);
fillpoly(12,lyt8);
4

1 回答 1

1

我假设您在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.hor中conio.h。只需random在程序中输入光标,然后点击ALT+F1以显示上下文帮助。在那里您将阅读要包含的库。我也不确定是否使用random(15)random(16)阅读那里也是正确的。

如果您正在编写游戏,那么您可能需要一些菜单。要么将它们合并到主循环中,要么为每个游戏页面设置单独的主循环,并将每个页面goto作为单独的函数使用或编码。

看看我的一些相关QA

setcolor 文档

于 2017-01-06T10:30:47.227 回答