基于单片机的俄罗斯方块游戏.docx

上传人:b****4 文档编号:5509176 上传时间:2022-12-17 格式:DOCX 页数:24 大小:1.31MB
下载 相关 举报
基于单片机的俄罗斯方块游戏.docx_第1页
第1页 / 共24页
基于单片机的俄罗斯方块游戏.docx_第2页
第2页 / 共24页
基于单片机的俄罗斯方块游戏.docx_第3页
第3页 / 共24页
基于单片机的俄罗斯方块游戏.docx_第4页
第4页 / 共24页
基于单片机的俄罗斯方块游戏.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

基于单片机的俄罗斯方块游戏.docx

《基于单片机的俄罗斯方块游戏.docx》由会员分享,可在线阅读,更多相关《基于单片机的俄罗斯方块游戏.docx(24页珍藏版)》请在冰豆网上搜索。

基于单片机的俄罗斯方块游戏.docx

基于单片机的俄罗斯方块游戏

基于单片机的俄罗斯方块游戏

摘要

俄罗斯方块作为最经典的电子游戏之一,它曾经引起的轰动真是不容小觑。

本设计是在12C5A60SR单片机的基础上利用C语言编程,做出实物电路图来模拟俄罗斯方块小游戏的设计。

游戏需要利用按键控制方块运动,玩家可以以90度为单位旋转方块,以格子为单位左右移动方块,当区域中某一行全部由方块填满时,则该行会消失并记分,同时消除的列数越多,得分越多;当方块堆到区域最上方而无法消除时,游戏结束。

游戏设计主要分为硬件电路设计和源代码编写两部分。

对于硬件电路,有必要充分了解核心单片机的外部接口功能,液晶显示器需要处理的逻辑关系和它控制原理,以及键盘设置所需的程序。

而对于编程方面首先定义一个二维数组确定整个区域,了解游戏中所需要用到的一些特殊的函数,然后判断区域是否有方块,还要判断方块落下后,一行的空格是否填满或者整个区域是否填满等,不断的按照这样的方法循环扫描。

实际运行表明,该设计可以实现基本的游戏功能,达到游戏的目的。

【关键词】12C5A60SR;LCD液晶;C语言

 

Tetrisgamebasedonsinglechipmicrocomputer

Abstract

Tetrisisoneofthemostclassicelectronicgame,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绪论1

致谢19

 

1绪论

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-2

2)方块的生成、移动和旋转

方块的产生很简单,调用一个随机函数就可以了。

图形的移动和旋转就麻烦一点,需要先判断四周有没有障碍再进行变化。

我们这里同样利用坐标,就是先计算出方块的中心点(即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俄罗

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1