虚拟分组课程设计报告讲解文档格式.docx

上传人:b****1 文档编号:13978701 上传时间:2022-10-16 格式:DOCX 页数:47 大小:1.44MB
下载 相关 举报
虚拟分组课程设计报告讲解文档格式.docx_第1页
第1页 / 共47页
虚拟分组课程设计报告讲解文档格式.docx_第2页
第2页 / 共47页
虚拟分组课程设计报告讲解文档格式.docx_第3页
第3页 / 共47页
虚拟分组课程设计报告讲解文档格式.docx_第4页
第4页 / 共47页
虚拟分组课程设计报告讲解文档格式.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

虚拟分组课程设计报告讲解文档格式.docx

《虚拟分组课程设计报告讲解文档格式.docx》由会员分享,可在线阅读,更多相关《虚拟分组课程设计报告讲解文档格式.docx(47页珍藏版)》请在冰豆网上搜索。

虚拟分组课程设计报告讲解文档格式.docx

4系统实现.……………………………………………………………………………………….4

1开发技术概述

Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言。

JAVA现在主要用在WEB开发,手机游戏及一些平台游戏的开发,因为它具有很好的跨平台性,在手机等各种电子产品上应用非常广泛。

C语言是一种面向过程编程,这就使得Java具有重用的特性,在开发速度上比C语言更快,但是在运行速度上却是C更快,因为C属于底层语言,它比JAVA更加亲近机器,所以在许多系统开发上一般是用C语言,比如我们常用的XP系统、LINUX系统,都是C语言开发的。

跨平台的服务器端的嵌入式脚本语言。

C++多用于游戏引擎、反病毒、硬件驱动以及一些对运行效率要求比较高的应用程序,比如数据库管理系统。

C++语言在提供强大的功能的同时也提高了程序含BUG的可能性。

C++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性。

2相关技术理论

系统运行环境

(1)网络服务器操作系统:

WindowsXP;

(2)开发工具:

eclipse3.2;

(3)运行环境:

J2SDK1.5;

(4)编程语言:

Java语言;

3系统分析

3.1系统可行性分析

3.1.1技术可行性

Java语言自Sun公司于1995年5月正式发布以来,经历了出生、成长、成熟壮大的几个阶段,逐渐发展成为IT领域里的主流计算模式,使用Java开发工具方便,容易实现。

Java对开发网络产品有它自己独特的优势,网络游戏也是其开发产物之一。

本系统开发过程是利用Java编程语言和eclipse集成开发环境配合使用来实现的,它是基于TCP/UDP协议和Socket编程技术,建立以C/S为结构模式的娱乐性游戏平台。

3.1.2操作可行性

本设计是一个虚拟的游戏平台,只是模拟了现在社会上的一些多机游戏的部分功能,所以操作简易,玩家不需要了解内部流程,只是和一般其他的游戏一样的操作即可开始游戏。

相对于开发者而言,整个系统形成主要由JDK5.0虚拟环境和eclipse3.2共同完成,无需更多复杂的工具和服务器支持。

3.2功能分析

3.2.1TankClient类基本功能分析

TankClient类是整个系统的核心部分,它承担整个系统的所有可实现功能的调度工作。

是整个游戏运行的场所。

TankClient类设计流程图如图3.2所示:

结束

TankClient类是主类,通过调用其他类中封装的方法来使整个系统运行起来,下面显示TankClient与各个类之间的关系如图3.3所示:

打击

图3.3游戏系统类关联图

3.2.2Tank类基本功能分析

Tank(坦克)类中,封装了一些变量属性,包括坦克自己的大小(WIDTH,HRIGHT),运动速度(SPRRD_X:

在x轴方向的速度;

SPEED_Y:

在Y轴方向的速度)、生命值控制(life)、坦克编号(id)、坦克名(name)、方向控制(dir)、生死控制(live)、好坏控制(good)的变量等。

Tank类中没有main函数,不是主类,它当中只封装一些变量属性和静态方法,被TankClient类调用来实现坦克的一系列动作。

Tank类中的主要方法罗列如下:

(1)getRect()方法

publicRectanglegetRect(){

returnnewRectangle(x,y,this.WIDTH,this.HEIGHT);

}

Rectangle类是碰撞检测的辅助类,通过得到子弹的x,y坐标和宽高度,检测两个矩形是否碰撞(相交);

(2)draw()方法:

负责将所有的活动在屏幕上画出来;

(3)move()方法:

主要负责控制坦克的移动,包括8个方向(左,左上,上,右上,右,右下,下,左下)的控制以及给坦克一个移动的速度;

