辽宁科技大学本科生毕业设计(论文) 第27页
在这个类里利用moving变量控制方块的下落过程,moveTo()方法移动到某个位置
时不成功或stopMove()要停止方块移动时都要设置moving变量为false,这样该线程即可正常终止。
5.5 游戏控制的设计与实现
游戏中的方块采用线程实现,一个方块由 4×4 个 RussiaBox 单元格构成,它可以
由键盘控制移动、下落、变形、丢下等。
游戏控制由三个主要的 Thread 完成。 (1) 游戏主界面中进度条刷新线程
游戏主界面的进度条由一个线程控制,当用户选择一种游戏模式时,进度条线程开
始启动,当进度条刷新到100%时,主界面消失。
(2) 游戏开始时初始化游戏面板并启动一个新的游戏线程。
定义在单机版游戏主类SingleBlocksGame和双人对战版游戏主类DoubleBlocksGame中的内部类Game,实现了Runnable接口,负责初始化游戏面板并启动一个新的游戏线程。
(3) 当前游戏活动块线程反映每一个游戏动作。
游戏块的变化和移动过程由线程类SingleBlock或DoubleBlock实现。方块类的主 要实体俄罗斯方块由4×4 个 RussiaBox 单元格组成。这个块不断产生和消失,并且还要不断变化(翻转),因此可用线程来实现,该类继承于线程类Thread。
5.6 单机版俄罗斯方块游戏的设计与实现
5.6.1 单机版游戏的设计方法
单机版游戏的界面分为两个窗口,即画布类窗口(SingleGameCanvas)和控制面板类 窗口(SingleControlPanel)。这两个窗口并列,但所占的宽度比例不一样。画布摆放在游戏界面中间位置,负责游戏显示游戏的状态;控制面板摆放在游戏界面的左侧,上边安放提示下一个方块类型的窗口、当前信息窗口、游戏状态控制按钮和背景音乐控制按钮等,负责控制游戏进程。两个窗口之上是菜单条,包括游戏、控制、窗口风格、音乐控制、帮助五个菜单。单机版游戏的运行界面如图5-6所示。从图中可以清楚地看到该界面的布局情况。
辽宁科技大学本科生毕业设计(论文) 第28页
图5-6 单机版游戏界面(跨平台风格)
5.6.2 单机版游戏菜单的设计与实现
1)游戏菜单下包括:新游戏、设置方块颜色、设置背景颜色、增加难度、降低难度、退出六个菜单项。其中退出菜单项的快捷键为Esc。
2)控制菜单下包括:开始、暂停、继续、停止四个菜单项。它们的快捷键分别为F2、Ctrl+P、Enter、Ctrl+S。初始情况下只有开始菜单项可用。
3)窗口风格菜单下包括:系统平台风格、主题风格、跨平台风格三个复选框菜。系统默认选择为跨平台风格。图5-6显示的是跨平台风格。统平台风格和主题风分别如图5-7(1)和图5-7 (2)所示。
4)音乐控制菜单下包括:更换音乐、暂停播放和继续播放三个菜单项。初始条件下,
辽宁科技大学本科生毕业设计(论文) 第29页
只有更换音乐和暂停播放菜单项可用。
(1)系统平台风格 (2)主题风格
图5-7 单机版游戏的系统平台风格和主题风格
5)帮助菜单下包括:作者和版本两个菜单项。这两个菜单项只用于显示基本信息,无响应事件。
6)菜单系统分为两部分,一部分是菜单的声明,一部分是菜单的创建。具体的创建过程以及菜单触发的动作定义由createMenu方法进行设置。 7)菜单项对应的操作设置: ① 快捷键的设置菜单
为菜单项设置快捷键的功能,要用到KeyStroke类,该类表示一个键盘或等价的设 备上的一个动作,它可以对应一个特定的键的按下和松开操作,就像KeyEvent类中的KEY_PRESSED和KEY_RELEASED动作一样;也可以对应键入一个特定的Java字符,就像KeyEvent类中的KEY_TYPED动作一样;KeyStroke还可以说明在特定动作中匹配出现的组合键,如Alt、Shift、Control等键的修饰符。getKeyStroke(int keyCode,int modifiers)方法对给定的Character对象和修饰符返回一个KeyStroke类的对象。 ② 方块颜色和背景颜色的选择菜单
该程序中用到了JColorChooser类,该类可以让用户自己手工选择色彩,这个类提 供了三个级别的API:
辽宁科技大学本科生毕业设计(论文) 第30页
●一个静态方法显示一个模态的色彩选择对话框,然后返回用户选择的色彩。 ●一个静态方法创建一个色彩选择对话框,对这个对话框ActionListener监听用户按下的色彩选择按钮。
●在任何容器内直接创建JColorChooser边条的实例,可加入PropertyChange监听接口来检测当前色彩的变化。
这些功能在单机版俄罗斯方块游戏的方块颜色和背景颜色的选择菜单中得到了很
好的应用。无论是选择方块的颜色还是选择背景的颜色,选中相应的菜单项后都会弹出一个对话框,该对话框上有三个标签,分别是HSB、样品和RGB,如图5-8(1)图5-8(2)和图5-8(3)所示。
(1) (2)
(3)
图5- 8 “设置方块颜色”对话框
辽宁科技大学本科生毕业设计(论文) 第31页
8)菜单响应的设置:
设置菜单的响应,即指定当用户有某种行为后应采取相应的动作。完成该功能的语 句如下:
菜单项.addActionListener(动作监听器);
而动作监听器又是以匿名类的形式实现的。其语句形式如下: new ActionListener(){ /*监听方法描述*/ }
通过这样语句,可以实现人机交互界面以及向其中添加简单的后台功能。 5.6.3 单机版游戏控制面板的设计
游戏的控制面板是整个游戏的框架,负责游戏的全局控制,其中包括游戏提示面 板(提示下一个方块信息)、当前游戏信息显示面板、控制按钮面板(控制游戏的开始,使菜单生效)和背景音乐控制面板等。
单机版游戏定义了ControlKeyListener类,用于实现游戏的按钮和控制键的监听器,
该类继承于监听键盘事件的抽象适配器类KeyAdapter。使用ControlKeyListener类可创建监听器对象,然后使用组件的addKeyListener方法向组件注册此监听器对象。ControlKeyListener只覆盖了KeyAdpater类的keyPressed方法,当按下↑、↓、←、→和space键时将调用该方法并做相应处理。 5.6.4 单机版游戏画布类的设计与实现
游戏画布是游戏中的一个背景窗口,方块的运动、变形都在画布中进行。另外,游戏画布还要响应按键消息,一旦游戏开始,游戏画布便开始显示方块的运行情况。
画布类SingleGameCanvas是该游戏中的一个窗口。它是用一个面板来实现的,继承于JPanel类。它的大小完全是根据方格来拼接起来的,从图5-7不难看出该窗口的大小是20×14个方格。
画布类的主要功能是负责逐行绘制方块,而每个方块由SingleRussiaBlock线程类动态改变它的每个方格颜色设置,画布通过检查方格RussiaBox的颜色来显示SingleRussiaBlock块。如果某个方格不显示,则设置这个方格的颜色为背景色,否则设置为前景色。
5.6.5 单机版游戏主类的设计与实现
单机版俄罗斯方块游戏的主类SingleBlocksGame负责游戏的全局控制。它继承于 JFrame类,即是以窗口的形式出现的。JFrame是Swing包中与Frame对应的类,功能