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

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

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

摘要

俄罗斯方块作为最经典的电子游戏之一,它曾经引起的轰动真是不容小觑。本设计是在12C5A60SR单片机的基础上利用C语言编程,做出实物电路图来模拟俄罗斯方块小游戏的设计。游戏需要利用按键控制方块运动,玩家可以以90度为单位旋转方块,以格子为单位左右移动方块,当区域中某一行全部由方块填满时,则该行会消失并记分,同时消除的列数越多,得分越多;当方块堆到区域最上方而无法消除时,游戏结束。

游戏设计主要分为硬件电路设计和源代码编写两部分。对于硬件电路,有必要充分了解核心单片机的外部接口功能,液晶显示器需要处理的逻辑关系和它控制原理,以及键盘设置所需的程序。而对于编程方面首先定义一个二维数组确定整个区域,了解游戏中所需要用到的一些特殊的函数,然后判断区域是否有方块,还要判断方块落下后,一行的空格是否填满或者整个区域是否填满等,不断的按照这样的方法循环扫描。

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

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

Tetris game based on single chip microcomputer

Abstract

Tetris is one of the most classic electronic game, it had caused a sensation is really can not be underestimated. This design is the use of C programming language based on 12C5A60SR microcontroller, design the physical circuit diagrams to model the Tetris game. The game needs to use the keys to control block movement, game player can be 90 degrees rotate, by a lattice units moving boxes around, when the region in a row are filled by the box, the guild to disappear and score, the number of columns, and eliminate scores more; when the box at the top of pile to areas not to eliminate, the end of the game.

Game design is divided into hardware circuit design and source code in two parts. For the hardware circuit, it is necessary to fully understand the external interface functions of the core MCU, LCD need logic processing and its control principle, and procedures required for keyboard settings. For programming the entire region defined first determine a two-dimensional array, understand some special function required in the game, and then determine whether to judge the regional block, block falls, a row space is filled or the whole area is filled, circular in accordance with this method of scanning time.

The actual operation shows that, the design can achieve the basic game functions, achieve the goal of the game.

【Key words】12C5A60SR; LCD liquid cryst; C language

目录

1 绪论 (1)

1.1课题背景 (1)

1.2选题意义及其概况 (1)

2 游戏需求及流程分析 (3)

2.1游戏组成及规则 (3)

2.2俄罗斯方块工作流程图 (3)

3 游戏开发环境介绍 (4)

3.1单片机简介 (4)

3.2KEIL软件介绍 (7)

3.3PROTEL DXP软件介绍 (7)

4 软件设计 (8)

4.1软件设计概述 (8)

4.2 软件设计重要细节 (8)

5 硬件电路设计 (11)

5.1 组成设备 (11)

5.2 电路设计 (11)

5.3 焊接与调试 (14)

6 游戏测试及结果 (15)

7 总结 (17)

参考文献 (18)

致谢 (19)

1 绪论

1.1 课题背景

随着科技的进步,电脑、手机、掌上游戏机(Play Station Portable , PSP)PSP等电子产品性能越来越好的同时,电子游戏已经成为越来越受欢迎的娱乐方式,现在几乎成了一个不可或缺的精神食粮,甚至有许多人认为,电子游戏已经不仅是一种娱乐,也成为了一种文化现象。电子游戏是一个组合动画,音乐,故事情节为一体的游戏,涉及多个行业。电子游戏有着多种分类方式,一般分为网络游戏、电脑游戏、电视游戏、街机游戏、便携游戏和电子竞技等。一般来说电子游戏具有模拟性和互动性两种性质,模拟性指人们对现实世界或思维世界的模拟,互动性则指人与机器之间产生的一种关系。凡事都有两面性,电子游戏也不例外,它有利也有弊,只要不沉迷其中,还是能作为一种很好的娱乐方式的。

俄罗斯方块作为最经典的电子游戏之一,它曾经引起的轰动真是不容小觑。它上手极其简单,规则很简单却又变化无穷,要熟练地掌握其中的操作与摆放技巧还是需要一定时间的,作为家喻户晓的游戏,它的受欢迎程度可以说是史上任何一款游戏不能比拟的[1]。顾名思义,俄罗斯方块自然是俄罗斯人发明的,这位伟大的发明家名叫做Alex Pajitnov。现在玩的人虽然很少了,但目前流行的许多游戏上都有它的身影,而且对我们90年代的人来说就是整个童年。因此,对它的研究,无论从技术上还是社会意义上都是很有价值的。

1.2 选题意义及其概况

电子游戏诞生于20世纪末,这种娱乐方式已经成为新世纪不可或缺的时尚生活。根据整个世界的娱乐性行业来说,游戏产业已经显示出优于其他娱乐业的发展势头。电子游戏最初产生于美国,1971年,一个麻省理工学院的学生设计了世界上第一个服务游戏机(俗称街机的街机游戏),被称为“计算机室”[2]。虽然刚开始由于市场原因这款游戏最终以失败告终,但它还是开启了电子游戏的发展之旅。电子游戏在中国出现至今已20多载,期间经历过许多风风雨雨,一路坎坷,现在与电子游戏发达的韩国、日本、美国等国家相比仍然存在着比较大的差距。

