文章目录[隐藏]
一、背景介绍
最近朋友需要开发一个课程设计,使用飞思卡尔的开发板FRDM-KL25Z,来设计一款《西蒙游戏》的改进版,下面我们先来了解一下西蒙游戏。
《西蒙游戏》是一款益智休闲类小游戏,它的游戏规则是,让玩家记住不同颜色的灯的亮灯顺序后,依次点击灯,如果次序与AI给予的次序相同,则游戏继续并增加难度,否则游戏结束,重置游戏。
改版后的《新版西蒙》游戏规则是,机器可以通过RGB灯随机显示红、绿、蓝三种不同颜色的序列,机器首先会显示全部的灯序列,然后第二次显示的时候,会用白色灯来表示当前为隐藏的灯,玩家需要输入隐藏的LED灯序列,即可通过当前关卡,每一轮灯的序列都会变长,隐藏的序列也会变长。下面模拟演示一遍游戏运行过程,我们用Simon来表示机器,Player来表示玩家。
关卡 Simon Player 结果 第一关 完全显示:红、绿、绿、蓝、红;
隐藏显示:红、白、绿、蓝、红;
绿 游戏通过 第二关 完全显示:红、绿、绿、蓝、红、蓝;
隐藏显示:红、绿、白、白、红、蓝;
绿、蓝 游戏通过 第三关 完全显示:红、绿、绿、蓝、红、蓝、绿;
隐藏显示:白、白、白、蓝、红、蓝、绿;
红、绿、蓝 游戏结束 第三关Player未能正确输入隐藏序列:红、绿、绿,游戏结束Game Over @ _ @
二、软件概要设计
我们将通过功能需求分解和功能点实现来介绍整个项目软件的设计思想。
(1)功能需求分解
我们使用FRDM-KL25Z开发板,来实现《新版西蒙》游戏,从功能模块上划分我们需要实现一下几个部分的功能。
(2) 游戏状态机实现
为了便于程序处理,我将游戏划分为以下7种状态,在不同状态下可以执行不同的动作函数(逻辑功能),下面我将用流程图来表示各种状态之间的迁移图。
/*
* @brief game state enumeration
*/
typedef enum {
GAME_IDLE = 0, // 空闲状态
GAME_INITIAL, // 初始状态
GAME_SHOW_LED, // 显示完整LED序列
GAME_HIDE_LED, // 显示隐藏LED序列
GAME_WAIT_INPUT, // 等待玩家输入状态
GAME_PASS, // 游戏通过状态
GAME_OVER // 游戏结束状态
}GAME_STATE_E;
游戏运行流程图如下:
三、芯片资源介绍
通过芯片的datasheet可以查看KL25系列的芯片资源介绍。通过datasheet可以看出芯片的主频是48MHZ,128KB的flash,16KB的SRAM。还有支持的外设资源:TSI、GPIO、USB、SPI、UART、I2C、ADC、DAC、Timer等。
四、开发资料下载
当拿到一块新的开发板,我们首先要做的就是先去官网下载相关的开发资料,其中包括SDK、数据手册、开发板原理图、用户开发指南,然后安装开发板相关的驱动,搭建开发环境。下面就给出了驱动和开发资料下载的地址。
PED驱动下载地址:www.pemicro.com/opensda
开发资料下载地址:NXP官方资料下载地址
(1) 驱动安装
PED驱动是开发板自带的OpenSDA调试器所需的驱动,用于开发的调试、下载等工作,还可以通过USB虚拟出一个串口用于打印日志信息。
运行驱动程序,我们安装默认路径Install即可。
安装完成后,可通过设备管理器查看驱动安装的情况,这里我们需要先把开发板通过USB线连接到电脑上。 这里一定要接开发板USB OpenSDA接口,驱动安装成功后,可以看到下图所示的设备信息。
(2) 下载SDK开发资料
进入上面提供的下载链接后,可在网页最下面看到DataSheet和Reference Manual手册,这些都是我们需要下载的,在Embedded Software下面可以下载到SDK包,里面包含了用到的库函数以及一些官方提供的外设demo程序,是我们进行开发中必不可少的软件包。
下载好的SDK解压后,可在以下路径查看到驱动的demo程序,一般开发一个项目时,只需要参考以下demo程序就能完成开发工作,我们可以选择项目中需要用到的驱动程序,比如我们这里主要用到TSI、UART、PWM驱动,那我们可以copy一份demo中的代码进行相应的开发工作。并参考demo中的驱动程序,来编译我们的工程代码。
(3) 搭建开发环境
这里IDE有很多可以选择,比如IAR、MDK、Kinetis Design Studio、MCUXpresso等。这里我们选择Kinetis Design Studio作为我们开发的IDE工具。
Kinetis Design Studio下载地址:KDS_IDE下载地址
IDE安装包下载完以后,我们安装默认配置进行安装即可。
(4) 导入工程代码
打开Kinetis Design Studio软件,选择File->Switch Workspace->Other,选择一个路径保存工作空间。
该路径可自行选择,我这里选择simon_game目录下的workspace目录保存。
打开Kinetis Design Studio软件,选择File->Import->General->Existing Projects into Workspace。
选择代码存放的路径,选择完以后点击Finish即可,完成代码工程的导入。
代码导入后,即可在导航栏查看代码。
(5) 编译下载代码
先编译代码,点击小锤子按键,编译通过后可在Console窗口查看编译结果。
编译完成后,点击甲壳虫按键,进入Debug模式,该过程中会将程序烧录到开发板中。
退出Debug模式,先点击左边的红色按键,退出调试模式,然后选择右边的Debug右击Close退出,完成代码下载。
这里我们对设计的Simon游戏进行程序说明:
这里使用红、绿、蓝三种颜色作为游戏指示灯。
- 开发板初次上电后,会有一个绿色呼吸灯,此时未进入游戏,长按触摸按键后进入游戏模式;
- 亮一次青色表示开始显示完整的LED灯序列,(红、绿、绿、蓝、红);
- 闪烁2次青色表示开始显示隐藏的LED灯序列,(红、绿、白、蓝、红);
- 亮黄灯表示等待玩家输入隐藏的LED灯序列;
- 此时需要触摸滑块的左、中、右来表示输入的隐藏LED序列;
- 输入正确的隐藏序列游戏通过,会闪烁2次紫色的LED灯;
- 输入错误的隐藏序列游戏结束,会闪烁2次白色的LED灯,等待5s或触摸任意按键会重新开始游戏。
五、开源代码下载地址
以上程序设计完成后,大家如果有需要可以进行下载参考。
代码模块划分为led、touch、game三大部分,其中game部分运用状态机设计思想来实现游戏的主体逻辑,touch部分用来实现触摸检测,led部分用来实现PWM调光RGB显示。
如果各位小伙伴有项目或课程设计需要承接 ,可直接私信我。
版权声明:本文为CSDN博主「智小星」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xinghuanmeiying/article/details/122024327
暂无评论