本次的贪吃蛇是基于STM32F409的硬件平台而设计的,主要难点有:产生随机点、判断游戏失败,贪吃蛇如何转弯,本处只详解产生随机点的设计。产生随机点的要求有:
1、在显示屏范围内产生;
2、在贪吃蛇的外部产生;
产生随机点的步骤:
1、首先产生x轴和y轴随机位置的两个点(随机点的为正方形,大小为SHE_FAANGKUAN_SIZE[payamount]5.00[/payamount]
[pay]请在此处填写付费后可见内容[/pay][payamount]5.00[/payamount]
[pay]请在此处填写付费后可见内容[/pay]),如函数void rng_chansheng(void *p_arg);
2、然后判断两个随机点是否在范围内,不在范围内则重新执行第1步,否则在显示屏上绘制一个小的正方形,函数void lcd_fangkuan(u16 x1,u16 y1,u16 x2 ,u16 y2);
3、当贪吃蛇吃掉该随机点后,重新执行第1步,否则继续等贪吃蛇吃掉该点。
//随机点产生函数
void rng_chansheng(void *p_arg)
{
OS_ERR err;
while(1)
{
OSSemPend(&RNG_SEM,0,OS_OPT_PEND_BLOCKING,0,&err);
zou.x = RNG_Get_RandomRange(0,50)*8 + 40;
zou.y = RNG_Get_RandomRange(0,50)*8 + 260;
lcd_fangkuan(zou.x,zou.y,zou.x+SHE_FAANGKUAN_SIZE,zou.y+SHE_FAANGKUAN_SIZE);
OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_HMSM_STRICT,&err); //延时500ms
}
}
//往下方向画一个实心的正方形,代表贪食蛇的一段
void lcd_fangkuan(u16 x1,u16 y1,u16 x2 ,u16 y2)
{
u16 i,j;
u16 xx,yy;
if(((x2 - x1) != SHE_FAANGKUAN_SIZE)||((y2 - y1) != SHE_FAANGKUAN_SIZE))
return ;
if(x1 > x2)
{
xx = x1;
x1 = x2;
x2 = xx;
}
if(y1 > y2)
{
yy = y1;
y1 = y2;
y2 = yy;
}
if((y1 < 260)|| (y2 > 660)||(x1 < 40)||(x2 > 448))
{
game_yun_error = 1;
LCD_ShowString(150,300,500,24,24,"GAME OVER!!");
return ;
}
for(i=x1; i<x2; i++)
{
for(j=y1; j<y2; j++)
{
LCD_DrawPoint(i,j);
}
}
}
|