java俄罗斯方块毕业设计说明书

java俄罗斯方块毕业设计说明书
java俄罗斯方块毕业设计说明书

目录

1 引言 (1)

1.1 问题的提出与研究意义 (1)

1.2 手机游戏的国内外现状 (1)

2 游戏的开发环境和相关技术 (3)

2.1 关于Eclipse及Eclipseme (3)

2.2 关于Wirless Tool Kit (3)

2.3 Java语言的特点 (3)

2.4 Java ME语言 (4)

2.4.1 什么是Java ME (4)

2.4.2 Java ME的特点 (5)

2.4.3 Java ME的分类及组成 (5)

3 系统分析 (8)

3.1 目标任务 (8)

3.2 本程序中要解决的有关技术问题 (8)

3.3 MIDP应用程序 (9)

3.4 Canvas类 (10)

3.5 Graphics类 (10)

3.6 各功能模块的作用 (10)

3.6.1 游戏流程控制模块 (10)

3.6.2 游戏场景绘制模块 (10)

3.6.3 游戏对象 (10)

3.6.4 游戏场景状态 (10)

4 系统设计 (11)

4.1 系统主要模块流程图............................. 错误!未定义书签。

4.1.1游戏模块流程图 (11)

4.1.2得分记录模块流程图 (11)

4.2 游戏运行效果图 (12)

5 游戏具体实现 (13)

5.1 游戏入口类实现 (13)

5.2 游戏主控和背景类实现 (14)

5.3 游戏的方块类实现............................... 错误!未定义书签。

5.4 方块工厂类的实现............................... 错误!未定义书签。

6 游戏测试 (21)

6.1软件测试的意义 (21)

6.2软件测试的重要性 (21)

6.3软件测试的范围 (22)

6.4软件测试的方法 (22)

6.5软件测试的目的和原则 (22)

6.6俄罗斯方块游戏的测试 (23)

结束语 (25)

参考文献 (27)

致谢 (28)

1 引言

1.1 问题的提出与研究意义

Java ME是基于Java技术的,Java ME扩展及深化了Java语言的优势和劣势,Java语言的跨平台优势,以及Java的运行速度劣势,毫无疑问在手机上体现的淋漓尽致。由于手机不同于PC机,所以如果用C开发的程序,要想移植,跨平台是不容易的,尤其在操作系统众多的嵌入式领域。但是很幸运,Java给了我们一个跨平台的机会,利用Java,我们可以很好的实现跨平台,可以方便简洁地把一个游戏从一个手机移植到另一个游戏,避免重复的编码[1]。对于手机游戏的跨平台性,也并不是想象中的那么乐观,现在越来越多的手机厂商针对自己的机型制定了一套开发包,这也给移植带来了一些问题。

在速度方面,手机又把Java语言的劣势暴露无疑,在启动Java语言开发的程序时间明显要慢,这主要是因为Java对于手机的低配置确实是一个负荷。但是我们也看到了SUN公司的努力,Java语言的架构师们正在试图改变Java语言的僵局,而且我们也看到了效果,在新推出的JDK中,我们发现,它的运行速度已经有所改进了。同时,随着手机处理速度和内存速度的提高,我们有足够的理由相信,速度将不再是Java ME在手机游戏运用上的瓶颈。

由于手机是一种嵌入式产品,所以图形化设计可能比较凌乱,而且各个手机游戏的屏幕大小又不一样,而且,游戏对于图形界面是相当苛刻的,一个良好的图形界面往往是一个好的游戏的评定标准之一。所以,这确实给手机游戏的开发带来了不少的工作量。因此,我们希望通过该课题的研究,能够改进手机游戏的界面设计。同时,我们也希望对手机游戏的联网作一些研究,因为未来社会是一个互联网的时代,我有足够的理由相信,手机游戏也不例外[2]。

1.2 手机游戏的国内外现状

游戏作为日常休闲的娱乐活动,历经了电视游戏、电脑单机游戏、电脑网络游戏这几个阶段。现在,游戏作为一个产业,可以看出游戏市场有着非常庞大的需求。而手机游戏的出现,也给游戏市场带来了新的活力,由于娱乐时不受时间和地点的限制,手机游戏在中国的火爆的时刻已经来临。

从全球范围来讲,游戏已经走上了高科技的数字路线,电子游戏产品已经深入普通大众,而在这庞大的游戏市场中,手机游戏将凭借着其硬件基础“手机”可移动,

方便携带的特性,在与传统电脑游戏与电视游戏竞争中占有一席之地,而在与掌机游戏的竞争中,其又具有可通信,应用范围广的优势又显现了出来。因此随着手机产品的不断更新,以及技术的不断发展,手机游戏的市场将更为光明。

