收藏 分销(赏)

“俄罗斯方块”游戏设计开发.doc

上传人:仙人****88 文档编号:9284266 上传时间:2025-03-19 格式:DOC 页数:54 大小:542.50KB 下载积分:10 金币
下载 相关 举报
“俄罗斯方块”游戏设计开发.doc_第1页
第1页 / 共54页
“俄罗斯方块”游戏设计开发.doc_第2页
第2页 / 共54页


点击查看更多>>
资源描述
摘要 俄罗斯方块是一款非常经典游戏,风靡全球,经久不衰,是学习面向对象的编程思想的理想实例。现在面向对象的计算机编程语言很多,都可以编程来实现。 本毕业设计论文介绍用Java语言设计一个“俄罗斯方块”游戏的过程,整个游戏系统是一个应用程序(Java Application),不再是嵌入到网页里的那种小应用程序(Applet);并使用了最新的Java 2标准Swing组件,使得界面更具有专业效果。游戏设计过程中涉及到游戏框架、游戏界面的编写、菜单处理、变量的定义、算法设计以及预览功能的实现。同时,还为游戏添加了其他功能,如设计About对话框,实现游戏分数的存档,为游戏添加状态栏。 通过本次毕业设计可以学到如何定义类和类成员及其方法,如何使用JBuilder来创建工程,如何创建一个对话框,并将对话框和主应用程序联系起来。 关键词:俄罗斯方块,应用程序,Swing组件,Java ABSTRACT Tetris is a classic and durable game, and it has been popular all over the world. And it’s an ideal sample for leaning object-oriented programming. It can be implemented by different object-oriented programming languages that exist nowadays. This thesis describes the implementing process of this game in java language, which is implemented in application form instead of applet that embedded in the web pages. The use of swing component makes the interface look more professional. The game designs in the process to involve to the game frame, the compilation of game contact surface, menu processing, the definition of variable, the design of algorithm as well as the realization of the function of preview are involved in the process of designing this game. Meanwhile, some other functions are also added to the game, such as designing “About dialog”, achieving the archive of the game scores, adding status bar to the game. Through this thesis we can learn how to define classes, class members and the methods, how to use JBuilder to create works, how to create a dialog, and how to link the dialog box and the main application. Keywords: The Russian Block, the application procedure, the Swing module, Java 目录 摘要 I ABSTRACT II 第1章 绪论 1 1.1 研究背景 1 1.1.1 游戏的历史 1 1.1.2 游戏的意思与涵义 2 1.2 研究内容 3 第2章 开发工具的选择 4 第3章 可行性研究 6 3.1 设计目的 6 3.2 可行性研究前提 6 3.3 可行性分析 6 3.3.1 管理可行性 6 3.3.2 经济可行性 7 3.3.3 技术可行性 7 3.3.4 社会可行性 7 3.4 本章小结 7 第4章 需求分析 8 4.1 引言 8 4.2 游戏的需求 8 4.3 方案论证 9 4.3.1 C++的优点 9 4.3.2 Java的优点 9 4.3.3 方案的选择 10 4.4 本章小结 11 第5章 概要设计 12 5.1 游戏设计分析 12 5.1.1 方块类型数据 12 5.1.2 程序运算逻辑 12 5.1.3 绘图 12 5.1.4 显示平台 12 5.2 注意事项 13 5.3 游戏流程图 13 5.4 本章小结 14 第6章 系统详细设计 15 6.1 设计游戏框架 15 6.1.1 编写游戏框架 15 6.1.2 为游戏编写菜单项 15 6.1.3 为菜单增加事件处理 16 6.2 设计游戏界面 17 6.2.1 在Panel中加入几个必要的常量和变量 17 6.2.2 在Panel上面画出游戏界面 18 6.2.3 将Panel加到框架中去 19 6.3 游戏内容的设计 20 6.3.1 描述方块 20 6.3.2 描述游戏状态 21 6.3.3 初始化游戏状态 21 6.3.4 编写新的方块组的算法 21 6.3.5 编写方块组移动的算法 23 6.3.6 编写消去一行的算法 24 6.3.7 游戏里实现一个线程 26 6.3.8 控制游戏开始 26 6.3.9 让游戏暂停 28 6.3.10 让游戏结束 29 6.3.11 判断游戏是否结束 30 6.3.12 让玩家控制游戏 30 6.3.13 重新编写画图的功能代码 32 6.3.14 类的同步方法 33 6.3.15 计算游戏得分和当前游戏级别 34 6.4 添加游戏的其他功能 34 6.4.1 设计“关于”对话框 34 6.4.2 设计设定游戏等级的对话框 35 6.4.3 添加状态栏 36 6.5 封装得分情况 37 6.5.1 定义Score类和类成员 38 6.5.2 定义方法writeToFile() 38 6.5.3 定义方法readFromFile() 38 6.5.4 定义方法sortScore() 38 6.5.5 定义方法isScoreTop(int nScore) 39 6.5.6 定义方法insertNameScore(String sName,int nScore) 39 6.5.7 定义方法getScore()和getName() 39 6.6 让玩家输入名字 39 6.6.1 输入玩家名字的对话框 39 6.6.2 查看排行榜的对话框 40 6.7 系统完成后的主要界面效果 41 6.8 本章小结 41 第7章 系统测试 42 7.1 发现问题 42 7.2 解决问题 42 7.3 本章小结 44 第8章 游戏打包发布 45 8.1 打包的好处 45 8.2 如何打包 45 8.3 本章小结 46 第9章 结论 47 致谢 48 参考文献 49 - 49 - 第1章 绪论 1.1 研究背景 游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。 1.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机价格非常低而且硬件速度越来越快,游戏逐渐成为人们生活中不可缺少的一部分。游戏产业也逐渐发展成熟。 (2)图形硬件的发展 图形硬件的飞速发展是近些年来的事情,部分原因是来自工业方面的压力,例如在军事和医疗方面对于实时图形的需求很强烈,而交互娱乐产业也极大的推动了图形硬件的发展。技术上的因素同样也推动着图形硬件的发展,许多图形算法可以很容易地表达为并行方式,这样硬件执行的效率变得很高。摩乐定律也起了作用,越来越多的晶体管可以集成到一块单独的芯片上。在所谓的GPU(图形处理器)概念出现以前,特殊的图形硬件只出现在诸如SGI和E&S系统里面,这些硬件价格太昂贵,不过这些公司提供了第一代基于硬件的顶点变换和纹理映射的解决方案。 1.1.2 游戏的意思与涵义 游戏这个名称一直就存在于每个人的日常生活中,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等,林林总总,不胜枚举,甚至于有些流行歌曲把人生也比喻为游戏,好比“一场游戏一场梦”。因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色。 “游戏”,最简单的定义,就是一种供人们娱乐休闲的快乐元素。从更专业的角度形容,“游戏”是具有特定行为模式、规则条件、身心娱乐及输赢的一种行为表现。这种行为表现具备以下4个要素: 行为模式:“游戏”最简单的要素就是游戏有特定的流程模式,这种流程模式贯穿于整个游戏的行为,用户必须依照它的模式流程来执行。倘若一种游戏没有了特定的行为模式,那么就没有执行的行为;在没有执行的行为之后,这个游戏也玩不下去了。举个例子来说,如果猜拳游戏没有了剪刀、石头、布等行为模式,那么这还能叫做:“猜拳游戏”吗?所以不管游戏的流程有多么复杂还是多么简单,一定要有特定的行为模式。 条件规则:当游戏有了一定的行为模式后,接着就必须制定出一系列的条件规则。简单来说,这些游戏的条件规则就是大家必须去遵守的游戏行为守则,只要是大家一致以为的游戏行为,在游戏中,玩家就必须遵守它,如果不遵守这种游戏行为,那么就失去了公平性。如同一种简单的球赛,打球的英文解释可以用PLAY GAME来加以说明,按照英文字面上的解释,它就是执行游戏的行为,而球赛必须有一定的条件规则,并且参与者都要必须去遵守它,不能遵守它就叫做“犯规”。所以不管是什么游戏,它都会具备一组规则条件,在游戏进行的时候才会有足够的公平性。 娱乐身心:一种游戏所带来的娱乐性,关键就在于为玩家所带来的刺激感,这也是游戏的精华所在。简单来说,不管是很多人玩的游戏,还是一个人玩的单机游戏,游戏本身就会存在它的娱乐和刺激性,使得玩家们想要去玩它。 输赢:其实针对游戏而言,输赢是所有游戏的最终目的。一个没有输赢的游戏,也就没有了它存在的意义,如同我们常常接触到的猜拳游戏,说穿了最终目的就是为了分出胜负而己。 一般而言,游戏又可以分为动态和静态两种形态。动态的游戏必须配合肢体动作,如猜拳游戏;而静态游戏则是较偏向思考的行为,如同纸上游戏。然而不管是动态或是静态游戏,只要具备上述4项组成要素,都可以将它称为“游戏”[1]。 1.2 研究内容 计算机游戏中包含成百上千可以移动并相互作用的实体,这些实体有着各自不同的位置、速度、状态、颜色等属性,为每一个实体单独编写代码是低效率的做法。利用Java面向对象的特性,先创建一个抽象、通用的游戏实体类,再创建该类个性化的子类,从而提高系统开发效率[2]。 利用数组及敏捷开发思想开发俄罗斯方块游戏,以数组为界面显示的数据结构,设计界面类。设计方块类,先设计抽象类,通过应用测试优先原则,设计简单方块让抽象类的测试通过。在逐步的迭代与重构中来响应不断变化的需求,来实现所有类。最后通过界面的优化来完成系统的开发[3]。 在对Java程序设计这门课程进行了系统学习后,运用课程中学到知识进行设计编写的软件。本程序涉及到的Java模块有:图形界面(GUI),线程,以及基本输入输出等。 第2章 开发工具的选择 在这里,根据各种开发工具的比较,和现有工具及书籍等条件的制约,决定使用JBuilder 2006。 美国 Borland 软件公司推出JBuilder® 2006。这是Borland屡获殊荣的Java®综合开发环境 (IDE)的最新版本,专为加快企业级Java应用的开发而设计。JBuilder 2006的崭新功能可帮助软件团队更有效率地实时、跨地域进行协作。新功能包括对等开发人员协作、集成需求管理、源代码管理及单元测试等对应用软件生命周期的支持。 JBuilder及Optimizeit都是Borland应用软件生命周期管理 (Application Lifecycle Management,简称ALM) 的重要组成部分,能与其它Borland的ALM产品紧密集成,为开发人员提供环环紧扣的工具,提升自身以致团队的生产力。   加速分布式Java开发。   JBuilder 2006针对分布式团队 — 包括外包、离岸、远程或分布式团队的独特需要而设计。新增的对等协作功能方便分散在不同地点的开发人员一同修改源代码、进行可视化设计及纠错。   有Gartner研究指出 ,当团队内存在地域、文化及架构等差异时,想要成功地进行应用开发,就需要团队成员能更紧密地协作。因此,从事分布式软件开发的机构应向技术提供商要求能降低全球协作式应用的交付除的工具套件。只有对这项挑战未雨绸缪的IT团队才能更有把握在竞争日益激烈的开发环境中取得成功。 近年新兴的灵活编程方法,包括极限编程 (Extreme Programming),均致力于降低各种变化对软件开发的影响和风险,甚至利用这些变化来提升客户的竞争优势。这些编程方法提倡开发团队与业务专家紧密协作,要求他们频繁地亲自进行沟通,故此这些方法传统上只有小型及集中式的团队才做得到。JBuilder 2006有助于更大型及更分散的开发团队进行实时的对等协作,使他们能够使用配对编程技巧。有了JBuilder 2006,两个甚至更多的编程人员便能一同工作,就同一个设计、算法、源代码及测试进行协作,并能共同解决难题或发挥创意。   另外,JBuilder 2006还具有以下优点: JBuilder 2006可以帮助开发人员发现并减少软件的保安漏洞。它集成了Borland的合作伙伴Fortify Software的崭新技术,能分析源代码并按照业界最佳标准及自动源代码审核来找出安全漏洞。 降低采用新技术标准的复杂度。JBuilder 2006可支持Enterprise JavaBeans®、网络服务、XML及数据库应用开发,并对几乎所有Java开发环境提供以业界标准为基础的支持。它还具有从J2EE 1.4到JDK® 5.0畅顺转移功能。 简化项目管理及集成。JBuilder 2006提供中央化环境,能协调整个开发流程,简化了开发工具的管理。它采用开放式架构,方便集成其它工具,让开发团队灵活地使用已有的软件投资。 便于扩展。JBuilder 2006让开发人员使用数以千计的第三方嵌入式工具并定制最适合个人使用习惯的环境。需求管理或漏洞追踪等流程也具备弹性,可按需要修改。团队还能够设定开发环境的“个性”,为每个项目制定及精简相关接口。 JBuilder 2006的主要界面如图2-1所示: 图2-1 JBuilder主要界面 第3章 可行性研究 3.1 设计目的 综合运用在校期间所学理论知识和技能,设计开发俄罗斯方块,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力,为将来实际工作打下坚实的基础。用Java语言完成游戏俄罗斯方块的设计与实现,编写该程序,对Java程序设计有更深刻的了解。实践Java语言的应用,以及培养自己良好的Java编程风范,实践设计模式。 3.2 可行性研究前提 基本需求:系统开发的总体任务是实现游戏的可操作性、美观性、及时性。开发过程遵循软件工程规范,可采用结构化或面向对象分析设计方法。主要实现windows的GUI程序开发,对游戏中的图形图像进行键盘控制。游戏者可以通过上下左右键来对游戏进行操作。 主要开发目标:开发过程遵循软件工程规范,可采用结构化或面向对象分析设计方法。主要实现windows的GUI程序开发,对游戏中的图形图像进行键盘控制。游戏者可以通过上下左右键来对游戏进行操作。 条件假定和限制:由于本软件目前是我的初次版本,可能还存在一些问题。如果该软件提高版本,本软件需要根据游戏者的要求进行进一步的修改。 可行性研究所采用的方法和步骤:通过研究分析俄罗斯方块所具备的能力及实现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。   评价尺度:由于本软件是一个初级产品,对其要求不是太苛刻,所以能够达到俄罗斯游戏的一般功能即可。 3.3 可行性分析 3.3.1 管理可行性 该游戏软件为首次开发,目的只为提高工作自身素质和检查学习Java的效果,所有功能均根据基本需求所做,便于管理,所以在这方面是可以实现的。 3.3.2 经济可行性 由于本游戏的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能够运行Java软件的电脑便可,所以不用考虑到经济问题。 3.3.3 技术可行性 可用于本游戏的编程语言有VB,Java,Delphi等,考虑到用于编写程序的困难度,和对语言的了解程度,选择Java作为编程语言。需要对变量定义、变量初始化、界面初始化、游戏初始化、然后进入游戏、处理游戏过程中的各种操作。 3.3.4 社会可行性 本游戏的开发作为毕业课程设计以巩固先前所学的知识,以个人为单位,仅供个人平常娱乐所用,无须考虑有可能造成的社会影响,不用考虑到法律、版权等的社会因素,所以在这方面是完全可行的。 3.4 本章小结 本章在明确设计目的的前提下,从基本需求,主要开发目标,条件假定和限制,可行性研究所用的方法和步骤,评价尺度等方面进行了可行性前提的分析。从而得出了管理可行性,经济可行性,技术可行性,社会可行性的结果。综上所述,本游戏软件的技术成熟、完备。各方面均无重大问题,因此本游戏软件可开始着手编写。 第4章 需求分析 4.1 引言 对软件需求完全理解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、规范的过程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。 4.2 游戏的需求 随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、反T字型)下落填充给定的区域,若填满一条便消掉,每个方块组可以旋转改变其形状,每个方块组有不同的分数,刚出现时就有分数,消去行不记分。当落下的方块组的数量达到一定数量时,过关,速度也会相应的提升,但是到某一关后速度不再提升。若在游戏中各形状填满了游戏区域,则游戏结束。游戏功能要求如下: 游戏界面需求:良好的用户界面,有分数显示和级别显示。让方块在一定的区域内运动和变形,该区域用一种颜色表明,既用一种颜色作为背景,最好设为黑色。还需用另一种颜色把黑色围起来,宽度适中,要实现美感。 游戏形状(方块)需求:良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、反T字型),各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。 键盘处理事件:方块下落时,可通过键盘方向键(W、S、A、D键)对该方块进行向上(变形),向下(加速)、向左移动、向右移动。 显示需求:当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。当落下的方块组的数量达到某一值时,过关,即级别提高一个等级,相应的方块组下落的速度也随之变快。 本软件需求通过键盘进行操作,在Windows的操作系统下,利用键盘的W,S,A,D键对方块进行移动变形,要使用键盘的接口事件。 4.3 方案论证 学校现已开设的课程有PASCAL,C,C++,Java,就目前了解,Java,C++可编写俄罗斯方块程序。 4.3.1 C++的优点 C++是对C语言的扩充,从simula 67中吸取了类,从algol 68中吸取了运算符的一名多用、引用和在分程序中任何位置均可说明变量,综合了ada 的类属和clu的模块特点,形成了抽象类,从ada,clu和ml吸取了异常处理,从bcpl中吸取了用//表示注释。   C++保持了C语言的紧凑、灵活、高效以及易移植性强等优点,它对数据抽象的支持主要在于类概念和机制,对面向对象风范的支持主要通过虚拟机制函数。由于C++既有数据抽象和面向对象能力,不运行性能高,加上C语言的普及,而从C到C++的过渡较为平滑,以及C++与C的兼容程度可使数量巨大的C语言程序能方便地在C++环境中复用,使得C++在短短几年内能迅速流行,成为当前一种面向对象程序设计的主流语言。 尽管C++当初的设计本意是帮助管理大型程序,但其用途并不仅限与此。C++的面向对象的特性可有效地用于实际的程序设计工作。C++常常用于设计编辑器、数据库、个人文件系统以及通讯程序等。而且,由于C++共享C的效率,所以用C++可以构成很多高性能的系统软件。 4.3.2 Java的优点 Java是定义位于网络计算的计算机语言,它几乎所有的特点也是围绕着这一中心展开的并为之服务的,这些特点使得Java语言特别适应于用来开发网络上的应用程序;另外,作为一种面世较晚的语言,Java也集中体现和充分利用了若干当代软件技术新成果,如面向对象、多线程等,这些也都在它的特点中有所反映。 (1)平台无关性 平台无关性是指Java能运行于不同的平台。Java引进虚拟机原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关,Java虚拟机(Java Virtual Machine)是建立在 硬件和操作系统之上,实现Java二进制代码的解释执行功能,提供于不同平台的接口的。 (2)安全性 Java的编程类似C++,学习过C++的读者将很快掌握Java的精髓。Java舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序的非法访问。 (3)面向对象 Java吸取了C++面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性。类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和应用上。Java提供了众多的一般对象的类,通过继承即可使用父类的方法。在Java中,类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java提供的Object类及其子类的继承关系如同一棵倒立的树形,根类为Object类,Object类功能强大,经常会使用到它及其它派生的子类。 (4)分布式 Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。 (5)健壮性 Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自己操纵内存减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能。这些功能特征大大提高了开发Java应用程序的周期。Java提供:Null指针检测、数组边界检测、异常出口、Byte code校验。 (6)简单易学 最初开发java语言的本意是为家用电器的程序控制而用的。它坚持面向对象基本原理,又避免了运算符的一名多用、多重继承等复杂概念[2]。 4.3.3 方案的选择 面向对象是一种认识世界的方法,是一种程序设计方法。面向对象的观点认为,客观世界是由各种各样的实体,即对象组成的。每种对象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用就构成了各种不同的系统,并进而构成整个客观世界。按照这样的思想设计程序,就是面向对象的程序设计。 面向对象的程序设计吸取了结构化程序设计的先进思想,并把他们同几个支持用户用新方法进行程序设计的有力概念结合在一起。 所有面向对象的程序设计语言一般都包含三个概念:封装、多态性和继承性。这种方法要求语言必须具备抽象、封装、继承和多态性这几个关键要素。 面向对象的程序设计,是通过数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立其副本。 C++和Java在面向对象这方面都比较强,但是C++为了与C语言兼容,其实包含了些面向过程的成分;Java除了C++中非面向过程的部分,其程序编写过程就是设计、实现类,定义其属性、行为的过程。还有Java特有的“沙箱”机制是其安全性的保障,同时它去除了C++中易造成的错误指针,增加了自动内存管理等措施,保证了Java程序运行的可靠性。 所以经过比较后,决定采用Java语言编写俄罗斯方块。 4.4 本章小结 本章从游戏界面,游戏形状,键盘处理,显示等各功能方面进行了需求分析;对C++进行了简单的介绍,并且从平台无关性,安全性,面向对象,分布式,健壮性,简单易学等方面介绍了Java的优点,最后主要根据面向对象这一方面进行比较,从而得出采用Java语言编写俄罗斯方块的结论。 第5章 概要设计 5.1 游戏设计分析 Java为纯面向对象(Object-Oriented)程序语言,从面向对象的观念出发,本程序可分为以下几个对象: (1)方块类型数据 (2)程序运算逻辑 (3)绘图 (4)显示平台 分析对象的技巧在于它的重复利用及维护效率。试想,若要设计出来的程序在不同的显示平台上执行,就要做大幅度的更动甚至重写,这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别做成对象,如方块类型数据及程序运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。 5.1.1 方块类型数据 方块类型虽然运送不同,但状态与行为都是相同的。 5.1.2 程序运算逻辑 程序中逻辑运算通常只作数值的运算及分析,如方块移动时阻碍判断、方块满行判断、删除满行、方块移动、事件响应等。 5.1.3 绘图 绘图会因为显示屏的不同而有所不同,例如在单机与手机上的显示环境就不相同,或显示效果会有所不同,例如方块的样式作修正时,即可以产生出不同的显示效果。 5.1.4 显示平台 “可移植性高”是Java的属性之一,Java的应用涉及许多领域,如手机、单机程序及浏览器等,不同的平台对于它的设定不尽相同,若将显示平台独立为一个类,将有助于主程序的完整性及移植程序的快速性。 5.2 注意事项 游戏在设计时除了将程序切割成多个对象外,在游戏的逻辑运算上应尽可能做到弹性化。所谓弹性就是方块地图的长与宽等应该可以用参数来改变。 5.3 游戏流程图 游戏开始 判断游戏是否在玩 判断是否需要新的方块 将预览方块变为正在运行的方块 产生控制方块下降的执行信息 接受键盘信息 方块移动是否有阻碍 移动方块 方块是否无法下移 检查满行,消除满行,是否需要新的方块。 是 是 否 否 否 是 是 如图5-1所示: 图5-1 游戏流程图 5.4 本章小结 本章从方块类型数据,程序运算逻辑,绘图,显示平台等各方面进行了简单的概要设计,分析了各个对象的游戏功能;提出了在游戏设计时尽量弹性化的要求;最后,根据游戏的功能画出了游戏流程图。 第6章 系统详细设计 6.1 设计游戏框架 Java抽象窗口工具包(AWT)最开始的设计目标是让程序员构建一个通用的图形用户接口(GUI)。但是,这个目标并没有达到。在Java 1.0的抽象窗口工具包产生的是在各个系统看来都欠佳的图形用户接口。除此之外,它还限制只能使用4种字体,限制我们不能够访问操作系统中现有的高级GUI元素。在Java 1.1里,对抽象窗口工具包进行了很好的改进,更加清晰、面向对象的编程使得我们使用起来更加方便。在Java 1.2里,又添加了Java 的基础类(JFC),这是一个被称为Swing的GUI的一部分。Swing的使用方法很简单,类似AWT包里类的使用方法[1]。 6.1.1 编写游戏框架 先使用JBuilder新建一个项目,建立一个工程,将工程的名字命名为Tetrics。 在JBuilder的主菜单中,选择File主菜单→New子菜单项→General选项卡→Application选项,点击OK按钮,进入应用程序向导对话框。在对话框中规定应用程序主类的名称为TetricsApplication。 接下来我们要命名程序界面框架的名称。在当前的对话框中点Next按钮,进入应用程序向导的第二步,在这里命名Frame类的名称和标题分别为TetricsFrame和Tetrics。接着点Finish,JBuilder就建立好了一个应用程序框架。这个应用程序框架中有一个主类TetricsApplication和一个界面框架类TetricsFrame。 6.1.2 为游戏编写菜单项 游戏的菜单项具体如表6-1所示: 表6-1菜单项的设置 主菜单项 子菜单项 名称 游戏 开始游戏 start 暂停游戏 pause 结束游戏 end 关闭 quit 控制 设置级别 level 关于 关于 about 这里使用UI设计器中的菜单设计器来进行菜单项的编辑。首先对界面类TetricsFrame进行编辑,因为这个类用于界面的显示,所有的组件都要添加在这个类中。具体做法不再详述。效果图如图6-1所示: 图6-1 游戏菜单项 6.1.3 为菜单增加事件处理 采用ActionListener接口来做菜单的事件响应。ActionListener是用来接受一个动作事件的。用来处理这些动作事件的类要实现这个接口里的方法,这个类要被发出动作的事件的类用addActionListener()方法来注册。当动作事件发生后,用来处理这些动作事件的类里实现的actionPerformed()方法将被调用。 例如控制游戏开始事件的响应代码: Void start_actionPerformed(ActionEvent e){ //控制开始游戏的代码 } 下面是控制游戏开始适配器的代码: class TetricsFrame_start_actionAdapter implements java.awt.event.ActionListener { TetricsFrame adaptee; TetricsFrame_start_actionAdapter(TetricsFrame adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.start_actionPerformed(e); } } 下面是相应监听器的代码: private void jbInit() throws Exception { start.setText("开始游戏"); start.addActionListener(new TetricsFrame_start_actionAdapter(this)); ………… } 6.2 设计游戏界面 接下来开始写游戏的界面,将游戏写在一个Panel上面。 我们再新建一个类,让它从java.awt.panel里继承,将它命名为Tetrics,游戏的主要功能都要在这个类里实现。代码如下: public class Tetrics extends JPanel implements Runnable, KeyListener { public Tetrics() {} } 6.2.1 在Panel中加入几个必要的常量和变量 (1)定义颜色常量 定义两个常量,一个定义Panel的背景颜色,BAKCOLOR。另一个定义Panel的前景颜色,FORCOLOR。 final Color BAKCOLOR = new Color(80, 123, 166); final Color FORCOLOR = Color.black; (2)定义坐标常量 定义左边用来显示预览分数、走的步数的区域的宽度。 final int XOFFSET=200; (3)定义必要的常量 定义每个小方块的宽度: int m_nSqLength; 定义行数和列数: static int m_nCols; static m_nRows; 6.2.2 在Panel上面画出游戏界面 (1)初始化变量 在Panel的构造方法里将Panel的背景颜色设为背景色常量,并且为必要的变量赋上一个初始值。关键代码如下: public Tetrics() { super(); try { jbInit(); } catch (Exception ex) { ex.printStackTrace(); } } //重载构造方法,拥有TetricsFrame变量,方便传递函数 public Tetrics(TetricsFrame tFrame) { super(); m_tFrame = tFrame; try { jbInit(); } catch (Exception ex) {ex.printStackTrace();}
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服