Reputation: 471
I'm writing a pong-type game in C, which will run on an ARM board over an LCD screen. Part of the requirements for the game is something called 'magic time'.
A "magic time" period occurs at random intervals between 5 and 10 seconds - i.e, between 5 and 10 seconds after the last "magic time" period, and lasts for a random duration of 2 to 10 seconds.
Upvotes: 1
Views: 3273
Reputation: 22157
I don't really understand your question (do you execute this code every second via timer interrupt, or?), but there are some errors that I see on the first sight:
while (magicTime == true) {
magicTimeLength++;
magicTime == magicTimeLength;
}
Last line (magicTime == magicTimeLength;
) don't do anything - it simply evaluates if magicTime
is equal to the magicTimeLength
, so you will enter dead-loop.
I think that you want to do this:
magicTimeOccurence
with random value within 5 and 10.magicTimeLength
with random value within 2 and 10.magicTimeOccurence
is greater than 0, decrease
its value by one.magicTimeOccurence
hits 0, decrease magicTimeLength
value
by one.magicTimeLength
is greater than 0. If it is, it is magic
time period (so, set the magicTime
flag to true
). Decrement
magicTimeLength
.magicTimeLength
, set magicTime
to false
and go to step 1.You should initialize your timer0
interrupt with period of 1s. I think that you accomplished it with
/* Set timer 0 period */
T0PR = 0;
T0MR0 = SYS_GetFpclk(TIMER0_PCLK_OFFSET)/(TIMER0_TICK_PER_SEC);
but make sure that is triggered every second.
Here is sample code, it should show you what I mean.
/* In void InitTimer0Interrupt() */
...
T0TCR_bit.CE = 1; /* Counting Enable */
magicTimeOccurence = 5+(rand()%5);
magicTimeLength = 2+(rand()%8);
magicTime = false;
__enable_interrupt();
}
/* In void Timer0IntrHandler (void) */
void Timer0IntrHandler (void) {
/* clear interrupt */
T0IR_bit.MR0INT = 1;
VICADDRESS = 0;
if(magicTimeOccurence > 0)
{
magicTimeOccurence--;
}
else if(magicTimeLength > 0){
magicTime = true;
magicTimeLenght--;
}
else{
magicTime = false;
magicTimeOccurence = 5+(rand()%5);
magicTimeLength = 2+(rand()%8);
}
/* take action on timer interrupt */
}
Upvotes: 2