收藏 分享(赏)

毕业论文俄罗斯方块的实现系统.doc

上传人:myk79025 文档编号:7150601 上传时间:2019-05-07 格式:DOC 页数:43 大小:701KB
下载 相关 举报
毕业论文俄罗斯方块的实现系统.doc_第1页
第1页 / 共43页
毕业论文俄罗斯方块的实现系统.doc_第2页
第2页 / 共43页
毕业论文俄罗斯方块的实现系统.doc_第3页
第3页 / 共43页
毕业论文俄罗斯方块的实现系统.doc_第4页
第4页 / 共43页
毕业论文俄罗斯方块的实现系统.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

1、哈 尔 滨 理 工 大 学毕 业 设 计题 目: 俄罗斯方块单人游戏的实现 院 、系: 软件工程系 姓 名: 指导教师: 系 主 任: 2012 年 06 月 20 日哈尔滨理工大学专科生毕业论文I俄罗斯方块单人游戏的实现摘 要论文描述了电脑游戏的发展现状,和开发此游戏的意义。遵循软件工程的知识,从软件问题定义开始,接着进行了主要功能的描述、实现原理的分析、详细设计,最后对软件进行了测试,整个开发过程贯穿软件工程的知识体系。此次设计在 Microsoft Windows XP 系统下,以 Java为开发语言,在 Eclipse 开发平台上进行游戏的设计与实践。本游戏开发的总体任务就是实现游戏的

2、可操作性,以及界面的简单清晰性。整个开发过程遵循软件工程规范,采用 JAVA GUI 编程来实现界面以及事件的控制,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,通过菜单栏中的相应菜单选项实现游戏的开始、结束、变换方块、积分以及等级的功能。由于知识以及能力的限制,本游戏所实现的功能不够强大,可对本游戏进行改善,从而增强游戏的功能。通过研究分析俄罗斯方块所具备的能力及实现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。关键词 电脑游戏;俄罗斯方块游戏;Java 语言哈尔滨理工大学专科生毕业论文IISingle game

3、 of TetrisAbstractThe paper describes the development status of the computer game, and the development of the significance of this game. Follow the knowledge of software engineering, start from the definition of a software problem, followed by a description of the main functions of the principle of

4、analysis, detailed design, the final test of the software throughout the development process throughout the software engineering body of knowledge. The design of the Microsoft Windows XP systems, the Java development language, game design and practice in the Eclipse development platform.The developm

5、ent of the overall mission of this game is to achieve operability of the game, as well as clear and simple interface. Throughout the development process follows the software engineering specifications, using JAVA GUI programming interface and control of events, according to the four directions of th

6、e keyboard keys to control flip, left, right and down operation, selected through the menu bar of the corresponding menuthe game start, end, transform the box score and level of functionality. Knowledge and capacity constraints, this game is not powerful enough, you can make improvements to the game

7、, thereby enhancing the functionality of the game. Through research and analysis capability of Tetris and to determine the main structure. With my best ability to achieve at this stage, the most concise, easiest way to edge development side of the test side to modify a primary game software.哈尔滨理工大学专

8、科生毕业论文IIIKeywords Computer game;Tetris game;Java language哈尔滨理工大学专科生毕业论文IV目录摘 要 .IAbstract .II第 1 章 绪论 11.1 电脑游戏的发展现状 11.2 开发意义 2第 2 章 主要功能的描述 32.1 游戏的主要功能 32.2 Java GUI 功能 .32.3 多线程的功能 4第 3 章 实现的原理 53.1 Java GUI 实验原理 .53.1.1 基本窗口类 53.1.2 原子构件 73.1.3 菜单类 83.1.4 事件处理 93.1.5 布局管理 103.1.6 图形类与图形的绘制 113.