中国手机游戏市场在未来几年内在市场收入上有大幅提高,考虑到国内手机互联网环境的影响,预计到2008年时,Java ME与BREW游戏将成为手机游戏市场中收入最多的一个模块,现在收入最多的是手机单机游戏,以及日益火爆的手机网络游戏[3]。

知识库已被广泛应用于金融系统,大型企业系统等领域,而游戏知识库目前正处于发展初期。利用游戏知识库,我们可以很好的实现对游戏规则的处理。一旦开发出一款游戏,对于开发其他同类游戏,我们只需对游戏规则作一些变换就可以完成对整个游戏的开发。利用游戏知识库,我们可以快速地开发多款游戏,大大地缩短了游戏开发周期,游戏知识库的应用在将来很有前景[4]。

在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。但是传统手机存在以下弊端:

(1)传统手机出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部手机。

(2)传统手机访问互联网是通过WAP(Wireless Application Protocal),所有网络资源必须接通网络才能在线访问,非常耗时、费用亦很高。而Java技术在无线应用方面的优势非常明显,一方面应用程序可按需下载,而不是购买由硬件商提供的套件,可升级空间大;另一方面Java技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面(GUI)

2 游戏的开发环境和相关技术

2.1 关于Eclipse及Eclipseme

Eclipse是一个开发源代码的、基于Java的可扩展开发平台。Eclipse相关的许可证是大多数基于Common Public License (CPL),CPL是一个为Open Source Initiative (OSI)所认可的许可证。由于Eclipse Foundation的建立,Eclipse

的许可证将逐渐趋向于使用Eclipse Public License (EPL),EPL是一个与CPL相类似的许可证,正在进行OSI的认证工作。作为当今最流行的Java开发IDE之一,Java社群使用Eclipse以及基于Eclipse技术而来的IBM Websphere的开发者已经超过了半数。

Eclipse本身只是一个框架和一组响应的服务,并不能够开发什么程序。在Ec lipse中几乎每样东西都是插件,实际上正是运行在eclipse平台上的种种插件提供我们开发程序的各种功能。同时各个领域的开发人员通过开发插件,可以构建与Eclipse环境无缝集成的工具。eclipse的发行版本都已经带有最基本的插件,方便了开发人员。因此,除了搭建移动开发环境之外,也可以下载Jsp插件、Tomca t插件、Jboss插件来进行整合,以用于JSP、Java EE的开发。

EclipseME作为Eclipse一个插件,致力于帮助开发者开发Java ME应用程序。EclipseME并不为开发者提供无线设备模拟器,而将各手机厂商的实用模拟器紧密连接到Eclipse开发环境中,为开发者提供一种无缝统一的集成开发环境[5]。

2.2 关于Wirless Tool Kit

WTK(Wireless Tool Kit)是Sun公司针对Java ME推出的用于手机和Palm等移动设备的开发包,是除手机厂商的专用开发包外唯一的手机模拟器开发包。它通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一定的不兼容性。虽然它没有强大的功能和完善的调试手段,但它提供运行模拟器的最基本组件,是其他IDE需集成采用的必备元素[6]。

2.3 Java语言的特点

(1)平台无关性

Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。Java 的数据类型与机器无关。

(2)安全性

Java的编程类似C++,但舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。

(3)面向对象

Java吸收了C++面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。

(4)分布式

Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。

(5)健壮性

Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。Java取消了C语言的结构、指针、#define语句、多重继承、goto 语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间[7]。

2.4 Java ME语言

2.4.1 什么是Java ME

Java ME是SUN公司针对嵌入式、消费类电子产品推出的开发平台,与Java S E和Java EE共同组成Java技术的三个重要的分支。Java ME实际上是一系列规范的集合,由JCP组织制定相关的Java Specification Request(JSR)并发布,各个厂商会按照规范在自己的产品上进行实现,但是必须要通过TCK测试,这样确保兼容性。比如MIDP2.0规范就是在JSR118中制定的。我们在开发中用到了很多例如CLDC(Connected Limited Devices Configuration)和MIDP(Mobile Inform ation Devices Profile)等内容。这些就是在相关规范中制定的。Java ME 使用配置和简表定制 Java 运行时环境 (JRE)。作为一个完整的 JRE,Java ME 由配置和简表组成,配置决定了使用的 JVM,而简表通过添加特定于域的类来定义应用程序。配置将基本运行时环境定义为一组核心类和一个运行在特定类型设备上的特定 JVM。简表定义应用程序;特别地,它向 Java ME 配置中添加特定于域的类,定义设备的某种功能起很大作用。

2.4.2 Java ME的特点

(1) Java ME遵循为大多数手持设备生产商所支持的工业标准,如今大多数的移动电话都支持Java开发。

(2) Java ME是一个自由的和开放的平台。这使得开发人员投资很少,但却提供给他们必需的灵活性以及大量的支持。

