我正在用C编写一个乒乓式游戏,它将通过LCD屏幕在ARM板上运行。游戏的部分要求是“魔术时间”。
“魔法时间”时段以5到10秒之间的随机间隔发生 - 即,在最后“魔术时间”时段之后的5到10秒之间,持续2到10秒的随机持续时间。
答案 0 :(得分:2)
我真的不明白你的问题(你是通过定时器中断每秒执行这段代码,还是?),但是我第一眼就看到了一些错误:
while (magicTime == true) {
magicTimeLength++;
magicTime == magicTimeLength;
}
最后一行(magicTime == magicTimeLength;
)不执行任何操作 - 它只是评估magicTime
是否等于magicTimeLength
,因此您将进入死循环。
我认为你想要这样做:
magicTimeOccurence
,随机值在5和10之间。magicTimeLength
,随机值在2和10之内。magicTimeOccurence
大于0,则每秒减少一次
它的价值是一个。magicTimeOccurence
点击0后,减少magicTimeLength
值
一个人。magicTimeLength
是否大于0.如果是,那就是魔术
时间段(因此,将magicTime
标志设置为true
)。递减
magicTimeLength
。magicTimeLength
,请将magicTime
设为false
并转到第1步。您应该以1秒的时间初始化timer0
中断。我认为你用
/* Set timer 0 period */
T0PR = 0;
T0MR0 = SYS_GetFpclk(TIMER0_PCLK_OFFSET)/(TIMER0_TICK_PER_SEC);
但要确保每秒都会触发。
以下是示例代码,它应该显示我的意思。
/* 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 */
}