9、2 Java 多线程机制 .11第 4 章 设计的方案及实现 124.1 设计方案 .124.1.1 游戏界面设计 124.1.2 游戏控制设计 124.1.3 基本类设计 12哈尔滨理工大学专科生毕业论文V4.2 程序实现 174.2.1 菜单类的实现 174.2.2 方格类的实现 184.2.3 方块类的实现 184.2.4 主类的实现 184.2.5 控制面板类的实现 194.2.6 游戏画布类的实现 19第 5 章 测试 205.1 菜单界面测试 205.2 功能测试 235.3 测试总结 27结论 28致谢 30参考文献 32附录 33哈尔滨理工大学专科生毕业论文1第 1 章 绪论1

10、.1 电脑游戏的发展现状游戏在一般人眼中应该是休闲娱乐的东西,尤其电脑游戏更为如此,在传统观念理念上,电脑游戏应该是小孩子玩的东西,成年人再玩的话无非是玩物丧志,但是时代发展如此迅速的当代,这个理念必须要有所改变,中国的游戏事业在全世界起步还算早,但是由于种种原因发展不是十分迅速,在成效上看来并不十分乐观。电脑游戏是一种新兴的文化现象,也是一个新型的朝阳企业。作为这么文化类别的后来者,我们与发达国家、发达地区相比,无论是理论、开发、研究还是投入等方面仍有一段不算小的距离,但当务之急需要解决的,也许还不仅仅是上述问题,游戏开发者们对所从事的这项工作的敬业态度,与自省、自重可能比玩家口袋里的银子还

11、要可贵得多。与单机游戏日益衰落正相反的是,网络游戏方兴未艾,遍地开花。国内网络游戏开发、制造商也有非常成功的,比如,九城、盛大、网易、金山、久游等等。但是,与此同时,我们也看到了,在繁荣的背后,潜在的商机,一是来自国内游戏制作者在是做理念上的不足和困乏,另外就是资金问题。这两方面与欧美的制作距离很大,随着魔兽世界的成功代理,接踵而来的是更多高品质,高水准,高制作的国外网络游戏进入中国,最近,“九域”即将代理的奇迹世界,卓越之剑,公会战争三款大制作,都是目前在欧美顶级的作品,这无疑对国产网络游戏带来巨大竞争压力和市场的威胁。如果国内制作游戏商还停留在纷纷推出所谓的“免费”游戏而实际上是在变相收费

12、的运营层面上,无疑是作茧自缚,相当于自己在毁掉已取得的成绩。中国的游戏发展缓慢的原因有很多种,例如盗版的横行,开发游戏人员的创新意识不强,守旧的思想风靡等等。例如现在 PC 游戏的行情就不十分景气。因此我觉得创新方面还有很多改进的余地和改进的方面:1、着眼于品质:看到台湾一个电玩节目,里面就回顾了 DOS 版的仙剑,这款游戏在全亚洲都很流行,可悲的是,这十几年来,我们只有这一款。2、低价化:当年暴雪很有想法的把魔兽争霸 3 交给中国的奥美科技,推出只有 20 元的低价正版还能享受 BATTLENET,何乐而不为呢。3、开阔眼界:腾讯官方统计 QQ 农场最高日在线人数达到 1600 万,而植物大

13、战僵尸仅一家游戏网站,中英版本合计下载数量可达到近百万。这可是说是将 WOW、DNF、CSOL 等大众网络游戏远远地抛在了后面,哈尔滨理工大学专科生毕业论文2这不能不说明一个问题,这两款游戏是非常成功的。他们凭借的创新的思维简单的操作等方面吸引玩家。这也是游戏公司成功的案例,值得很多同样的网络游戏公司所借鉴。相信中国游戏的发展,是会有很光明的未来的。这在于我们这代的程序设计人员的创新与努力,我们已经有很好的技术支持了,加上优秀的思想定然会有很高的前景的 1。1.2 开发意义在现金电子信息高速发展的时代,电子游戏已深入人们的日常生活,由于经典有趣,因而得到了广泛的流行,成为老少皆宜的娱乐方式。俄