电子游戏的发展与计算机是分不开的。现如今的计算机系统正朝着三个方向发展:巨型化、网络化和单片化,用以解决复杂系统计算和高速数据处理的依然是巨型机,所以,巨型机目前努力在朝高速及处理能力方向发展[3]。单片机刚出现时,英特尔公司为其命名为嵌入式微控制器(Embedded Microcontroller Unit,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位中心处理器(Central Processing Unit,CPU)和在系统可编程的Flash,这使得12C5A60SR为众多嵌入式控制应用系统提供高灵活、超有效的解决方案[7]。它具有双列直插式封装、特殊引脚芯片封装、薄塑封四角扁平封装三种封装方式,本设计选用双列直插封装的单片机,此种封装适合印制线路板(Printed Circuit Board,PCB)的穿孔安装,也容易布线,操作起来很方便。

12C5A60SR单片机的由8位CPU和在系统可编程Flash、晶片内部具时钟振荡器(工作频率高达12MHz)、8KB 的内部程序存储器(Read-Only Memory,ROM)、256字节的内部数据存储器(Ramdom Access Memory ,RAM)、32 个可编程I/O口线、8个中断向量源、三个16 位定时器/计数器、三级加密程序存储器以及全双工异步串行通信口等组成[8]。

2)12C5A60SR单片机的引脚简介

图3-1 12C5A60SR单片机引脚图表3.1 12C5A60SR单片机引脚功能表

3) 12C5A60SR的晶振电路

顾名思义,晶振也就是晶体振荡器,它在单片机中充当着心脏的角色。它的主要作用就是通过晶振来产生时钟周期,时钟周期越小那么他对应的时钟频率就越大,时钟频率一大那么单片机的运行速率也就越快,简单来说,没有晶体就无法产生晶振,没有晶振就无法产生时钟频率,没有时钟频率就无法执行程序代码,无法执行程序单片机不能工作。所以通常为了保持各模块保持同步,一个系统共用一个晶振。

4) 12C5A60SR的复位电路

复位电路,简而言之就是把电路恢复到初始状态,就像计算器的清零按钮的作用一样。就目前来说,单片机复位电路主要分为微分型复位电路、积分型复位电路、比较器型复位电路和看门狗型复位电路四种。它的基本功能是:系统上电时提供复位信

号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经过一定的延时才撤销复位信号,以防电源开关或电源插头分合过程中引起的抖动而影响复位。选用的微处理器复位电路中所需要的参数振动的稳定性保证复位后持续时间大于2个机器周期。12C5A60SR单片机是整个开发板的控制中心,我们在选用电路时应该保证它的可靠性和抗干扰性。在特定的电子设备的选择,应先确定它的参数,有参数作参考会比较准确。

3.2 Keil 软件介绍

单片机开发中除必要的硬件外,同样离不开软件,Keil是众多单片机应用开发的优秀软件之一,它集编辑、编译、仿真于一体,支持汇编,PLM 语言和C语言的程序设计,界面友好,易学易用。随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil 软件是目前最流行开发MCS-51 系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil 也看得出来[9]。掌握这一软件的使用对于使用51 系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil 几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

3.3 Protel DXP软件介绍

Protel DXP 2004是澳大利亚Altium公司于2002年推出的一款电子设计自动化软件。它的主要功能包括:原理图编辑、印制电路板设计、电路仿真分析、可编程逻辑器件的设计。用户使用最多的是该款软件的原理图编辑和印制电路板设计功能。

4 软件设计

4.1 软件设计概述

针对俄罗斯方块这个游戏,程序编写方面主要是通过定义好内部数组,调用随机函数随机产生的各种方块。以及根据游戏规则和选关最终确定下降的时间并作出算法。对于编程方面首先定义一个二维数组确定整个区域,以及要了解游戏中所需要用到的一些特殊的函数,然后判断区域是否有方块,通过按键改变下落的位置、速度和方块的变化形状。每执行一步单片机对液晶刷一次屏,并为下一次显示做准备(即显示下一个下落的方块)。还要判断方块落下后,一行的空格是否全部填满或者所有方块是否全部填满空格,然后调用加法器把所得分数进行累加,把分数存入数组并用液晶进行显示。如果列有满格话游戏就game over,如果在相应时间得到一定分数自动进入下一关,不断的按照这样的方法循环扫描,进行相应的工作。由于源程序过长,所以这里除了最关键的程序外就不一一陈述了[10]。

4.2 软件设计重要细节

1)工作区域和方块定义

俄罗斯方块的工作区域可以利用数组进行存储,即uchar xdata board[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)标记底板用于判断底板状态:

void Game_tetris_Sign_board(uchar x, uchar y,uchar *p)

x,y--需标记底板的起始坐标;0--取消标记,1--标记;*p--被标记方块的数组名;

(2)方块横向或纵向最大值:

uchar Game_tetris_Count_max_value(uchar sel, uchar *p)

Sel--形参;0--x轴方向,1--y轴方向

(3)游戏界面初始化void Game_tetris_Interface_init(void)

(4)判断方块能否移动:void Game_tetris_Judge_move(void)