(4)keyPressed()方法:

设定使用键盘的“↑”“↓”“←”“→”键控制坦克移动;

(5)keyReleased()方法:

处理按键抬起事件,抬起“CTRL”键时,发射炮弹并加入新炮弹,能够逐一发射每一发炮弹、抬起“A”键可以发射超级炮弹等功能;

(6)locationDirection()方法:

定义了炮筒方向,可以向八个方向发射炮弹;

(7)fire()方法:

处理发送子弹的方法;

(8)bumpWithWall()方法:

主要负责处理坦克撞墙事件;

(9)bumpWithTank()方法:

主要到负责处理坦克和坦克相撞事件;

4系统实现

4.1游戏主窗体实现

TankClient类负责画出游戏主窗体,它是整个游戏运行和所有活动的场所。

登陆主窗口后,主界面上包括两个下拉菜单条,“游戏”和“帮助”。

TankClient类是整个系统的“大管家”,当要执行某动作时,“大管家”只需要调用各个类中封装好的方法,让被调用的类自己去执行它自己的方法,这更体现了面向对象的思想。

游戏主窗体界面如图4.1所示:

图4.1游戏主窗口预览效果图

实现虚拟屏幕消除闪烁的关键代码如下:

publicvoidupdate(Graphicsg){//利用双缓冲消除闪烁的效果

if(offScreenImage==null){

offScreenImage=this.createImage(GAME_WIDTH,GAME_HEIGHT);

}

GraphicsgOffScreen=offScreenImage.getGraphics();

Colorc=gOffScreen.getColor();

gOffScreen.setColor(Color.BLACK);

gOffScreen.fillRect(0,0,GAME_WIDTH,GAME_HEIGHT);

gOffScreen.setColor(c);

paint(gOffScreen);

g.drawImage(offScreenImage,0,0,null);

}

4.2分组游戏的实现

RoboCode的混战模式中,如何更好的掌握多个对手的情况,从而采取更好的策略,成为每一个玩家迫切需要解决的问题。

4.2.1分组

游戏运行主界面,通过键盘控制坦克运动,相互对战,其效果图如图4.2所示:

图4.2

代码如下:

packagemytest;

importrobocode.*;

publicclassTrack

{

publicStringName;

             //敌人坦克的名称

publicdoubleHeading;

//敌人的绝对角度,通过计算得出

publicdoubleBearing;

//敌人坦克相对于你车头方向的相对角度

publicdoubleDistance;

           //敌人坦克的距离

publicdoubleEnergy;

            //能量

publicdoubleVelocity;

           //速率

publicdoubleFaceHeading;

        //敌人坦克面向的方向

publicdoubletrackX,trackY;

       //敌人坦克的坐标

publicdoublenextTrackX,nextTrackY;

//下一个标准时间中敌人坦克所在的位置

publicvoidupdate(ScannedRobotEvente)

{Name=e.getName();

    //敌人坦克的名称

Bearing=e.getBearing();

  //敌人坦克相对于你车头方向的相对角度

Distance=e.getDistance();

//敌人坦克的距离

Energy=e.getEnergy();

  //能量

Velocity=e.getVelocity();

 //速率

FaceHeading=e.getHeading();

//敌人坦克面向的方向

}

下一步就是如何把已经现身在雷达中的敌人抓到一个vector里去了,让我们回到我们的机器人主体中去:

派生自AdvancedRobot类的MyVector类中。

首先,声明一个vector类型,并在run中进行初始化。

publicclassMyVectorextendsAdvancedRobot

{finaldoubleversion=0.1;

 

privateVectortrackVector;

  //声明我们的向量数组

/**

*run:

MyVector'

sdefaultbehavior

*/

publicvoidrun(){

out.println("

myVectorVersionis"

+version);

trackVector=newVector();

   //初始化我们的向量数组

while(true){

//Replacethenext4lineswithanybehavioryouwouldlike

showTrack();

setTurnRadarRight(360);

 //让雷达不停转

execute();

4.2.2获取敌人

只要雷达工作正常,我们就能获取每一个敌人的信息了。

当敌人的信息源源不断地涌入我们的onScannedRobot中,我们的机器人要像一个优秀的指挥官一样去鉴别情报,哪些是已经有的,哪些是没有的。

让我们去onScannedRobot事件里看一下吧。

*onScannedRobot:

Whattodowhenyouseeanotherrobot

publicvoidonScannedRobot(ScannedRobotEvente){

if(!

isInVector(e))

TrackmyTrack=newTrack();

myTrack.update(e);

trackVector.add(myTrack);

我的myVector机器人是靠自定义

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

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1