14、罗斯方块是一款风靡全球的游戏,最初是由苏联人制作的,规则简单,容易上手且游戏全过程变化无穷,可以让玩家充分感受游戏中的乐趣。俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏, 深受广大玩家喜爱。这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来训练玩家的反应能力。谈到游戏软件, 大多数人都认为其神妙莫测, 高不可及。而一般游戏软件也确实具有很高的技术难度, 随着开发工具及软件开发方法学的不断发展, 动手开发游戏也不是十分困难的。俄罗斯方块游游戏软件不计其数, 网上就有好多关于实现的复杂算法和设计, 其难度让一般初学者望而却步。而俄罗斯

15、方块是编程的入门项目,它可以检验编辑人员的知识熟练程度。在游戏设计方面,俄罗斯方块游戏的设计工作既复杂又富有挑战性,它包含的内容多,涉及的知识广泛,与图形界面联系比较大。在设计过程中必将涉及到各个方面的知识,这对于 JAVA 设计者而言,是个很好的锻炼机会 2。 游戏是一种新兴的媒体,是一种新的设计领域,也是一种新的艺术形式。同时开发电脑游戏可以提高学生研究和学习的兴趣,培养他们通过互联网收集和获得信息、分析整理信息、撰写报告论文等能力。俄罗斯方块的开发无疑是给电脑游戏的增加了色彩,拓宽了电脑游戏的平台,给人们带来乐趣。哈尔滨理工大学专科生毕业论文3第 2 章 主要功能的描述2.1 游戏的主要

16、功能游戏开发至今已经有 30 多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。俄罗斯方块是一个非常复杂但是比较有趣并且耐玩的,也是大家比较熟悉的单击小游戏。游戏中共有 7 种方块,每种方块由 4 个方格组成。这7 种方块可以旋转 90 度、180 度、270 度,因此每种方块有 4 种状态,7 种方块总共有 28 种状态。28 种状态的方块随机产生,自由下落,落下时可由玩家用上、下、左、右控制键控制翻转和移动,以便以玩家所需要的形态和位置落下。如果落下时,方块的方格能填满某一行,则这一行可消去。消去一行后,游戏可给玩家加分,若由存在空格的方块填满整个窗口

17、,则游戏失败。游戏功能需求如下:游戏界面需求:设计良好的游戏界面可以让玩家充分感受到游戏带来的娱乐性,游戏的背景色和方块的颜色都在设计之内,在一定的区域内运动和变形,落下后的障碍物用黄色显示,这样看起来会有一定的美感。游戏形状需求:用数组作为存储方块 28 种状态的数据结构,即长条形、Z 字形、反 Z 形、田字形、7 字形、反 7 形、T 字型,各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。处理事件需求:方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速) 、向左、向右移动。显示需求:当不同的方块填满一行时可以消行,剩余方块向下移动并统计分

18、数。当达到一定分数的时候,会增加相应的等级。2.2 Java GUI 功能利用 Java 实现的俄罗斯方块游戏几乎能用到 Java GUI(Graphical User Interface)的所有方面,其中包括 Sun 公司为 Java 提供的两个图形界面类库。1、AWT(Abstract Windowing Toolkit),中文译为抽象窗口工具包,AWT 是 Sun 公司最早推出的 GUI 类库,其中提供了建立和设置 Java 的图形用户界面的基本工具。AWT 由 Java 中的 java.awt 包提供,里面包含了许多可用来建立与平台无关的图形用户界面(GUI)的类,这些类被称为构件(C

19、omponents)。2、Swing 包是 Java Foundation Classes(JFC)的一部分,与 AWT 的重量级构件不同,Swing 中大部分是轻量级构件。正是这个原因,Swing 几哈尔滨理工大学专科生毕业论文4乎无所不能,不但有各式各样先进的构件,而且更为美观易用。所以一开始使用 AWT 的程序员很快就转向使用 Swing 了。本设计中俄罗斯方块的实现的界面,主要是采用了 Swing 类库。(1) 本游戏的基本窗口类包括 JFrame、JWindow、JPanel 和 JDialog等。(2)在这里原子构件会用到标签类 JLabel、按钮类JButton、JColorCh