形参:dir--方向判断;(1-left, 2-rignt,3-down)

(5)判断能否方块旋转:void Game_tetris_Judge_spin(void) 返回值:0能,1不能

(6)方块快速下移:void Game_tetris_Cube_move_down_rapid(uchar sel)

(7)刷新显示界面:void Game_tetris_Refresh_interface(void)

(8)显示分数:void Game_tetris_Show_score(void)

(9)显示等级:void Game_tetris_Show_level(void)

(10)开启和暂停游戏:void Game_tetris_Start_suspend(void)

(11)判断游戏是否结束:uchar Game_tetris_End(void)

(12)游戏升级:void Game_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 俄罗斯方块实物图2

7 总结

经过一个多月的时间终于完成了毕业设计,在设计的过程中,出现了许多问题,但在老师和同学的帮助下顺利解决了。在本文中,详细分析了俄罗斯方块游戏的控制原理和详细的设计过程。本游戏机已经达到了掌上娱乐的基本要求,但在设计上还是有需要改善的地方,比如游戏不能进行关卡选择,游戏界面单一等等。

整个毕业设计的过程还是挺曲折的,首先在整体框架上总是把很多程序颠三倒四导致浪费了许多时间。其次在硬件电路设计中,因为对LCD液晶显示屏不熟悉所以困难重重,甚至在购买原材料时太粗心买了一块带字符库的12864显示屏,而我需要的是不带字符库的,着前前后后又花了许多时间来重新焊接和调试。还有一个老大难的问题就是源程序设计,因为汇编自己不熟悉而且又有C语言基础,所以最后还是选择了编写程序时较为复杂的C。这次设计中源程序、电路设计、电路仿真、实物制作和调试、游戏测试等这些过程真的深深让我体会到要做好一件事真的要付出很多很多。当那些一个个麻烦问题接踵而至的时候,都想过放弃,但最终还是坚持了下来,没有办法,这是毕业的最后一道坎。

虽然这次的毕业设计我自己花了很多心血,但是肯定还是有不足的地方,还很请各位老师给予指导和更正。

俄罗斯方块游戏的开发需求分析

俄罗斯方块游戏的开发 组长:XXX 组员:XXX XXX XXX XXX 05软件工程一班 一、课程设计的目的和意义 俄罗斯方块游戏是一个经典的小游戏,由于它简单有趣,因而得到了广泛的流行,男女老幼都适合。而俄罗斯方块游戏的设计工作复杂且富有挑战性,它包含的内容多,涉及的知识广泛,与图形界面联系较大,包括界面的显示与更新、数据收集等,在设计的过程中,必将运用到各方面的知识,这对于visualbasi语言设 计者而言,是个很好的锻炼机会。 二、系统功能设计 本系统主要设计以下几种功能 1、游戏难度选择功能 游戏难度选择界面设置在程序运行开始时,一共有九种难度供玩家选择,每选一级难度,都会相应地显示出代表该难度的图片。开始时不设置任何默认的难度,如果玩家不选难度直接按“Enter”进入,将会弹出提示框,提示其先选难度再 进入。 2、方块下落、变形功能 在整个俄罗斯方块游戏中,方块的设计是核心。这里设计了一个方块类:Square(),用来生成方块以及实现块的左移、右移、向下、变形、重画、同步显 示、初始化新块等。 3、自动升级功能 当分数累积到一定大小时,系统将自动为玩家提高难度。这里设置了每消除10行方块,就增加一级难度。当难度增加的时候,方块会相应地改变颜色,以作为 对玩家的提示。 4、游戏音乐功能 游戏开始音乐就自动播放,游戏暂停与结束时音乐相应消除。 5、获取帮助功能 这里设置了一个类,用来显示帮助,按F1键就能弹出窗口,显示游戏规则。

