Мы работали над игрой о семейной вражде, и я хотел применить меняющиеся цвета
в группу кругов случайным образом
Я попытался использовать для цикла в этом коде, но я знаю, что это неправильно.
как я рандомизирую?
//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()
не является точным, поэтому, если вы хотите точное измерение времени, вы должны использовать PIT
или же RDTSC
но это может создать несовместимости в эмулируемых средах …
Не код в MS-DOS целую вечность, поэтому я не уверен, в какой библиотеке random
а также randomize
подпрограммы они также могут быть названы Random,Randomize
я держу пари, что они в stdio.h
или же conio.h
, Просто наберите random
в программу поместите курсор на нее и нажмите ALT+F1
вызвать контекстную помощь. Там вы прочитаете, какую библиотеку включить. Также я не уверен, если использовать random(15)
или же random(16)
так что читайте, что там тоже правильно.
Если вы пишете код для игры, вам, вероятно, понадобится меню. Либо включите их в основной цикл, либо используйте отдельный основной цикл для каждой страницы игры и используйте goto
или закодируйте каждый как отдельную функцию.
Посмотрите на несколько связанных контроль качествамоя:
Других решений пока нет …