(3) 它的高度可移植的特性("书写一次到处运行")保证一部为一个品牌/类型的手持设备开发的游戏应用程序,将可以工作在其它类型的支持Java的手持设备品牌/类型上。

(4) 它特别为小型设备进行了优化,是轻量级的,高度安全的,因为在其上开发的应用程序不能存取或者影响运行在该手持设备上的其它应用程序。

Java ME包含移动信息设备轮廓(MIDP)API,它的设计是为专门开发包括手机在内的移动设备应用程序。而且,最新的MIDP 2.0版自己提供了一套完整的API以用于游戏开发,这使得游戏开发更为简单和快捷[8]。

2.4.3 Java ME的分类及组成

Java ME把设备分为两类,一种是联接设备(connected device),一种是有限联接设备(Connected, Limited Device)。前一种对应于那些有电源的,电力充裕,较大的设备。例如:电视机,冰箱等,后一种对应于主要使用电池,小型的设备,例如:手机,pda等。

SUN把Java ME分为两个部分:configuration 和 profile。

configuration包括虚拟机(virtual machine),核心的类库与API。configuration 层定义一个Java虚拟机的特性与Java类库的最小子集。也就是说,configuration 层提供了开发人员一个最基础,最核心的Java平台。就像前文提到的,Java ME把设备分为两类,一种是联接设备(connected device),一种是有限联接设备(Connected, Limited Device)。对应这两种设备就有了两种Java ME configuration。分别为CDC(Connected Device Con-figuration )和

CLDC(Connected, Limited Device Configuration)。这里请注意,CDC使用经典的Java VM,而CLDC使用的是KVM(The K Virtual Machine) [9]。注:KVM是sun为使用16/32位RISC/CISC微处理器或控制器,并其可用内存为160kb~512kb 的的设备而开发的。

Profile层也包含一组API,主要针对于特定的某一族系的设备而定义。profile 层在特定的configuration层上实现,程序员则负责在特定的profile上编写应用程序。对于手机,PDA等Connected, Limited Device,它们的profile层称为

MIDP(Mobile Info rmation Device Profile),于是MIDP与CLDC合在一起就构成了一个完整的Java ME架构。

Java ME平台被认为是最杰出的手机游戏平台,它为开发者、设备制造商、网络通信公司和消费者广泛接受。它有一些非常重要的特征对所有组织都有益Java ME 使用配置和简表定制 Java 运行时环境 (JRE)。作为一个完整的 JRE,Java ME 由配置和简表组成,配置决定了使用的 JVM,而简表通过添加特定于域的类来定义应用程序。

配置将基本运行时环境定义为一组核心类和一个运行在特定类型设备上的特

定 JVM。简表定义应用程序,特别地,它向 Java ME 配置中添加特定于域的类,定义设备的某种作用。虽然 Java SE 虚拟机通常被称为一种JVM,但是 Java ME 虚拟机、KVM 和 CVM 都是 JVM 的子集。KVM 和 CVM 均可被看作是一种 Java 虚拟机 -- 它们是Java SE JVM 的压缩版,并特定于Java ME。

移动通信的时代即将来临,通信相关待业变得前景可期,而除了移动通信的主要通信工具—手机,其功能越来越强大之外,有更多的厂商相继投入移动通信设备的生产与开发,其平台和操作系统的复杂度比目前混乱的PDA有过之而不及,除了Symbian 针对手机推出操作系统 Symbian OS(过去称作EPOC)操作系统之外,微软也针对手机推出操作系统 Smartphone 2002 (Stinger),但是日前市面上的手机仍以使用厂商自行开发的操作系统者居多[10]。

平台的复杂纷乱对一般用户当然没什么影响,但是对于程序开发人员来说,这么多不同的程序发展平台,光看完头就昏了。如果每个平台都有自己的程序写法以及程序库,那么光是看上面这些平台至少就要学习五种以上程序的写法。当然,只专精一种平台当然是很好的事情。可是程序员不禁要说:“如果我们写出来的软件可以在不经过修改源代码的情况下就能够在这些平台上执行,那不是更完美吗?“对程序开发人员来说,这样的投资报酬率当然是最大的。要在那么多平台上开发程序,对程序员来说的确是很大的挑战,如果要把所有的时间和精力放在软件的可用性上,那么相对而言很多时候我们根本没有那么多时间撰写各种平台的程序。要