三、系统功能设计分析 俄罗斯方块游戏根据功能的不同,设置了如下12个类:Square,Command, GameArea,GameSetting,GameOver,Help,ImagePanel,JieMian,MyPanel, MyTimer,PlayMidi,WinListener,每个类的描述如下: 1、Square,方块类。这个类中定义了生成方块的方法,用二维数组int[][]pattern,存放7种方块的四种状态。在构造方法中以随机的形式生成方块,同时提供了以下几种方法:reset(),leftTurn(),leftMove(),rightMove(),fallDown(),assertValid(int t,int s,int row,int col),dispBlock(int s)。分别实现方块的重画、翻转、 左移、右移、下落、同步显示等功能。 2、Command,处理控制类。这是一个实现ActionListener接口的类,主要处理点击按钮事件。类中定义了三个int型变量:button_play,button_quit,button_pause,和一个boolean型的变量:pause_resume,并赋值。在GameArea类中通过事件响应,在按钮执行方法中调用其值,使用switch语句,根据不同按钮不同的值, 来响应不同的事件。 3、GameArea,游戏界面类。GameArea继承了JFrame,是俄罗斯方块的主要游 戏界面。这个类定义了GameSetting类的gameScr对象和ImagePanel类的imagepanel对象作为游戏区域面板和控制区域面板。在游戏区域,主要是根据相应格子的设置标志来显示相应的图形图片,这样就实现了俄罗斯方块的实时显 示。 4、GameSetting,游戏画布类。这个类生成的对象将作为游戏界面的方块下落区域,画布的设置为15行10列,当中的方格边长为30,类中还定义了一个二维数组int[][]scrArr作为屏幕数组,表示每一个方格。游戏区域中每一个方格是否存在游戏方块是由该方格的值来决定的,如果该方格的值为1,则表示该方格中存在游戏方块;如果该方格中的值为0,则表示该方格中不存在游戏方块,因此二维数组用于记录游戏区域中每个小方格的值。此外,类中还定义了画方块的方法,根据不同的难度画出不同颜色的方块。单击Play按钮时,系统调用initScr()方法,初始化屏幕,将屏幕数组清零。当满足满行删除的条件时,系统调用deleteFullLine()方法,进行删行加分,而且每删除十行,难度自动增加一级,方块颜色改变,并在难度显示框中相应显示。 5、GameOver,游戏结束弹出提示框类。当游戏结束时,系统弹出提示,包括玩 家分数以及询问玩家要继续游戏还是退出。 6、Help,帮助类。在游戏界面,按F1键,弹出提示窗口,获取帮助。 7、ImagePanel,背景图片类。这个类继承了JPanel类,用来作为游戏界面中控 制区域的容器,并添加图片。 8、JieMian,主界面类。这个类继承了JPanel类,作为游戏的第一个界面,也是难度选择界面。定义了9个单选按钮,当玩家未选任何难度就按Enter时,系统会弹出一个提示框,提示玩家先选难度再进入。 9、MyPanel,重写MyPanel类,使Panel的四周留空间。

俄罗斯方块软件需求规格说明书

软件需求规格说明书 1306401-35 王正 一、引言 1.1编写目的 通过本游戏的设计,综合自己在校期间所学的理论知识,设计开发俄罗斯广场游戏,使自己熟应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,进一步巩固和加强自身对编程语言知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。 1.2项目背景 游戏是人们活动中一项非常重要的内容,有人认为如果哪一天人类对所有的游戏都失去兴趣,恐怕世界的末日就要到了。电脑对游戏的贡献有目共睹,现在摸索电脑的人很少没玩过电脑游戏的,喜欢游戏的人也很少不玩电脑的。 俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。随着计算机的发展而发展,俄罗斯方块不断推陈出新,深爱广大玩家喜爱。这个游戏有的简单,有的复杂,但其根本原理是一样的都是对运动的方块进行组合,

来训练玩家的反应能力。因此开发此游戏软件可满足人们的一些娱乐的需求。 此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。 此次需要开发一项软件,在通过认真的考虑之后,决定做一个“俄罗斯方块”,对于我个人来说,这是一个相当具有挑战性的任务,也是一次不错的锻炼机会。 1.3定义 (1)游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。 (2)游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。 (3)级别设置:玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏的速度越快,难度越大。 1.4参考资料 [1]朱福喜著,JAVA程序设计技巧与开发实例[M] 北京:人民邮电出版社,2004.2 [2] 张海藩软件工程(第五版) 北京:清华大学出版社,2008

俄罗斯方块游戏

俄罗斯方块游戏设计规格说明 Ver:1.0

目录 1 引言 (3) 1.1 目标 (3) 1.2 文档范围 (3) 1.3 术语和缩略语 (3) 1.4 参考资料 (3) 2 系统设计 (4) 2.1 逻辑流程视图 (4) 2.1.1 功能模块流程图 (5) 2.1.2 核心模块代码流程图 (5) 3 质量及其他方面 (6) 3.1 可维护性 (6) 3.2 安全性 (6) 3.3 可扩展/灵活性 (6) 3.4 稳定性/可靠性 (6) 3.5 可用性/用户体验 (6) 4 附录 (6) 4.1 附件 (6) 4.2 修过记录 (7)

1引言 1.1目标 通过编写俄罗斯方块游戏学习使用SDL图形库,从而掌握图片的显示方法,声音的播放方法,使用vs应用第三方产品的方法以及软件设计的方法和算法设计的方法。另外,程序的编写也能够进一步熟悉C语言编程方法,有利于提高编程兴趣并获取成就感,为后续课程的开展打下更好的基础。 1.2文档范围 项目目的,设计说明、使用说明。 1.3术语和缩略语 SDL:是Simple DirectMedia Layer缩写,SDL是一个自由的跨平台的多媒体开发包,适用于游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其他应用软件。 1.4参考资料 a)SDL官方文档 b)https://www.360docs.net/doc/a11505971.html,/space.php?uid=7773715&do=blog&cuid=429545 c)https://www.360docs.net/doc/a11505971.html,/SDL_tutorials/index.php

2系统设计2.1逻辑流程视图

C语言俄罗斯方块游戏源代码

/*学无止境*/ #include #include #include #define ESC 27 #define UP 328 #define DOWN 336 #define LEFT 331 #define RIGHT 333 #define BLANK 32 #define BOTTOM 2 #define CANNOT 1 #define CAN 0 #define MAX 30 #define F1 315 #define ADD 43 #define EQUAL 61 #define DEC 45 #define SOUNDs 115 #define SOUNDS 83 #define PAUSEP 80 #define PAUSEp 112