20、ooser 类文本域 JTextField。(3)对一个大的 GUI 程序而言通常包含各种菜单,俄罗斯方块游戏中也包含许多种菜单,如 JMenu、JMenuItem 、JMenuBar 等.(4)俄罗斯方块中的处理事件一般会用到 ActionEvent 类、ActionListener 类、KeyEvent 类、KeyEvent 类、KeyListener 接口、KeyAdapter 类。(5)俄罗斯方块的主界面采用的是 BorderLayout 布局。BorderLayout 由 5 个区域来放置构件,分别标记为North、 South、East、West 和 Center。用 add 方法

21、加入构件时要用一个标记来指定构件放到 5 个区域中的哪一个。(6)使用 Graphics 类提供的绘图方法“public void paint(Graphics g)”可以画出线条、矩形、圆形等图形 3。2.3 多线程的功能俄罗斯方块游戏的实现充分利用了 Java 的线程功能。由于游戏中方块的动态性,每个方块有一定的生命周期,所以选用线程来实现方块。一个方块用一个线程类对象实现,该类继承于 Thread 类,当一个方块出现时也就表示一个线程对象产生并开始运行。通过对键盘消息的响应,实现移动、下落、变形等操作。在Java中可通过run()方法为线程指明要完成的任务,用继承Thread类并覆盖ru

22、n方法和通过实现 Runnable接口的类调用run()方法这两种技术为线程提供run()方法 4。哈尔滨理工大学专科生毕业论文5第 3 章 实现的原理游戏块的运行采用多线程(Thread)机制,界面利用JavaSwing提供的图形类实现。游戏采用开源开发环境Eclipse 。在整个游戏的开发过程中涉及了Java 基本知识的大部分内容。3.1 Java GUI 实验原理3.1.1 基本窗口类 图形用户界面的程序效果类似于 Windows 系统下运行的程序。在俄罗斯方块游戏中用到 JFrame、JWindow、JPanel 和 JDialog 等几种窗口类: 1、JFrame 类JFrame 类

23、与 Frame 类略微不兼容。与其他所有 JFC/Swing 顶层容器一样,JFrame 包含一个 JRootPane 作为其唯一的子容器,即 ContentPane,该内容面板直接或间接地容纳其他可视构件。为了方便地使用 add 方法及add 方法的其他版本, JFrame 类重写了 remove 和 setLayout 方法。ContentPane 始终一直都是是非 NULL 的。若试图将其设置为 NULL会导致 JFrame 抛出异常。默认的内容窗格上会设置有 BorderLayout 管理器。与 Frame 不同,当用户试图关闭窗口时 JFrame 知道如何进行响应。用户关闭窗口时默认

24、的行为仅仅是简单地隐藏 JFrame。若要更改默认的行为可调用方法 setDefaultCloseOperation(int)。JFrame 类的构造方法有如下几个版本。JFrame():构造一个初始时不可见的新窗口;JFrame(String title):创建一个新的、初始不可见的、具体指定标题的 JFrame;JFrame(GraphicsConfigurationgc):以屏幕设备的指定 GraphicsConfiguration 和空白标题创建一个 JFrame;JFrame(String title,GraphicsConfiguration gc):创建一个具体的指定标题和指定屏

25、幕设备的 GraphicsConfiguration 的 JFrame。2、JWindow 类JWindow 类继承于 Window 类。Window 类表示一个没有边界和菜单的最高层的窗口,默认的是使用 BoederLayout 布局,在这个布局中可以包含 AWT 的其他构件。窗口初始化时也是不可见的。一个基本的 GUI 程序应该能够在屏幕上显示信息,而且至少要包含一个 GUI 构件使得用户能够轻松地响应用户的要求,这就需要用到事件响应类。3、JPanel 类JPanel 类的构造方法有如下几个版本:哈尔滨理工大学专科生毕业论文6(1)Jpanel() :创建具有双缓冲和流布局的 Jpane