解决这个问题,一般来说程序员会选用一个可以跨平台的Framework来达成至少source code level的跨平台。利用Java的“Write once, run anywhere”特性,我们可以真正达到程序只要写一次,拿到任何平台上都可以执行。利用Java撰写手机上的程序当然有其缺点,最广为人知的可能就是执行效率的问题,Java在执行速度这个议题上一直让人诟病。不过笔者认为,随着技术的发达,将会有更快更省电的嵌入系统专用CPU出现,Java One中也传出将针对Java ME开发专用芯片,让Java在手机上的程序可以跑得更快,因此效率上的总是其实是可以忽略的。更何况,当Sun在设计Java ME的时候,也用了很多方式企图加快Java 在手机上的执行速度。因此,目前的移动通信设备大厂几乎采用Java ME平台[11]。

3 系统分析

3.1 目标任务

本设计是一款Java小游戏,由于其运行在手机上,没有PC机上多画面显示和多任务操作,所以要求该游戏易于在用户界面和游戏界面之间切换,它们之间的信息传递通过接口来实现。用户界面是为了让用户较快了解该游戏的模式,所以在用户界面得设计版本信息显示、游戏操作方式说明、游戏运行方式设定等功能,而游戏界面必须实现具体的游戏实现功能,并设计事件监听器监听游戏运行的状态。

3.2 本程序中要解决的有关技术问题

(1) 手机游戏程序是一个小型的实时系统,每秒钟要运行上千行程序,绘图事件和键盘事件都以很高的频率在后台等待响应。,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况。由于手机内存小,存贮量低,所以要求代码具有很高的重用性,所以设计的时候就要把各种类尽量分开来写,可以通过继承或接口方法来实现类对象的重新加载。

(2)游戏都有一定的模式,手机游戏也不例外,所以为了增加可玩性,我们设置了相关难度的调节算法。

(3) 游戏程序的基本结构应该包括:游戏主流程控制,游戏场景,游戏对象和用户操控。在俄罗斯方块游戏中,游戏场景比较简单,只需要手机屏幕显示的固定矩形区域,游戏对象也比较简单,只是七种方块。用户可以操作游戏对象——方块进行旋转,左右,下操作,如果用户不进行任何输入,方块将以一定的速度下落到地面。至于流程控制,初始时游戏场景为空,随着游戏的进行,不断有新的方块落下,分数也增加,当分数增加到一定程度,则方块下落的速度加快[12]。

(4) Java是基于虚拟机的半解释型编译系统,其执行效率较C++等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。除开发过程中对结构上的控制、变量的使用、算法的优化等优化外,还可以使用混淆器(Obfuscator)进行程序打包后的优化。

(5) 游戏的开始、结束、动态信息显示画面作为构成一个程序都是必不可少的重要部分。良好易操作的用户界面是吸引用户的硬指标[13]。

3.3 MIDP应用程序

MIDlet是MIDP应用程序运行的基本单位,一个MIDlet至少直接继承自或者间接继承自一个文件名为javax.microedition.midlet.MIDlet的java类。

MIDP应用程序是指遵循由应用程序主体(jar文件)和应用程序描述文件(jad 文件)组成。Jar的文件是MIDlet套件的具体表现形式,它包含了MIDlet类,资源文件和清单文件,其中资源文件有可能是文本,图片或多媒体等MIDlet类用到的文件;清单文件包含在安装MIDlet套件时所包含的一系列属性和相关定义的列表。JAR文件实际上是一个具有压缩和打包性质的独立文件。JAD文件用来描述MIDlet套件的基本信息和运行信息,它并不是套件的一部分。主要功能是向应运程序管理器提供对应的JAR文件的信息,该信息提示了此套件是否满足目标硬件的运行要求[14]。

在MIDP规范中定义了MIDlet的生命周期,以及可以存在的三种状态,包括Paused、Active以及Destroyed,每一个MIDlet在任何时刻只可能处于其中的一个状态。这三种状态的转换关系如图3.1所示:MIDlet有三个状态,分别是pause、active和destroyed。在启动一个MIDlet的时候,应用管理软件会首先创建一个MIDlet实例并使得他处于pause状态,当startApp()方法被调用的时候MIDlet进入active状态。在active状态调用destroyApp(boolean unconditional)或者pauseApp()方法可以使得MIDlet进入destroyed或者pause状态。值得一提的是destroyApp(boolean unconditional)方法,事实上,当destroyApp()方法被调用的时候,应用程序管理器AM通知MIDlet进入destroyed状态。在destroyed状态的MIDlet必须释放了所有的资源,并且保存了数据。如果unconditional为false的时

图3.1 MIDlet状态迁移触发的方法调用

候,MIDlet可以在接到通知后抛出MIDletStateChangeException而保持在当前状态,如果设置为true的话,则必须立即进入destroyed状态[15]。

3.4 Canvas类