void Init(); void Down(); void GoOn(); void ksdown(); void Display(int color); void Give(); int Touch(int x,int y,int dx,int dy); int GeyKey(); void Select(); void DetectFill(); void GetScores(); void Fail(); void Help(); void Quit(); void DrawBox(int x,int y,int Color); void OutTextXY(int x,int y,char *String); void DispScore(int x,int y,char Ch); void DrawNext(int Color); int Heng=12,Shu=20; /*横竖*/ int Position[MAX][MAX]; int middle[MAX][MAX]; int ActH,ActS;

俄罗斯方块游戏设计

俄罗斯方块游戏设计 俄罗斯方块游戏设计 JAVA语言 Eclipse平台开发 以下为开发过程需要使用的packages及其中classes and methods JAVA语言和C语言、C++语言很接近,它是一种面向对象、独立于开发平台的高级编程语言。它独特的语法规则和类库是组成JAVA技术的两个重要部分。 假期总结: 坦白讲,这个暑假我没花多少时间在学习计算机编程技术上面。在刚放暑假的时候,我去图书馆借了七八本编程书,有Visual C++、C#、以及JAVA方面的书,信誓旦旦这个暑假要好好研究技术。然而,执行力是我很缺乏的一个缺陷吧。在家贪图一时之爽,基本上没去翻书学习,久而久之,就越害怕打开书本。后期提前回学校,学了一点点JAVA。回想整个大一,包括这个暑假,我很羞愧。自己在过去的一年里浪费了太多的时间,对成绩抱着一种比较无所谓的心态,对于学习也是,可想而知,与别人的差距也就越来越大,这也是我现在不愿意看到的。在往后的日子,我不敢保证自己能如何刻苦勤奋地学习,但是,至少我会尽力做到问心无愧,我会清楚自己要什么,并且行动起来。 一、Package cn.itcast.tetris.controller 控制器 控制Ground, Snake, Food 负责游戏的逻辑 处理按键事件

一、Package cn.itcast.tetris.entities

1、Class Ground: public class Ground extends https://www.360docs.net/doc/a11505971.html,ng.Object 可以叫做地形, 或地面 维护障碍物的信息 可以使用提供的 addObstacle(int, int) 和addStubbornObstacle(int ,int) 方法添加障碍物。 可以通过setObstacleColor(), setStubbornObstacleColor() 或setGriddingColor()方法更改障碍物或网格的颜色 通过setDrawGridding() 方法设置是否画空白(网格) 用 setColorfulSupport() 方法设置是否支持彩色显示 覆盖 drawObstacle(Graphics, int, int, int, int) 方法可以改变障碍物的显示方式

俄罗斯方块游戏

课程设计说明书 课程名称:高级语言程序设计 设计题目:俄罗斯方块游戏 院部:计算机科学与信息工程学院 学生姓名: 学号: 专业班级:物联网工程 指导教师: 2015年6月 课程设计任务书

目录 一前言 (4) 二需求分析 (4) 三概要设计 (5) 四详细设计 (7) 五改进或增加功能模块说明 (8) 六程序测试 (8) 七课程设计总结 (11) 八致谢 (11) 九参考文献 (12) 十源程序 (12)

俄罗斯方块游戏 一前言 C++程序设计牵涉到面向对象程序设计的理论、C++语言的语法以及算法等3个方面的内容,其中每一方面都包含十分丰富的内容,都可以分别单独成论。显然在一个程序中深入、详细地介绍以上3个方面的知识是不可能的,必须把它们有机地结合起来,综合应用。不同的书对此采取不同的写法,侧重点有所不同,各有道理,也各有优缺点,适合于不同的读者。需要在教学实践中检验,取长补短,不断完善。 作者认为:要进行C++程序设计当然需要了解面向对象程序设计的有关概念,但是本课程毕竟不是一门面向对象程序设计的理论课程,在本书中不是抽象地介绍面向对象程序设计的理论,而是在介绍C++语言的特点和应用过程中自然地引出面向对象程序设计的有关概念,通过C++的编程过程理解面向对象程序设计方法。在介绍程序设计过程中,介绍有关的算法,引导读者思考怎样构造一个算法。编写程序的过程就是设计算法的过程。 要用C++编程序,最基本的要求是正确掌握和运用C++。由于C++语法复杂,内容又多,如果对它缺乏系统的了解,将难以真正应用,编出来的程序将会错误百出,编译出错,事倍功半。本书的做法是全面而系统地介绍C++的主要特点和功能,引导读者由简而繁地学会编写C++程序。有了C++编程的初步基础后,再进一步提高,掌握更多更深入的算法。这样的方法可能符合大多数学习者的情况,降低了学习难度。 程序设计是一门实践性很强的课程,只靠听课和看书是学不好的。衡量学习好坏的标准不是“懂不懂”,而是“会不会干”。因此必须强调多编程,多上机实践。考虑到不同学校、不同专业、不同读者对学习C++有不同的要求。 二需求分析 1 要求 (1)用C语言实现程序设计;

