| | JBuilder 2005开发Applet游戏全接触 |
| | | | | | [文章信息] | | | 作者: | 陈雄华 | | 时间: | 2005-02-22 | | 出处: | 天极网 | | 责任编辑: | 方舟 | |
| [文章导读] | | | 本文拟通过一个耳熟能详的指法练习游戏讲解如何在JBuilder 2005下开发Applet应用程序 | |
| |
|
| | | |
|
|
|
|
|
指法练习Applet游戏介绍
1、界面及功能
指法练习的Applet游戏的界面如下图所示:
 图 1 指法练习的用户界面 | 如上图所示,这个Applet共由11个组件组成,左边的主界面是画布Canvas组件,被分隔为10个栏。程序会随机在这些栏中产生下落的字母,用户按下匹配的字母键盘按键后,即为击中,相应的字母将消失,正确数递增1;字母落到画布底端后,还没有被击中,失败数递增1;每产生一个下落的字母,总数递增1。
游戏提供了3个JButton的按钮,分别用于控制游戏的开始/暂停、结束以及保存游戏成绩。在未启动游戏前第一个按钮显示为三角箭头的图标,点击后启动游戏,随后按钮图标切换为暂停的图标。而第二个为停止按钮,其上显示结束的图标,当游戏处于运行或暂停的状态时,点击该按钮将停止游戏以便重新开始。而第三个按钮保存游戏的成绩到客户端的D:\result.txt文件中。
整个界面采用BorderLayout布局管理器,画布位于BorderLayout.CENTER区,而右边的控制台JPanel位于BorderLayout.EAST区。控制台的JPanel采用GridLayout布局管理器。
2、程序组成
每个下落的字母对应一个线程实例,称为DropCharThread线程,它由一个产生器定时产生出来,这个产生器也是一个线程称为GenerateDropThread线程,下面是这个Applet的类图:
 图 2 Applet类图 | TypeTrainApplet类继承了JApplet,是游戏的主类,DropCharThread和GenerateDropThread都是其内部类,后两者都继承Thread,以线程的方式运行,下面对这3个类重要的成员变量和成员方法进行说明。
1).TypeTrainApplet
继承JApplet的Applet主类,负责构造用户界面、响应用户操作事件、更新游戏统计数据等。
· 重要成员变量
统计数据变量
volatile int totalCount = 0;//生产下落字母的总数。 volatile int rightCount = 0;//正确击中的字母数。 volatile int errorCount = 0;//未被击中且到达画布底部的字母数。 | 这3个变量用volatile作了修饰,这是因为这3个变量会被每个字母下落线程更改,为防止各个线程通过各自的缓存更改变量值造成线程间值的不同步,需要将这3个变量设置为volatile的类型,这样这些变量的更改值对于其他线程马上可见。
字母下落速率控制变量
private static int stepLen = 2; //每次下落的步长,即字母每移一步的象素。 private static int stepInterval = 50; //每两步之间的时间间隔,以毫秒为单位。 private static int columnCount = 10; //画布被分隔为多个栏 private static int generateInterval = 500; //创建一个新的下落字母线程的时间间隔,以毫秒为单位 | Applet通过通过这4个变量达到控制产生字母的快慢和字母下落的速度及栏数,可以进一步规划这些值,以形成游戏的难度级别。有鉴于此,我们特地将这些参数的值通过HTML的<Applet>参数传入。这样,只需要更改HTML的<applet>参数值就可以达到控制游戏难度级别的目标,而不需更改Applet程序。
其他
int colWidth; //下落字母每栏的宽度,在运行期才获取这个变量值,它由画布的宽度和栏数决定。 volatile char pressKeyChar; //记录当前按键对应的字母。 int statusCode = 0; //记录游戏所处的状态,其中1:运行态、,2:暂停态 0:停止态。 | · 重要成员方法
private void drawResult()//将统计结果写到界面的对应JLabel中。 private void resetGame()//重置游戏现场 | 2) DropCharThread
是一个线程,将一个随机的字母在画布的特定栏中往下落下,并实时检测是否被击中,如果击中马上消失,否则一直落到画布的底部。
·重要成员变量
char c; //对应的字母 int colIndex; //对应画布的栏序号,第一栏为1,第二栏为2,以此类推 int x, y; //当前字母在画布中的坐标 | ·动作类型常量
private static final int ACTION_DRAW_FONT = 1; //表示画字符 private static final int ACTION_CLEAR_FONT = 2; //表示清除字符 | 不应当直接用1或2表示动作的类型,而应该定义一个更有意义的常量,这样不但于理解,也便于以后的维护。
·重要成员方法
public DropCharThread(char c, int colIndex)//构造函数,传入特定的字母和栏序号 private void draw(int actionType)//在画布中特写的位置上画字母 | 3) GenerateDropThread
·重要成员变量
| Random random = new Random(); //负责产生随机数 | ·重要成员方法
| private char getRandomChar()//获取一个随机的字母 | 负责定时产生一个DropCharThread线程实例,通过generateInterval成员变量控制产生DropCharThread线程实例的频率。
当游戏玩家点击Applet的开始按钮后,Applet将启动游戏,这3个类之间的交互关系可以通过以下的顺序图来描述,如下图所示:
 图 3 开始游戏的顺序图 | 1)当用户按下Applet的开始按钮后激发一个事件。
2) Applet响应这个事件,调用事件响应方法,在方法中实例化一个GenerateDropThread线程,并启动这个线程。
3) GenerateDropThread线程定时产生一个DropCharThread线程,并让赋予一个随机的字母和栏序号。
4)DropCharThread线程启动,将字母在特定的栏中从上至下落下。
|
|
|
|
|
|
|
|