基于51单片机的俄罗斯方块游戏_毕业设计论文_第1页
基于51单片机的俄罗斯方块游戏_毕业设计论文_第2页
基于51单片机的俄罗斯方块游戏_毕业设计论文_第3页
基于51单片机的俄罗斯方块游戏_毕业设计论文_第4页
基于51单片机的俄罗斯方块游戏_毕业设计论文_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于单片机的俄罗斯方块游戏设计基于单片机的俄罗斯方块游戏设计物理与电子信息工程系电气工程及其自动化2007级0710617123黄忠繁政讲师2011320独创性声明本人郑重声明所呈交的毕业论文(设计)是本人在指导老师指导下取得的研究成果。除了文中特别加以注释和致谢的地方外,论文(设计)中不包含其他人已经发表或撰写的研究成果。与本研究成果相关的所有人所做出的任何贡献均已在论文(设计)中作了明确的说明并表示了谢意。签名年月日授权声明本人完全理解贺州学院有关保留、使用本科生毕业论文(设计)的规定,即学院有权保留并向国家有关部门或机构送交毕业论文(设计)的复印件和磁盘,允许毕业论文(设计)被查阅和借阅。本人授权贺州学院可以将毕业论文(设计)的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编论文(设计)。本人论文(设计)中有原创性数据需要保密的部分为(如没有,请填写“无”)签名年月日指导教师签名年月日基于单片机的俄罗斯方块游戏设计摘要俄罗斯方块是一款风靡全球的益智游戏。它规则简单,容易上手,且游戏过程变化无穷,使用户在游戏中得到乐趣。本文讨论了一种基于增强型单片机硬件平台和实时操作系统的智能俄罗斯方块游戏的设计与实现。该设计选用的处理器型号为STC12C5A60S2的单片机,实时操作系统采用适用于8051处理器的RTX51TINY多任务实时操作系统。重点从软件工程角度论述了俄罗斯方块模型构造,图形旋转,坐标变换,双人游戏中多任务实时操作的设计法方,以及背景音乐的处理等技术。同时,该设计的独创性是在8051系列单片机中使用操作系统实现了双人游戏和音效的添加。关键词单片机;RTX51;LCD;俄罗斯方块ABSTRACTTETRISISASECTIONBECAMEPOPULARINTHEWORLDOFPUZZLESTHERULESARESIMPLE,EASYTOOPERATEANDTHEGAMEPROCESSCHANGESUSERSINTHEGAMETOGETFUNTHISPAPERDISCUSSEDAMETHODBASEDONENHANECEMICROCONTROLLERHARDWAREPLATFORMANDREALTIMEOPERATINGSYSTEMOFINTELLIGENTTETRISGAMEOFDESIGNANDIMPLEMENTATIONTHISDESIGNMULTIBACKSTC12C5A60S2SINGLECHIPPROCESSORREGULTANDREALTIMEOPERATINGSYSTEMADOPTSUITABLEFORTHE8051PROCESSORRTX51OFMULTITASKINGREALTIMEOPERATINGSYSTEMTHISPAPERMAINLYDISCUSSESTHEFROMSOFTWAREENGINEERINGTETRISMODELOFSTRUCTURE,GRAPHICSROTATION,COORDINATETRANSFORM,THEDOUBLEGAMEMULTITASKINGREALTIMEOPERATINGDESIGN,ANDTHEBACKGROUNDMUSICOFTHEFORMATIONOFTECHNOLOGYATTHESAMETIME,THEDESIGNORIGINALITYINTHE8051SERIESMICROCONTROLLERISUSEDINTHEOPERATINGSYSTEMREALIZINGDOUBLEGAMEANDSOUNDADDKEYWORDSSINGLECHIP;RTX51;LCD;TETRIS目录摘要IABSTRACTII1绪论111课题背景112课题的主要研究内容113课题的研究现状及意义12系统硬件平台设计221STC12C5A60S2单片机概述222STC12C5A60S2最小系统323电源系统324振荡电路325复位系统426程序下载系统527音乐播放系统628LCD液晶显示接口电路629操作控制接口73系统软件平台构建831VISION简介832LCD12864液晶屏显示原理8321LCD模块总线选择及时序8322LCD显示RAM区映射概况9323LCD的驱动方法10324LCD驱动程序架构1033俄罗斯方块游戏设计11331俄罗斯方块游戏功能简介11332系统界面的设计12333游戏系统“枚举算法”概述14334俄罗斯方块造型设计的方法15335随机产生俄罗斯方块的方法15336俄罗斯方块平移的实现方法17337俄罗斯方块旋转的实现方法18338俄罗斯方块下移的实现方法20339满行检测及消行功能的实现方法213310游戏积分的计算方法2234双人俄罗斯方块游戏设计24341RTX51TINY简介24342RTX51TINY的内核分析24343游戏开发环境的配置27344双人单机对战模式的实现流程2835系统背景音乐的设计28351音乐的设计原理28352音乐播放的实现方法30353音效程序流程3036系统主程序流程图314产品功能说明与系统性能测试3241产品功能说明3242系统性能测试335结束语33参考文献35致谢1绪论11课题背景如今,计算机系统的发展已明显地朝三个方向发展,这三个方向就是巨型化,单片化,网络化。对于解决复杂计算和高速数据处理的问题仍然是巨型机在起作用,因而,目前巨型机正在朝高速及高处理能力的方向发展。单片机在出现时INTEL公司就给其单片机取名为嵌入式微控制器4。单片机的最明显的优势,就是可以嵌入到各种仪器、设备中。这一点是巨型机和网络不可能做到的。单片机在内部已集成了趆来趆多的部件,这些部件包括一般常用的电路,例如定时器,比较器,EEPROM,D/A转换器,串行通信接口,WATCHDOG电路等。同时,俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,目前在网络单机游戏和KELE8等上都有它的身影。而它曾经造成的轰动与经济价值可以说是游戏史上一件大事。因此,对它的研究,无论从技术上,还是社会意义上看都是很有价值的。单片机在游戏上的应用是具有非常大的潜力的,它能将游戏带入到另一个阶段。此次设计仅仅是为了举一个单片机在游戏应用方面的简单例子,它可以很好的说明单片机功能的强大,体现其更高的可控性和高集成度的好处,因此它可以在电子游戏方面成为一个不可计量的明日之星。12课题的主要研究内容本课题研究和实现了基于8051RTX51到TINY平台下的智能俄罗斯方块游戏系统。主要研究内容是实现智能俄罗斯方块游戏系统软硬件平台的搭建;本系统以8051微处理器为核心来运行RTX51TINY多任务实时操作系统,利用KEILC51开发工具进行软件开发,通过LCD12864液晶屏显示游戏界面。该设计能实现单人单机游、双人单机对战游戏、游戏背景音乐的播放和单人最高积分存储等功能。在俄罗斯方块游戏系统开发过程中,本文作者首先进行硬件平台的搭建,包括单片机最小系统的搭建、电源系统的搭建、串口下载器的设计、游戏手柄的设计、音效播放模块的设计以及LCD液晶显示接口的设计。然后,作者才开展软件平台的构建,这也是本设计的重要部分,主要包括对RTX51TINY操作系统的配置、俄罗斯方块模型的设计、模型图块的旋转及坐标变换设计、双人单机对战游戏设计和音效系统设计等。最后,从硬件和软件两方面对完成的智能俄罗斯方块游戏系统进行调试及运行试验。13课题的研究现状及意义现今国内外的俄罗斯方块游戏设计主要有基于PC机上WINDOWS平台的俄罗斯方块游戏、基于手机平台的智能俄罗斯方块游戏以及基于单片机平台的俄罗斯方块游戏等。前两种属于高端游机,性能优越,但成本高,而且计算机编程已不是新命题,VB、VC、DELPHI版本的俄罗斯方块游戏都有发布9。从学术角度来看,针对俄罗斯方块游戏的开发,国内外也有不少学者展开过研究,比如NIKO将进化算法引入到俄罗斯方块中并验证了其有效性,HOOGEBOOM探讨了俄罗斯方块游戏的构造问题,王宇等针对存在于俄罗斯方块中的两个数学问题提出解决方案,高凌琴探讨游戏功能要求、数据结构、图形旋转、坐标变换等关键技术,胡代弟在SPCE061A单片机实现了俄罗斯方块游戏10。综上,国内外的研究多着重于游戏数学原理的讨论,也有部分文献涉及游戏的具体实现,但多是在WINDOWS操作系统下实现的,在单片机平台下的开发俄罗斯方块游戏鲜少有文献刊载。而单片机由于具有体积小、性能突出、价格低廉等特点,应用领域不断扩大,除了工业控制、智能化仪表、家用电器外,在智能化高档电子玩具产品也大量采用单片机芯片作为核心控制部件。曾经80年代非常流行的掌上游戏机便是单片机在电子玩具中的应用之一,其中的俄罗斯方块游戏现已被我们所熟知。本文探讨基于8051单片机硬件平台和RTX51TINY多任务实时操作系统的俄罗斯方块游戏的设计与实现,将理论与实践相结合。其主要目标是再现经典的俄罗斯方块游戏,并在此基础上实现双人单机对战游戏模式,以丰富产品功能,增强游戏的趣味性。2系统硬件平台设计21STC12C5A60S2单片机概述STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051系列单片机,指令代码完全兼容传统8051,但速度快812倍。用户程序空间为60KB,片上集成1280字节RAM,具有EEPROM功能,能够额外储蓄1KB的数据。该单片机共有4个16位定时器,两个与传统8051兼容的定时器/计数器,即16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可由T0的溢出在P34/T0输出时钟,可由T1的溢出在P35/T1输出时钟,此两路可编程计数器阵列(PCA)可用来再实现2个定时器。此外,STC12C5A60S2内部还集成MAX810专用复位电路,2路PWM,8路高速度10位A/D转换(250K/S),针对电机控制,强干扰场地合。综上所述,STC12C5A605S2单片机具有许多强大的功能,能够满足大多数用户对8位单片机的要求。22STC12C5A60S2最小系统单片机最小系统主要由电源、振荡、复位电路以及扩展电路等部分组成。在本设计中,扩展了液晶显示接口。因此,本设计的最小系统如图21所示。图21STC12C5A60S2最小系统FIG21STC12C5A60S2MINIMUMSYSTEM23电源系统本设计的电源系统比较简单,直接由LM7805稳压芯片输出的5V电源供电。具体电路如图22所示。12J1DIANYUAND11N4007D21N4007D31N4007D41N4007S1SWPB1122F1FUSE2C11000UFC2470UF112233U17805R21K123J25123J3CON3D6LED0R11KD5LED0图片22电源系统FIG22POWERSYSTEM24振荡电路单片机系统里都有振荡电路,在单片机系统里晶振作用非常大,全称叫晶体振荡器,它结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率趆高,那么单片机运行速度就趆快,单片机的一切指令执行都是依靠单片机晶振提供的时钟频率。4晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。本设计中STC12C5A60S2使用12MHZ的晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15PF至50PF之间。如图23所示即为本设计的振荡电路。Y112000MHZC130PFC230PFXTAL1XTAL2图23振荡电路FIG23OSCILLATORYCIRCUIT25复位系统MCS51单片机通常采用上电自动复位和按钮复位两种方式。通常因为系统运行等需要,常常需要人工复位,本设计采用按钮复位的方式,即按下开关一定时间就能使RTS引脚端为高电平,从而使单片机复位。同时,简单复位电路中,干扰信号易串入复位端,由此可能会引起内部某些寄存器错误复位,这时可在RST引脚上接去耦电容。在STC12C5A60S2单片机中有两个复位端口,即RST/P47、RST2/P46,当晶振频率小于或等于12MHZ时,使用RST端口。由于本设计使用外接12MHZ的晶振作为振荡时钟,所以采用如图24所示的复位系统。R11KR247KC122UFS1SWPB5RST图24复位系统FIG24RESTSYSTEM26程序下载系统单片机系统的传统编程方式是先将单片机从电路板上取下,放入专用的编程器进行编程,再放入电路板进行调试。其缺点是频繁拔插器件容易损坏器件的引脚;如果频繁的调试程序,必须重复拔插,大降低了开发效率。ISP(在线系统编程)技术是一种无需将存储芯片从嵌入式设备上取出就能对其进行编程的过程。其优点是,即使器件焊接在电路板上,仍可对其进行编程。在线系统可编程是FLASH存储器的固有特性(通常无需额外电路),FLASH几乎都采用这种方式编程。ISP的实现相对要简单一些,一般通用做法是内部的存储器可以由上位机的软件通过串口来进行改写。对于8051系列单片机来讲可通过SPI接口或其它的串行接口接收上位机传来的数据并写入存储器中。而上位机PC机与下位机单片机通过RS232串行接口总线进行的串行通信。8051系列单片机带有一个全双工的串行接口,因此用RS232串行接口总线非常方便。PC机配置RS232标准接口,RS232信号电平为负逻辑(逻辑“0”为12V;逻辑“1”为12V),8051单片机输入、输出电平为TTL电平(逻辑“0”为小于等于05V;逻辑“1”为大于等于24V)。所以8051单片机与PC机间点对点异步通信需加电平转换电路,否则将烧坏TTL电路。MAX232是MAXIM公司生产的电平转换器件,只需在外部接入相应的电解电容即可。因此,本设计采用直连串口线进行串口通信,其中STC12C5A60S2的P30/RXD和P31/TXD分别和下载器的第10管脚/T和第9管脚/R相连,串口线的第5管脚接地,2、3管脚和下载器的7、8管脚相连。具体电路如图25所示。1122334455667788991010111112121313141415151616U1MAX232C11UFC21UFC31UFC41UFC51UFVCCVCC12J1RXD12J2TXD12J3212J43123456789CUANCON912VCC512GNDVCC图25程序下载系统FIG25PROGRAMDOWNLOADSYSTEM27音乐播放系统在本设计中,音乐播放系统是通过三极管驱动有源蜂鸣器发声,而具体的音符声调则由程序控制。因此,音乐播放系统的硬件电路非常简单。具体接法为有源蜂鸣器正极直接接5V电源,负极与三极管8050的发射极相连,8050的集电极直接接地,其基极串一个1K的电阻连接到STC12C5A60S2单片机的P20端口。如图26所示。Q18550R1RES2U1BELLVCCP20图片26音乐播放系统FIG26MUSICPLAYERSYSTEM28LCD液晶显示接口电路液晶显示屏是整个系统硬件的重要组成部分,担当着人机交互的重要角色。本设计采用铭正同创公司生产的MZL02D12864液晶点阵屏作为显示器件。它是一块12864点阵的LCD显示模组,模组上的LCM采用COG技术将控制(包括显存)、驱动器集成在LCM的玻璃上,接口简单、操作方便。其特点为单电源供电,对比度编程可调,可采用并行接口为6800/8080时序或者串行SPI的MPU接口方式,整块液晶屏由33V的白色LED背光,美观大方。其外部接口分为电源端口、数据端口和命令端口三部分组成。本设计中LCD的数据端口连接到STC12C5A60S2单片机的P0端口,LCD的命令端口连接到单片机的P2端口。具体硬件电路如图27所示。1122334455667788991010111112121313141415151616171718181919202021212222232324242525262627272828292930303131323233333434353536363737383839394040U189S51P2_0P2_1P2_2P2_3P2_4P2_5P2_6P2_7EAALEPSENP1_0P1_1P1_2P1_3P1_4P1_5P1_6P1_7P3_0P3_1P3_2P3_3P3_4P3_5P3_6P3_7RSTXTAL2XTAL1GND12345678910LCDDATA12345678910LCDCONVCCVCCV1NCCSRESTA0WREPPSC86DB0DB1DB2DB3DB4DB5DB6DB7DB1DB2DB3DB4DB5DB6DB7DB0图27LCD液晶显示接口电路FIG27LIQUIDDISPLAYINTERFACECIRCUIT29操作控制接口操作控制模块是智能俄罗斯方块游戏系统的输入器件。它包括主控制器和辅助控制器。主控制器包括七个按键,分别为旋转/确定、向左/返回上级菜、向右/下一个、快速下降、使用道具、暂停、退出。副控制器则包括五个按键,分别为旋转/确定、向左/返回上级菜、向右/下一个、快速下降、使用道具。在硬件电路方面辅控制器比主控制器少两个按键的连接。如图28所示为主控制器的接线图。与单片机的具体接口可根据实际设定。S1SWPBS2SWPBS3SWPBS4SWPBS5SWPBS6SWPBS7SWPB12J1DIANYUAN12J3DIANYUAN1234567J2CON7VCCR11KR21KR31KR41KR51KR61KR71K图片28控制模块接口FIG28CONTROLINTERFACE3系统软件平台构建31VISION简介VISION是德国KEIL公司开发的单片机IDE软件,最初主要用于8051系列单片机,目前也有支ARM系列单片机的专用版本MDKARM。本设计使用的是KEILVISION3版本的开发软件进行程序开发。32LCD12864液晶屏显示原理321LCD模块总线选择及时序MZL02D模块提供了两个LCM的引脚(C86和PS引脚)供用户选择模块的接口类型,分别可以选择6800并行总线、8080并行总线或者SPI串行接口。模块默认情况下PS为高电平、C86为高电平,此时为6800总线接口类型,本设计采用6800总线模式。在此种接口模式下,WR线为读写控制信号线,当WR为高电平时为读状态,WR为低电来时为写入状态。在6800总线接口模式下LCD的时序如图31所示。图316800总线时序FIG316800BUSTIMING322LCD显示RAM区映射概况驱动控制芯片的显示RAM区中,每个BYTE的数据对应屏上的点的排列方式为纵向排列,低位在上高位在下;如图32所示。MZL02D12864液晶显示模组的显示器上的显示点与驱动控制芯片中的显示缓存RAM是一一对应的;共有65(8PAGE8BIT1)132个位的显示RAM区。而显示器的显示点阵大小为64128点,所以实际上在液晶显示模块中有用的显示RAM区为64128个位;按BYTE为单位划分,共分为8个PAGE,每个PAGE为8行,而每一行为128个位。(即128列)。图32字节数据排列情况FIG32BYTEDATAARRANGEMENTMZL02D12864液晶显示模块的显示屏上的每一个点都对应有控制器片内的显示缓存RAM中的一个BIT,显示屏上64128个点分别对应着显示RAM的8个PAGE,每一个PAGE有128个BYTE的空间。因此可知显示RAM区中的一个PAGE空间对应8行的点,而该PAGE中的一个BYTE数据则对应一列(8个点)。用户如要点亮LCD屏上的某一个点时,实际上就是对该点所对应的显示RAM区中的某一个位进行置1操作,所以就要确定该点所处的行地址、列地址。MZL0212864液晶显示模组的行地址实际上就是PAGE的信息,每一个PAGE应有8行;而列地址则表示该点的横坐标,在屏上为从左到右排列,PAGE中的一个BYTE对应的是一列(8行,即8个点),达128列。可以根据这样的关系在程序中控制LCD显示屏的显示。323LCD的驱动方法在很多资料以及书籍当中,通常介绍有两种LCD模块的连接方法直接控制和间接控制;直接控制实际指的是LCD模块的总线接口直接与MCU端口连接,然后MCU通过程序控制端口来模拟LCD的总线时序来完成对其的控制操作;而间接控制指的是MCU本身就有外部总线拉出,与LCD的总线接口对应的连接上,程序中直接操作总线以控制LCD。目前有很多MCU都把总线密封起来了,都没有引出外部总线;所以通常在用MCU控制LCD模块时,时常会选择直接控制的方式,即利用端口来模拟总线时序;当然了,如果本身就有总线而且也与LCD模块的总线配得上的话,肯定会使用总线连接的间控方式。本设计采用直接控制的方式,将MZL02D12864LCD模块的总配置为6800总线,这与绝大部分引出外部总线的MCU的时序是不一样的。本设计的LCD12864模块中,用户程序对其进行显示控制时,无非就是通过对LCD模块内部的驱动控制器当中的寄存器进行设置操作;最常用的如LCD的显示开/关、操作显存地址(行与列地址)的设置等。这些寄存器一般都在LCD模块的驱动控制器文档中有详细介绍。324LCD驱动程序架构LCD12864驱动程序主要由LCD底层驱动和LCD功能函数两部分组成。用户在应用层直接使用功能函数即可。具体框架如图33所示。功能函数层字库驱动层函数声明功能函数LCD配置驱动层传输模式及IO端口配置数据传输驱动应用层用户应用程序功能函数声明图33LCD驱动程序架构FIG33LCDDRIVERARCHITECTURES33俄罗斯方块游戏设计331俄罗斯方块游戏功能简介俄罗斯方块游戏的规则很简单,当方块从屏幕上方落下来时,玩家控制方块的位置以及旋转方块,巧妙地安排布置达到充分利用屏幕空间的目的。每当屏幕的一整行被方块排满时,作为奖赏,整行从屏幕上消失,剩余的方块依次往下降一行。当方块堆积达到无法再落下方块的时候,游戏结束。本设计中游戏主要的功能点包括1每4个小方块可以组合成一组方块群,游戏共有7种方块群,每次随机产生一种玩家使用向左、向右、快速向下这些按键控制方块的位置,旋转按键控制方块顺时针旋转。在主控制手柄上还有退出、暂停按钮,可以实现随时切换到启动时的状态和暂停游戏的功能。2在本设计中,系统为玩家提供了背景音乐,玩家可以根据个人喜好开启或关闭音效。3单人模式下,玩家使用主控制器进行操作。每消去一行,系统就给玩家加1分。在单人模式下,如果积分超过系统记录的最高积分,系统将更新最高积分。4本设计的亮点是实现双人对战游戏,通过主控制器在菜单选项中选择双人模式,第二玩家可以通过副控制器对第二游戏界面进行操作。本游戏系统规定,双人对战游戏中积分可分为两个阶段。第一阶段是普通积分阶段,即双方玩家每消去一行,其相应积分表加1分;第二阶段是多积分阶段,即每消去三行才获得1个积分。双方先达到第二阶段末尾者,即可取胜。同时,该设计中还为双方玩家增加了道具功能,即当使用该功能时,可令对手当前移动图块消失,随机出下一个图块。当玩家一次性消去三行,就能获得一次道具功能,最多一次性累积2个道具。系统默认为每个玩家提供1个道具。这样不仅丰富了俄罗斯方块游戏的功能,而且使其更具趣味性。332系统界面的设计1菜单选项界面当玩家将本设计的作品上电启动后,系统首先在LCD显示器件上呈现一个动态的开机动画。然后,系统提供三个功能选项,即最高积分、游戏设置、开始游戏。其中,“游戏设置”选项包含了两级子菜单。一级菜单包括“模式选择”和“音效选择”。在这两个选项后面给出单字提示,以说明当前相应设置选项的状态。“模式选择”菜单包含的二级子菜单有“单人模式”和“双人模式”。“音效选择”菜单包含的二级子菜单有“开音效”和“关音效”通过控制按键即可设置成相应状态。“最高积分”菜单选项为玩家提供单人模式下系统记忆的最高积分。如果选择了“开始游戏”菜单选项,则系统根据“游戏设置”选项中的设置启动相应的游戏界面。菜单选项界面框架如图34所示。菜单功能界面框架最高积分游戏设置开始游戏模式选择音效选择单人模式双人模式开音效关音效图34菜单选项界面框架FIG34THEMENUOPTIONINTERFACEFRAMEWORK2游戏操作界面首先,我们先来介绍单人模式下游戏界面的一些情况。在启动单人模式后,LCD12864显示屏分成两屏,左半屏为俄罗斯方块游戏地图MAP区,右半屏为俄罗斯方块图形预览区和实时积分显示区。其结构框架如图35所示。启动单人模式左半屏图形预览游戏MAP区右半屏积分显示图35单人模式界面结构框架FIG35THESINGLEPLAYERGAMEINTERFACEARCHITECTURE其次,如果玩家启动的是双人模式,LCD12864显示屏也分为两屏,左屏由主控器操作,称为MAP1区,右屏由副控制器操作,称为MAP2区。在两屏中间是双方积分显示区和各自的道具数量显示区。其结构框架如图36所示。双人模式双方积分进度条双方道具使用情况积分和道具区MAP2区MAP1区图36双人模式界面结构框架FIG36DOUBLEMODEINTERFACEARCHITECTURE系统界面整体程序流程图如图37所示。NYYNNYYNY单人模式音效选择模式选择游戏设置双人模式音效关音效开清模式标志置模式标志返回上一级清音效标志置音效标志返回上一级开机启动动画进入主菜单显示单人最高积分返回按键最高积分开始游戏进入游戏游戏设置模式选择音效选择图37开机界面功能框架FIG37BOOTINTERFACEFUNCTIONFRAME333游戏系统“枚举算法”概述本文绕开了涩难懂、比较复杂的“矩阵算法”,提出了另一种“枚举算法”来实现这个经典游戏。“枚举算法”没有复杂的数学理论、避免了在程序中大量使用矩阵运算公式,设计思路清晰、明了,非常适合游戏设计的初学者理解和实现。所谓枚举算法,就是直接枚举出游戏中各图块的基本形状和它们的旋转形状,然后控制每一种不同形状的方块在游戏戏中的产生、移动、旋转、落下、填满和清除等游戏过程。334俄罗斯方块造型设计的方法众所周知,俄罗斯方块一般有七种基本形状,每个基本形状都由4个正方形的小方块构成。利用小方块不同的摆放位置,可产生19种旋转型图块。这七种图形分别是“I型”、“L型”、“反L型”、“Z型”、“反Z型”、“口型”、“T型”。如图38所示。I型L型反L型T型Z型反Z型口型图38方块模型FIG38SQUAREMODEL本系统在构造19个方块模型时的思路是定义一个数组,用以存储各个模型中4个小方块的顶点坐标。比如L型,其数据结构为0,0,0,4,0,8,4,8。其中,每两个数据为一个小正方形的列、行坐标,如图39所示。由图可知,整个界面的坐标原点在左上角,分别向右、向下作为横轴的正方向和纵轴的正方向。图中每一格代表了LCD12864中的连续四行,第1格的坐标是(0,0);第2格的坐标是(0,4);第3格的坐标是(0,8);第4格的坐标是(4,8);其它图块也按此方法编辑数组内容。2341图39L型FIG39LSHAPE335随机产生俄罗斯方块的方法1产生随机数的理论依据为了实现随机落下各类方块图形,游戏过程序中必须抽取随机数来确定方块的类型。随机数是一个既简单又复杂的问题。本设计采用众所周知的线性叠加法,虽然没有完美的方法产生随机数,不过线性叠加法是一个合适的方法,它彻底解决了8位机随机数的问题。如果从一个足够长的数字序列中的某一个点取出一边串的数字,那么这些数字就看似随机。这个开始的点(数字)叫做种子。如果从相同的点(种子)开始,将会得到相同的数字,这是因为我们是从固定的序列中取数字(所以叫伪随机)。但这却是一个有用的特性,我们可以每次从不同的点取数,即改变种子,从而可以实现真正的随机。2“线性叠加法”的概况“线性叠加法”其实只涉及二个内容即乘法和加法。只需三个步骤即第一,为了取得新的种子,旧的种子与一个常数A相乘;第二,所得的结果和第二个常数C相加;第三,新的种子就是第二步结果的低32位。保留低32位很重要,用来获得下一个种子。计算公式为种子A种子C(31)此公式在几何图中表示为一条直线,而且新种子由旧种子反复相加得来,所以叫线性叠加。随机函数的关键在于选择优秀的“常数A”(也叫乘数A),其实也就是选择了一个固定的数字序列。“常数C”,不像乘数A那样重要,但是一定是个奇数。事实上,C可选1。因为奇数(旧的种子)乘奇数(乘数A)是奇数,再加奇数(常数C)将会是一个偶数学偶数(旧的种子)乘奇数(乘数A),加奇数(常数C)将会是一个奇数。如此种子会在奇数和偶数之间转变。因为种了的变化足够随机,所以种子的值可以作为8位或16位随机数。3KEILC51中“线性叠加法”的实现方法在KEILC51中生成伪随机数需要用到两个函数,一个是SRANDUNSIGNEDINTSEED,一个是RAND。首先给SRANDUNSIGNEDINTSEED提供一个种子,该种子为UNSIGNEDINT类型,其取值范围从0到65536,SRANDUNSIGNEDINTSEED根据这个种子会由上述特定的公式生成一个随机数序列;然后调用RAND,它会依次从这个序列中返回一个数,其值在0到32767之间。因随机数函数RAND函数实际上是线性随机的,如果在不指定SRAND(UNSIGNEDINTSEED)的种子的情况下,它每次都使用默认的种子,因此生成的序列会是同一个,所以会取到相同的数字序列。这可能会导致每次重新运行游戏时其随机数结果都是一样的。为了解决该问题,本设计在玩家进入游戏时读取按键按下瞬间定时器T0的计数值,作为SRANDUNSIGNEDINTSEED的种子。从而实现真正的随机。4随机数程序流程图如图310为随机数程序流程图。SRANDUNSIGNEDINTSEED产生一数据序列开始游戏读取T0计数值作为SEEDRAND将返回值进行处理后选择相应的方块数组图310随机数程序流程图FIG310RAMDOMPROCESSFLOWPROGRAMDIAGRAM336俄罗斯方块平移的实现方法方块产生后,需要用全局变量来保存方块在游戏MAP区中的行坐标和列坐标。方块的平移包括左移和右移两种情况,无论那种情况都要首先进行合法性判断。1俄罗斯方块平移特性在本设计中规定当按下一次左移或右移按键时,MAP区中的当前图块就左移或右移一个正方形的宽度。而一个小正方形的宽度,则对应着LCD12864中的4列。2平移合法性判断平移的合法性判断经较简单,只需判断它旁边相邻位置是否被填充即可。3平移算法的实现在程序中,当有任意一个平移按键被按下时,系统接收到信号,然后调用平移函数进行判断其合法性,得到该函数的返回值为1后,再进行平移操作。其程序流程如图311所示。返回1返回1返回0YYNN左移按键被按下RIGHT_LEFT_JUDGE函数列变量F_X减4行不变右移按键被按下列变量F_X加4行不变RIGHT_LEFT_JUDGE函数将图块左移一格将图块右移一格图311平移算法流程图FIG311TRANSLATIONALGORITHMSFLOWCHART337俄罗斯方块旋转的实现方法1俄罗斯方块旋转图形概况方块旋转是一个游戏实现的关键问题,实现旋转的数学方法有多种,如矩阵变换法、枚举法、索引法等。本文前面已经论述了此次设计采用枚举的方法,对19种俄罗斯方块造型进行构造。游戏过程中,每一种基本方块都要做旋转控制,于是就产生了旋转后的方块形状,本文将其称为“旋转型”。基本型中的“I型”,只有一种旋转型,即由竖直旋转90度后成为水平。因此,基本型加上一种旋转型,共有两种形状。基本型中的“L型”和“反L型”有三种旋转型,将它按顺时针每旋转一个90度就产生一种旋转型,可以旋转三次,得到三种不同的旋转型,因此,它的三种旋转型加上其基本型,“L型”和“反L型”方块分别有四种形状。基本型中“Z型”和“反Z型”可以顺时针旋转一次90度,加上他们的基型分别有两种形状。基本型中的“T型”有三种旋转型,将他按顺时针旋转一个90度就产生一种旋转型,它可以旋转三次,得到三种不同的旋转型,因此,它的三种旋转型加上其基本型,“T型”方块共有四种形状。基本型中的“口型”方块没有旋转型,在游戏中只有一种形状。综上所述,七种基本型方块,因旋转产生了不同的旋转型,这些旋转型加上他们的基本型,整个游戏中,共有19种不同的方块形状。本设计实现旋转操作的具体方法,可分为两类,一类是I型的旋转策略;另一类则是其余17种基本型的旋转策略。2旋转合法性判断方块做顺时针旋转,每次旋转90度。本设计规定只要旋转后到达的地方未被填允,方块就可以进行旋转操作。3I型的旋转策略为了在视觉上实现I型的顺时针旋转,本设计采用位置错落的方式来实现。其具体过程如图312所示。图312I型的旋转方法FIG312THEROTATIONMETHODOFISHAPE当落下的图块是图所示时,其旋转周期为。当落下的图块是图所示时,其旋转周期为。之所以把I型的旋转变换单独拿出来讨论,是因为I型只有基本型和旋转型共两种图块。如果在当前位置直接按这两种图块的坐标数组进行图形切换,则无法实现顺时针旋转的视觉效果。所以,在旋转处理程序中,当要旋转的当前图块为I型及其旋转型时,就要改变当前列、行这两个全局变量的值。4其余17种基本型的旋转策略除了I型的旋转比较复杂外,其余17种类型的方块只需按各自旋转的顺序在当前位置用已经编辑好的坐标数组来实现旋转即可。具体程序流程如图313所示。NYYYNNYN按下旋转键是否是I型、一型判断方块经过了几次旋转判断新位置是否可写判断是哪类图块I型及其旋转型其它17种类型根据上述判断的结果决定当前位置行、列坐标的增减进行旋转变换是否是I型、一型以外的其它类型按照已经排列好的变换顺序取坐标数据恢复原先坐标图313旋转程序流程图FIG313ROTATINGPROGRAMFLOWCHART338俄罗斯方块下移的实现方法在整个游戏过程中,方块是不断向下运行的,其下移特性为方块每次下移的格数对应着LCD12864屏幕中的一行。具体程序实现流程如图314所示。YNYNYN进入下移判断程序读取下移一行后每个小方块的行列坐标判断每个小方块的行在LCD显示区中的哪一页上半页下半页是否可写标志加1标志是否为4程序返回1是否循环了4次程序返回0图314下移判断程序流程图FIG314MOVESDOWNJUDGMENTPROGRAMFLOWCHART339满行检测及消行功能的实现方法随着方块的不断累积,方块每次下落到不能再运动时,系统就会检测游戏MAP区,当检测到MAP区中某一行堆积满后,系统就消去此行,作为奖励,其上方的方块群则依次下落一行。系统满行检测和消行功能是通过“满行检测及消行”函数实现的,即在每个图块落定和下一个图块未出来之前,按页扫描游戏MAP区,每半页算一行。若检测到某行被填满,则消去此行,并将其上方的图块往下移动相应的行数。具体程序实现流程如图315所示。YNYNYN某一方块已落定进入满行检测程序,页标志N7从第N页开始检测检测当前页的下半页是否满行消除此行,其上方块依次下落一行检测当前页的上半页是否满行消除此行,其上方块依次下落一行N减1是否是第0页退出图315满行检测程序流程FIG315FULLLINEDETECTIONPROCESSES3310游戏积分的计算方法在游戏系统中,积分体现了玩家在此次游戏中的操作情况。本游戏系统分单人模式和双人模式两种积分计算方式。单人模式下,玩家每消去一行,就能获得1个积分,如果当前游戏积分超过系统记录的单人最高游戏积分,则系统将更新记录,以便其他玩家挑战。双人模式下,双方的积分制度是一样的,以进度条的方式展示在积分与道具区。其中积分区分为两个阶段,第一阶段每消去1行进度条向上走一格,共8个进度格;第二阶段每累计消去3行进度条才向上增加一格,共6个进度格。双方谁先到达进度条的顶端就算胜利。当一次性同时消去3行时,则能获得一个道具功能的使用权。最多能累积两个道具。具体程序实现流程如图316所示。NYYNYNYNYN消去一行当前积分加1是否大于最高纪录存储当前积分退出单人模式下双人模式下增加N分,消去N行消去N行N0N3增加1道具道具是否小于2个增加1道具进度是否到顶结束所有进程返回游戏图316积分系统程序流程图FIG316SCORESYSTEMPROGRAMFLOWCHART34双人俄罗斯方块游戏设计341RTX51TINY简介许多微处理器应用程序要求同时执行多个任务。对于这样的应用程序,一个实时操系统RTOS允许灵活的分配系统资源(中央处理器、存储器等)给各个任务。RTX51它可以运行于所有的8051派生机型,是一个很好使用的强大的准并行实时操作系统。RTX51可以简化那些复杂而且时间要严格的工程软件设计工作。有两个不同的RTX51版本可以利用RTX51FULL和RTX51TINY。二者的主要区别是前者是可以强占(或者说可剥夺的)系统而后者是不可以强占的(不可剥夺的)。RTX51FULL版本是完整版,它使用四个任务优先级来完成,同时存在时间片轮转调度和抢先的任务切换。RTX51FULL工作在与中断功能相似的状态下,信号和信息可以通过邮箱系统在任务之间互相传递。程序员可以从一存储池中分配和释放内存,也可以强迫一个任务等待中断、超时或者是从另一个任务或中断发出的信号或信息。而本游戏系统采用的RTX51TINY是RTX51完整版的子集,它完全集成在KEILC51的集成开发环境中。自身仅占用900字节左右的程序存储空间。RTX51TINY仅支持时间片轮转任务切换和使用信号进行任务切换。不支持抢先式的任务切换,不包括消息历程,没有存储器池分配程序。RTX51TINY虽然比较简陋,但它还是具备了一些实时操作系统的基本要素,又因为它完全集成在KEILC51的集成开发环境中,可以使用户把更多的精力关注在应用本身而无需考虑复杂的底层驱动,而且整个应用软件系统结构清晰,维护方便,可节省大量的时间和人力。当程序比较复杂时,它的优点就体现得更明显。RTX51TINY完全可以充当我们进入实时操作系统(RTOS)世界的领路者,更为重要的是,它是免费的。无论如何,RTX51TINY仍然是在8位单片机中应用操作系统的首选。342RTX51TINY的内核分析该小节只介绍本设计中用到RTX51TINY系统的相关知识与配置方法。读者若想更全面了解RTX51TINY多任务实时操作系统,请阅读RTX51TINY的帮助文件或其它相关文件。1RTX51TINY程序的编写方法若要使用RTX51TINY的内核,只需包含文件RTX51TNYH即可。所有的运行时库常量都在这个头文件中定义。可以采用以下方式包含它INCLUDE当使用RTX51TINY时,要为每个任务建立独立的任务函数。同时,RTX51TINY任务必须是用_TASK_声明的C函数,返回值和参数都必须是VOID类型的,RTX51TINY程序不需要用户自已定义MAIN函数,取而代之的是,RTX51TINY从任务0开始执行。在典型的应用中,任务0简单的建立所有其他的任务。2系统调用函数简介RTX51TINY内核完全集成在KEILC51编译器中,以系统函数调用的方式运行,因此可以很容易地使用KEILC51语言编写和编译一个多任务程序,并嵌入到实际应用系统中,内核提供多组函数供应用程序引用。3RTX51TINY的任务状态RTX51TINY的用户任务具有以下几个状态RUNNING任务处于运行中,同一时间只有一个抢占任务可以处于“RUNNING”状态。READY任务正在等待运行,在当前运行的任务时间片完成之后,RTX51TINY运行下一个处于“READY”状态的任务。WAITING任务由于时间片用完而处于“TIMEOUT”状态,并等待再次运行。该状态与“READY”状态相似,但由于是内部操作过程使一个循环任务被切换而被冠以标记。如图317所示为任务状态转换图8。信号或超时到来等待信号或超时时间片结束时间片到来READY/TIMEOUTRUNNINGWAITING图317任务状态转换图FIG317TASKSTATETRANSITIONDIAGRAM4RTX51TINY的同步机制为了能保证任务在执行次序上的协调,必须采用同步机制。内核用以下事件进行任务间的通信和同步。SIGNAL用于任务之间通信的位,可以用系统函数置位或清除。如果一个任务调用OS_WAIT函数等待SIGNAL而SIGNAL未置位,则该任务被挂起直到SIGNAL置位,才返回到READY状态,并可被再次执行。TIMEOUT由OS_WAIT函数开始的时间延时,其持续时间可由定时节拍数确定。带有TIMEOUT值调用OS_WAIT函数的任务将被挂起,直到延时结束,才返回到READY状态,并可被再次执行。INTERVAL由OS_WAIT函数开始的时间间隔,其间隔时间可由定时节拍数确定。带有INTERVAL值调用OS_WAIT函数的任务将被挂起,直到间隔时间结束,然后返回到READY状态,并可被再次执行。与TIMEOUT不同的是,任务的节拍计数器不复位。5RTX51TINY的任务切换方式任务切换是RTX51TINY提供的基本服务。RTX51TINY是基于时间片调度算法的操作系统,它支持的是非抢占式的任务切换。所以在一个任务被执行时不能对其进行中断,除非该任务主动放弃CPU的资源,中断才可以打断当前的任务,中断完成后把CPU的控制权再交还该被中断的任务。任务切换的流程如图318所示8。TASKSWITCHINGSWITCHINGNOW寄存器组切换当前任务时间片到标志置位查找下一个“READY”状态的任务N对任务N堆栈管理重置任务N节拍数任务N因时间片到转入就绪状态任务N因等信号且信号到,转入就绪状态任务N因等超时且超时到,转入就绪状态任务N因其他原因转入就绪状态清除时间片到标志清除等待信号及信号到标志清除等超时及超时标志恢复因T0中断保护的现场返回任务N执行,任务N成为当前任务(SWITCHING出口)返回任务N执行,任务N成为当前任务(SWITCHINGNOW出口)图318任务切换流程图FIG318TASKSWITCHINGFLOWCHART任务切换方式分为两种循环任务切换方式和协作任务切换方式。如果禁止了循环任务处理(如何禁止此方式在RTX51TINY系统配置一节中再作介绍),就必须让任务以协作的方式运作,用户可以用OS_WAIT函数或OS_SWITCH_TASK函数让RTX51TINY切换到另一个任务而不是等待任务的时间片用完。OS_WAIT函数挂起当前的任务(使之变为等待态)直到指定的事件发生(接着任务变为就绪态)。在此期间,任意数量的其他任务可以运行。具体做法是在每个任务里调用OS_WAIT函数或OS_SWITCH_TASK函数,以通知RTX51TINY切换到另一个任务。OS_WAIT函数与OS_SWITCH_TASK函数的所不同是OS_WAIT函数是让任务等待一个事件,而OS_SWITCH_TASK函数是立即切换到另一个就绪的任务。343游戏开发环境的配置1KEIL的配置编译和链接RTX51TINY应用程序有2种途径,一种是使用集成开发环境VISION3IDE,另一种是使用命令行工具

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论