26、l。(2)Jpanel(boolean isDoubleBuffered):创建具有 FlowLayout 布局和指定缓冲策略的 Jpanel。(3)Jpanel(LayoutManager layout):创建具有指定布局管理器的Jpanel。(4)Jpanel(LayoutManager layout,boolean isDoubleBuffered):创建具有指定布局管理器和缓冲策略的 Jpanel。4、JDialog 类Dialog 类具有两种类型的对话窗口:(1)模态对话框(Modal Dialog):这种对话框阻塞它的父对象的输入,并且必须在它的父对象再次获得输入之前被关闭或自动消

27、失。(2)非模态对话框(Non-modal Dialog):这种对话框并不阻塞它的父对象的输入,它可以与父对象并存,除非特别声明,否则一般的对话框是非模态的。JDialog 类也分为模态和非模态的,并且只能在 Dialog 和 Frame 的基础上创建。若用 JDialog 作为对话框,则必须实现对话框中的每一个构件。可利用 JOptionPane 类显示一段文字或作一些选择,它包括一些静态方法showxxxDialog,并可产生 4 种简单的对话框。JDialog 类的构造方法有如下几个版本:(1)JDialog():创建一个没有标题并且没有指定 Frame 拥有者的无模式对话框。(2)JD

28、ialog(Dialog owner):创建一个没有标题但将指定的 Dialog 作为其拥有者的无模式对话框。(3)JDialog(Dialog owner,boolean modal):创建一个具有指定拥有者和模式的对话框。(4)JDialog(Dialog owner,String title):创建一个具有指定标题和指定拥有者的无模式对话框。(5)JDialog(Dialog owner,String title,boolean modal):创建一个具有指定标题、模式和指定拥有者的对话框。JDialog 的构造方法还具有将上述方法中的 owner 的对象的类型改为JFrame 和 JW

29、indow 的相应各个版本:(1)JDialog(Frame owner):创建一个没有标题但将指定的 Frame 作为其拥有者的无模式对话框。(2)JDialog(Window owner):创建一个具体指定的 Window 类型的拥有者和空标题的无模式对话框 5。哈尔滨理工大学专科生毕业论文73.1.2 原子构件俄罗斯方块游戏中用到的原子构件很多,这些构件的用法比较简单,下面对俄罗斯方块游戏中用到的原子构件进行简单介绍:1、标签类 JLabelJLabel 类的构造方法有如下几个版本:(1)JLabel() :创建无图像并且其标题为空字符的 JLabel。(2)JLabel(Icon im

30、age):创建具有指定图像的 JLabel 实例。(3)JLabel(Icon image,int horizontalAlignment):创建具有指定图像和水平对齐方式的 JLabel 实例。(4)JLabel(String text):创建具有指定文本的 JLabel 实例。(5)JlabelI(String text,Icon icon,int horizontalAlignment):创建具有指定文本、图像和水平对齐方式的 JLabel 实例。(6)JLabel(String text, int horizontalAlignment)创建具有指定文本和水平对齐方式的 JLabel

31、实例 6。2、按钮类 JButtonJButton 类的构造方法具有如下 5 个版本:(1) JButton();创建不带有设置文本或图标的按钮。(2) JButton(Action a):创建一个按钮,其属性从所提供的 Action 对象中获取。(3) JButton(Icon icon):创建一个带图标的按钮。(4) JButton(String text):创建一个带文本的按钮。(5) JButton(String text,Icon icon):创建一个带初始文本和图标的按钮。3、JColorChooser 类三个级别的 API:(1)显示具有模式颜色选择器的对话框并返回用户所选的静态

32、方法。(2)创建颜色选择器对话框的静态方法,可以指定当用户按下其中一个对话框按钮时要调用的 ActionListener。(3)能直接在任何容器中创建 JColorChooser 窗格实例。可以添加PropertyChange 监听器以检测当前“颜色”属性何时更改。JcolorChooser 类的构造方法有如下三个版本:JcolorChooser():创建初始颜色为白色的颜色选择器窗格; JcolorChooser(Color initialColor):创建具有指定初始颜色的颜色选择器窗格;JcolorChooser(ColorSelectionModel model):创建具有指定 Col