为了能有程序开发人员控制接口的外观和行为,需要使用大量的初级用户接口类,尤其在游戏程序中,几乎完全依赖的就是Canvas抽象类进行绘图。从程序开发的观点看,Canvas类可与高级Screen类交互,程序可在需要时在Canvas中掺入高级类的组件。Canvas提供了键盘事件、指点杆事件(如果设备支持),并定义了允许将键盘按键映射为游戏控制键的函数。键盘事件由键代码指定,但这样控制游戏会导致缺乏通用性,并不是每个设备的键盘布局都适合游戏的操作。应当将键代码转换为游戏键的代码,以便硬件开发商能定义他们自己的游戏键布局。

3.5 Graphics类

Graphics类提供了简单的2D绘图功能。它具有24位深度色彩的绘制能力,以三原色分别各占一个字节表示其颜色。程序只能在paint()函数中使用Graphics 绘制,GameCanvas可调用getGraphics()函数直接绘制在缓冲区上,可以在任何时间请求传输到前台。其对象会被传给Canvas的paint()函数,以便最终显示。

3.6 各功能模块的作用

本游戏共涉及四个模块,分别为:游戏流程控制和监听模块,游戏场景绘制模块,游戏对象,下面分别进行介绍:

3.6.1 游戏流程控制和监听模块

负责整个游戏的基本流程控制,接收用户输入,并做出响应,通知场景绘制模块完成游戏场景以及游戏状态的更新。

3.6.2 游戏场景绘制模块

专门完成游戏场景的绘制,主要是方块的分布,另外也绘制一些和游戏相关的信息,如当前的级别和得分等。

3.6.3 游戏对象

只要是各种方块的数据表示和在场景中所处的位置信息,以及提供外部操纵的接口,如下,左右,旋转等。

3.6.4 游戏场景状态

负责存储当前游戏场景中方块的分布状况,以及存储一些同游戏相关的信息,如当前级别和得分。

4 系统设计

4.1系统主要模块流程图

4.1.1游戏模块流程图

图4.1 游戏模块流程图4.1.2得分记录模块流程图

图4.2 得分记录模块流程图4.2游戏运行效果图

图4.3 游戏运行效果图

5 游戏具体实现

5.1游戏入口类实现:

MainControl继承自MIDlet父类。是游戏的入口类,控制所有类的运行和销毁。MainControl类的构造方法:

