目录
游戏规则
- 每800ms一只老鼠完成出洞回洞两次操作
- 如果在老鼠出洞时成功打到老鼠则加一分
硬件需求
- STM32F103ZET6芯片
- 2.8寸触摸屏
编程方式
- UCOSIII实时操作系统
编程思路及主要代码
背景设置及任务创建
- 设置背景 3*3 方格,创建 地鼠
- 创建三个任务(开始任务、地鼠控制任务、触摸屏控制任务)、创建一个软件定时器
开始任务
- 创建地鼠控制任务、触摸屏控制任务,并删除任务自身
地鼠出洞控制任务
- 利用软件定时器回调函数产生随机数播种控制地鼠出洞坑位
- 每400ms设置一个任务调度点
- 第一个调度点地鼠出现
- 第二个调度点地鼠消失
地鼠出洞控制代码示例
void MOUSE(void *p_arg)
{
OS_ERR err;
while(1)
{
srand(time); //随机数播种
flag = rand()%9+1;//产生随机数
switch(flag)
{
case 1: Paintphoto( 5,40,50,50,RED);mouse=1; break;//(1,1)
case 2: Paintphoto( 5,40,100,50,RED);mouse=1; break;//(1,2)
case 3: Paintphoto( 5,40,150,50,RED);mouse=1; break;//(1,3)
case 4: Paintphoto( 5,40,50,100,RED);mouse=1; break;//(2,1)
case 5: Paintphoto( 5,40,100,100,RED); mouse=1;break;//(2,2)
case 6: Paintphoto( 5,40,150,100,RED); mouse=1;break;//(2,3)
case 7: Paintphoto( 5,40,50,150,RED); mouse=1;break;//(3,1)
case 8: Paintphoto( 5,40,100,150,RED);mouse=1; break;//(3,2)
case 9: Paintphoto( 5,40,150,150,RED);mouse=1; break;//(3,3)
}
OSTimeDlyHMSM(0,0,0,400,OS_OPT_TIME_PERIODIC,&err);//第一个任务调度点
switch(flag)
{
case 1: Paintphoto( 5,40,50,50,BROWN);mouse=0; break;//(1,1)
case 2: Paintphoto( 5,40,100,50,BROWN); mouse=0;break;//(1,2)
case 3: Paintphoto( 5,40,150,50,BROWN);mouse=0; break;//(1,3)
case 4: Paintphoto( 5,40,50,100,BROWN);mouse=0; break;//(2,1)
case 5: Paintphoto( 5,40,100,100,BROWN);mouse=0; break;//(2,2)
case 6: Paintphoto( 5,40,150,100,BROWN);mouse=0; break;//(2,3)
case 7: Paintphoto( 5,40,50,150,BROWN);mouse=0; break;//(3,1)
case 8: Paintphoto( 5,40,100,150,BROWN);mouse=0; break;//(3,2)
case 9: Paintphoto( 5,40,150,150,BROWN); mouse=0;break;//(3,3)
}
OSTimeDlyHMSM(0,0,0,400,OS_OPT_TIME_PERIODIC,&err);//第二个任务调度点
}
}
触摸屏控制任务
- 如果触碰到对应方格并且打到地鼠得分加一
基础代码扩展
由于要考研了,所以只做了个简易版的练练手,以下是我想的一些思路仅供参考
- 设置一个另外颜色的地鼠打到减分
- 如果分数为负显示游戏结束
- 设置关卡,关卡越高,地鼠出洞回洞越快,难度也就越大
当然还有很多改善方法,大家可以集思广益做一个超强版打地鼠,哈哈哈
基础工程链接
提取码:6666
实验现象
后续传到b站