团队项目(3) -- 搭载于MSP430F6638_FFTB的仿《像素小鸟》小游戏

    好久没更了。这两天疫情闹得厉害,全国各地几乎都延迟了开工开学的日期,在家里处于待业状态的堂姐借了我的电脑在家里办公,这倒是搞得我没电脑可以玩了,这篇更新应该在2月7号之后才能再发。
    本篇带来的是我大三短学期MCU课的课程设计《Little Plane》,搭载在德研电科的DY-FFTB6638 V3.0硬件实验箱。项目的游戏类似于早年的诺基亚手机(?)中的经典游戏《像素小鸟》,大致功能实现起来并不复杂,主要复杂的部分在于内存的使用和运行流畅度等细节方面的考虑,在验收的头晚我们五个人(Z、Y、Z、Y、Z)还在食堂挑灯夜战对内存使用进行压缩。下面基于课程设计报告对本项目内容进行叙述:

一、开发平台及辅助工具等

硬件平台:DY-FFTB6638 V3.0硬件实验箱
硬件主控:MSP430F6638_FFTB
编译器:Code Composer Studio 9.1.0
编程语言:C语言

二、硬件模块种类

    项目本身的原则是尽可能得利用所提供的模块进行游戏的设计和制作,熟悉单片机本身和其外设的用法。本项目所使用的硬件模块及功能如下:

(1)TFT-LCD显示游戏界面,并更新当前操作可视化显示
(2)数码管显示游戏计分
(3)键盘选择玩家样式,开始和继续
(4)摇杆(按键)实现玩家控制
(5)Buzzer和Speaker实现提示音和背景音乐
(6)时钟、中断、Flash实现基础功能构建,并实现相应的数据保存

三、游戏功能介绍

1) 具有完整的LCD游戏界面。开始界面展示游戏logo、提示文字提示按键即开始;机型选择界面展示可选机型,提示选择按键对应飞机名称;游戏操控界面,连续显示当前障碍及分机位置,左上角显示血量,右上角显示最高分,响应按键控制以及障碍生成实时更新界面;游戏结束界面,背景停止显示“GAME OVER”图案,文字提示按键可继续;

2) 随机生成障碍,并且随时间提升难度。每次初始化游戏产生障碍位置不同,随机产生,并且在计分达到500以后将难度提升一档;

3) 分数计数显示于数码管,并且存储最高分。每次开始游戏分数初始为0,随游戏时间递增计数,游戏结束计数停止,在数码管上显示当前分数。并且判断最高分,破纪录时将新产生的最高分存储在flash里,以便刷新显示;

4) 飞机位置模拟重力下降,读取按键控制上升加速度。分机本身符合自由落体原则,具有向下的重力,每次读到按键输入则模拟加油,反向给上升加速度由此控制飞机姿态;

5) 碰撞检测,碰撞掉血。每次游戏初始5格血量,检测到每次碰撞减一(做延时处理),血量耗尽“GAME OVER”;

6) 键盘和按键读取。按游戏步骤进行键盘读取,判断键入值进行相应操作;按键读取在飞机飞行时检测,读到响应为上升加速度给予;

7) Buzzer播放提示音,Speaker播放背景音。每次碰撞Buzzer输出提示音“哔~”,背景音于游戏开始到结束一直播放,乐曲为超级马里奥经典音乐片段。

四、整体流程图
20899536-9e3e1f87c417e4fb.png
五、功能实现
5.1 图像压缩

    一个精美的界面要求设计者合理地利用色彩及几何图形进行设计,而本项目搭载在实验箱上,直接利用编程进行设计不太现实,因此大多采用的是将图像保存在数组中,通过读取像素信息进行绘制。实验箱中LCD尺寸为240x320,采用16位RGB,则一幅完整的图像所需内存大小为240x320x2 = 153600B = 150KB,一般来说,微控的ROM大小小于1M,而我们的设计中不光包含主界面,还有血量、三种玩家图形及游戏结束界面的图形设计,因此极易发生内存不够用的情况(事实上就是这个原因导致CCS中编译不能通过进而逼迫我们进行了图像压缩的设计)。以下为具体实现过程:
    主界面中游戏名称设计如下图:


20899536-e2746f93a13d0460.png
主界面游戏名称

    每个字母的大小为40×25,均由四种颜色构成,除去共有的黑白两色,还有深主色和浅主色两种颜色。将每个字母定义为一个数组。以绘制字母P为例:
20899536-8fed4aa1cb4be03d.png
    该字母有黑、白、红、深红四色,将四种颜色以此编号为0、1、2、3:
20899536-fb215f5de2012d4d.png
    对应2进制为00、01、10、11,以4个像素点为1个单位,合并成一个8位的无符号数,重复该操作,可得到一个大小为10x25的8位无符号整型图像数组:
20899536-0f883515a928c691.png
    该数组所占内存位10x25x8 = 2000bits对比以16位RGB存储情况所占内存40x25x16 =16000bits,压缩率为12.5%。
5.2 绘制开始界面

    开始界面如下图·
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值