33、orSelection -Model 的颜色选择器窗格。4、文本域 JTextField哈尔滨理工大学专科生毕业论文8JTextField 是 JTextComponent 类的一个子类,JTextComponent 类又是JComponent 的一个子类。JTextField 与 java.awt.TextField 应具有源代码兼容性,当光标移动到文本域并且按回车键时,它触发一个 ActionEvent 事件。JTextField 类构造方法有如下 4 个版本:(1)JTextField():构造一个 TextField 对象。(2)JTextField(Document doc,Stri

34、ng text,int columns):构造一个JTextField,它使用给定的文本存储模型和给定的列数。(3)JTextField(String text) 构造一个指定文本初始化的 TextField。(4)JTextField(String text,int columns):构造一个用指定文本和列初始化的 TextField。3.1.3 菜单类 菜单类包括:1、JMenu一个菜单(JMenu) 由多个菜单项组成并具有一个标题,这个标题出现在菜单条上,当单击这个标题时这些菜单项立即弹出。选择一个菜单项就可以引起一个动作事件。多个菜单又可以组合成一个新的菜单或菜单条,增加在最顶层的窗口

35、(Frame 或 JFrame)上。菜单的实现是一个包含 JMenuItem 的弹出窗口,用户选择 JMenuBar上的项时会显示该 JMenuItem。除 JMenuItem 之外, JMenu 还可以包含JSeparator。菜单在本质上是带有关联 JPopupMenu 的按钮。当单击按钮时就会显示 JPopupMenu。如果按钮位于 JMenuBar 上则该菜单为顶层窗口。如果按钮时另一个菜单项,则 JPopupMenu 就是右拉菜单。菜单中的菜单项也可以是菜单,可使用它自身的 add 方法来增加菜单项或菜单对象。2、JMenuItem菜单项在本质上是位于列表中的按钮。当用户单击按钮时则

36、执行与菜单项关联的操作。3、JMenuBar一个菜单条可包含多个菜单,通过 add 方法可增加这些菜单对象。菜单条可通过 JFrame 的 setJMenuBar 方法加入到一个 JFrame 中。将 JMenu 对象添加到菜单条以构造菜单。当用户选择 JMenu 对象时就会显示其关联的 JPopupMenu,并允许用户选择其上的某一个 JMenuItem对象。哈尔滨理工大学专科生毕业论文93.1.4 事件处理 大多数的 Java 程序通过 GUI 构件(例按钮、窗口、菜单等)与用户进行交互,俄罗斯方块游戏也是如此。俄罗斯方块游戏与用户最重要的交互活动是用户通过键盘来控制游戏、通过按钮和菜单来

37、设置游戏。前者在Java 中表现为键盘事件,后者变现为动作时间。在 Java 中事件由分层的事件类表示,而接口则描述了对特定事件响应的方法。想要处理这些事件的类就必须实现一个或多个接口以及这些接口中的方法。下面就讨论表示这两种事件的 Java 类和相应的监听和处理接口:1、ActionEvent 类产生事件的构件称为事件源,每个事件源可以产生多个特定类型的事件,这些事件可进入到系统级事件队列中。构件可以注册监听这些事件的监听接口,并且必须实现该接口特定的方法以响应来自事件源的事件。只有那些已注册事件监听的构件所产生的事件才能传给 Java 虚拟机。如果一个事件源注册了多个监听接口,那么每个监听

38、接口都会接收到原始事件发送的信息。2、ActionListener 类接口用来说明一些抽象方法,然后由类来实现这些方法。ActionListener 是 java Awtevent 包中的一个接口,它定义了事件的处理方法actionPerformed。一个实现 ActionListener 的类必须包含一个 actionPerformed 方法。为了保持这个方法的简单性,在 ifelseif 语句的相应分支内部将事件交给一些相应处理模块来完成。如果某个处理方法对其他类是有用的并且不会产生副作用,则应使其成为 public 方法:一个动作事件的监听与处理可以使用如下规则:(1)声明一个 Acti

