刘贝贝16030412基于单片机的可调速俄罗斯方块游戏设计.docx
- 文档编号:16277200
- 上传时间:2023-07-12
- 格式:DOCX
- 页数:35
- 大小:952.30KB
刘贝贝16030412基于单片机的可调速俄罗斯方块游戏设计.docx
《刘贝贝16030412基于单片机的可调速俄罗斯方块游戏设计.docx》由会员分享,可在线阅读,更多相关《刘贝贝16030412基于单片机的可调速俄罗斯方块游戏设计.docx(35页珍藏版)》请在冰点文库上搜索。
刘贝贝16030412基于单片机的可调速俄罗斯方块游戏设计
2019届毕业生
毕业设计说明书
题目:
基于单片机的可调速俄罗斯方块游戏设计
院系名称:
信息科学与工程学院专业班级:
电科1504
学生姓名:
刘贝贝学号:
201516030412
指导教师:
王胜轩教师职称:
讲师
2019年6月5日
毕业设计中文摘要
摘要
在历史的长河中,游戏机的发展十分迅速,从上世纪五六十年代简单的街机投币式游戏机到现在大型网络竞技类网游,带动了一个娱乐行业崛起,创造了巨大的经济价值,因此对游戏的开发有着巨大的经济价值,对于基于单片机的可调速俄罗斯方块游戏设计,遵循传统的俄罗斯方块游戏规则,对整个游戏机部署硬件电路并且对游戏程序进行优化,移植,使得游戏程序完全适合单片机的硬件电路。
显示部分是用基于ST7920驱动器的液晶模块LCD12864,因此需要弄清楚LCD12864液晶显示屏的详细介绍以及ST7920驱动器的功能说明。
例如传统的俄罗斯方块游戏玩法,难度会随着消除行数的增加而增加,方块下落的速度也会随着难度的增加而增加给玩家提供激动刺激的游戏体验,在基于单片机的开发过程中,系统所需的功耗很低,用不到传统CRT显示器,以及高电压供电,在编写游戏开发过程中可以直接进行在线调试。
硬件电路是主要以STC89C52单片机为核心,结合外部晶振电路提供工作时钟频率,通过矩阵键盘让玩家控制方块的移动、旋转、暂停和开始游戏,游戏程序主要是通过对数组的控制,在液晶屏上显示出游戏的画面,通过液晶显示画面,显示出砖块的移动和旋转。
关键词:
STC89C52单片机;俄罗斯方块;12864液晶显示器;ST7920;C语言
毕业设计外文摘要
TitleTetrisgamebasedonsinglechipmicrocomputer
Abstract
Inthelongriverofhistory,thedevelopmentofthegameisveryfast,fromthefiftiesandsixtiesofthelastcenturysimplearcadecoin-operatedgamesconsolestolargenetworkcompetitiveonlinenow,ledtoariseoftheentertainmentindustry,adjustablespeedtetrisfollowthetraditionalrulesoftetrisgame,forthewholegamedeploymentofhardwarecircuitandoptimizethegameprogram,transplantation,makesthegamecompletelysuitableforsinglechipmicrocomputerhardwarecircuit.Therefore,itisnecessarytomakeclearthedetailedintroductionoftheLCDscreenofLCD12864andthefunctiondescriptionofthedriverofST7920.Thissystemsimulatethetetrisgame,thedifficultywitheliminateincreasewiththeincreaseofthenumberofrows,squarefallingspeedwillincreasewiththeincreaseofthedifficultytotheplayersalsoprovideexcitedexcitinggameexperience,andthedesignofthesystempowerconsumptionislow,withlessthanthetraditionalCRTdisplay.ThedesignofhardwarecircuitismainlySTC89C52single-chipmicrocomputerasthecore,throughthematrixkeyboardforplayerstocontrolblockmove,rotate,pauseandstartthegame,thegameismainlythroughthecontrolofthearray,ontheLCDscreenshowsapictureofthegame,throughtheliquidcrystaldisplayscreen,showthebricksofthemoveandrotate.
Keywords:
STC89C52;Tetris;12864ELCDdisplay;ST7920;Clanguage
目次
1绪论
单片机诞生于上世纪70年代经历了SCM、MCU、SOC三大阶段,单片机是嵌入式系统发展过程中的一个阶段,随着微电子技术的发展、IC设计、EDA工具的发展,基于SOC的单片机也有了极大的发展[1],例如现在最大的SOC设计厂商美国高通公司,现在设计的SOC性能已经可以与几年前PC机的性能相抗衡,它有更低的功耗和优秀的性能体现这在几十年前是无法想象的。
单片机系统的开发主要包括外部电路的设计和单片机的控制程序设计,其中以单片机程序控制设计为核心,单片机的程序设计还可以采用汇编程序语言设计和C语言程序设计。
和单片机汇编语言相比,单片机C51语言的代码体积要大,执行效率不高[2]。
但是随着技术的发展,C51语言在代码执行的效率方面越来越接近汇编语言。
另外,单片机的程序储存器容量越来越大,硬件的工作效率也越来越快,这些改变使得C语言的优势更加能够体现出来,使得当时受限于硬件容量的短板不复存在,让更多的程序开发者,对单片机的程序开发有了更大的发挥空间,而俄罗斯方块作为当时十分受欢迎的游戏之一,成为了一个不错的开发对象。
1.1课题背景
随着科学技术的进步,电脑、手机、掌上游戏机电子硬件性能越来越好的同时,电子游戏逐渐成为人们在业余生活中越来越多人喜欢的的娱乐方式,甚至有许多人认为,电子游戏已经不仅仅是一种娱乐活动,它现在已然成为了一种文化。
在一些高质量的游戏中不亚于现实生活中电影影视剧的水平高度,现如今由人们精心打量的游戏有的已经可以堪称为一种艺术,游戏开发者们可以通过游戏来告诉玩家自己想表达的内容,而玩家也在自己亲身体味过之后有了更深的感悟。
电子游戏按照不同的平台及运行环境可以分为主机游戏、街机游戏、手机游戏、掌机游戏、PC游戏,每个平台的游戏完全可以通过计算机编程进行平台的移植,以便在多个平台占领市场。
俄罗斯方块游戏作为经典的电子游戏之一,它曾经在世界上的影响非常巨大带动了一个产业的发展和经济的增长,它上手非常简单,但是想要完全驾驭却又十分困难,方块图形的变化图形有28种而且随着消除行数的增加,游戏的难度也会随着自己得到的分数,不断增加,这款游戏看似简单其实要想成为一个高手十分困难,这是一个不断挑战自我的游戏,只有更快的反应速度和应对技巧才能应付下一次方块的下落。
这款游戏被多家游戏厂商代理过,但是最终被任天堂公司代理,任天堂经过本地化优化结合自家的产品gameboy获得了巨大的成功。
对于中国玩家来说,俄罗斯方块可以说是第一次让国人认识到游戏是一种老少皆宜的娱乐方式,从某种程度上扭转了国人的"游戏是小孩的东西"或"游戏是毒害儿童的元凶"等错误观念[2]。
1.2课题的研究目的及意义
现在电子游戏的发展越来越快,游戏市场每天发行的游戏数以万计,而每天活跃在游戏中的人们更是数以亿计,游戏已经深入到人们的生活之中,这些在当时游戏诞生时是无法想象的,硬件性能的提升和技术的进步促使游戏的发展如火如荼,必然这个巨大的蛋糕吸引了热爱者许多投身于游戏开发和运营领域,希望在自己喜欢的方向拼出自己的天地,于是就有了许多游戏编程开发设计人才,他们不断地优化,升级,更新,不断地提升技术水平,为游戏的发展源源不断地注入新的动力从之前红白机的FC游戏到谷歌公司旗下的阿尔法围棋与人的对决,游戏的技术是日益的发展、进步。
然而技术也会受限于时代物质水平,硬件终端的性能表现也在时时刻刻约束着游戏开发设计人员的创作,当硬件性能速度更快,容量更大,功耗更低时,反过来促进游戏设计水平的提高,本次设计是用现在的C语言在单片机上开发设计俄罗斯方块游戏,让简洁的代码在低功耗,速度快的单片机上运行。
1.3课题的总体要求及规划
1.3.1硬件结构规划
(1)系统规划:
搭建C51最小硬件系统,主要运用到C51中断、定时、矩阵键
盘、晶振电路和液晶显示模块。
(2)系统需求分析:
分析目标任务为搭建C51硬件系统所需要的电子元器件。
(3)系统总体设计:
画出系统原理图,列出所有模块。
1.3.2软件功能规划
(1)运用LCD液晶显示屏显示输出,由4个小方块可以组合成一组方块图形,游戏共有7种方块图形,每次随机产生一种方块图形。
(2)通过矩阵键盘按键可对方块姿势位置进行控制,同时实现可以选择方块的下落速度。
(3)行满则进行消除操作,直到地图无法容下新的方块或者列满,提示游戏结束。
2课题任务及系统整体设计方案
2.1主要任务
在现在经济高速发展的时代,游戏风靡全球,各种游戏层出不穷,大到100G左右的单机游戏,小到手机、掌机里几百字节的休闲游戏。
但是这种简单也是相对于PC机平台上大型单机游戏相比的,小游戏的代码对于特定的平台也是有一定的技术难度的,因为代码的实现可能要受到硬件性能的表现,它要执行一系列代码才能正确的完成一个简单的操作,才能按照玩家的想法工作,硬件平台的受限能否实现俄罗斯方块在单片机的实现,这次系统设计的主要任务是实现俄罗斯方块在单片机环境中能够正常运行,在硬件部分主要构建一个俄罗斯方块运行的硬件环境给俄罗斯方块一个能够流畅运行的硬件平台,其中主要包括,单片机,显示输出电路,键盘控制输入电路,开关复位电路。
游戏在运行过程中能够实现玩家通过按键控制俄罗斯方块在屏幕上旋转、移位和消行处理,并且对玩家消除行数进行打分奖励,随着分数的增加,玩家所面对的游戏难度也在不再增加,最后当玩家在游戏中游戏区域达到了满列或者方块完全填充游戏区域时,游戏结束,显示游戏结束画面。
2.2系统整体设计方案
俄罗斯方块游戏虽然出现在电视游戏上,刚开始运行于电视平台,但是我们仍能对对代码简化和移植,把游戏的游戏算法保留下来,结合单片机特定的工作特征,对代码进行合理的移植,完全可以用单片机平台实现,它的显示输出可以用LCD12864液晶显示模块进行显示,不需要电视屏幕那么复杂,这也是单片机的优势所在,它的输入可以使用独立按键结合单片机的IO口实现玩家对游戏的控制和操作,它的开发和编译可以使用更加方便和运用的编程语言如C语言进行编译设计,因为C语言更加灵活,可阅读,方便后期维护和修复。
2.2.1系统设计总体框图
这次基于单片机的可调速俄罗斯方块游戏设计硬件电路主要包括液晶显示电路、单片机、开关复位电路、晶振电路、和矩阵键盘电路。
系统总体框图如图2-1所示。
键盘输入电路
STC89C52
单片机
用于构建最小单片机系统电路
液晶显示输出电路
图2-1系统总体框图
2.2.2系统的工作过程
当玩家接通电源后,单片机从内部存储器中读取数据,然后单片机发出信号,输出到液晶显示器上显示输出,玩家通过选择好方块下落速度后,进入游戏,方块下落的初试速度为一秒下降一行,满行则消除这一行,分数加1,玩家可以通过左、右、下方向键控制方块的位置,旋转键控制方块的姿势,以调整方块摆放,获得最高的分数。
如图2-2所示。
开始
显示开机画面
开始游戏
执行移动或者旋转程序
游戏是否结束
按键操作
显示结束画面
Y
N
图2-2系统工作过程
3系统硬件平台设计
为实现游戏程序在单片机的环境中运行,我们需要简单搭建一个硬件物理环境,这个环境是根据系统设计具体情况具体构建的,用到单片机哪部分功能就添加那部分硬件电路,对于本次单片机设计来说,需要用到的单片机系统硬件结构主要包括:
单片机核心部件、外部振荡电路、复位电路、矩阵键盘电路和液晶显示电路,下面我来具体展开介绍。
3.1系统的核心模块单片机
本次采用型号为STC89C52的单片机,STC89C52单片机的引脚图如图3-1所示。
STC89C52单片机是宏晶科技有限公司推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择[3]。
STC89C52单片机和其他公司的单片机相比主要的特征是STC89C52拥有8K字节的程序储存空间,拥有512字节的数据存储空间,而且内部自带有4K字节的EEPROM存储空间,对于本次设计,最方便的就是可以通过串口直接下载程序,不需要再经过特殊处理,方便游戏程序的开发和后期程序代码的编译、调试。
图3-1STC89C52单片机引脚图
3.2外部振荡电路
外部振荡电路是由两个瓷片电容和一个晶振组成的电路,电容并联在晶振两侧起到一个起振的作用,这次设计选择的电容是两个30pf的瓷片电容,STC89C52单片机内部同时也拥有一个用于内部振荡器的反相放大器,它的输入和输出分别是XTAL1和XTAL2[4]。
把晶振电路的两端并联到反向放大器的两端XTAL1和XTAL2,即可构成一个外部自激振荡电路。
如图3-2所示。
图3-2外部振荡电路
3.3液晶显示电路
本次使用的液晶显示器是LCD12864-15系列中文图形液晶模块,LCD12864-15系列中文图形液晶模块的特性主要由其控制器ST7920决定[4],液晶的对比度调节引脚为V0引脚,串口并口选择引脚为PSB引脚,DB0到DB7为数据的传输引脚,内部结构如图3-3所示。
图3-3LCD12864液晶显示器内部结构图
我们从LCD12684液晶显示器的内部结构图和单片机的引脚,可以简单画出一个原理图,把液晶显示模块与单片机进行连接,这部分在我们编写程序时也有一个铺垫作用,先确定一下单片机的引脚,定义单片机引脚的功能,液晶显示器与单片机的连接如图3-4所示。
从图3-4可以看出:
LCD12864液晶显示器的数据引脚DB0到DB7分别连接到单片机引脚的P20到P27引脚,BLA、VDD引脚连接电源VCC,液晶显示模块的GND和BLK都接地,RS、RW、EN、PSB、NC、分别连接单片机的P10、P11、P12、P14、P13引脚,V0引脚和VOUT引脚用于调节液晶显示器的对比度。
图3-4液晶模块电路连接图
在这里我们结合硬件电路的实物连接用汇编语言先进行位定义具体代码如下:
sbitLCD_RS=P1^0;
sbitLCD_RW=P1^1;
sbitLCD_E=P1^2;
sbitLCD_CS2=P1^4;
sbitLCD_CS1=P1^3;
sbitLCD_RST=P3^7;
我们把单片机的P10引脚定义为LCD液晶显示器的寄存器选择端,把P11引脚定义为LCD液晶显示器的读写选择端,把P12引脚定义为LCD液晶显示器的使能端,P13、P14定义为LCD显示器的左屏选择、右屏选择,P37引脚定义为LCD的复位端。
3.4复位开关电路
当外部电路接通电源,再按下自锁开关的时候,外部振荡器起振,这是只要给单片机的RST引脚两个机器周期就可以完成系统的复位功能,这次系统设计采用的是上电自动复位,再打开自锁开关的一瞬间,复位电路的电容器两端的电压不能突变,要经过一段时间的充电,而单片机上的RST引脚上的电平是VCC和电容的电平之差,刚开始RST引脚的电平与VCC的电平相同,但随着充电的进行,电容器两端的电压不断上升,RST引脚的电平逐渐下降[5],查阅资料后得知,RST引脚只需要保持10ms以上的高电平系统就可以完成复位。
因此这次系统设计的复位电路是使用10uf的电容充放电串联一个10K欧姆电阻进行分压,完成系统电源开关控制同时完成系统复位功能。
如图3-5所示。
图3-5复位电路
3.5矩阵键盘电路
本次设计的游戏共有6个可供玩家操作的按钮,分别是左右两个方向键用于控制方块图形的左右移动位置,下落键用于加速方块图形的下降,旋转键用于改变图形的形状即方块按照顺时针旋转得到的姿势,当在游戏过程中出现需要暂停的情况,可以通过按下暂停键对游戏当前进度进行临时保存,当再次按下暂停键时可以继续游戏,在玩家选择好游戏难度并且确认进入游戏时,可以通过按下确认键进行进入游戏,硬件矩阵键盘与单片机的硬件连接为:
矩阵键盘的左键与单片机的P31引脚连接,右键与单片机的P32引脚连接,旋转键与单片机的P34引脚连接,下落键与单片机的P30引脚连接,暂停键与单片机的P32引脚连接,确认键与单片机的P35引脚连接,公共端接地,原理图如图3-6所示。
图3-6矩阵键盘电路
4系统软件平台开台
当完成系统硬件总体方案部署,确定单片机型号以及电路设计后,下面来进行游戏程序设计。
在整个单片机应用系统设计中,单片机的游戏程序设计至关重要。
4.1系统软件开发环境
每一种程序语言的开发都需要一个合适的开发环境,C51程序设计语言也不例外,在单片机的程序开发设计中,我们在工作过程中最常使用的软件是KeilμVision系列软件,它是KeilSoftware公司推出的51系列兼容单片机软件开发系统。
这次程序设计使用的就是这家公司的第4代Keil软件KeilμVision4。
它包括C编译器,宏汇编,库管理,仿真调试,并且向下兼容版本,在程序开发过程中使用十分方便[5]。
软件开发界面如图4-1所示。
图4-1KeilμVision4开发软件
4.2游戏玩法及实现的主要思路
(1)游戏玩法:
通过电源线连接外部5V稳定电源,然后玩家按下自锁开关,也就是系统的开关键,等待单片机进入游戏欢迎界面,按下确认键进入游戏,选择合适的下落速度也就是选择适合自己的游戏难度,按下确认键,游戏进入游戏的主画面,游戏屏幕左侧显示当前玩家获得的分数,和游戏当前的游戏难度,并显示提示下一个下落方块图形,中间为游戏区,右侧为系统提示玩家系统的状态,以便给玩家更好的游戏体验,在游戏区,屏幕上方会随机出现一个方块按照难度以不同的速度下落,玩家通过外部矩阵键盘的操作,控制方块下落的位置,和方块的姿势,以便于消除某一行,随着消除行数的增多玩家获得的分数增多,方块下落的速度也会增加,获得更高的分数。
为了刷新最高的分数,该游戏没有游戏通关结局,提供给玩家一个挑战自我的训练机会,在游戏过程中,由于其他原因需要暂时离开游戏的情况,可以选择暂停键,暂停游戏,再次按下暂停键可继续游戏。
键盘按键功能如图4-2所示。
图4-2按键功能提示图
(2)游戏设计的主要思路:
对于本次设计而言,玩家在接通电源后,系统初始化液晶显示器,执行清屏程序,当玩家选择好难度进入游戏后,随机生成一个图形,提交给当前图形变量,然后系统再随机生成一个图形作为下一个即将出现的图形提交给提示图形变量,绘制当前图形和提示图形并且绘制由按下左,右,下,旋转的按键操作后的当前图形。
经过按键操作后,判断图形是否到底,如果没有到底,图形下降一行,绘图一次;如果图形到底,判断是否满行,如果没有满行,提示图形变量赋值给当前图形变量,再随机生成一个提示图形赋值给提示图形变量,绘制当前图形变量然后回到按键操作循环判断,如果某一行满,则先判断一下表格是否满了,当表格没有满的时候,消除满的一行并把上面的行数据下移并置清行变量为true,当前图形标志变量为false。
若表格满了则清除所有数据,清屏,显示游戏结束画面,游戏结束。
游戏运行的主要流程图见下页如图4-3所示。
行满了吗
表格满了吗
消除行并把上面的行数据下移并置清行为true、当前图改变为false
绘图(游戏结束)
Y
游戏结束
Y
绘图一次
图形到底了吗
根据变化绘图(绘提示图和当前图形)
随机生成一个图形
交给提示图形变量
开始
随机生成一个图形
交给当前图形变量
按键处理
绘制当前图形位置
提示图变当前图形
随机生成提示图
绘制当前图
Y
N
N
N
Y
图形下降一行
清除所有数据
图4-3游戏运行的流程图
4.3游戏运行过程中重要程序和算法
4.3.1液晶图形显示程序
(1)俄罗斯方块图形缓存数据函数
我们把俄罗斯方块的游戏区域称作为地图,比如可以看成一个U字型的容器。
LCD12864液晶显示器总共有128×64个像素点,经过与实物对比考察,每一个方块占用LCD12864液晶显示器的4×4个像素点看起来比较直观,大小也比较合适。
如图4-4所示。
本次设计中游戏区地图的大小为40×64个像素点,可完全容纳方块10×16个方块。
游戏中共有7种方块图形分别是J型、L型、S型、Z型、I型、T型和O型,如图4-5所示。
每种方块又可以旋转,得到4种姿势。
图4-4每个方块的像素点
图4-5-1J型图4-5-2L型图4-5-3S型图4-5-4Z型
图4-5-5I型图4-5-6T型图4-5-7O型
图4-5游戏中7种方块类型
这7种图形本质上都是由16个方块(这里把4×4个像素点直接看成一个方块)组成的正方形,下面以L型为例,我们来研究怎样把图形的数据保存下来,如图4-6所示。
图4-6L型图的数据存储
我们将这些图形转化为数据,每个方块代表1位(bit)(实心代表1,空心代表0),这样一个方块可以保存在2个字节(Byte)中,转化的方式如图4-5所示,先把每一行按照二进制进行转换,然后再按照从高到低转化为十六进制进行保存。
这样每个图形有4种姿势,一共有7种图形,我们可以通过运用SwitchCase语句进行保存每个图形的类型和形状。
具体代码如下:
unsignedintbox_read_data(unsignedchartpmode,unsignedchartpshape)
{
unsignedinttpbox;
switch(tpmode)
{
case0:
switch(tpshape)//L型数据存储
{
case0:
tpbox=0xe800;break;
case1:
tpbox=0xc440;break;
case2:
tpbox=0x2e00;break;
case3:
tpbox=0x88c0;break;
default:
;
}break;
//完整代码请见附录B
}
return(tpbox);
}
(2)开始结束画面显示函数
点阵图形型液晶显示模块除了可以显示中文信息外,另一个优势是可以显示图形,图形的点阵信息可以逐个查看像素点的黑白值,为了更快地得到图像的点阵信息,得到任何一个图形的点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贝贝 16030412 基于 单片机 调速 俄罗斯方块 游戏 设计