给一个形状改变不同的颜色

Give Changing Different colors to a shape

正在制作一个家庭仇恨游戏,我想应用不断变化的颜色 随机到一组圈子

我尝试在给定的代码中使用 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);

我假设你在 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
 }

这个结构不需要任何中断,所以对于新手来说很容易理解。但游戏通常需要更快的速度,事件处理程序也更快。为此,您需要使用中断 ISR 来处理键盘、PIT、...

使用 sleep() 不精确,因此如果您想要精确测量时间,您应该使用 PITRDTSC,但这可能会在模拟环境中造成不兼容...

很久没有在 MS-DOS 中编写代码了,所以我不确定 randomrandomize 例程可能也在哪个库中被称为 Random,Randomize 我敢打赌他们在 stdio.hconio.h 中。只需在程序中键入 random 将光标放在它上面,然后点击 ALT+F1 即可调出上下文帮助。在那里您将阅读要包含的库。此外,我不确定是否使用 random(15)random(16),所以请阅读那里也是正确的。

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

看看我的一些相关 QA

  • adding timer to game Turbo C++ MS-DOS PIT ISR 处理程序示例
  • 我的一款 MS-DOS 游戏(但在汇编程序中)包括菜单、2D 精灵图形、键盘中断处理程序等...
  • Display an array of color in C 在 C/C++
  • 中直接访问 VESA/VGA 图形(无 BGI)
  • avr code not working i want to generate random numbers help please 简单的自定义伪随机数生成器(C/C++)和二维白噪声效果 没有电视信号...

setcolor doc