目 录
论文总页数:21页
1 引言 1
1.1 课题背景 1
1.2 泡泡堂游戏简介 1
1.3 本课题研究的意义 1
2 开发的环境及相关技术的介绍 2
2.1 开发环境 2
2.2 Java语言的特点 2
3 需求分析 2
3.1 游戏的操作流程 2
3.2 应该解决的问题 4
4 系统设计 4
4.1 处理流程 4
4.2 数据流 5
4.3 部署方案 6
5 系统实现 6
5.1 代码结构 6
5.2 公共类的介绍 7
5.3 服务器端的开发 8
5.4 客户端 9
5.4.1 模块设计 9
5.4.2 游戏入口程序 10
5.4.3 登陆 10
5.4.4 游戏大厅 11
5.4.5 对战场地 13
6 测试 18
结 论 19
参考文献 19
致 谢 20
2开发的环境及相关技术的介绍
开发环境
操作系统:Microsoft Windows XP
开发语言:java 2
开发包:Java™ 2 Standard Edition (5.0),JFC Swing.
IDE: Eclipse 3.2
测试环境:局域网,PC机
Java语言的特点
- 平台无关性
Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。Java的数据类型与机器无关。 - 安全性
Java的编程类似C++,但舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。 - 面向对象
Java吸收了C++面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。 - 分布式
Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。 - 健壮性
Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。Java取消了C语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。
3需求分析
本设计主要是实现一个类似于“泡泡堂”功能的网络游戏。其操作流程及其主要功能如下介绍
游戏的操作流程
游戏的操作类似于网络游戏QQ堂。其操作流程如图1所示。
图1 游戏操作流程 - 首先要先运行服务器端,来处理各个客户端发来的请求。
- 玩家运行客户端,首先展现一个版权声明的界面,因为游戏中的图片来源于腾迅公司的QQ堂游戏,图片的版权归腾迅公司所有。
- 几秒后自动跳到登录界面。在这里输入用户名称,密码。因系统中没有对数据库进行操作,并没有保存用户的相关信息,所以没有注册的功能,也没有对密码的正确与否进行验证。输入密码后点击登录进入游戏大厅,退出则关闭程序。
- 进入大厅后,用户可以选择自己的角色,蓝队或者红队,并可以进行聊天对话。点击准备时将进入准备状态。当所有用户都进入准备状态,游戏自动进入对战场地进行对战游戏。
- 在对战时,玩家可以用方向键盘控制人物的移动,人物只能在空地中移动,当遇到“箱子”时,可以使用“空格键”放置“泡泡”,利用“泡泡”的爆炸的威力去破坏周围的障碍物(“仙人掌”不能被破坏掉)。同时可以一连串放置多个“泡泡”,放置“泡泡”后,“泡泡”将持续几秒钟才会爆炸,在这段时间玩家可以放置更多的“泡泡”来攻击对手,在运动过程中还要及时躲开“泡泡”的爆炸区域。当玩家被“泡泡”炸中,则该玩家的生命将结束,不能继续进行游戏
- 当有一个队中的所有玩家都死掉,则该队挑战失败,对方获胜。
应该解决的问题
本程序需要解决的主要问题:
- 游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。
- 网络计算机之间的数据通讯:本文转载自http://www.biyezuopin.vip/onews.asp?id=14589用socket进行编程,同时由于对人同时游戏,要尽量减少网络数据的传输量,提高传输效率,防止堵塞。
- 算法的设计:算法是游戏的核心,要设计很好的算法,提高游戏运行的效率,运行速度要高,并且资源占用的要少。
- 线程的控制:由于涉及到对个玩家,并且要即时的将数据进行网络传输,因此可以用多个线程来并发执行这些操作。线程之间的同步和调度上要很好的控制。
- 双缓存:在图片之间相互调用转换时,图像的画面要流畅,不能有停顿和闪烁
- 游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,有关贴图,这里使用了QQ堂游戏里的一些截图来美化界面,同时对解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。
以上相关技术细节和整体流程将分别在以下小节阐述。
package net.jeson.game.ui;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;import javax.swing.ImageIcon;
import javax.swing.JFrame;import net.jeson.game.biz.Message;
import net.jeson.game.component.CenterShowDialog;public class QQFrame extends JFrame {/*** */private static final long serialVersionUID = 1L;/*** The constructor.*/ public QQFrame(Hashtable ht,int num,ObjectInputStream input,ObjectOutputStream output) {System.out.println("<<<<<--------------------------------------------------------------->>>>>");System.out.println("---------------My number= " + num+ "-------------------------");for (Enumeration ee = ht.elements(); ee.hasMoreElements();) {Message test = (Message) ee.nextElement();System.out.println("QQFrame--------------" + test.number+ " type=" + test.type + " team=" + test.team + " name="+ test.UserName + " ready=" + test.ready + " exit="+ test.exit);}System.out.println("<<<<<--------------------------------------------------------------->>>>>");setTitle("泡泡堂");this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//setSize(new Dimension(805, 625));setSize(new Dimension(620, 625));new CenterShowDialog(this);QQPad pad=new QQPad(this , ht,num,input,output);this.add(pad);}
}