目录
游戏规则
- 在3*3的方格中
- 两种棋子
- 任何一种棋子有三个相连可赢得比赛
硬件需求
- STM32F103ZET6芯片
- 2.8寸触摸屏
编程方式
- UCOSIII实时操作系统
编程思路及主要代码
背景设置及任务创建
- 设置背景 3*3 方格,创建 两种棋子
- 利用结构体创建棋子的所在的坐标
- 创建三个任务(开始任务、胜负判断控制任务、触摸屏控制任务)、创建一个软件定时器
开始任务
- 创建棋子控制任务、触摸屏控制任务,并删除任务自身
胜负判断控制任务
- 一共有八种赢棋情况
- 利用条件判断语句判断胜负
触屏控制任务
- 触摸相应的各自会落下棋子
- 利用调度点(500ms)设置偶数次落下棋子为蓝色,奇数次落下棋子为绿色
触屏控制部分代码
if(tp_dev.y[0]>=50 && tp_dev.y[0]<=100) //第一行
{
if(tp_dev.x[0]>=50 && tp_dev.x[0]<=100) //第一列
{
if(touch_num%2==0)
{
Paintphoto( 5,40,50,50,BLUE);
Exame.c_11 =1;
}
else
{
Paintphoto( 5,40,50,50,GREEN);
Exame.c_11 =2;
}
touch_num++;
OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_PERIODIC,&err);//任务调度点
}
else if(tp_dev.x[0]>=100 && tp_dev.x[0]<=150)//第二列
{
if(touch_num%2==0)
{
Paintphoto( 5,40,100,50,BLUE);
Exame.c_12 =1;
}
else
{
Paintphoto( 5,40,100,50,GREEN);
Exame.c_12 =2;
}
touch_num++;
OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_PERIODIC,&err);//任务调度点
}
else if(tp_dev.x[0]>=150 && tp_dev.x[0]<=200)//第三列
{
if(touch_num%2==0)
{
Paintphoto( 5,40,150,50,BLUE);
Exame.c_13 =1;
}
else
{
Paintphoto( 5,40,150,50,GREEN);
Exame.c_13 = 2;
}
touch_num++;
OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_PERIODIC,&err);//任务调度点
}
}
代码缺陷
- 没有设置平局情况
- 没有设置棋子落下就不可落棋子
- 判断赢棋的方法比较笨,可以尝试使用八邻域去判断
注:设置一些标志位啥的应该很好解决,只是要考研了,也懒得写了,之后再说吧,哈哈哈
工程链接
提取码:6666