public MainControl() {

this.display = Display.getDisplay(this);

init(); //初始化入口类

menu = new MainMenu(this);//新建主菜单类

display.setCurrent(menu);//设置主菜单类为当前的视类,即显示主菜单}

各个界面切换的方法:

public void mangeaction(int event, int source) {

switch (event) {

case PLAY: // 启动游戏game

play(source);

break;

case RECORD: // 启动记录record

record(source);

break;

case OPTION: // 启动设置

option(source);

break;

case HELP:// 启动帮助

help(source);

break;

case ABOUT:// 关于游戏

about(source);

break;

case EXIT:// 退出游戏

exit(source);

break;

case MENU:// 返回主菜单

showMenu(source);

break;

}

5.2游戏主控和背景类实现:

游戏运行中的背景和方块的容器类负责游戏界面的绘制以及方块的移动和游

戏状态和用户操作的监控。Ground类继承了Canvas类并实现了CommandListener 接口。驱动方块下落由于与其他操作异步,所以启用一个独立的线程负责这一功能。Ground类的构造方法:

public Ground(MainControl mainControl) {

this.mainControl = mainControl;//持有游戏入口类

init();//初始化游戏背景即数据,并开始游戏。

}

Ground类重载Canvas类的paint方法(负责见面重绘):

protected void paint(Graphics g) {

g.drawImage(background, 0, 0, 0);//绘制背景

deleteFullLine(g);//扫描并删除满行

drawStone(g);//绘制已经变为石头的方块

if (currentShape[front].getTop() >= 0)

//判断当前活动方块是否在容器区域内

currentShape[front].drawMe(g);//绘制当前活动方块

drawGameData(g);//绘制其他游戏数据,包括等级,得分等}

驱动当前图形下落的内部类:

class ShapeDriver extends Thread {

public void run() {

while (true) {

if (!isLive) {//判断游戏是否正在进行中,如果游戏结束则终止线程return;

}

synchronized (this) {

while (!Ground.this.currentShape[front].isPause()

&& Ground.this.isMoveable(Canvas.DOWN)) {

//判断当前活动方块是否还可以继续下落

Ground.this.currentShape[front].moveDown();

//驱动当前活动方块下落

try {

if (flag)

Thread.sleep(30);

else

Thread.sleep(Ground.this.speed);//控制速度 } catch (InterruptedException e) {

if (Ground.this.isLive) {

while (currentShape[front].isPause()) {

//如果游戏暂停,则暂停线程

try {

Thread.sleep(100);

} catch (InterruptedException e1) {

}

}

continue;

} else

return;

}

Ground.this.repaint();

}

}

if (!Ground.this.currentShape[front].isPause()) { flag = false;

accept(currentShape[front]);//将当前活动方块变为石头score += 15;

currentShape[front] = null;

front = (front + 1) % LENGTH_OF_QUEUE;

rear = (rear + 1) % LENGTH_OF_QUEUE;

currentShape[rear] = f.getShape();//生成新的方块

currentShape[front].setRelativeX(relativeX);

currentShape[front].setRelativeY(relativeY);

}

updateData();//更新游戏数据

}

}

}

5.3游戏的方块类实现:

游戏中的方块是由一个一个的小方格组成的,每个方块保存为一个4*4的int 形数组。当数组中对应位置的值为“1”时在这个位置绘制一个小方格,多个小方格组成一个方块。方块类负责维护自己在容器中的位置,是否活动等信息,以及绘制自身等。

Shape类的构造方法:

Shape(int[][] body, int status, int color) {

this.body = body;

this.status = status;

this.color = color;

for (int y = 0; y < 4; y++)

for (int x = 0; x < 4; x++)

if (isInMe(x, y, false))

height = y + 1;

init();//初始化方块数据

}

Shape类负责绘制自身的方法:

public void drawMe(Graphics g) {

if (!isLive)//如果游戏结束就不再绘制

return;

g.setColor(color);

for (int x = 0; x < 4; x++)

for (int y = 0; y < 4; y++) {

//根据数据绘制各个小方格

g.setColor(color);

if (getFlagByPoint(status, x, y)) {

int x1 = (left + x) * GlobalUtil.CELL_WIDTH + relativeX;

int y1 = (top + y) * GlobalUtil.CELL_HEIGHT + relativeY;

drawUnit(g, x1, y1, GlobalUtil.CELL_WIDTH,

GlobalUtil.CELL_HEIGHT);

}

}

for (int x = 0; x < 4; x++)

for (int y = 0; y < 4; y++) {

//覆盖各个小方格中间的线条,是各个方块看起来是一个整体

g.setColor(color);

if (getFlagByPoint(status, x, y)) {

int x1 = (left + x) * GlobalUtil.CELL_WIDTH + relativeX;

int y1 = (top + y) * GlobalUtil.CELL_HEIGHT + relativeY;

if (x + 1 < 4 && getFlagByPoint(status, x + 1, y)) {

g.fillRect(x1 + GlobalUtil.CELL_WIDTH - 1, y1 + 1, 3,

GlobalUtil.CELL_HEIGHT - 1);

}

if (y + 1 < 4 && getFlagByPoint(status, x, y + 1)) {

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

俄罗斯方块游戏的开发 组长: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

俄罗斯方块实验报告

《软件工程与开发实践1》 软件设计报告 题目俄罗斯方块 学院计算机学院 专业计算机科学与技术 班级 学号 10109345 学生姓名 其他成员 组长 指导教师孙志海 完成日期2012年6月

一、软件设计概述(目的、任务、开发环境、参考资料) 俄罗斯方块游戏属于经典小游戏,游戏规则简单,但又不乏趣味。而计算的一大领域也是游戏,所以,成为游戏开发者,几乎是每个编程者的梦想。经过大一和大二的学习,我们已经掌握了编程基础。为了提高我们的编程能力,我们就要不断积累编程经验。 1、目的:复习和巩固C/C++编程的基本思想;掌握数据结构的核心思想;掌握C/C++中多文件的编写;初步对了解界面的设计。 2、任务:完成一个可以运行的游戏。 3、开发环境:C/C++控制台。 4、参考资料: [1] 谭浩强.C语言程序设计[M].北京:清华大学出版社.2004.6 [2] 孙鑫\余安萍.VC++深入详解[M].北京:电子工业出版社.2006.6 二、可行性研究、需求分析及分工 这是一个游戏软件,程序与用户的交流只在游戏界面上,方块的产生是随机的。 三、软件设计的基本原理和采用的主要方法与技术 1、方块类型以下7大类 ██████████ ██████ ███ █████████ 每一种方块都能够变形,所以在游戏中如何正确打印出方块的类型是重点,也是难点。我采用的是“相对坐标法”,具体实现参照“实现的过程与步骤”部分。 2、此游戏是简单的二维游戏,而且区域恒定不变,所以在存储游戏的信息时,二维数组是首选。用数组元素值模拟当前位置有无方块。 3、流程图如下

4、采用的方法 在控制台下,光标是左到右,自上而下的,所以要要调用系统函数来控制光标。同理,为了界面的美观,也要调用系统函数进行颜色控制。 5界面设置 游戏的最大特点就是界面的美观,由此才能吸引玩家的兴趣,因此如何让界面尽最大限度美观,是每个游戏程序员努力的目标。这个程序是在VC环境下基于C/C++控制台的,由于VC下没有像TC下那样丰富的图形库,画图就要调用windows API函数。但由于我对windowsAPI理解不深,所以画起图来还是比较困难。 游戏不仅要求界面美观,而且还要音乐来衬托,所以在整个程序中,尽量让方块的每一个动作与特殊的音乐像对应,此外,最好加上背景音乐。 四、实现的过程与步骤 数据结构: 1、方块的存储 如下图所示,每一种方块都由四个小方块组成,可以按顺序编号①、②、③、④,在方块旋转、输出、擦出时,可以由第一个方块位置加上(减去)第二个与第一个的偏移量,从而找到第二个方块,如此可以方便遍历四个方块。 由于方块属于宽字符,故在占两个字节,输出的时候占两位。设①号块的坐标为(x,y),那么第二块与它的偏移量的△x=2,△y=0,相对坐标即为(2,0)。 同理,③号方块的相对坐标为(2,1),④号方块的坐标为(4,1),特别的,①号方块的相对坐标为(0,0),这样一来,只要知道每一种(7大类,19种)方块的①号方块的坐标,就可以通过②、③、④方块与①号方块的偏移量而逐个输出整个方块。 明白了方块的输出,就要用一个数据结构存储方块了。19种方块都由4个

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/127238536.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 -

java课程设计报告材料-俄罗斯方块

JAVA程序设计课程设计 之 俄罗斯方块 年级:13级 班级:T412 网络工程 指导老师:朱林 小组成员: 20138346021 许浩洋

时间:2015年11月11日 目录 摘要................................................................. 第一章课程设计要求.................................................. 第二章设计概要...................................................... 2.1 功能设计...................................................... 2.2 功能分析...................................................... 2.2.1 系统操作界面............................................... 2.2.2 程序主要功能说明........................................... 第三章调试分析与测试结果............................................ 3.1 游戏运行界面.................................................. 3.2 测试项目...................................................... 3.2.1 功能区按键测试............................................ 3.2.2 键盘功能测试.............................................. 3.2.3 游戏结束测试.............................................. 第四章设计总结...................................................... 4.1 改进意见...................................................... 4.2 《Java课程设计》心得体会 ......................................

俄罗斯方块说明

俄罗斯方块单人版

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; //速度

俄罗斯方块Java程序设计

俄罗斯方块游戏 一、课题内容和要求 课题内容:俄罗斯方块游戏(Tetris)是一款经典单机游戏,早期常见于各个平台。设计一个俄罗斯方块,玩家根据下落的不同方块形状,通过上、下、左、右四个键实现对方块的左右移动、旋转、下落等控制。游戏中,一共有7种不同的方块形状、每种方块以1/7的概率随机出现,一旦方块到达顶部,游戏结束。当某一个行布满方块时,改行消除。 基本要求:通过图形界面实现俄罗斯方块游戏;能以图形显示游戏运行的过程;实现相应四个键游戏玩家的控制;记录消除的行数。 扩展要求:在上述功能要求的基础上,为了提高成绩,可以添加一些额外的功能;变量、方法命名符合规范;注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释;程序的层次清晰,可读性强。 系统功能要求: (1)界面设定 玩家可以在界面左侧的游戏区中堆积方块,游戏区上面有“游戏”“帮助”两个选项,界面右侧为游戏得分,玩家在游戏过程中随时可以查看游戏得分。(2)游戏控制 不同的随机图形会从区域上方缓慢落下,通过键盘的左、右、下键可以控制方块以一格为单位左右移动,长按实现快速移动;上键能以90度为单位旋转每一方块;区域中横向格子方块填满,则该行会自动消除并为玩家的得分;当固定的方块推到区域最上方,则游戏结束。 二、需求分析 1.需求分析

图-1 俄罗斯方块游戏需求分析 2.任务及实现方式 (1)绘制游戏区域 通过绘制地图方块、已经固定的方块和运动中的方块来实现(2)实现键盘对方块的实时控制 添加键盘监听者和方块位置移动的函数 (3)记录消除行数 添加记分函数和Graphics类的drawString函数实现 (4)游戏结束 添加判断游戏结束函数并给出提示 3.预期效果 (1)实现俄罗斯方块游戏的动态显示 (2)实现键盘对方块各种操作 (3)实现消行、记分 (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

Java俄罗斯方块 毕业设计论文

第1章绪论 (2) 1.1 游戏的历史 (2) 1.2游戏的意义与内涵 (3) 1.3 俄罗斯方块游戏 (4) 第2章可行性研究 (6) 2.1 设计目的 (6) 2.2 可行性研究前提 (6) 2.3 可行性分析 (6) 2.4 结论 (7) 第3章需求分析 (8) 3.1 引言 (8) 3.2 游戏功能需求 (8) 3.3 运行环境及系统性能的需求 (9) 3.4 接口需求 (9) 3.5 方案论证 (9) 3.6.方案选择 (11) 第4章概要设计 (13) 4.1 游戏设计所要遵循的规范 (13) 4.2 游戏总体设计分析 (13) 4.3 各模块的算法设计 (14) 4.4 可靠性设计 (19) 4.5 概要设计评审 (19) 第5章详细设计 (21) 5.1 客户端设计 (21) 5.2音效播放控制模块设计 (23) 5.3背景音乐播放控制模块设计 (24) 5.4网络对战模块设计 (25) 5.5道具模块设计 (26) 5.6 主模块——方块与地图模块设计 (31) 第6章游戏测试 (42) 6.1 测试的意义及注意事项 (42) 6.2测试的步骤 (43) 6.3 测试结果 (44) 结束 (46) 致谢 (47)

第1章绪论 1.1 游戏的历史 游戏是人类生活的重要组成部分,从第一个电子游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。 1.1.1 从头谈起 真正的电子游戏机产生于20世纪70年代。1971年,麻省理工学院的学生Nolan Bushnell设计了世界上的第一个业务用游戏机(俗名街机),叫做《电脑空间》。这台游戏机用一台黑白电视机作为显示屏,用一个控制柄作为操纵器,不过由于市场因素这款游戏以失败告终。但是最后他在电子游戏的发展上取得了非凡的成就。 上面介绍的是专用机游戏的历史,而最早的电脑游戏可以追溯到1972年,一个叫Crowther的工程师用当时最流行的主机――DEC公司的PDP-10编写一段简单的FORTRAN程序。在这个程序里,Crowther设计了一张地图,地图上不规则的分布着陷阱,游戏者必须寻找路径避开陷阱。这个程序被公认为是最早的电脑游戏程序。 1989年,BroderBund公司的设计师乔丹.麦克纳根据阿拉伯民族的古老传说《一千零一夜》在Apple平台上制作了一部动作冒险相结合的电脑游戏――波斯王子。这个游戏获得了第一作,它代表了当时电脑技术的最高水平。 1986年,任天堂公司发售了一款真正的游戏巨作――超级马里奥。 20世纪80年代IBM PC兼容机的出现打破了Apple公司的垄断地位。 到了20世纪90年代,游戏业才真正成熟起来,成为了一种产业。 由于PC机价格非常低而且硬件速度越来越快,游戏逐渐成为人们生活中不可缺少的一部分。游戏产业也逐渐发展成熟。 1.1.2 图形硬件的革命 图形硬件的飞速发展是近些年来的事情,部分原因是来自工业方面的压力,例如在军事和医疗方面对于实时图形的需求很强烈,而交互娱乐产业也极大的推动了图形硬件的发展。技术上的因素同样也推动着图形硬件的发展,许多图形算

Java小游戏俄罗斯方块附完整源代码_毕业设计

**** 届毕业设计Java小游戏俄罗斯方块

┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊ 摘要 在现今电子信息高速发展的时代,电子游戏已经深入人们的日常生活,成为老少皆宜的娱乐方式。但是游戏设计结合了日新月异的技术,在一个产品中整合了复杂的设计、艺术、声音和软件,所以并不是人人皆知。直到今天,在中国从事游戏设计的人仍然很少,但是游戏行业的发展之快,远超如家电、汽车等传统行业,也正因为如此,游戏人才的教育、培养远落后于产业的发展。 俄罗斯方块是个老幼皆宜的小游戏,它实现由四块正方形的色块组成,然后存储在一个数组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机时钟控制它在一定的时间不停的产生,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,(控制键的实现是由键盘的方向键的事件处理实现)。然后程序根据这七种方块堆叠成各种不同的模型。 论文描述了游戏的历史,开发此游戏的环境,游戏开发的意义。遵循软件工程的知识,从软件问题定义开始,接着进行可行性研究、需求分析、概要设计、详细设计,最后对软件进行了测试,整个开发过程贯穿软件工程的知识体系。 此次设计在Microsoft Windows 7系统下,以Java为开发语言,在eclipse开发平台上进行游戏的设计与实践。从游戏的基本玩法出发,主要就是俄罗斯方块的形状和旋转,我在设计中在一个图片框中构造了一些的网状小块,由这些小块组合成新的形状,每四个小块连接在一起就可以构造出一种造型,因此我总共设计了7中造型,每种造型又可以通过旋转而变化出2到4种形状,利用随机函数在一个欲览窗体中提前展示形状供用户参考,在游戏窗体中用户就可以使用键盘的方向键来控制方块的运动,然后利用递归语句对每一行进行判断,如果有某行的方块是满的,则消除这行的方块,并且使上面的方块自由下落,最后就可以得出用户的分数。 关键词:游戏设计,算法,数组,事件

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)

相关文档
最新文档