基于Java语言的俄罗斯方块游戏课程设计

基于Java语言的 俄罗斯方块游戏课程设计 学院:X 专业:X 班级:X 姓名:X 学号:X 指导老师:X

摘要 第一章引言 1.1 设计的课题背景 1.2 研究课题的任务,目的和意义 1.2.1 课题的任务 1.2.2 课题的目的 1.2.3 课题的意义 1.3 系统的主要功能和特色 1.3.1 系统的主要功能 1.3.2 系统的特色 第二章系统需求分析 2.1 本课题研究现状分析 2.2 要解决的问题及解决方法 2.3 系统设计的主要内容、目标 2.3.1 系统设计的主要内容 2.3.2 设计的目标 2.4 使用的关键技术 第三章系统的详细设计 3.1 系统的总体系结构 3.2 系统各模块的界面设计及实现 3.2.1 主窗体程序模块设计与实现 3.2.2 方块变换模块设计与实现 3.2.3 满行消除并计分模块设计与实现第四章系统的安装与测试 4.1 系统的安装 4.1.1 系统的运行环境 4.1.2 系统的安装 4.2 系统的测试 结束语

参考文献 附录:有关程序代码

摘要: 在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一。俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。为此,我设计了一款简单的俄罗斯方块JAVA 游戏程序,以便更好的满足广大电脑工作者闲暇之余的消遣,并且也让我学到编程技术。 关键字:俄罗斯方块游戏、Java语言、编程

俄罗斯方块游戏设计报告

C语言课程设计 报告 设计题目:俄罗斯方块游戏设计 院系: 班级: 学号: 姓名: 指导教师: 设计地点: 开课时间:

学生姓名成绩 评语: 指导教师(签名) 年月日

目录 1.设计目的和任务....................................................................................................................................... - 1 - 1.1目的: .............................................................................................................................................. - 1 - 1.2任务: .............................................................................................................................................. - 1 - 2.开发环境.................................................................................................................................................... - 1 - 2.1硬件环境:.................................................................................................................................... - 1 - 2.2软件环境:.................................................................................................................................... - 1 - 3.设计题目...................................................................................................................................................... - 2 - 3.1题目名称:.................................................................................................................................... - 2 - 3.2题目详细描述: ........................................................................................................................... - 2 - 3.3功能要求: ............................................................................................................................................ - 2 - 4.相关技术以及知识点.......................................................................................................................... - 3 - 4.1编写BLOCK类:............................................................................................................................... - 3 - 4.2 PATHGRADIENTBRUSH 类: ........................................................................................................ - 3 - 4.3 RANDOM类:.................................................................................................................................. - 3 - 4.4 GDI图形处理: ........................................................................................................................... - 3 - 5. 设计与实现 .............................................................................................................................................. - 4 - 5.1 设计流程图................................................................................................................................... - 4 - 5.2 游戏主体界面 .............................................................................................................................. - 4 - 5.3 游戏图形界面 ............................................................................................................................ - 11 - 5.4 图形的移动与消行 ................................................................................................................... - 13 - 5.5 得分的实现................................................................................................................................. - 15 -6.总结 ........................................................................................................................................................ - 16 -7.参考资料................................................................................................................................................ - 16 -

俄罗斯方块C语言代码

【转载】88行代码实现俄罗斯方块游戏(含讲解) 来源:https://www.360docs.net/doc/a11505971.html,/p/8 在正式阅读本文之前,请你记得你应该用娱乐的心态来看, 本代码所使用到的技巧,在工作了的人眼里会觉得很纠结,很蛋疼,很不可理喻,很丑, 注意,是你蛋疼,不关我的事 通常,写一个俄罗斯方块,往往动不动就几百行,甚至上千行,而这里只有88行 正所谓头脑风暴,打破常规。这里将使用很多不平常的手段来减少代码 以下是Win-TC可以成功编译并执行的代码(代码保证单行长度不超过80字符,如果你是Win7系统,那请看后文): 程序代码: #include"graphics.h" #include #include int gcW = 20, gcColor[] = {DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA,MAGENTA, YELLOW}; struct tetris { int _pool[16][32], (*pool)[32], tmap[8][4][16]; int x, y, s, st, t; }gt; void trsInit() { int sp[8][4] = {{15,4369},{23,785,116,547},{71,275,113,802}, {39,305,114,562},{54,561},{99,306},{51,51},{-1}}; int *p, i, j, b; for (p = sp[0]; *p >= 0; ++p) if ( *p == 0 ) *p = p[-2]; gt.pool = >._pool[4]; for (j = 0; j < 7; ++j) for (i = 0; i < 4; ++i) for (b = 0; b < 16; ++b) gt.tmap[j+1][i][b] = (sp[j][i] & 1) * (j + 1), sp[j][i] >>= 1; memset(gt._pool, -1, sizeof(gt._pool));

俄罗斯方块说明

俄罗斯方块单人版

