基于单片机的俄罗斯方块游戏_第1页
基于单片机的俄罗斯方块游戏_第2页
基于单片机的俄罗斯方块游戏_第3页
基于单片机的俄罗斯方块游戏_第4页
基于单片机的俄罗斯方块游戏_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

基于单片机的俄罗斯方块游戏摘要俄罗斯方块作为最经典的电子游戏之一,它曾经引起的轰动真是不容小觑。本设计是在12C5A60SR单片机的根底上利用C语言编程,做出实物电路图来模拟俄罗斯方块小游戏的设计。游戏需要利用按键控制方块运动,玩家可以以90度为单位旋转方块,以格子为单位左右移动方块,当区域中某一行全部由方块填满时,那么该行会消失并记分,同时消除的列数越多,得分越多;当方块堆到区域最上方而无法消除时,游戏结束。游戏设计主要分为硬件电路设计和源代码编写两局部。对于硬件电路,有必要充分了解核心单片机的外部接口功能,液晶显示器需要处理的逻辑关系和它控制原理,以及键盘设置所需的程序。而对于编程方面首先定义一个二维数组确定整个区域,了解游戏中所需要用到的一些特殊的函数,然后判断区域是否有方块,还要判断方块落下后,一行的空格是否填满或者整个区域是否填满等,不断的按照这样的方法循环扫描。实际运行说明,该设计可以实现根本的游戏功能,到达游戏的目的。【关键词】12C5A60SR;LCD液晶;C语言TetrisgamebasedonsinglechipmicrocomputerAbstractTetrisisoneofthemostclassicelectronicgame,ithadcausedasensationisreallycannotbeunderestimated.ThisdesignistheuseofCprogramminglanguagebasedon12C5A60SRmicrocontroller,designthephysicalcircuitdiagramstomodeltheTetrisgame.Thegameneedstousethekeystocontrolblockmovement,gameplayercanbe90degreesrotate,byalatticeunitsmovingboxesaround,whentheregioninarowarefilledbythebox,theguildtodisappearandscore,thenumberofcolumns,andeliminatescoresmore;whentheboxatthetopofpiletoareasnottoeliminate,theendofthegame.Gamedesignisdividedintohardwarecircuitdesignandsourcecodeintwoparts.Forthehardwarecircuit,itisnecessarytofullyunderstandtheexternalinterfacefunctionsofthecoreMCU,LCDneedlogicprocessinganditscontrolprinciple,andproceduresrequiredforkeyboardsettings.Forprogrammingtheentireregiondefinedfirstdetermineatwo-dimensionalarray,understandsomespecialfunctionrequiredinthegame,andthendeterminewhethertojudgetheregionalblock,blockfalls,arowspaceisfilledorthewholeareaisfilled,circularinaccordancewiththismethodofscanningtime.Theactualoperationshowsthat,thedesigncanachievethebasicgamefunctions,achievethegoalofthegame.【Keywords】12C5A60SR;LCDliquidcryst;Clanguage目录1绪论11.1课题背景11.2选题意义及其概况12游戏需求及流程分析32.1游戏组成及规那么32.2俄罗斯方块工作流程图 33游戏开发环境介绍43.1单片机简介43.2KEIL软件介绍 73.3PROTELDXP软件介绍74软件设计84.1软件设计概述84.2软件设计重要细节85硬件电路设计115.1组成设备115.2电路设计 115.3焊接与调试 146游戏测试及结果157总结17参考文献18致谢191绪论1.1课题背景随着科技的进步,电脑、、掌上游戏机〔PlayStationPortable,PSP〕PSP等电子产品性能越来越好的同时,电子游戏已经成为越来越受欢送的娱乐方式,现在几乎成了一个不可或缺的精神食粮,甚至有许多人认为,电子游戏已经不仅是一种娱乐,也成为了一种文化现象。电子游戏是一个组合动画,音乐,故事情节为一体的游戏,涉及多个行业。电子游戏有着多种分类方式,一般分为网络游戏、电脑游戏、电视游戏、街机游戏、便携游戏和电子竞技等。一般来说电子游戏具有模拟性和互动性两种性质,模拟性指人们对现实世界或思维世界的模拟,互动性那么指人与机器之间产生的一种关系。凡事都有两面性,电子游戏也不例外,它有利也有弊,只要不沉迷其中,还是能作为一种很好的娱乐方式的。俄罗斯方块作为最经典的电子游戏之一,它曾经引起的轰动真是不容小觑。它上手极其简单,规那么很简单却又变化无穷,要熟练地掌握其中的操作与摆放技巧还是需要一定时间的,作为家喻户晓的游戏,它的受欢送程度可以说是史上任何一款游戏不能比较的[1]。顾名思义,俄罗斯方块自然是俄罗斯人创造的,这位伟大的创造家名叫做AlexPajitnov。现在玩的人虽然很少了,但目前流行的许多游戏上都有它的身影,而且对我们90年代的人来说就是整个童年。因此,对它的研究,无论从技术上还是社会意义上都是很有价值的。1.2选题意义及其概况电子游戏诞生于20世纪末,这种娱乐方式已经成为新世纪不可或缺的时尚生活。根据整个世界的娱乐性行业来说,游戏产业已经显示出优于其他娱乐业的开展势头。电子游戏最初产生于美国,1971年,一个麻省理工学院的学生设计了世界上第一个效劳游戏机〔俗称街机的街机游戏〕,被称为“计算机室〞[2]。虽然刚开始由于市场原因这款游戏最终以失败告终,但它还是开启了电子游戏的开展之旅。电子游戏在中国出现至今已20多载,期间经历过许多风风雨雨,一路坎坷,现在与电子游戏兴旺的韩国、日本、美国等国家相比仍然存在着比较大的差距。电子游戏的开展与计算机是分不开的。现如今的计算机系统正朝着三个方向开展:巨型化、网络化和单片化,用以解决复杂系统计算和高速数据处理的依然是巨型机,所以,巨型机目前努力在朝高速及处理能力方向开展[3]。单片机刚出现时,英特尔公司为其命名为嵌入式微控制器(EmbeddedMicrocontrollerUnit,EMCU),因为它可以嵌入到各种仪器、设备中区,这也是单片机最明显的优势,这一点巨型机和网络是做不到的。单片机的应用很广泛,家用电器、办公室自动化、智能产品、商业营销、工业自动化等都有它的身影,如今在游戏领域里单片机的作用也愈创造显。虽然用单片机来设计一个简单的俄罗斯方块游戏程序似乎有点大材小用,但这仅仅是一个单片机在嵌入式游戏方面的简单应用,正因为它的前景无可预计,所以才有这个设计,此次设计仅仅是为了举一个单片机在游戏上应用的一个简单例子,它就可以很好的说明单片机功能的强大,更高的可控性和集成度高的好处,随着计算机技术、通信技术和软件技术的迅猛开展[3]。再加上3C产业〔计算机、通讯、消费电子〕的合成及3G移动通信时代的到来,嵌入式软件发挥了更加重要的作用,它的开展为绝大多数电子设备注入了新的活力,各种装备与设备上由于有了嵌入式系统软件的参加,大大地推动了其行业渗透性应用,嵌入式技术不仅提高了产品的技术含量,更成为产品增值的关键,在整个软件产业中占据了重要地位,并受到世界各国的广泛关注,如今已成为信息产业中最为耀眼的“明星〞之一。2游戏需求及流程分析2.1游戏组成及规那么1)游戏组成一个用于摆放方块的平面虚拟场地,其标准大小:长为12,高为20〔以每个小正方形为单位〕[4];一组由四个小正方形组成的规那么图形,总共有七种;一个由四个按键组成的键盘,上下左右分别控制变化、左移、右移和下落。2)游戏规那么游戏需要使用按键控制方块运动,方块不仅可以以90°为单位旋转,还能在格子单元内左右移动;方块移到区域最底端或落到其他方块上时,就会固定在该处,新的方块出现在区域顶端开始落下;当区域中某一行被方块填满,那么该行会消失并记分,同时消除的列数越多,得分越高;当屏幕被方块填满时片消除不了了,游戏结束。游戏还会提示下一个方块,如果玩家比较厉害可以根据提示来判断本次方块如何放置。2.2俄罗斯方块工作流程图游戏开始后,屏幕最顶端会随机产生一个方块图形,将其交给图形变量,再对图形进行变化,再判断图形的位置,没有到底就逐次下降一行直到最底端;如果图形到底了就检测一行是否被方块填满,填满了进行去除并记分,没有就检测整个屏幕是否被方块填满,填满了就进行清屏游戏结束,没有填满就回到进行图形变化的步骤即可。3游戏开发环境介绍3.1单片机的简介单片机全称单片微型计算机,又称微控制器,是把中央处理器、存储器、定时器、计数器、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机,它是微型计算机的一个重要分支,也是颇具生命力的机种。单片机主要用于测试和控制领域,按它的适用范围可分为通用性和专用型两大类。通用性就是没有限制,都可以兼容,二专用型是针对特定的要求来设计的,目前,单片机经过三代的开展,正在向低电压,低功耗,低本钱,多功能,高性能,大容量存储,强大的I/O功能和良好的结构相容性方向。单片机应用的重要意义还在于它从根本上改变了传统的控制系统设计思想和设计方法,以前,必须使用模拟或数字电路才可以实现,现在只需要微型单片机就可以实现[5]。本次论文的重点就在于单片机的最小系统局部,这次选用的是Atmel公司推出的常用芯片12C5A60SR,主要是它不仅价格廉价,而且是采用高密度非易失性存储器技术制造而成,与工业80C51产品指令及引脚完全兼容,下面详细介绍一下这款单片机:1)12C5A60SR单片机的主要特点12C5A60SR是一种低功耗、高性能的半导体集成电路8位微控制器,具有8K字节在系统可编程Flash存储器[6]。它是用Atmel公司高密度非易失性存储器的技术制造而成,与工业80C51产品指令及引脚完全兼容。片上的Flash允许程序存储器在系统可编程,也适于常规编程器,单芯片拥有8位中心处理器〔CentralProcessingUnit,CPU〕和在系统可编程的Flash,这使得12C5A60SR为众多嵌入式控制应用系统提供高灵活、超有效的解决方案[7]。它具有双列直插式封装、特殊引脚芯片封装、薄塑封四角扁平封装三种封装方式,本设计选用双列直插封装的单片机,此种封装适合印制线路板(PrintedCircuitBoard,PCB)的穿孔安装,也容易布线,操作起来很方便。12C5A60SR单片机的由8位CPU和在系统可编程Flash、晶片内部具时钟振荡器〔工作频率高达12MHz〕、8KB的内部程序存储器〔Read-OnlyMemory,ROM〕、256字节的内部数据存储器〔RamdomAccessMemory,RAM〕、32个可编程I/O口线、8个中断向量源、三个16位定时器/计数器、三级加密程序存储器以及全双工异步串行通信口等组成[8]。2)12C5A60SR单片机的引脚简介图3-112C5A60SR单片机引脚图表3.112C5A60SR单片机引脚功能表3)12C5A60SR的晶振电路顾名思义,晶振也就是晶体振荡器,它在单片机中充当着心脏的角色。它的主要作用就是通过晶振来产生时钟周期,时钟周期越小那么他对应的时钟频率就越大,时钟频率一大那么单片机的运行速率也就越快,简单来说,没有晶体就无法产生晶振,没有晶振就无法产生时钟频率,没有时钟频率就无法执行程序代码,无法执行程序单片机不能工作。所以通常为了保持各模块保持同步,一个系统共用一个晶振。4)12C5A60SR的复位电路复位电路,简而言之就是把电路恢复到初始状态,就像计算器的清零按钮的作用一样。就目前来说,单片机复位电路主要分为微分型复位电路、积分型复位电路、比较器型复位电路和看门狗型复位电路四种。它的根本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经过一定的延时才撤销复位信号,以防电源开关或电源插头分合过程中引起的抖动而影响复位。选用的微处理器复位电路中所需要的参数振动的稳定性保证复位后持续时间大于2个机器周期。12C5A60SR单片机是整个开发板的控制中心,我们在选用电路时应该保证它的可靠性和抗干扰性。在特定的电子设备的选择,应先确定它的参数,有参数作参考会比较准确。3.2Keil软件介绍单片机开发中除必要的硬件外,同样离不开软件,Keil是众多单片机应用开发的优秀软件之一,它集编辑、编译、仿真于一体,支持汇编,PLM语言和C语言的程序设计,界面友好,易学易用。随着单片机开发技术的不断开展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断开展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil也看得出来[9]。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选〔目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件〕,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。3.3ProtelDXP软件介绍Protel

