STM32——井字棋

目录

游戏规则

硬件需求

编程方式

编程思路及主要代码

背景设置及任务创建

开始任务

胜负判断控制任务 

触屏控制任务 

代码缺陷

工程链接


游戏规则

  • 在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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白变形计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值