39、onListener 类型的 Listener 变量并存储监听接口的引用。(2)使用某个构件的 addActionListener 方法将 listener 设置为监听者。(3)创建(或用户的交互行为产生)一个 action 事件,然后调用 listener 的 ationPerformed 方法。在俄罗斯方块游戏中产生动作事件的构件有菜单项和按钮。这两个事件源上的监听者都是通过匿名类产生的,并且在增加监听者(addActionListener)的同时生成(new) 监听者对象,而这个匿名类主要是定义了相应 actionPerformed 方法。该监听者对象直接绑定到事件源上之后就可以监听该构

40、件上的事件。有三个典型的菜单项和按钮的处理方式(见附录) 。哈尔滨理工大学专科生毕业论文103、KeyEvent 类对于按下键和释放键事件,getKeyCode 方法将返回事件的 KeyCode。对于键入事件,getKeyCode 方法将返回 VK_UNDEFINED。按下键和释放键事件是低级别事件,依赖于平台和键盘布局。只要按下或释放键就会生成该事件,它们是发现不生成字符输入键(如动作键、修改键等)的唯一方式。通过 getKeyCode 方法可指出按下或释放的键,该方法返回一个虚拟键码。按下和释放键盘上的键会导致(依次)生成以下键事件:(1)KEY_PRESSED(2)KEY_TYPED(只

41、在可生成有效 Unicode 字符时产生) 。(3)KEY_RELEASED。但在某些情况下(例如在激活自动重复或输入方法时) ,该顺序可能会有所不同(并且与平台有关) 。4、KeyListener 接口KeyListener 包含的主要抽象方法如下:(1)void keyPressed(KeyEvent e):按下某个键时调用此方法。(2)void keyPeleased(KeyEvent e) :释放某个键时调用此方法。(3)void keyTyped(KeyEvent e):键入某个键时调用此方法。5、KeyAdapter 类使用扩展 KeyAdapter 的类创建监听器对象,然后使用组

42、建的addKeyListener 方法向该组件注册此监听器对象。当按下、释放或键入某个键时将调用监听器对象中的相应方法,并将 KeyEvent 传递给它。俄罗斯方块游戏就是以这种方式实现游戏的按钮控制键的监听器,如下代码定义了 ControlKeylListener 类:private class ControlKeyListener extends KeyAdapter 。然后可在该类中实现 KeyAdapter 的方法 7。3.1.5 布局管理 Java 使用布局管理起来管理版面布局。布局管理器按照布局说明选择构件的最佳位置,保证布局的总体外观在不同的操作系统下与 Java 程序的描述保持

43、一致。在游戏中用到的三个布局管理器,如表 3-1 所示。表 3-1 AWT 的三个常用布局管理器布局管理器 描述哈尔滨理工大学专科生毕业论文11FlowLayout 在这种布局下 add 方法按照构件的顺序将构件从左到右加到一行中。每个构件按照需占据的一定的空间,一行放不下时要换行,每行构件均居中排列GrilLayout 将构件放在一个多行多列的表格中。表格中每个单元格大小相同,单元格的大小有最大的构件所决定,用 add方法将构件一行一行地从左至右加入到布局的每个单元格中BorderLayout 由 5 个区域来放置构件,分别标记为North、 South、East、West 和 Center

44、。用 add 方法加入构件时要用一个标记来指定构件放到 5 个区域中的哪一个内3.1.6 图形类与图形的绘制 由于 Frame 类继承于 Component 类,所以可以通过覆盖所继承的paint 方法来进行绘图。还有一种很流行的绘图方法,即创建一个单独的类,这个类继承于 Canvas 类并且覆盖 paint 方法。俄罗斯方块游戏采用的是继承于 Canvas 类的方式。Canvas 继承于 Component 类,并继承了它的 paint(Graphics g)、update(Graphics g)以及 repaint()方法。Cavas 作为图形对象时,自动调用repaint 方法进行更新。