1、需求分析 俄罗斯方块,或称积木游戏,它是利用一些形状各异却又是用正方形组成的方块,经过不同位置不同角度的变化之后,堆积在一起的一种智力游戏。 2、概要设计 而从编程的角度讲,只需要提供各种方块的图形,提供几个键盘操作键以供方块的形状和位置的变化,提供几个功能函数以供游戏的正常进行。 各种方块图形:利用数组定形,然后利用随机函数随机地不按顺序地按游戏的需要而出现。 功能函数将在变量函数里面介绍。

3、详细设计 添加位图: 封面:IDB_BITMAP1 背景:IDB_BITMAP2 方块:IDB_BITMAP4 添加菜单: 开始:ID_MENU_START 接着就是定义变量了,但是,由于这个游戏要添加的变量和函数太多了,要建一个新类。 是否应该先添加应该类呢?最好是这样。因为新类将会涉及到变量。 添加普通类Crussia,见下图。 图4-1-1 添加变量函数: 由于两个类一共有很多变量函数,列举如下:

View.h : Public: //俄罗斯类 CRussia russia; //开始标志 bool start; //封面 CBitmap fenmian; //暂停 BOOL m_bPause; //开始菜单 afx_msg void OnMenuStart(); //计时器 afx_msg void OnTimer(UINT nIDEvent); //键盘操作 afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); // Russia.h: Public: //游戏数组 int Russia[100][100]; // 当前图形 int Now[4][4]; //上一图形 int Will[4][4]; //变换后的图形 int After[4][4]; //当前图形的左上角位置 CPoint NowPosition; //当前可能出现的图形形状数, int Count; //游戏结束 bool end; //级别 int m_Level; //速度

俄罗斯方块完整源代码

//不多说,直接可以拷贝下面的东西,就可以运行。 package day04; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.applet.*; import https://www.360docs.net/doc/a11505971.html,ng.String.*; import https://www.360docs.net/doc/a11505971.html,ng.*; import java.io.*; public class ERSBlock extends JPanel implements ActionListener,KeyListener//应该是继承JPanel { static Button but[] = new Button[6]; static Button noStop = new Button("取消暂停"); static Label scoreLab = new Label("分数:"); static Label infoLab = new Label("提示:"); static Label speedLab = new Label("级数:"); static Label scoreTex = new Label("0"); static Label infoTex = new Label(" "); static Label speedTex = new Label("1");

static JFrame jf = new JFrame(); static MyTimer timer; static ImageIcon icon=new ImageIcon("resource/Block.jpg"); static JMenuBar mb = new JMenuBar(); static JMenu menu0 = new JMenu("游戏 "); static JMenu menu1 = new JMenu("帮助 "); static JMenuItem mi0 = new JMenuItem("新游戏"); static JMenuItem mi1 = new JMenuItem("退出"); static JMenuItem mi1_0 = new JMenuItem("关于"); static JDialog dlg_1; static JTextArea dlg_1_text = new JTextArea(); static int startSign= 0;//游戏开始标志 0 未开始 1 开始 2 暂停 static String butLab[] = {"开始游戏","重新开始","降低级数","提高级数","游戏暂停","退出游戏"}; static int game_body[][] = new int[19][10]; static int game_sign_x[] = new int[4];//用于记录4个方格的水平位置 static int game_sign_y[] = new int[4];//用于记录4个方格的垂直位置

俄罗斯方块

俄罗斯方块

俄罗斯方块小游戏姓名:罗君 学号:102054221 指导老师:孔老师 日期:2011/12/22

1设计描述 这个程序是由MFC所做的小游戏:俄罗斯方块,俄罗斯方块也就是人们广泛称为积木的游戏,它是利用一些形状各异小方块却是用正方形组成的方块,当然在我所做的这个程序里,我用了有着7种不同的方块。,经过不同位置不同角度的变化之后,堆积在一起的一种智力游戏。而当同一行被小方格填满时,那一行也就跟着消失,此时玩家就可以得到一分,这里所设置的分值为,没消去一行,便可以得到一分,而主界面的背景被设为了12行及18列,当所堆积的小方块的垂直高度等于界面背景的高度时,这时就会在视图类中弹出一个消息对话框“游戏已经结束”。这里所要实现的就是这样一个小游戏,不过出于达到为了更加使游戏玩家得到娱乐的放松,我已经为此游戏添加了动听的游戏的背景音乐。还有就是当程序运行时,首先出现在客户区的是一幅封面位图,当游戏玩家点击文件菜单中的开始子菜单时,游戏正式进入游戏界面。 而从我们编程的角度讲,我们只需要提供各种方块的图形,提供几个键盘操作键以供方块的形状和位置的变化,提供几个功能函数以供游戏的正常进行。各种方块图形:利用数组定形,然后利用随机函数随机地不按顺序地按游戏的需要而出现。键盘操作键:就是四个方向键。其中左、右、下三个键意思一样,上键的功能不是使方块向上,而是使方块的下落角度改变。 2设计分析 2.1由于所选封面的位图的大小的限制,贴的客户区的位图不能完全覆盖整个客户区,考虑到游戏运行的效果,所以必须对运行后客户区大小重新作出界定,处于这种原因,所以应该在CMainFrame类中的PreCreateWindow (CREATESTRUCT& cs)函数中添加代码:cs.cx=500,cs.cy=590;再者就是一个有戏必须有开始,暂停和结束的按钮,为了实现这一功能,我做了如下程序,将菜单栏中的文件菜单项下的子菜单项都删除,重新为该菜单项添加3个子菜单项,分别为开始(IDC_MENU_START),暂停(IDC_MENU_PAUSE),退出(IDC_MENU_EXIT).并分别给这三个菜单项添加Command命令响应,并让CView类接收此命令响应消息。 2.2 资源编辑 添加位图: 封面:IDB_BITMAP1

