51单片机开发——完成了AI版俄罗斯方块

4月15日上周三,我用51单片机完成了AI版俄罗斯方块游戏的开发。

一、知识资产

其实好多年前就用C++实现过AI版俄罗斯方块,当时在CocoaChina上发布过,还因此得到了平台奖励,获得了机械键盘。

找到当时的源码,不能直接使用,需要转成C语言,直接在Keil中实现的,老出错,还没法调试。最终接入了串口通信,通过串口将信息传出来,才分析出了多处问题。

二、实现方案

用STC89C系列的单片机运行俄罗斯方块游戏的AI太慢了,二三十秒才能算出结果,于是改用串口将方块局面传到电脑端,由电脑端算完后再将操作步骤传回单片机的方案,这个方案可行,很快就能算出结果。

一个有意思的点是,51上直接将游戏的结构体数据通过串口传到电脑端,电脑端要同样的结构体直接赋值即可,不然一项一项的解析赋值。当然,这就要求两端的结构体必须完全一样。

三、遇到的问题

电脑端是用Qt实现的,串口通信及主界面由元宝生成,能打开串口通信即可。直接用单片机的AI代码在电脑端运行,遇到了不少问题:

(1)Qt是C++实现的,但是AI是C实现的,要调用AI得用"extern "C""申明

(2)同样的结构体,在Keil中默认不对齐,但是用Qt默认是对齐的,需要用"#pragma pack(push, 1)"申明

(3)int位数不一样,51单片机是2个字节,Qt中是4个字节,改用short即可通用

(4)枚举类型在Qt上占4个字节,传一个字节的二维数组时,51上可以正常遍历二维数组,到了Qt上内循环直接读到了4个字节

四、游戏照

五、B站分享

最终分享在了B站:https://www.bilibili.com/video/BV1UwQnBAEWm

相关推荐
HRTOS3 小时前
HRTOS 任务优先级与调度模式说明
单片机·嵌入式硬件·系统架构·51单片机
WD137298015575 小时前
WD5030K输入工作电压 7.5‑30V,适合12A 及以内量产项目
stm32·单片机·嵌入式硬件·51单片机
HRTOS7 小时前
HRTOS 高速任务与中断嵌套的 8051 寄存器组资源说明
单片机·嵌入式硬件·系统架构·51单片机
糖糖单片机设计1 天前
基于STM32的指纹刷卡智能门禁系统设计(RC522 + AS608 + 蓝牙远程开锁 + 断电记忆)
人工智能·stm32·嵌入式硬件·51单片机·语音识别
HRTOS1 天前
HRTOS Shell继续完善:优化printf缓冲区与字符串越界保护,国庆后随新版本更新
运维·单片机·嵌入式硬件·算法·51单片机
iCxhust2 天前
51单片机电力载波应用开发(4)单片机发PC端接收
单片机·嵌入式硬件·51单片机
iCxhust2 天前
51单片机电力载波应用开发(3)载波模块点对点收发
网络·嵌入式硬件·51单片机
kkkkkkkkkk_Z9 天前
新手自学嵌入式|学习日记:从C语言到51单片机基础(GPIO、中断、定时器与PWM篇)
linux·笔记·学习·51单片机
老当益壮梁奶奶9 天前
ARM汇编学习笔记(六):【i.MX6ULL】时钟系统与定时器(EPIT & GPT)
c语言·arm开发·嵌入式硬件·学习·51单片机
AAA代码批发商9 天前
Days 50 51 单片机与 i.MX6ULL 定时器对比:Timer、EPIT、GPT 原理与实验
51单片机·定时器·imx6ull·裸机开发