赋予形状不同的颜色

Give Changing Different colors to a shape

本文关键字:颜色      更新时间:2023-10-16

我们正在开发一款家族世仇游戏,我想应用不断变化的颜色到一组圆圈随机

我试着在这个给定的代码中使用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

  • 将计时器添加到游戏Turbo C++MS-DOS PIT ISR处理程序示例
  • 在屏幕上移动对象的最佳方式是什么?我的一个MS-DOS游戏(但在汇编程序中),包括菜单、2D精灵图形、键盘中断处理程序等
  • 在C中显示颜色阵列在C/C中直接访问VESA/VGA图形(无BGI)++
  • avr代码不起作用我想生成随机数帮助请简单自定义伪随机数生成器(C/C++)和2D白噪声效果没有电视信号

并设置彩色文档