45、在 repaint 中需要调用 update 方法,update 方法在清除屏幕后再调用 paint 方法。使用 Cavas 作为绘图工具时首先创建一个继承于 Cavas 类并且覆盖 paint 方法,再将这个类作为一个成员加入到类似于 Frame 或 Applet 的类中,用某种布局管理器对其进行定位 8。3.2 Java 多线程机制在游戏过程中需要对玩家的控制进行实时处理,这就涉及到了 Java 的一个重要的特性:多线程。在此就不做介绍了。哈尔滨理工大学专科生毕业论文12第 4 章 设计的方案及实现4.1 设计方案4.1.1 游戏界面设计俄罗斯方块的游戏界面分为两个窗口,即 Canvas

46、和 Panel。这两个窗口并列,但所占的宽度比例不一样。两个窗口之上是菜单条。1、菜单的设计为了方便运行,本设计将俄罗斯方块游戏的菜单系统去掉每个菜单项的具体功能,仅保留菜单的框架和退出功能。它的菜单项没有实际功能。2、游戏块的设计游戏块是俄罗斯方块游戏的最基本元素。设计思路为:利用 Java 中提供的图形类对象并对着色来实现游戏块。首先定义一个类 ErsBox 来表示一个游戏单元方格,然后定义一个游戏方块,该游戏方块由 4*4 个 ErsBox 单元格组成,定义 4*4 的游戏方块是为了便于实现前面提到的 7 种不同的俄罗斯方块,因为 7 种俄罗斯方块的旋转变化恰好都在长、宽各 4 个单元格

47、之内。通过着色方式可轻松实现方块的 28 种不同的形态,并对后续的游戏运行控制提供便利。3、游戏画布的设计游戏画布是游戏的背景窗口,方块的运动、变形都在画布中进行,画布的大小为 20*12 个 ErsBox 单元格。另外,游戏画布还要响应键盘消息。4、控制面板的设计游戏的控制面板是整个游戏的框架,其中包括游戏画布、菜单、游戏提示面板(提示下一个方块信息) 、控制按钮(控制游戏的开始,使菜单生效)等 9。4.1.2 游戏控制设计游戏中的方块采用线程实现,一个方块由 4*4 个 ErsBox 单元格构成,它可以由键盘控制移动、下落、变形等。游戏控制由两个主要的 Thread 完成。4.1.3 基本

48、类设计1、方格类 ErsBox哈尔滨理工大学专科生毕业论文13实现 Cloneable 接口后,使用 Object.clone()在一个类的实例之间进行域对域的复制。如果没有实现这个接口又调用了 Object 的 clone()方法将会抛出 CloneNotSupportedException 异常。通常的作法是:一个类在实现Cloneable 的接口的同时用一个 public 类型的方法覆盖 Object.clone()方法(Object.clone()在 Object 中定义为 protected 类型) 10。在 ErsBox 类设计中,其主要成员变量和成员方法的说明如表 4-1 和表

49、4-2 所示:表 4-1 Ersbox 类主要成员变量名称 类型 说明isColor Boolean 标志方块着色方案,true 为前景色,false 为背景色size Dimension 方格大小表 4-2 ErsBox 类主要成员方法名称 返回类型 说明ErsBox(boolean isColor) 无 方格类的构造方法 isColorBox() Boolean 判断方格是不是用前景色表现,返回 true 表示用前景色着色,false 用背景色着色 setColor(boolean isColor) 无 设置方格的颜色 getSize Dimension 得到此方格的大小Clone() Object 覆盖的 Object 的 Object clone()从而实现克隆方格类中用一个 Dismension 对象表示一个方格的大小,另外方格类还使用了两个与 Dismension 类有关的方法,分别用来获得和设置方格的大小。Dismension 类封装了一个构件的高度和宽度。2、方块类 ErsBlock游戏的主要实体俄罗斯方块由 4*4 个方格(ErsBox)构成。这个块不断产生和消失,并且还要不断变化(翻转) ,因此可用线

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报