DXP

2004是澳大利亚Altium公司于2002年推出的一款电子设计自动化软件。它的主要功能包括:原理图编辑、印制电路板设计、电路仿真分析、可编程逻辑器件的设计。用户使用最多的是该款软件的原理图编辑和印制电路板设计功能。4软件设计4.1软件设计概述针对俄罗斯方块这个游戏,程序编写方面主要是通过定义好内部数组,调用随机函数随机产生的各种方块。以及根据游戏规那么和选关最终确定下降的时间并作出算法。对于编程方面首先定义一个二维数组确定整个区域,以及要了解游戏中所需要用到的一些特殊的函数,然后判断区域是否有方块,通过按键改变下落的位置、速度和方块的变化形状。每执行一步单片机对液晶刷一次屏,并为下一次显示做准备〔即显示下一个下落的方块〕。还要判断方块落下后,一行的空格是否全部填满或者所有方块是否全部填满空格,然后调用加法器把所得分数进行累加,把分数存入数组并用液晶进行显示。如果列有满格话游戏就gameover,如果在相应时间得到一定分数自动进入下一关,不断的按照这样的方法循环扫描,进行相应的工作。由于源程序过长,所以这里除了最关键的程序外就不一一陈述了[10]。4.2软件设计重要细节1)工作区域和方块定义俄罗斯方块的工作区域可以利用数组进行存储,即ucharxdataboard[20][14]={0};用于判断方块区域是否已被占用〔1表示被占用;0表示未被占用〕。俄罗斯方块形状总共分为5大类,总共又有19种形状,每个形状都有四个小正方形组成,如何对这些方块进行存储是很重要的事情。我们这里采用数组和坐标的形式,具体如下列图4-1和4-2所示:图4-1图4-22)方块的生成、移动和旋转方块的产生很简单,调用一个随机函数就可以了。图形的移动和旋转就麻烦一点,需要先判断四周有没有障碍再进行变化。我们这里同样利用坐标,就是先计算出方块的中心点〔即X轴、Y轴坐标〕,再计算X轴和Y轴的最大值,在可行范围内方块便可以进行相关变化。3)碰撞问题这应该是整个程序中最需要考虑的问题吧,与上一点无独有偶,在分别检测四个小正方形在改变后的实际位置后,再判断是否已经有障碍物〔墙壁或方块〕存在。4)消除行满和记分行满后进行消除很简单,只需要扫描底板数组是否出现满行就可以了。因为之前有进行坐标定位,这个只需要存储Y行坐标就可以进行消除。记分更简单,直接用一个加法器就可以了;消除多行的时候采用乘法器。5)显示下一个方块产生方块的时候我们是采用随机函数,这里显示下一个方块我们直接掉用随机函数种子就可以了。6)至于其他游戏初始化、刷新界面、开启和暂停游戏、游戏结束等问题这里就不一一累赘了,只是简单写出它调用的函数。(1)标记底板用于判断底板状态:voidGame_tetris_Sign_board(ucharx,uchary,uchar*p)x,y--需标记底板的起始坐标;0--取消标记,1--标记;*p--被标记方块的数组名;(2)方块横向或纵向最大值:ucharGame_tetris_Count_max_value(ucharsel,uchar*p)Sel--形参;0--x轴方向,1--y轴方向(3)游戏界面初始化voidGame_tetris_Interface_init(void)(4)判断方块能否移动:voidGame_tetris_Judge_move(void)形参:dir--方向判断;〔1-left,2-rignt,3-down〕(5)判断能否方块旋转:voidGame_tetris_Judge_spin(void)返回值:0能,1不能(6)方块快速下移:voidGame_tetris_Cube_move_down_rapid(ucharsel)(7)刷新显示界面:voidGame_tetris_Refresh_interface(void)(8)显示分数:voidGame_tetris_Show_score(void)(9)显示等级:voidGame_tetris_Show_level(void)(10)开启和暂停游戏:voidGame_tetris_Start_suspend(void)(11)判断游戏是否结束:ucharGame_tetris_End(void)(12)游戏升级:voidGame_tetris_Upgrade(void)5硬件电路设计5.1组成设备12C5A60SR单片机一块、LCD液晶显示器一块、独立按键六个以及一些细小元件和辅助电路。5.2电路设计这次设计的俄罗斯方块最主要的局部就是单片机的最小系统的设计,而单片机的最小系统主要由单片机、晶振电路和复位电路、电源以及辅助电路等组成。显示接口电路的设计是本设计最重要的是,对不同系统的功能需求,界面设计也不同。最初的设计是在Keil和Proteus联合进行仿真,利用C语言编程,后期实际焊接生产的。这次的硬件电路采用单片机12C5A60SR控制模块提供电源,以点阵式LED显示,采用独立按键,直接在I/O口线上接上按键开关,因为设计时精简和优化了电路,所以剩余的资源还比较多,上下左右四个按键分别控制旋转、左移、右移和下降[11]。硬件设计图如图5-1所示:图5-1硬件电路设计图1)供电和指示电路没有供电整个系统就无法运行,所以有个稳定的供电模块是系统平稳运行的前提和根底。电源一般分为两种,一种是利用USB数据线来供电,一种是直接采用+5V的电池供电,本设计采用USB供电。指示电路接入了发光二极管,图5-2中R10为LED的限流电阻给发光二极管提供电流。当电源接通正常工作时,发光二极管会正常发光,否那么不会正常工作[12]。图5-2供电和指示电路图2)晶振电路和复位电路单片机的复位是靠外电路实现的,在时钟电路工作后,只要在单片机的RST引脚上出现24个时钟振荡脉冲以上的高电平,便可以实现到初始化状态。为了保证可靠性,通常RST引脚保持在10ms以上的电平,复位电路连接图如图5-3所示。单片机是11.0592MHz晶体和30pF电容器,是一种振荡电路。晶振的作用就是通过晶振产生时钟周期,从而来执行程序代码,这也是单片机不可或缺的[13]。图5-3晶振电路和复位电路图3)显示器电路显示器局部是由HD61202液晶显示控制驱动器和JM12864J液晶显示器组成的。HD61202液晶显示控制驱动器是一种点阵图形输出液晶显示控制器,它隐藏在64×64显示RAM中的数据,每一个对应于光明和黑暗的状态的液晶屏的点的RAM。它有64列驱动器HD61202读、写、输出,操作序列与68系列单片机是一致的,所以它可以直接连接到68系列单片机的接口。占空比为1/64/32-1。JM12864J是使用HD61202及其兼容控制驱动器作为列驱动器,同时使用HD61202作为线驱动液晶显示模块。因为HD61202不与微处理器连接,所以只要电源线驱动信号和同步信号就可以了。显示器是本设计不可或缺的局部,俄罗斯方块设计需要用到点阵显示,所以采用LCD进行显示。在液晶显示操作,单片机模拟I/O端口的读写时序使用[14]。图5-4液晶显示器电路图4)按键控制电路按键局部采用单独的六个按键,上下左右分别控制方块的变化、下落、左移和右移,另外两个控制开始和返回。当按键按下时,与主控芯片连接的端口变为低电平,按键松开那么也升为高电平。按键具有自动弹回的功能,当我们按下按钮时,接点处于接通状态;松开按钮时,接点处于切断状态,此时mcu会自动读取端口的变化来进行相应的操作。图5-5按键控制电路图5.3焊接与调试1)材料准备工欲善其事,必先利其器。焊接电路不仅仅是焊接几个芯片几块板子如此简单,核心在于电路的设计与调试。要做出实物,首先要选好元件,准备好辅助工具。2)焊接考前须知电路焊接是一件简单确有需要足够细心的工作,如果焊接存在问题,那么即使电路原理图再正确,也不可能得出理想的测试效果。器件的选型,管脚的次序、位置、连接方向,器件是否有损坏以及焊接的点、线是不是有断开,电阻阻值是否正确准确、导线连接是否正确等问题都是需要注意的。另外在焊接的过程中操作方面也有很多问题要注意,烙铁的温度、焊接面是否光滑、焊点大小要适宜、焊接时间不要太长、焊接顺序根本上是从内到外先低后高等。焊接完成后还要剪掉多余的线头,不平整的地方还要进行打磨。总而言之,要么不做焊接调试,要做就把它做好。3)电路调试个人认为电路调试的步骤是先检查电源有没有问题,再看看复位电路和时钟电路,最后再检查总线之类的东西。在焊接硬件时,首先焊接电源局部,然后用万用表进行供电测试,以及测试接地引脚的电压是否正常,当全部正常时,才能装上芯片。其次,调整输入信号为零,然后调整电位器电阻,尽可能使芯片的输出是零误差,这样各级电路才能正常工作,经过调试以后接通电源接可以开始游戏了。6游戏测试及结果实物制作完成后,接通电源开始测试游戏。游戏开始后屏幕最顶端会产生一个方块,按左键和右键方块可以以格子为单位进行左右移动,按上键方块可以互相变化,按下键方块能够加速下落〔可以一直按着不动也可以间歇按键〕。当方块填满一行时进行消除并进行记分;当方块堆放至屏幕最顶端时,游戏结束。图6-1俄罗斯方块实物图1图6-2俄罗斯方块实物图27总结经过一个多月的时间终于完成了毕业设计,在设计的过程中,出现了许多问题,但在老师和同学的帮助下顺利解决了。在本文中,详细分析了俄罗斯方块游戏的控制原理和详细的设计过程。本游戏机已经到达了掌上娱乐的根本要求,但在设计上还是有需要改善的地方,比方游戏不能进行关卡选择,游戏界面单一等等。整个毕业设计的过程还是挺曲折的,首先在整体框架上总是把很多程序颠三倒四导致浪费了许多时间。其次在硬件电路设计中,因为对LCD液晶显示屏不熟悉所以困难重重,甚至在购置原材料时太粗心买了一块带字符库的12864显示屏,而我需要的是不带字符库的,着前前后后又花了许多时间来重新焊接和调试。还有一个老大难的问题就是源程序设计,因为汇编自己不熟悉而且又有C语言根底,所以最后还是选择了编写程序时较为复杂的C。这次设计中源程序、电路设计、电路仿真、实物制作和调试、游戏测试等这些过程真的深深让我体会到要做好一件事真的要付出很多很多。当那些一个个麻烦问题接踵而至的时候,都想过放弃,但最终还是坚持了下来,没有方法,这是毕业的最后一道坎。虽然这次的毕业设计我自己花了很多心血,但是肯定还是有缺乏的地方,还很请各位老师给予指导和更正。参考文献[1]杨元强.酷比杯获奖作品选登《LEGO俄罗斯》“酷比杯〞游戏筹划大赛,2007[2]Apress.IntroductiontoVisualBasicProgramming[M].ProfessionalComputingandWebDesign,2006.[3]张毅刚,彭喜元.单片机原理及接口技术(〔第六版〕[M].北京:人民邮电出版社,2023[4]高凌琴,陈青华.俄罗斯方块游戏关键技术探讨[M].北京:中国青年出版社,2023[5]何立民.单片机高级教程〔第1版〕[M].北京:北京航空航天大学出版社,2023[6]周润景.keil在MCS-51&ARM7系统中的应用百例[M].北京:北京电子工业出版社,2006[7]陈溯鹰.C语言程序设计根底教程[M].南京:南京大学出版社,2023[8]谭浩强.C程序设计[M].北京:清华大学出版社,2003[9]张齐,杜群贵著.单片机应用系统设计技术——基于C语言编程[M].北京:北京电子工业出版社,2004[10]51单片机在手持游戏机中的应用期刊论文稿,2010-12-16[11]游安弼,李玉岐.基于JavaBean组件模型的俄罗斯方块[M].全国第四届Java技术及应用学术会议,2001[12]JasonLam.J2ME&Gaming.AddisonWesley,2004[13]单片机最小系统分析及应用.期刊论文稿,2023-5[14]窦振中.单片机外围器件实用手册[M].北京:北京航空航天大学出版社,2003[15]谢厚亮.AVR单片机的串行通信[J].电脑编程技巧与维护.2023附录定义俄罗斯方块的结构体数组ucharcodetetris_shape[28][2]={/*shape--1*口口口口口口*口口口口*口口口口口口*/{0x88,0xc0},{0xe8,0x00},{0xc4,0x40},{0x2e,0x00},/*shape--2*口口口口口口*口口口口*口口口口口口*/{0x44,0xc0},{0x8e,0x00},{0xc8,0x80},{0xe2,0x00},/*shape--3*口*口*口口口口口*口*/{0x88,0x88},{0xf0,0x00},{0x88,0x88},{0xf0,0x00},/*shape--4*口口*口口口口口口口口*口口口口口口{0x4e,0x00},{0x8c,0x80},{0xe4,0x00},{0x4c,0x40},/*shape--5*口*口口口口*口口口*/{0x8c,0x40},{0x6c,0x00},{0x8c,0x40},{0x6c,0x00},/*shape--6*口口口*口口口口*口*/{0x4c,0x80},{0xc6,0x00},{0x4c,0x80},{0xc6,0x00},/*shape--7*口口*口口*/{0xcc,0x00},{0xcc,0x00},{0xcc,0x00},{0xcc,0x00},};计算方块横向或纵向的最大值;ucharGame_tetris_Count_max_value(ucharsel,uchar*p){uchari,j;uchartemp=0;ucharmax_value=0;for(i=0;i<2;++i){temp=*(p+i);for(j=0;j<8;++j){if(temp&0x80){switch(sel){case0:{if(j%4>max_value)max_value=j%4;};break;case1:{if(i*2+j/4>max_value)max_value=i*2+j/4;};break;default:break;}temp<<=1;}}return(max_value+1);}函数功能:游戏界面初始化;voidGame_tetris_Interface_init(void){lcd12864_parallel_Init();lcd12864_parallel_Clear_screen(0);Game_tetris_Draw_frame();Game_tetris_Show_level();Game_tetris_Show_score();Game_tetris_Show_next_cube();Game_tetris_Draw_cube(cube_x,cube_y,tetris_shape[random_value],1);}判断方块能否移动;ucharGame_tetris_Judge_move(uchardir,uchar*p){uchari,j;uchartemp=0;ucharmax_value=0;switch(dir){case1:{if(cube_x==0)return1;};break;case2:{max_value=Game_tetris_Count_max_value(0,p);if(cube_x>13-max_value)return1;};break;case3:{max_value=Game_tetris_Count_max_value(1,p);if(cube_y>19-max_value)return1;};break;for(i=0;i<2;++i){temp=*(p+i);for(j=0;j<8;++j){if(temp&0x80){switch(dir){case1:{if(board[cube_y+(i*2)+(j/4)][cube_x+j%4-1]==1)return1;};break;case2:{if(board[cube_y+(i*2)+(j/4)][cube_x+j%4+1]==1)return1;};break;case3://下移;{if(board[cube_y+((i*2)+(j/4))+1][cube_x+j%4]==1)return1;};break;temp<<=1;return0;}bottom_sign=1;判断能否方块旋转;ucharGame_tetris_Judge_move(uchardir,uchar*p){uchari,j;uchartemp=0;ucharmax_value=0;switch(dir){case1:{if(cube_x==0)return1;};break;case2:{max_value=Game_tetris_Count_max_value(0,p);if(cube_x>13-max_value)return1;};break;case3:{max_value=Game_tetris_Count_max_value(1,p);if(cube_y>19-max_value)return1;};break;deafault;break;}for(i=0;i<2;++i){temp=*(p+i);for(j=0;j<8;++j){if(temp&0x80){switch(dir){case1:{if(board[cube_y+(i*2)+(j/4)][cube_x+j%4-1]==1)return1;};break;case2:{if(board[cube_y+(i*2)+(j/4)][cube_x+j%4+1]==1)return1;};break;case3://下移;{if(board[cube_y+

温馨提示

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

评论

0/150

提交评论