


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
广州现代信息工程职业技术学院毕业(设计)论文课题名称基于JAVA开发的游戏设计学号 姓名 性别 专业计算机应用技术年级、班级07级信息安全班指导教师 职称 讲师O一0年五月十五日广州现代信息工程职业技术学院毕业论文(设计)任务书学生姓名XX专业班级07信息安全指导教师课题类型开发、创新课题名称基于Java开发的游戏设计主要研究内容一、 游戏界面的设计。二、 俄罗斯方块的设计。(一) 俄罗斯方块的造型(二) 俄罗斯方块的旋转。(三) 俄罗斯方块的运动情况(包括向左,向右和向(四) 俄罗斯方块的自动消行功能。(五) 游戏级别(速度)的自由选择。(六) 游戏得分的计算。三、 游戏菜单选项的设计及功能实现。四、 游戏的背景音乐。下)。课题要求、主要任务及数量(指论文字数、图纸规格、张数、说明书页数等)课题要求:本课题是用Java开发小游戏-俄罗斯方块为设计内容,要求在论文当中要突出俄罗斯方块开发的具体内容和功能以及开发设计的具体过程,并且要有具体的游戏作品。主要任务及数量:本课题主要任务要先完成游戏俄罗斯方块的需求分析,确定好主题,然后搜集材料,确定游戏功能模块,以及游戏功能模块的具体实现,然后进行测试,测试成功后,完成论文写作。论文字数要达到8000字以上,大概15张A4纸,打印采用A4纸规格,论文(设计)的基本结构包括前置部分:封面、中(英)文摘要,关键词和目录等;主体部分:包括前言、正文、参考文献和致谢等;附录部分:包括某些重要的原始数据、图纸等。填表时间:2010年03月10日(指导教师填写)
进度计划3月01日-3月12日交开题报告,指导老师审核通过3月12日-3月20日开展具体研究并进行市场调查,收集Java游戏编程相关书籍与案例3月20日-4月10日论文撰写,作品设计(初稿)4月10日-4月30日确定游戏功能模块,以及游戏功能模块的具体实现,测试成功修改论文4月30日-5月15日交论文和设计5月20日-24日;25日各系安排毕业论文(设计)答辩主要参考文献吴其庆《Java程序设计实例教程》北京冶金工业出版社 2006[美]ThomasPerchel著晏利斌孙淑敏邵荣翻译《JAVA2游戏编程》清华大学出版社2005[3][美[RogersCadenhead者梅兴文译《Java编程入门经典》第4版人民邮电出版社2007[4][美]JoyceFarrell 著武嘉澍译《JAVA程序设计大全》2003.12⑸(美)霍斯特曼等著陈昊鹏等译《JAVA核心技术卷II》机械工业出版社2008.12杜佳荣、马建红、滕振宇著《Java网络编程技术与实践》清华大学出版社2008.6(美)埃克尔著陈昊鹏译《Java编程思想(第4版)》机械工业出版社2007.6(美)梁(Liang,Y.D.)著王镁等译《Java语言程序设计》进阶篇 机械工业出版社摘要:随着PC机价格的日渐降低和硬件速度越来越快, 计算机已日益普及,游戏则逐渐成为人们生活中不可缺少的一部分。游戏产业也逐渐发展成熟, PC游戏已经成为一种主要的休闲方式。Java作为一种面世较晚的语言,集中体现和充分利用了若干当代软件技术新成果,如面向对象、多线程等,这些也都在它的特点中有所反映。用面向对象语言 java,在J2SDK的环境下,利用GUI的几乎所有方面编写此俄罗斯方块游戏程序。其中包括 Sun公司为Java提供的两个图形界面类库AWT和Swing。在整个游戏的开发过程中涉及到 Java基本知识的大部分内容,如事件、线程、动画、双缓冲图像、组合键控制和图形用户界面等知识。关键词:俄罗斯方块,图形用户界面,J2SDK开发环境目录TOC\o"1-5"\h\z摘要 I关键词 IV一、引言 错误!未定义书签。二、可行性研究 6(一)设计目的. 6(二)可行性研究前提. 6(三)可行性分析. 6(四)结论意见. 7三、需求分析 7(一)引言. 7(二)游戏需求. 7(三)软硬件需求. 7(四)接口控制. 7(五)方案论证. 8C++的优点. 8Java的优点 83.方案选择. 9四、概要设计 9(一)游戏设计分析. 9(二)注意事项. 10(三)游戏流程图. 10五、详细设计 11(一)游戏总体构思. 11游戏界面设计. 11(二)基本类的设计. 12(三)总体设计. 18(四)屏幕信息初始化(reset()). 19(五)方块的装载(ErsBlock()). 20(六)处理键盘事件. 21(七)方块变化(turnNext()). 22(八)控制游戏速度与自动下降(run()). 23(九)判断满行及消行. 24(十)显示控制. 25(十一)处理游戏结束. 26结论 26参考文献 27致谢 28一、引言游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。游戏逐渐成为人们生活中不可缺少的一部分。游戏产业也逐渐发展成熟。1971年,麻省理工学院的学生NolanBushnell设计了世界上的第一个业务用游戏机(俗名街机),叫做《电脑空间》。1972年,一个叫Crowther的工程师用当时最流行的主机――DEC公司的PDP-10编写一段简单的FORTRA程序。这个程序被公认为是最早的电脑游戏程序。《俄罗斯方块》是有史以来最伟大的游戏之一。然而,还有一个很强的理由让我们去掉“之一”这两个字,使它成为唯一的“最伟大的游戏”。请这样想:有哪个当代的电子游戏或电脑游戏能与它相提并论?比如说,能被100年后的人们继续拿来玩?没有,除了《俄罗斯方块》外一个也没有,它是永恒的娱乐经典,但它实际上又和那些传统的经典娱乐方式不同,因为它的本质是电子化的,所以它的确属于现代产物。比如,《俄罗斯方块》与象棋就不同,你不能以任何实体形式去玩俄罗斯方块。的确,在许多年里,《俄罗斯方块》以无数形式经过了大量变形和更改,但游戏核心依然保持不变。这些游戏的核心能够提供吸引人亲自动手实践的挑战。二、可行性研究(一) 设计目的综合运用在校期间所学理论知识和技能,设计开发俄罗斯方块,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力,为将来实际工作打下坚实的基础。(二) 可行性研究前提基本需求:系统开发的总体任务是实现游戏的可操作性、美观性、及时性。开发过程遵循软件工程规范,可采用结构化或面向对象分析设计方法。主要实现 windows的GUI程序开发,对游戏中的图形图像进行键盘控制。游戏者可以通过上下左右键来对游戏进行操作。主要开发目标:采用结构化设计方法,开发出一个可操作性、美观性、及时性的游戏,实现Windows的GUI程序开发,并通过此次软件开发过程全面提高自身的综合素质。条件假定和限制:由于本软件目前是我的初次版本,可能还存在一些问题。如果该软件提高版本,本软件需要根据游戏者的要求进行进一步的修改。可行性研究所采用的方法和步骤:通过研究分析俄罗斯方块所具备的能力及实现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。评价尺度:由于本软件是一个初级产品,对其要求不是太苛刻,所以能够达到俄罗斯游戏的一般功能即可。(三)可行性分析管理可行性:该游戏软件为首次开发,目的只为提高工作自身素质和检查自学 Java的效果,用Java3.0软件编写后在Applet管理器中运行简单明了,所有功能均根据基本需求所做。便于管理,所以在这方面是可以实现的。经济可行性:由于本游戏的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行JAVA3.0软件的电脑便可,所以不用考虑到经济问题。技术可行性:可用与本游戏的编程语言有VB,Java,Delphi等,考虑到用于编写程序的困难度,和对语言的了解程度,选择 JAVA作为编程语言。需要对变量定义、变量初始化、界面初始化、游戏初始化、然后进入游戏、处理游戏过程中的各种操作。社会可行性:本游戏的开发作为毕业课程设计以巩固先前所学的知识,以个人为单位,仅供个人平常娱乐所用,无须考虑有可能造成的社会影响, 不用考虑到法律、版权等的社会因素,所以在这方面是完全可行的。(四)结论意见综上所述,本游戏软件的技术成熟、完备。经分析 ,管理可行性、经济可行性、技术可行性和社会可行性各方面均无重大问题, 亦能达到此次设计所预期的目的, 因此本游戏软件可开始着手编写。三、需求分析(一) 引言对软件需求完全理解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、规范的过程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。(二) 游戏需求随机给出不同的形状(长条形、 Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一行便消掉,记分,当达到一定的分数时,过关,设置十关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输。游戏功能要求如下:游戏界面需求:良好的用户界面,有关数显示和分数显示。让方块在一定的区域内运动和变形,该区域用一种颜色表明,既用一种颜色作为背景,最好设为黑色。还需用另一种颜色把黑色围起来,宽度适中,要实现美感。游戏形状(方块)需求:良好的方块形状设计,绘制七种常见的基本图形(长条形、 Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。键盘处理事件:方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速)、向左、向右移动。显示需求:当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。当达到一定的分数时过关。设置十关,每关方块下落的速度不同。(三) 软硬件需求表3.1俄罗斯方块的软硬件需求操作系统Windows98/me/2000/XP/2003内存容量64MB显卡要求8M声卡要求支持DirectX8.0音效卡交互工具键盘/鼠标CPU奔腾133以上光驱8倍速以上硬盘空间400MB显示器VGA以上显示器开发软件Java可视化编程3.0以上版本(四)接口控制本软件需求通过键盘进行操作,在 Windows的操作系统下,利用键盘的上、下、左、右键对方块进行移动变形,要使用键盘的接口事件。(五)方案论证学校现已开设的课程有C语言、C++、Java,皆可用于编写俄罗斯方块程序。C++的优点C++是对C语言的扩充,扩充的绝大部分来自著名语言中的最佳特性:从 SIMULA67中吸取了类,从ALGOL68中吸取了运算符一名多用、引用和在分程序中任何地方说明变量,综合了Ada的类属和Clu的模块特点,从BCPL中吸取异常处理,从BCPL中吸取了用/表示注释。C++保持了C的紧凑、灵活、高效和易移植强的优点,它对数据抽象的支持主要在于类概念和机制,对面向对象风范的支持主要通过虚拟函数。 C++既有数据抽象和面向对象能力,语言运行性能高多,加上C语言的普及,而从C至C++的过渡较为平滑,以及C++与C的兼容程度可使数据巨大的 C程序能方便地在C++环境中重用。尽管C++当初的设计本意是帮助管理大型程序, 但其用途并不仅限于此。C++的面向对象的特性可有效地用于实际的程序设计工作。 C++常常用于设计编辑器、数据库、个人文件系统以及通讯程序等。而且,由于 C++共享C的效率,所以用C++可以构成很多高性能的系统软件。Java的优点Java是定义位于网络计算的计算机语言, 它几乎所有的特点也是围绕着这一中心展开的并为之服务的,这些特点使得Java语言特别适全于用来开发网络上的应用程序; 另外,作为一种面世较晚的语言,Java也集中体现和充分利用了若于当代软件技术新成果, 如面向对象、多线程等,这些也都在它的特点中有所反映。开台无关性:如前所述,Java语言独特的运行机制使得它具有良好的二进制级的可移植性,利用Java,开发人员可以编写出与具体平台无关、普遍适用的应用程序,大大降低了开发、维护和管理的开销。面向对象:Java是面向对象的编程语言。 面向对象技术较好地适应了当今软件开发过程中新出现的种种传统面向过程语言所不能处理的问题,包括软件开发的规模扩大、升级加快、维护量增大经及开发分工日趋细化、专业化和标准化等,是一种迅速成熟、推广的软件开发方法。面向对象技术的核心是以更接近人类思维的方式建立计算机逻辑模型, 它利用类和对象的机制将数据与其上的操作封装在一起,并通过统一的接口与外界交互,使反映现实世界实体的各个类在程序中能够独立、自治、继承;这种方法非常有利于提高程序的可维护性和可重用性,大大提高了开发效率和程序的可管理性,使得面向过程语言难于操纵的大规模软件可以很方便的创建、使用和维护。安全稳定:对网络上应用程序的另一个需求是较高的安全可靠性。 用户通过网络获取并在本地运行的应用程序必须是可依赖的,不会充当病毒或其他恶意操作的传播者而攻击用户本地的资源;同时它还应该是稳定的,轻易不会产生死机等错误,使得用户乐于使用。支持多线程:多线程是当今软件技术的又一重要成果, 已成功应用在操作系统、应用开发等多个领域。多程序技术允许同一个程序有两个执行线索,即同时做两件事情,满足了一些复杂软件的需求。Java不但内置多线程功能,而且提供语言级的多线程支持,即定义了一些用于建立、管理多线程的类和方法,使得开发具有多线程功能的程序变得简单、容易和有效。简单易学:如前所述,衍生自C++的Java语言,出于安全稳定性的考虑,去除了C+冲不容不得易理解和掌握的部分,如最典型的指针操作等,降低了学习的难度;同时Java还有一个特点就是它的基本语法部分与C语言几乎一模一样。这样,无论是学过Java再学C,还是已经掌握了C语言再业学Java,都会感到易于入门。方案选择面向对象是一种认识世界的方法,是一种程序设计方法。面向对象的观点认为,客观世界是由各种各样的实体,即对象组成的。每种对象都有自己的内部状态和运动规律, 不同对象间的相互联系和相互作用就构成了各种不同的系统, 并进而构成整个客观世界。按照这样的思想设计程序,就是面向对象的程序设计。面向对象的程序设计吸取了结构化程序设计的先进思想,并把它们同几个支持用户用新方法进行程序设计的有力概念结合在一起。所有面向对象的程序设计语言一般都包含三个概念:封装、多态性和继承性。这种方法要求语言必须具备抽象、封装、继承和多态性这几个关键要素。面向对象的程序设计,是通过数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立其副本。C++和Java在面向对象这方面都比较强, C++为了与C语言兼容,其是包含了些面向过程的成分;Java除了C++中非面向过程的部分,其程序编写过程就是设计、实现类,定义其属性、行为的过程。还有Java特有的“沙箱”机制是其安全性的保障,同时它去除了 C+冲易造成的错误指针,增加了自动内存管理等措施,保证了 Java程序运行的可靠性。所以经过再三比较了两种语言后,决定采用 Java语言编写俄罗斯方块。四、概要设计游戏设计分析Java为纯面向对象(Object-Oriented)的程序语言,它的诸多优点在此就不作论述了。从面向对象的观念出发,本程序可分为以下几个对象:方块类型数据程序运算逻辑绘图显示平台分析对象的技巧在于它的重复利用及维护效率。 试想,若要把设计出来的程序在不同的显示平台上执行,就要作大幅度的更动甚至重写, 这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别做成对象, 如方块类型数据及程序运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。1.方块类型数据方块类型虽然不同,但状态与行为都是相同的,如下表所示。表4.1方块的状态与行为对象要素说 明状态记录方块形状的7X4变量数组行为方块根据数组i=i,j=(j+1)%4进行旋转程序运逻辑程序中逻辑运算通常只作数值的运算及分析,如方块移动时阻碍判断、方块满行判断、删除满行、方块移动、定时器、事件响应等。绘图绘图会因为显示屏的不同而有所不同, 例如在单机与手机上的显示环境就不相同, 或显示效果会有所不同,例如方块的样式作修正时,即可以产生出不同的显示效果。显示平台“可移植性高”是Java的属性之一,Java的应用涉及许多领域,如手机、单机程序及
浏览器等,不同的平台对于它的设定不尽相同, 若将显示平台独立为一个类, 将有助于主程序的完整性及移植程序的快速性。
(二) 注意事项游戏在设计时除了将程序切割成多个对象外,在游戏的逻辑运算上应尽可能做到弹性化。所谓弹性就是方块地图的长与宽应该可以用参数来改变。(三) 游戏流程图图4.2数据流图5.1所示。5.1所示。图4.3游戏控制图五、详细设计(一)游戏总体构思1.游戏界面设计俄罗斯方块的游戏界面如图图5.1游戏界面图5.1分为两个窗口,即Canvas和Panel。这两个窗口并列,但所占的宽度比例不一样。两个窗口之上是菜单条。(1) 菜单的设计游戏菜单包含了游戏的控制及游戏的开发信息,此游戏菜单条包含 3个菜单分别为游戏、控制和帮助。(2) 游戏块的设计游戏块是俄罗斯方块游戏的最基本元素。在设计这个游戏块的过程中有以下思路:利用引入图形方块来构造游戏块,即每个游戏格为一个图形块。利用Java中提供的图形类对象并对其着色来实现游戏块。在本设计中采用第二种思路。首先定义一个类ErsBox来表示一个游戏单元方格,然后定义一个游戏方块,该游戏方块由4X4个ErsBox单元格组成,定义4X4的游戏方块是为了便于实现 7种不同的俄罗斯方块,因为7种俄罗斯方块的旋转变化恰好都在长、 宽各4个单元格之内。通过着色方式可轻松实现方块的28种不同状态,并对后续的游戏运行控制提供便利。(3) 游戏画布的设计游戏画布是游戏的背景窗口,方块的运动、变形都在画布中进行,画布的大小为 20X12个ErsBox单元格。另外,游戏画布还要响应键盘消息。(4) 控制面板的设计游戏的控制面板是整个游戏的框架,其中包括游戏画布、菜单、游戏提示面板(提示下一个方块信息)、控制按钮(控制游戏的开始,使菜单生效)等。(二)基本类的设计根据所要实现的功能可将俄罗斯方块的编码分为 5个类,即游戏主类、控制面板类、方块类、画布类和方格类。这五个类的作用如下。游戏主类负责游戏的全局控制。控制面板类主为用来控制游戏进程。方块类控制块的移动、下落、变形等。方格类是组成块的基本元素,用自己的颜色来表示块的外观。ErsBlock线程类动态改变画布类的方格颜色,画布类通过检进方格颜色来体现ErsBlock块的移动情况。方格类Ersbox俄罗斯方块的基本元素类是 ErsBox类。在语法上它实现了Java平台提供的Cloneable接口。方格类是组成块ErsBlock类的基本元素,用自己的颜色来表示块的外观。在ErsBox类的设计中,其主要成员变量和成员方法的说明如表 5.1和表5.2所示。表5.1ErsBox类主要成员变量名称类型说明isColorBoolean标志方块着色方案,true为前景色,false为背景色sizeDimension方格的大小表5.2ErsBox类主要成员方法名称返回类型说明ErsBox(booleanisColor)无方格类的构造方法isColorBox()Boolean判断方格是不是用前景色表现,返回true表示用前景色着色,false用背景色着色setColor(booleanisColor)无设置方格的颜色getSize()Dimension得到此方格的大小Clone()Object覆盖Object的Objectcione() 从而实现克隆2.方块类ErsBlock游戏的主要实体俄罗斯方块由 4X4个方格(ErsBox)构成。这个块不断产生和消失,
并且还要不断变化,因些可用线程来实现,该类继承于线程类 Thread。ErsBlock类的主要成员变量如表 5.3所示,主要成员方法如表 5.4所示。表5.3ErsBlock 类主要成员变量名称类型说明BOXES_ROWSStaticint一个块占的行数是4行BOXES_COLSStaticint一个块占的列数是4列LEVEL_FLATNESS_GENEStaticint让升级变化平滑的因子,避免最后几级之间速度相差近一倍BETWEEN_LEVELS_DEGRESS_TIM/IStaticint相近的两级之间,块每下落一行的时间差别为多少(ms)BLOCK_KIND_NUMBERStaticint方块的样式数目为7BLOCK_STATUS_NUMBERStaticint每一个样式的方块的反转状态种类为 4STYLES[][]Staticint分别对应对7种模型的翻转得到的28种状态canvasGameCanvas画布boxes[]ErsBox4X4的数组,表示一个方块styleint块的样式,对应STYLES的28个值之一xint起始位置,左上角在 canvas中的仃坐标yint起始位置,左上角在 canvas中的列坐标levelint游戏等级,控制块的下落速度pausingboolean控制游戏暂停的布尔变量movingboolean控制方块移动的布尔变量表5.4ErsBlock 类主要成员方法名称返回类型说明ErsBlock(intstyle,inty,intX...)无构造方法,产生一个特疋的块run()void覆盖线程类的run()方法,下落块,直到块不能再下落moveLeft()void方块向左移动一格moveRight()void方块向右移动一格moveDown()void方块向下落一格turnNext()void控制方块的变化形态pauseMove()void暂停块的下落,对应游戏暂停resumeMove()void继续块的下落,对应游戏继续stopMove()void停止块的下落,对应游戏停止erase()void将当前块从画布的对应位置抹去,直到下次重绘画布时再进行绘制display()void在下次重绘画布时让当前方块在画布的对应位置上显示出来isMoveAble(intnewRow,intnewCol)boolean判断当前块能否移动到newRownewCol所指定的位置,可以时返回true,否则返回falsemoveTo(intnewRow,intnewCol)boolean将当前块移动到newRownewCol所指定
的位置,成功时返回true,否则返回falseisTurnAble(intnewStyle)boolean当前块能否变成newStyle所指定的块样式,主要是要考虑边界以及被其他块挡住、不能移动的情况turnTo(intnewStyle)boolean将当前块变成newStyle所指定的块样式,改变成功时返回true,否则返回false3.游戏主类ErsBlockGame俄罗斯方块游戏的主类ErsBlockGame负责游戏的全局控制。它是一个JFrame类,即以窗口的形式出现的。 JFrame是Swing包中与Frame对应的类,功能与Frame类似。从界面上来讲主类中包含一个 GameCanvas画布类的实例和一个控制面板 (ControlPanel)的实例。ErsBlockGame类的主要成员变量和成员方法的说明如表 5.5和5.6所示。4.ErsBlocksGame类主要成员变量名称类型说明PER_LINE_SCOREint每填满一行计多少分PER_LEVEL_SCOREint积多少分以后能升级MAX_LEVELint取大级数疋10DEFAULTLEVELint默认级数是5canvasGameCanvas保存GameCanvas画布类的实例引用blockErsBlock保存当前活动块(ErsBlock)实例的引用ctrlPanelControlPanel保存当前控制面板(ControlPanel)实例的引用barJmenuBar菜单条包含3个菜单mGameJmenu“游戏”子菜单mControlJmenu“控制”子菜单mInfoJmenu“帮助”子菜单表5.6ErsBlocksGame类主要成员方法名称类型说明ErsBlockGame(String)无主游戏类的构造方法,负责创建游戏界面、添加消息响应等reset()无让游戏“复位”isPlaying()boolean判断游戏是否还在进行,正在进行中则返回true;否则返回falsegetCurBlock()ErsBlock获得当前活动的块getCanvas()GameCanvas获得当前画布playGame()void开始游戏pauseGame()void暂停游戏resumeGame()void让暂停中的游戏继续stopGame()void停止游戏getLevel()int获得当前游戏者设置的游戏难度setLevel(intlevel)void设置游戏的难度系数getScore()void获得游戏积分getScoreForLevelUpdate()int获得自上次升级以来的游戏积分, 升级以后此
积分清零levelUpdate()boolean当分数累计到一定数量时,游戏升级,更新成功时返回truereportGameOver()void游戏结束时报告游戏结束createMenu()void建立并设置窗口采单isGameOver()boolean判断游戏是否已经结束了, 若结束则返回truemain(String[]args)void程序入口方法在这个类中定义一内部类一一Game它是一个线程类,负责创建一个新的游戏并对游戏进行初始化、启动游戏块线程等工作。一个 Game对象就是一局游戏。1.控制面板类ControlPanel控制面板类ControlPanel是俄罗斯方块游戏的主要控制部分,从前面的总体结构可以看出该窗口是一个面板(Panel),继承于JPanel类,如图5.2所示,该面板分为三个部分,即提示下一个游戏的面板、显示游戏当前信息的面板、存放控制按钮的面板。在ControlPanel类中清寒定义了两个私有内部类:TiPanel类用于实现事项提示信息面板。ControlKeyListener 类用于实现对游戏控制键的监听。下一片方炭图5.2面板的可视部分ControlPanel类还使用了一个很重要的类 Timer,它是一个定时器,以一定的时间间隔触发一个或多个事件。ControlPanel类的主要成员变量和成员方法的说明如表 5.7和5.8所示。表5.7ControlPanel 类主要成员变量名称类型说明tfLevelrJtextField有一个文本域显示玩豕级别tfScoreJtextField有一个文本域显示玩家得分btPlayJButton控制按钮,控制游戏开始btPauseJButton控制按钮,控制游戏暂停btTurnLevelUpJButton控制按钮,增加游戏难度btTurnLevelDownJButton控制按钮,减小游戏难度plInfoJPanel显示游戏当前信息的面板, 4行1列plButtonJPanel存放控制按钮的面板,5行1列gameErsBlocksGame当前的游戏局timerTimerTimer类的对象,在一定的时间间隔内触发一个或多个事件
表5.8ControlPanel 类主要成员方法名称类型说明ControlPanel(finalErsBlocksGamegame)无主控制面板类的构造主法,负责构造各个子面板、添加动作响应setTipStyle(intstyle)无根据下一个方块的类型设置预显窗口的样式getLevel()无取得用户设置的游戏等级setLevel()无修改后的游戏难度等级reset()Object重置控制面板,将得分清 0setPlayButtonEnable()无设置“开始”按钮的状态setPauseButtonLable()无根据pause的值设置按钮的显示状态,即“开始”或“暂停”画布类GameCanvas画布类GameCanvas是该游戏中的一个窗口,该窗口如图 5.1所示。它是用一个面板来实现的,是一个继承于JPanel的类。它的大小完全是根据方格来拼接起来的,如图 5.3不难看出该窗口的大小是20X12个方格。图5.3游戏的显示窗口画布类GameCanvas的主要功能是负责方块的绘制,而每个方块由ErsBlock线程类动态改变它的每个方格颜色设置,画布类通过检进方格Ersbox的颜色来显示ErsBlock块。如果某个方格不显示,则设置这个方格的颜色为背景色,否则设置为前景色。GameCanvas类的主要成员变量和成员方法的说明如表 5.9和表5.10所示。表5.9GameCanvas类主要成员变量名称类型说明backColorColor背景颜色为黑色frontColorColor方块颜色为橘黄色boxes[][]ErsBox以方格为单位保存游戏的界面rowsint总行数colsint总列数
scoreint分数,初始时为0boxWidthint单个方格宽度boxHeightint单个方格的高度scoreForLevelUpdateint上一次升级后的积分表5.10GameCanvas类主要成员方法名称类型说明GameCanvas(int,int)无画布类的构造方法,决定方格数目GameCanvas(int,int,Color,Color)无画布类带参数的构造方法,设置前景和冃景色setBackgroundColor(Color)无设置游戏的背景色彩setBackgroundColor()Color获得游戏的背景色彩setBlockColor(ColorfrontColor)无设置游戏方块色彩getBlockColor()Color获得游戏方块色彩getRows()int获得画布中方格的行数getCols()int获得画布中方格的列数getScore()int获得游戏成绩getScoreForLevelUpdate()int获得自上一次升级后的积分resetScoreForLevelUpdate()void升级后将上一次升级以来的积分清 0getBox(introw,intcol)ErsBox获得某一行某一列的方格引用paintComponent(Graphicsg)无覆盖Jcomponent类的方法,画构件fanning()无根据窗口的大小自动调整方格的大小removeLine(introw)无当一行被游戏者叠满后将此行清除,并为游戏者加分reset()无重置画布,置积分为0
(三)总体设计图5.4程序流程图表5.1程序流程图附表序号方法名 |作用1main()定义窗口2start()打开线程3ErsBlockGame()游戏界面初始化和游戏开始开关4run()控制游戏速度5reset()游戏变量、画布初始化6ErsBlock()装载图形7getBox()返回图形的坐标属性8paintComponent()屏幕显示9checkFullLine()处理到达后的图形,进行加分,满行判断及消行处理等10playGame()游戏控制按钮11keyPressed()按键控制方块变化12isGameOver()判断游戏是否结束(四)屏幕信息初始化(reset())图5.5游戏开关控制图(在ErsBlockGame()内实现)ErsBlockGame()方法是绘制游戏界面的方法,先定义了整个游戏界面的大小,再划分各个组件的区域,界面左边是一个画布类的游戏地图,右边则分为上中下三个部分 ,上为游戏中下一方块的提示、中为游戏的得分与等级、下为各功能按钮。如果游戏开始,会调用reset()方法对游戏地图进行初始化,游戏中 repaint() 方法可以将整个屏幕清屏,再重新画一个游戏地图,实现游戏中的不断刷新。也正因如此,如果在方块向下运动中,每运动一行都要掉用一次 repaint()方法的话,屏幕便会闪烁的很快, 这样就游戏的可观性来说很不好。 所以我另外定义了一个制作图形变量(Graphicsg),这个变量只要被激活(g=getGraphics()), 就可以拥有绘图的所有功能,减少了重新绘图而造成的屏幕闪烁的问题。reset()方法是游戏初始化,游戏分数、难度等级清零,用双重循环把定义游戏地图的二维数组boxes[][]赋为false,即清空游戏地图中的所有方块。打开游戏地图清屏开关,再调用装载游戏方块getCurBlock()方法。(五)方块的装载(ErsBlock())图5.6方块装载(ErsBlock()方法)游戏的主要实体俄罗斯方块由 4X4个方格(ErsBox)图5.6方块装载(ErsBlock()方法)游戏的主要实体俄罗斯方块由 4X4个方格(ErsBox)构成.这个块不断产生和消失,并且还要不断变化(翻转),因此引用线程来实现,该类继承于线程类Thread.该类用4位16进制数表示一个4X4个方格组成的方块,即一个方块的状态,长条型方块即可表示为OXOfO0,其中Ox表示16进制,Ox后第一个数0表示方块的第一行没有填充,第二个数f表示第二行全部填充。定义7X4二维数组STYLES[][]保存7种方块的各种变换状态,行为方块的类型,列为所处的变换状态。如图 5.4所示:publicfinalstaticmt[][]STYLES-{//其2篩申状态OxOf00,0x04e0,0x4S20,0x2S40,0x6220,0x6440,{0x0660,0x4444,0x0464^OxGcOOj0xc600t0x1700,0x0e20jOxOSSOjOsOfOO,OxLlUeU,0x4620,0x2640,0x2230,0114400,0x0660,0x4444Dx04c4OxCcOO0xc6000x0740:OxBeOO0x0550}//畏泉型的四种狀态'T型的四种状态良辽'型的:::迂‘型的四种状态X’型加四种狀态反,T型的//////////方块倔种狀态四种状态图5.7 俄罗斯方块一个STYLES中的元素是用一个整数表示的 ,如横长条是用0x0f00表示,再用key=0x8000与STYLES的某个元素style进行“与”运算,即取出了 style中的第一位,这一位如果是1,则表示对应的方格在该方块中是要用色彩来显示的,因此产生一个方格,即一个ErsBox对像。检查之后再作位移运算 key>>=1,如0x8000移位后变成0x4000,再利用它进行检查与style第二位对应方块的位置是否应该产生一个有色彩的方格, 如此检查方块的16个方格的位置。
调用一个随机数,intstyle=调用一个随机数,intstyle=ErsBlock. STYLESnt)(Math. random()*7)][(int)(Math.random()*4)],第一个数取值在0到6之间,用这7个数字表示7种方块,第二个数为方块的翻转类型。图形坐标装载完后,先判断在方块的下一行是否已有方块, 如果有则说明方块以到达游戏地图的顶端,游戏将结束。(六)处理键盘事件图5.8键盘事件功能图keyPressed()是处理按键的事件,每当有按键,也就是方块要产生变化时,当方块要进行上(变形)、下、左、右变化时,先调用isMoveAble()对方块将要移动到的位置进行判断,判断是否有障碍,有则保持原来的位置不变,没有则根据所按的键调用 moveTo()移动方块到指定坐标。再把方块的位置显示在屏幕上。方块的移动其实也只是对行或列坐标的增减而己。例:判断可移动性privatebooleanisMoveAble(intnewRow,intnewCol){erase();for(inti=0;i<boxes.length;i++){for(intj=0;j<boxes[i].length;j++){
if(boxes[i][j].isColorBox()){ErsBoxbox=canvas.getBox(newRow+i,newCol+j);if(box==null||(box.isColorBox())){display();returnfalse;
}}display。;returntrue;}例:}移动方块到指定坐标privatesynchronizedbooleanmoveTo(intnewRow,intnewCol){if(!isMoveAble(newRow,newCol)||!moving)returnfalse;erase();y=newRow;x=newCol;display();canvas.repaint();returntrue;}(七)方块变化(turnNext())图5.9方块变型流程图当按下向上键时,将会执行方块变化事件(turnNext())。常见的方块有7种(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),所有图形及其四种变化类型都保存于二维数组STYLE变化时,即用一双重for循环匹配数组的行号与列号(得到方块现所处的类型),之后,数组行号不变,列号加一,刷新方块,即: i=i,j=(j+1)%4(每种方块有四种旋转状态,可循环变化)。当图形要改变时,它将先调用 isTurnAble()判断变化后的位置是否没有任何小方块,或是否已到达游戏地图的边缘, 如果有小方块到达边缘,则不执行方块变化,这也是一种障碍物的判断;如果没有的才处理方块变化。例:处理方块变型publicvoidturnNext(){for(inti=0;i< BLOCK_KIND_NUMBER{
for(intj==0;j<BLOCK_STATUS_NUMBERif(STYLES[j]===style){intnewStyle== STYLES|[(j+1)%BLOCK_STATUS._NUMBERturnTo(newStyle);}}}}return;(八)控制游戏速度与自动下落( run())图5.10sleep对游戏的控制为了使每一关中每个方块的下降速度的一致性, sleep(BETWEEN_LEVELS_DEGRESS_TIME*(ErsBlocksGame.MAX_LEVELevel+ LEVEL_FLATNESS_G)ENEl个固定的数字,BETWEEN_LEVELS_DEGRESS为相差两级间块每下落一行的时间差, LEVEL_FLATNESS_GENE是让升级后速度变化平滑的因子, 避免最后几级之间速度相差近一倍。 每次循环时都会根据关数(leveI)的级别决定所增加的数字大小。可以说控制游戏的关数,也就是控制速度,也可以说是对休眠时间长短的控制, 休眠时间越短则游戏关数越高, 游戏速度就越快。因为这个数字就是控制方块在每行的休眠时间 ,不会受游戏者按键的影响。Sleep(…) 是游戏休眠,括号中的数字将决定休眠的时间,也是方块在此行停留的时间。run()是循环运行的,moving变量控制方块的下落过程,如果游戏还没开始、 moveTo()方法移动到某个位置不成功或 stopMove()要停止方块时下落功能将被锁定。正因为有自动向下运行的功能,那么也少不了障碍物的判断和是否到达底行的判断,只要符全其中之一,下落就会中止。否则就为了清除旧图而保存方块当前坐标, 然后方块再向下移动一行。 方块向下运动时,先保存旧方块的坐标,记录新的方块坐标,然后用黑色把旧方块覆盖,再画出新方块的图形,由于电脑处理速度快,在视觉效果上就像方块向下运动了一行一样。(九)判断满行及消行去。利用两重for循环语句分别逐行逐列从屏幕最底行依次向上地检查是否有未填充的方格如果某一行有未填充的方格则将 fullLineColorBox 设置为false,再利用break语句跳出内循环然后检查下一行。如果 fullLineColorBox 一直保持为真则表明这一行的方格都被填满,按照该游戏的规则删去这一行并为游戏者加分。 该行删去后它之上的所有行的方格都要下移一行。例:满行判断publicvoidcheckFullLine(){for(inti=0;i<canvas.getRows();i++){introw=-1;booleanfullLineColorBox=true;for(intj=0;j<canvas.getCols();j++){if(!canvas.getBox(i,j).isColorBox()){fullLineColorBox=false;break;}if(fullLineColorBox){row=i--;canvas.removeLine(row);}}}例:清除满行,并为游戏者加分publicsynchronizedvoidremoveLine(introw){for(inti=row;i>0;i--){for(intj=0;j<cols;j++)boxes[i][j]=(ErsBox)boxes[i-1][j].clone();}score+=ErsBlocksGame.PER_LINE_SCO;REscoreForLevelUpdate+=ErsBlocksGame. PER_LINE_SCO;RErepaint();}(十)显示控制游戏过程中,方块不断下落、移动和变换类型,在变化过程中,先调用erase()方法将当前块从画布的对应位置抹去,要等到下次重画画布时才能反映出来,然后进行可移动性和可变换性等判断,再调用display()方法让当前块在画布的对应位置上显示出来,不过要等到下次重画画布时才能看见。例:消除当前块privatevoiderase(){for(inti=0;i<boxes.length;i++){for(intj=0;j<boxes[i].length;j++){if(boxes[i][j].isColorBox()){ErsBoxbox=canvas.getBox(i+y,j+x);if(box==null)continue;box.setColor(false);}}}}例:重新显示当前块privatevoiddisplay(){for(inti=0;i<boxes.length;i++){for(intj=0;j<boxes[i].length;j++){
if(boxes
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 资产管理顾问合同(2篇)
- 科技公司如何培养高效的领导团队
- 科技前沿石墨产业人才需求概览
- 小学四年级数学三位数乘两位数竞赛测验例题
- 三位数乘以一位数过关作业习题带答案
- 2025年协作研发协议合同样式
- 2025年结束实习合同策划书模板
- 2025年标准燃气管道敷设合同文本
- 2025年加油站管理承包合同模版
- 2025年个人计算机技术授权合同
- 第四届博德世达杯全国石油工程知识竞赛样题及答案模板
- 西北工业大学英文简介
- 《动画场景设计》第一章 动画场景设计概述
- 2023年湖北宜昌伍家新城投资控股集团有限公司招聘笔试题库含答案解析
- 内燃平衡重式叉车
- 品质管理人员角色定位
- 专业形体训练项目课程标准
- 人保理赔员试题车险查勘定损
- 小学生寒假生活成长册PPT
- GB/T 25775-2010焊接材料供货技术条件产品类型、尺寸、公差和标志
- 10KV开关柜教学讲解课件
评论
0/150
提交评论