C语言俄罗斯方块游戏源代码

/*学无止境*/ #include <> #include <> #include <> #define ESC 27 #define UP 328 #define DOWN 336 #define LEFT 331 #define RIGHT 333 #define BLANK 32 #define BOTTOM 2 #define CANNOT 1 #define CAN 0 #define MAX 30 #define F1 315 #define ADD 43 #define EQUAL 61 #define DEC 45 #define SOUNDs 115 #define SOUNDS 83 #define PAUSEP 80 #define PAUSEp 112

void Init(); void Down(); void GoOn(); void ksdown(); void Display(int color); void Give(); int Touch(int x,int y,int dx,int dy); int GeyKey(); void Select(); void DetectFill(); void GetScores(); void Fail(); void Help(); void Quit(); void DrawBox(int x,int y,int Color); void OutTextXY(int x,int y,char *String); void DispScore(int x,int y,char Ch); void DrawNext(int Color); int Heng=12,Shu=20; /*横竖*/ int Position[MAX][MAX]; int middle[MAX][MAX]; int ActH,ActS;

Python 俄罗斯方块游戏

【Python】用Python实现一个俄罗斯方块游戏 俄罗斯方块游戏,使用Python实现,总共有350+行代码,实现了俄罗斯方块游戏的基本功能,同时会记录所花费时间,消去的总行数,所得的总分,还包括一个排行榜,可以查看最高记录。 排行榜中包含一系列的统计功能,如单位时间消去的行数,单位时间得分等。 附源码: from Tkinter import* from tkMessageBox import* import random import time #俄罗斯方块界面的高度 HEIGHT=18 #俄罗斯方块界面的宽度 WIDTH=10 ACTIVE=1 PASSIVE=0 TRUE=1 FALSE=0 root=Tk();root.title('Russia') class App(Frame): def__init__(self,master): Frame.__init__(self) master.bind('',self.Up) master.bind('',self.Left) master.bind('',self.Right) master.bind('',self.Down) #master.bind('',self.Space) master.bind('',self.Space) master.bind('',self.Play) master.bind('',self.Pause) self.backg="#%02x%02x%02x"%(120,150,30) self.frontg="#%02x%02x%02x"%(40,120,150) self.nextg="#%02x%02x%02x"%(150,100,100) self.flashg="#%02x%02x%02x"%(210,130,100) self.LineDisplay=Label(master,text='Lines:',bg='black',fg='red') self.Line=Label(master,text='0',bg='black',fg='red') self.ScoreDisplay=Label(master,text='Score:',bg='black',fg='red') self.Score=Label(master,text='0',bg='black',fg='red') #Display time self.SpendTimeDisplay=Label(master,text='Time:',bg='black',fg='red') self.SpendTime=Label(master,text='0.0',bg='black',fg='red') self.LineDisplay.grid(row=HEIGHT-2,column=WIDTH,columnspan=2)

用matlab编写的俄罗斯方块小游戏

用matlab编写的俄罗斯方块小游戏 ?function RussiaBlock( varargin ) if nargin == 0 OldHandle = findobj( 'Type', 'figure', 'Tag', 'RussiaBlock' ) ; if ishandle( OldHandle ) delete( OldHandle ) ; end FigureHandle = figure( 'Name', '俄罗斯方块MATLAB版', 'Tag', 'RussiaBlock', 'NumberTitle', 'off',... 'Menubar', 'none', 'DoubleBuffer', 'on', 'Resize', 'off', 'visible', 'on',... 'KeyPressFcn', 'RussiaBlock( ''KeyPress_Callback'', gcbo )',... 'HelpFcn', 'helpdlg(''帮不了你- -!'',''不好意思'')',... 'CloseRequestFcn', 'RussiaBlock( ''CloseFigure_Callback'', gcbo )' ) ; generate_FigureContent( FigureHandle ) ; init_FigureContent( FigureHandle ) ; set( FigureHandle, 'Visible', 'on' ) ; elseif ischar( varargin{1} ) feval( varargin{:} ) ; end % ------------------------------------------------------------------------- function generate_FigureContent( FigureHandle ) TabSpace = 30 ; BlockWidth = 20 ; BlockHeight = 20 ; FigureWidth = BlockWidth * (12 + 1) + TabSpace * 7; FigureHeight = 500 ; set( FigureHandle, 'Position', [0 0 FigureWidth FigureHeight] ) ; movegui( FigureHandle, 'center' ) ; % 创建菜单 BeginMenu = uimenu( FigureHandle, 'Label', '开始' ) ; StartMenu = uimenu( BeginMenu, 'Label', '开始新游戏', 'Accelerator', 'N',...

相关文档
最新文档