JAVA关于坦克大战的课程设计报告
- 格式:pdf
- 大小:344.82 KB
- 文档页数:26
本科实验报告课程名称:Java语言程序设计实验项目:TankWar实验地点:致远楼B403专业班级:软件工程1219 学号:2012005496 学生姓名:柴丁方指导教师:任少斌2014年 1 月7 日import java.awt.*;import java.awt.event.*;public class TankWarClient extends Frame {//构造游戏开始的界面public void KaiShiJieMian() {this.setLocation(400,200); //游戏窗口的左上点在屏幕的位置this.setSize(800, 600);//游戏窗口的尺寸//使按窗口的“X”时,可以关闭程序较上一次实验添加的代码段为:public void paint (Graphics g) {Color c = g.getColor();//color类是 java。
awt 中的,因此可以直接 color cg.setColor(Color.green);// 类 java.awt.Graphics 中的方法,将此图形上下文的当前颜色设置为指定颜色。
g.fillOval(50, 50, 30, 30);//int x, int y,int width,int height,分别为坐标与椭圆的长宽g.setColor(c);}变更2:较上一次实验添加的代码段为:1.更改如下代码段中的“常量值”为“x”“y”,使所填充的椭圆位置可以随值改变,为静态的图形动起来打下了基础。
static int x=50,y=50;实验四:从版本0.4到版本0.41变更1:变更2:较上一次实验添加的代码段为:1.public class TankWarClient extends Frame {Image offScreenImage = null;}//先把内存的offScreenImage清空较上一次实验添加的代码段为:1.TankWarClient类中:2.3.较上一次实验修改的代码段为:public class Tank {public static final int XSPEED = 5;public static final int YSPEED = 5;private int x, y;private boolean bL=false, bU=false, bR=false, bD = false;enum Direction {L, LU, U, RU, R, RD, D, LD, STOP};private Direction dir = Direction.STOP;//此处为构造函数。
JAVA程序开发课程设计课程大作业专业:软件工程班级:14软工2学号: ***********名:***项目名称:坦克大战一、需求分析:1.基本功能:(1)我方坦克能上下移动(2)敌方坦克能自由移动(3)我方坦克能开火(4)敌方坦克能自由开火(5)子弹打中我方,会减血,我方打中敌方,敌死。
敌打敌不会受伤(6)有血条,主界面2.扩展功能(1)用图形来表示坦克和炮弹(2)用图形来表示中子弹后的爆炸效果(3)地图上存在金属墙,我方坦克和子弹不能穿过(4)地图上存在曹村,我方和敌方坦克能够自由穿过,子弹也一样(5)地图上会随机出现加血包(6)我方坦克遇到加血包,会增加生命(7)游戏开始时,会启动背景音乐(8)我方坦克死亡时,提示游戏结束二、系统设计:1. BgMusic(1)主要功能:添加背景音乐TankMap类通过调用该类,并读取BgMusic包下面的背景音乐文件(2)成员属性:1)filename,用于记录读取到的文件名,并处理2)nBytesRead,这是缓存,用于读取音乐文件,缓存下来(3)成员方法:1)run,播放背景音乐2)构造方法BgMusic,将读取到的文件名,存储到成员属性filename中2. Blood(1)主要功能:地图中添加血包(2)成员属性:1)x,y,width,height,血包的位置以及宽高2)rpos_x,rpos_y,用于记录血包移动后的位置3)tm,调用TankMap类,并在地图中放血包4)live,血包的存活,被坦克吃了就消失5) blood,用于记录血包的存活6)step,血包的步长7)stepMove,血包走过总的步长(3)成员方法:1)Blood,构造方法,将血包放到地图中2)draw,画血包3)move,血包的移动4)getRect,获取血包的位置3. Tank(1)主要功能:地图中添加我方坦克(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,坦克的宽高和x,y上的移动速度2)x,y,direction,我方坦克出现的初始位置和初始状态3)tm,调用TankMap类,并在地图中放坦克4)isLive,我方坦克是否存活5) isgood,坦克属于哪一方6)life,我方坦克的初始生命值7)step,使用Blood类,血包随机出现8)upimage,rightimage,downimage,leftimage,oldimage,存放坦克图片(3)成员方法:1)draw,绘制坦克2)move,根据移动方向,移动坦克,不允许坦克移除地图3)checkDirection,确定用户单击的方向键,修正坦克即将移动方向4)fire,发射子弹5)getRec,返回坦克当前位置,便于判断是否与敌方坦克或子弹重叠6)stay,坦克撞墙的处理7)eat,我方坦克吃血包4.EnemyTank(1)主要功能:地图中添加敌方坦克(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,坦克的宽高和x,y上的移动速度2)x,y,direction,我方坦克出现的初始位置和初始状态3)tm,调用TankMap类,并在地图中放坦克4)islive,我方坦克是否存活5)enemytank,存放坦克图片(3)成员方法:1)draw,绘制坦克2)move,根据移动方向,移动坦克,不允许坦克移除地图3)fire,发射子弹4.Explor(1)主要功能:子弹打中坦克,发生爆炸效果(2)成员属性:1)x,y,坦克出现的位置2)tm,调用TankMap类,并在地图中放爆炸3)islive,我方坦克是否存活(3)成员方法:1)draw,绘制爆炸2)Explor,爆炸的构造方法5.Help(1)主要功能:给用户游戏帮助(2)成员属性:1)help,将帮助的文字存放在字符串中(3)成员方法:1)getHelpDialog,调用帮助6.Shell(1)主要功能:设计子弹(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,子弹的宽高和x,y上的移动速度2)x,y,direction,子弹出现的位置和方向3)tm,调用TankMap类,并在地图中放子弹4)isLive,子弹是否打中坦克5)isgood,是否是我方6)Image,加载子弹图片(3)成员方法:1)draw,绘制子弹2)move,根据移动方向,移动坦克,得到子弹的移动3)getRec,获取坦克的位置4)hitTanks,子弹打坦克5)hitWalls,子弹打墙7.Wall(1)主要功能:给地图添加墙(2)成员属性:1)x,y,w,h,墙的位置和宽度高度2)tc,地图(3)成员方法:1)draw,画墙2)getRect,获取墙的位置8.TankMap(1)主要功能:地图(2)成员属性:1)MAPWIDTH,MAPHEIGHT,地图的宽高2)t,我方坦克3)bufferImage,缓冲,用于解决闪屏4)forestimage,草丛5)shells,EnemyTank,Blood,Explors泛型6)enemyCount,敌方坦克数量7)w1,w2,不可穿过的墙(3)成员方法:1)init,初始化地图2)paint,画血包,地图,坦克等3)addBloods,加血4)update,解决闪屏三、功能实现:1.功能1:我方,敌方坦克上下移动并开火(1)操作说明游戏启动时,按上下左右键可以是我方坦克移动,按F键可以开火(2)关键代码//绘制坦克public void draw(Graphics g){//根据不同方向加载不同图片,读取的时候需要处理异常try{switch(direction){case STOP:case UP:upimage=ImageIO.read(new File("src/images/up.gif"));oldimage=upimage;g.drawImage(upimage, x, y, null);break;case RIGHT:rightimage=ImageIO.read(new File("src/images/right.gif"));oldimage=rightimage;g.drawImage(rightimage, x, y, null);break;case DOWN:downimage=ImageIO.read(new File("src/images/down.gif"));oldimage=downimage;g.drawImage(downimage, x, y, null);break;case LEFT:leftimage=ImageIO.read(new File("src/images/left.gif"));oldimage=leftimage;g.drawImage(leftimage, x, y, null);break;}}catch (IOException e) {};g.drawImage(oldimage, x, y, null);move(direction);}//根据移动方向,移动坦克,不允许坦克移出地图public void move(Direction d){/*** 记录坦克原来的位置,撞墙可以回到原位置*/oldX=x;//记录坦克原来的位置,撞墙可以回到原位置oldY=y;if(d == Direction.STOP){}else if(d == Direction.UP){y-=yspeed;if(y<=HEIGHT)y=HEIGHT;}else if(d==Direction.RIGHT){x+=xspeed;if(x>=800-WIDTH)x=800-WIDTH;}else if(d==Direction.DOWN){y+=yspeed;if(y>=600-HEIGHT)y=600-HEIGHT;}else if(d==Direction.LEFT){x-=xspeed;}2.功能2:我方开火,敌方会爆炸,然后死亡。
基于java坦克大战课程设计报告摘要随着计算机的普及以及对电子游戏的认识,电子游戏已被越来越多的人选作放松、娱乐的休闲方式;电子游戏既不需要专门购买游戏器材,也不需要宽阔的游戏场地,只需要一台能独立完成任务的计算机即可,它可以是人们工作、学习时用的计算机,并不需要另行配置,这比起传统休闲游戏即省钱又省事。
局域网游戏更是可以将现实空间中零散的计算机,组织起来,使其在逻辑空间中集中起来,使游戏的组织、开展变得轻松。
如此轻松而又安逸的休闲方式,使得越来越多的人尝试,甚至已经将电子游戏作为主要休闲方式,既然有如此多的人使用,那其中必然存在巨大的商机,即使人们不愿意为一个小小的休闲游戏花费金钱,但在游戏中添加广告、游戏相关服务也包藏了巨大的财富;当然电子游戏的制作如今已是空前的火爆,大大小小的游戏公司横空出世,都想在电子游戏制作这个行业里占据一席之地,而一款成功的电子游戏需要精心的策划、分析、设计,只有这样才能获得游戏中包藏的财富,以及做出一款真正能够让玩家娱乐、放松的游戏,而不是骗取玩家钱财的工具。
关键字:局域网;电子游戏;坦克大战;目录一、系统分析............................................................................................................................ - 1 -可行性分析.......................................................................................................................... - 1 - 需求分析.............................................................................................................................. - 1 - 二、概要设计............................................................................................................................ - 2 -工作流程图.......................................................................................................................... - 2 - 项目规划.............................................................................................................................. - 3 - 开发及运行环境.................................................................................................................. - 3 - 三、详细设计与算法实现........................................................................................................ - 4 -游戏主窗口.......................................................................................................................... - 4 - 网络管理.............................................................................................................................. - 6 - 封装的游戏元素.................................................................................................................. - 8 - 四、测试.................................................................................................................................. - 10 -测试环境............................................................................................................................ - 10 - 测试结果............................................................................................................................ - 10 -五、软件截图.......................................................................................................................... - 11 -六、总结.................................................................................................................................. - 14 -七、参考文献.......................................................................................................................... - 15 -一、系统分析可行性分析技术可行性软件使用swing、GUI、Socket、面向对象设计等技术实现,这些技术均已是非常成熟的技术,之前已有相当多使用这些技术的成功案例,故现使用这些技术是可行的。
基于Java语言的简易坦克大战游戏设计课程报告摘要:本课程设计使用Java语言开发了一个简单坦克大战小游戏,主要采用面向对象程序设计思想来完成程序的需求分析,概念及逻辑设计,系统的详细实现等过程。
游戏主要实现了游戏场景的构造,坦克及子弹类的初始化,敌我坦克对战,游戏存盘及读档等功能。
关键词:Java;面向对象;敌我坦克对战;引言坦克大战是一个经典的单机对战游戏,其在青少年中非常流行,目前游戏开发商对其不断改进,已从简单的单机手游扩充为大型的网络对战游戏,但其基于面向对象程序设计思想仍未变。
本设计是为检验面向对象程序设计课程的知识运用而进行的实践,其主要目的是采用面向对象的思想,独立完成程序的各个过程,并在实践中应用学到的关于Java类与对象,接口,包,异常处理,多线程,事件处理及各类流的处理等知识。
1.系统分析1.1系统可行性分析在技术上,本系统的坦克大战是基于Java语言设计,并在Eclipse软件上具体实现的。
Java语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,具有简洁,安全,面向对象,动态,体系结构中立,可移植,高性能,多线程,解释执行,分布式等特性。
Java现在主要用在WEB开发,手机游戏及一些平台游戏的开发,因为其具有良好的跨平台性,在各类电子产品上应用非常广泛。
本系统使用Swing,GUI,Socket,面向对象设计等技术实现,这些技术已非常成熟,广泛应用于各类程序开发,故现在使用这些技术是可行的。
在实用性上,坦克大战为一款经典射击游戏,其前身为1985年日本游戏公司在任天堂FC(FamilyComputer)平台上开发的红白单机游戏,游戏以坦克战斗及保卫基地为主题,凭借流畅的游戏体验,不错的游戏视觉效果风靡全世界。
直到今天,仍有游戏商家以其为模型开发出3D网络对战版坦克大战,可见其具有广大的市场效益。
本系统运用Java跨平台编程语言,在PC上重新实现这一经典游戏,探究其设计思路与实现方法,并且设计了关卡模式,新增了游戏存盘,读档功能,使游戏玩法更加丰富。
《面向对象程序设计》课程设计报告题目:坦克大战软件设计与实现院(系):信息科学与工程学院专业班级:计算机科学与技术1201班学生姓名:程伟学号:20121183011指导教师:吴奕20 14 年 12 月 29 日至20 15 年 1 月 9 日华中科技大学武昌分校制面向对象程序设计课程设计任务书目录1需求与总体设计 (5)1.1需求分析 (5)1.2总体设计 (6)1.2.1总体设计功能图 (6)1.2.2总体设计流程图 (6)1.3类图 (8)2详细设计 (9)2.1详细设计思路 (9)2.2类图详细说明 (12)2.3详细设计流程图 (20)3编码实现 (21)4系统测试 (46)4.1菜单项测试 (46)4.2游戏信息测试: (48)总结 (57)1需求与总体设计1.1需求分析1.设计一个图形用户界面,将所有游戏的元素都能在此用于界面上表现出来,界面能够接受用户的操作,具有人机交互功能。
用户可以选择重新开始游戏,退出游戏,暂停游戏和查找游戏帮助。
2.界面中包含坦克,树,河流,阻挡墙和游戏用户所要保护的“家”。
3.坦克:坦克分为两种,敌方坦克和用户控制的坦克。
用户方和敌方坦克均可以发射子弹,可以改变路径的行走,且在行走过程中遇到墙等阻碍物和游戏边界时要改变方向,而不能一直顶着障碍物不放。
坦克之间不能穿越,碰撞到后自动调换方向。
4.树:界面中要包括树林,作为遮掩物体和修饰物体,以便增加游戏的元素,使得游戏更加贴切人性化。
树的数目不限,以游戏整体界面清晰美观来决定数目。
5.河流:界面中要包括河流,河流作用与树林相同,同样河流的数目不限,以游戏界面整体美观度来决定数目。
6.墙:墙体分为两种,普通的墙和铁墙,普通的墙在受到子弹袭击时会损坏,而铁墙可以阻碍子弹的穿越。
两方的坦克均不能穿越两种墙体,但都可以摧毁普通墙体。
普通墙体的数目配合其他元素合理安排,铁墙则不宜过多,不然游戏难度太低甚至因为坦克不能穿越铁墙而使得游戏无法进行下去。
JAVA坦克大战课程设计实验报告专业班级:计算机学号:201110000姓名:指导老师:JAVA坦克大战课程设计一、课程设计目的Java坦克大战程序设计的课程程序设计是我们学习完Java语言程序设计课程后,进行的一次全面的综合设计,其目的是加深对理论教学内容的理解和掌握,使学生综合运用.学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下基础。
二、课程设计的预备知识和实验环境熟悉Java语言以及eclipse开发工具,实验环境为JDK1.6。
三、课程设计的主要内容坦克大战游戏是在eclipse环境下编程的游戏,其中包括对主坦克的编写、坦克的初始位置的编写、坦克移动方向的编写、坦克的速度的编写、坦克子弹速度的编写、敌对坦克子弹速度的编写、敌对坦克的编写等等。
游戏主要实现的功能有:1.能够四处移动2.能够打击敌人3.敌人能够移动4.能够模拟爆炸5.能够产生障碍6.能够增长生命四、程序具体设计1.版本0.1~0.2实现的主要功能:产生一个不能修改大小的窗体,并实现关闭窗体的事件处理。
源代码如下:2.版本0.3~0.5实现的主要功能:画出代表坦克的同心圆;让坦克运动起来;使用双缓冲来消除坦克移动时的闪烁现象;利用代码重构将以后可能需要多处修改的量定义为常量,例如窗体的宽度和高度(常量名一般为大写)主要代码如下: public class TankClient extends Frame {int x = 50, y = 50;public void paint(Graphics g) {Color c = g.getColor();g.setColor(Color.RED);g.fillOval(x, y, 30, 30);g.setColor(c);y += 5;}使用paint 方法来画出坦克,并将坦克的位置设置成变量来实现坦克的移动。
p ublic void lauchFrame() {this.setLocation(400, 300);this.setSize(800, 600);this.setTitle("TankWar");this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}this.setResizable(false);this.setBackground(Color.GREEN);setVisible(true);new Thread(new PaintThread()).start();}public static void main(String[] args) {TankClient tc = new TankClient();uchFrame();}private class PaintThread implements Runnable {public void run() {while(true) {repaint();try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}}使用update来实现双缓冲结局移动时的闪烁问题public void update(Graphics g) {if(offScreenImage == null) {offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT);}Graphics gOffScreen = offScreenImage.getGraphics();Color c = gOffScreen.getColor();gOffScreen.setColor(Color.GREEN);gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);gOffScreen.setColor(c);paint(gOffScreen);g.drawImage(offScreenImage, 0, 0, null);}在lauchFrame方法中启动线程,来实现坦克的移动,并加入sleep方法使移动出现延时。
java课设报告坦克大战什么是Java课设报告坦克大战?Java课设报告坦克大战是一个基于Java编程语言开发的游戏项目。
它模拟了坦克战争的场景,玩家需要操控一辆坦克,与其他玩家或者电脑控制的敌人进行战斗,完成各种任务。
这个项目旨在提高学生的Java编程能力和团队协作能力。
第一步:需求分析和设计在开始编写代码之前,我们需要进行需求分析和设计。
首先,确定游戏的功能和玩法。
例如,游戏应该具有地图、坦克、子弹等基本元素,玩家可以使用键盘控制坦克的移动和攻击,坦克和子弹应该有相应的属性和行为,坦克应该能够与其他坦克进行交互等等。
其次,我们需要设计游戏的界面和用户交互方式,包括游戏的开始菜单、游戏画面、得分、生命值等界面元素。
最后,我们应该考虑游戏的可扩展性,使得我们能够在后续的开发过程中添加更多的功能和元素。
第二步:编写代码在设计完成后,我们开始编写Java代码。
首先,我们创建一个Java项目,并进行必要的配置,例如添加游戏所需的外部库和资源文件。
然后,我们开始编写代码。
我们可以将游戏的不同元素,例如地图、坦克、子弹等,抽象成不同的类,并为每个类定义相应的属性和方法。
我们还可以使用设计模式和面向对象的编程思想,使得代码更加清晰和可维护。
同时,我们需要为游戏添加适当的事件处理器,以响应用户的操作和更新游戏状态。
我们还可以使用Java图形库或者相关的游戏引擎,使游戏具有更好的视觉效果和用户体验。
第三步:测试和调试在代码编写完成后,我们需要进行测试和调试。
我们可以编写一些测试用例,验证游戏的各个功能和元素是否正常工作。
同时,我们需要定期检查并修复可能存在的bug和错误,确保游戏的稳定性和可玩性。
在这个过程中,我们可以与团队成员合作,互相交流和帮助,提高解决问题的效率和质量。
第四步:项目上线和发布在完成测试和调试后,我们可以将游戏部署到服务器上,并发布给玩家。
我们可以选择通过应用商店或者网站进行发布,或者将游戏打包成可执行文件,供玩家下载和安装。
《Java语言程序设计》课程设计报告题目:坦克大战专业:学号:姓名:指导教师:成绩:2010年 12 月28日1.课程设计研究背景及意义开发一个基于J2SE的游戏,坦克大战2.课程设计题目描述和要求坦克游戏要求:i.需要有图形游戏界面,让用户能看到游戏给出的反馈ii.有人机交互功能,使用户能操作指定的游戏元素iii.不同队伍的坦克,须显示不同外观,已分辨敌我iv.坦克能够开火,攻击敌方,但不能攻击队友v.需要有不可被子弹穿透的墙,且墙有可摧毁和不可摧毁两种vi.坦克有生命值,并非被击中一次就会爆炸vii.坦克爆炸后将产生道具,拾到道具的坦克可加满生命值3.课程设计报告内容3.1 题目求解的理论依据及算法解题原理:1)游戏基本元素:坦克,炮管,子弹,墙壁,地雷2)按住w,s,a,d或上,下,左,右箭头键,坦克向上下左右移动3)按鼠标左键,坦克开火,产生子弹,子弹与另一个坦克相碰,子弹3.2 数据结构:窗口:主窗口TankClient游戏元素:子弹 shot,坦克tank,墙壁wall,血条HitPoint,炸弹Bomb,涨炸弹的道具ShotsItem,涨血的道具 HitPointItem3.3 主要事件处理:1、按下鼠标左键发射普通子弹。
2、按下鼠标右键发射散弹。
3、子弹爆炸的效果,普通子弹和散弹的效果。
3.4 简要的设计流程:键盘监听器3.5、源代码:package cn.hnist.Joshua; import java.awt.*; /*** 抽象子弹类* @author bebebird@ */abstract class Shot { int shotSpeed; //子弹移动速度 int shotRadius; //子弹大小(半径) int shotPower; //子弹威力int ox, oy, sx, sy; //o 表示Tank 的中心坐标,s 表示炮弹坐标(初始时为炮筒端点) int lengthX, lengthY; //子弹每次移动的步长 boolean isLive;boolean isBomb; //死时是否产生爆炸 TankClient tc=null; Tank tk=null;ShotBomb shotBomb=null;public static final Toolkit TLK=Toolkit.getDefaultToolkit();public Shot(int ox,int oy,int sx,int sy,Tank tk){this.ox=ox;this.oy=oy;this.sx=sx;this.sy=sy;this.tc=tk.tc;=tk;this.isLive=true;}public Shot(Tank tk){this.ox=tk.x;this.oy=tk.y;this.sx=tk.turretDirx;this.sy=tk.turretDiry;this.tc=tk.tc;=tk;this.isLive=true;}abstract void draw(Graphics g);abstract void move();abstract void dead();public boolean isOutOfWindow() //检查子弹是否跃出边界{if(sx>TankClient.WIN_WIDTH||sx<0||sy>TankClient.WIN_HEIGHT||sy<0) {this.isBomb=false;return true;}else { return false; }}public Rectangle getRect() //碰撞检测时用于判断{return newRectangle(sx-shotRadius,sy-shotRadius,shotRadius*2,shotRadius*2;}}/*** 散弹类* @author bebebird@*/class HydraShot extends Shot{static final Image HYDRASHOT=TLK.getImage(Shot.class.getClassLoader().getResource("Image/Sh ot/SUPER.png"));public HydraShot(int ox,int oy,int sx,int sy,Tank tk){super(ox,oy,sx,sy,tk);this.shotPower=1;//子弹大小(半径)设置为6this.shotRadius=6;//炸弹速度设置为3this.shotSpeed=13;this.lengthX=shotSpeed*(sx-ox)/(int)Math.hypot(sx-ox,sy-oy);this.lengthY=shotSpeed*(sy-oy)/(int)Math.hypot(sx-ox,sy-oy);}public void draw(Graphics g){if(isLive){g.drawImage(HYDRASHOT,sx-shotRadius,sy-shotRadius,null);}else{if(isBomb&&shotBomb!=null) { shotBomb.draw(g); } }}public boolean isHitWall(){Wall w=null;for(int i=0;i<tc.wallList.size();i++){w=tc.wallList.get(i);if(w.isHits(this)){this.isBomb=true;return true; //散弹不可穿墙}}return false;}public boolean isHitTank() //检查炮弹是否击中对方Tank{Tank tempTk=null;for(int i=0;i<tc.tanksList.size();i++){tempTk=tc.tanksList.get(i);if(tempTk.isLive&&getRect().intersects(tempTk.getRect())&&tempTk .camp!=tk.camp){tempTk.tankHitPoint.cutsHitPoint(shotPower,this); //减少一些血this.isBomb=true;return true;}}return false; //未打中任何Tank}public void dead(){if(isLive){this.isLive=false;if(isBomb){ shotBomb=new ShotBomb(sx-32,sy-32,this); } //当撞到墙或Tank时子弹才爆炸else{tc.shotsList.remove(this);}}}public void move(){if(isLive){sx+=lengthX;sy+=lengthY;if(isOutOfWindow()||isHitWall()||isHitTank()){this.dead();}}}}/*** 普通炮弹类* @author bebebird@*/class NormalShot extends Shot //普通炮弹{static final Image[] NORSHOT={T LK.getImage(Shot.class.getClassLoader().getResource("Image/Shot/ NOR1.png")),TLK.getImage(Shot.class.getClassLoader().getResource("Image/Sh ot/NOR2.png"))};public NormalShot(Tank tk){super(tk);this.shotPower=1;this.shotRadius=6;this.shotSpeed=12;this.lengthX=shotSpeed*(sx-ox)/(int)Math.hypot(sx-ox,sy-oy);this.lengthY=shotSpeed*(sy-oy)/(int)Math.hypot(sx-ox,sy-oy); }public void draw(Graphics g){if(isLive){if(tk.camp){ g.drawImage(NORSHOT[0],sx-shotRadius,sy-shotRadius,null); } else{ g.drawImage(NORSHOT[1],sx-shotRadius,sy-shotRadius,null); } }else{if(isBomb&&shotBomb!=null) { shotBomb.draw(g); } }}public boolean isHitWall(){Wall w=null;for(int i=0;i<tc.wallList.size();i++){w=tc.wallList.get(i);if(w.isHits(this)){this.isBomb=true;return true; //普通子弹不可穿墙}}return false;}public boolean isHitTank() //检查炮弹是否击中对方Tank{Tank tempTk=null;for(int i=0;i<tc.tanksList.size();i++){tempTk=tc.tanksList.get(i);i f(tempTk.isLive&&getRect().intersects(tempTk.getRect())&&temp Tk.camp!=tk.camp){tempTk.tankHitPoint.cutsHitPoint(shotPower,this); //减少一些血this.isBomb=true;return true;}}return false; //未打中任何Tank}public void dead(){if(isLive){this.isLive=false;tk.shotsCount--; //将Tank已发射的子弹数减1if(isBomb){ shotBomb=new ShotBomb(sx-32,sy-32,this); } //当撞到墙或Tank时子弹才爆炸else{tc.shotsList.remove(this);}}}public void move(){if(isLive){sx+=lengthX;sy+=lengthY;if(isOutOfWindow()||isHitWall()||isHitTank()){this.dead();}}}}/*** 增强的炮弹* @author bebebird@*/class SpecialShot extends Shot{int hitCount; //子弹可以攻击的次数static final Image SPESHOT=TLK.getImage(Shot.class.getClassLoader().getResource("Image/Shot/SPE.png"));public SpecialShot(Tank tk){super(tk);this.hitCount=2;this.shotPower=2;this.shotRadius=6;this.shotSpeed=10;this.lengthX=shotSpeed*(sx-ox)/(int)Math.hypot(sx-ox,sy-oy);this.lengthY=shotSpeed*(sy-oy)/(int)Math.hypot(sx-ox,sy-oy); }public boolean isHitTank() //检查炮弹是否击中Tank{Tank tempTk=null;for(int i=0;i<tc.tanksList.size();i++){tempTk=tc.tanksList.get(i);if(getRect().intersects(tempTk.getRect())&tempTk.camp!=tk.camp)/ /自己发射的子弹不打自己人{if(tempTk.isLive){tempTk.tankHitPoint.cutsHitPoint(shotPower,this); //减少一些血this.hitCount--;if(0==hitCount) { this.isBomb=true; return true; } }}}return false; //未打中任何Tank}public void dead(){if(isLive){this.isLive=false;if(isBomb){ shotBomb=new ShotBomb(sx-32,sy-32,this); } //当撞到墙或Tank时子弹才爆炸else{this.tc.shotsList.remove(this); //将子弹从List中移除}}}void move(){if(isLive){sx+=lengthX;sy+=lengthY;if(isOutOfWindow()||isHitTank()){this.dead();}}}void draw(Graphics g){if(isLive){g.drawImage(SPESHOT,sx-shotRadius,sy-shotRadius,null);}else{if(isBomb&&shotBomb!=null) { shotBomb.draw(g); } }}}class SuperShot extends Shot //超级炮弹{int oldx,oldy; //起始坐标static final int MOVERANGE=150; //发射后移动此距离后爆炸static final ImageSUPERSHOT=TLK.getImage(Shot.class.getClassLoader().getResource("Image/Shot/SUPER.png"));public SuperShot(Tank tk){super(tk);this.shotPower=5;this.shotRadius=4;this.shotSpeed=8;this.oldx=sx;this.oldy=sy;this.lengthX=shotSpeed*(sx-ox)/(int)Math.hypot(sx-ox,sy-oy);this.lengthY=shotSpeed*(sy-oy)/(int)Math.hypot(sx-ox,sy-oy);}public void dead(){if(isLive){this.isLive=false;if(isBomb) { shotBomb=new SuperShotBomb(sx,sy,this); }else { this.tc.shotsList.remove(this); }}}void move(){if(isLive){sx+=lengthX;sy+=lengthY;if(isOutOfWindow()) { this.dead(); }if((int)Math.hypot(sx-oldx,sy-oldy)>MOVERANGE) //移动一定距离后爆炸{this.isBomb=true;this.dead();}}}/*** 画发射炮弹*/void draw(Graphics g){if(isLive){g.drawImage(SUPERSHOT,sx-shotRadius,sy-shotRadius,null);}else{if(isBomb&&shotBomb!=null) { shotBomb.draw(g); } }}}3.6 程序调试出错信息及解决方法程序在调试过程中碰到很多的错误,譬如说事件监听器与事件源没有关联、除数为零、数组下标越界等等。
基于java坦克大战课程设计报告摘要面向对象方法是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,它吸取了结构化程序设计的精华,以更接近人们通常思维的方式来处理问题,是一种全新的软件开发技术。
作为一种新的的编程语言,Java很大程度推广了面向对象的思想。
随着计算机技术的发展,Java的强大展现出它不可替代的作用。
Java的功能不仅体现在它网络方面的应用,对于应用程序设计、游戏设计等Java都能满足需求。
本文针对Java 的具体应用,设计了一个小游戏。
根据游戏的规则,用户将可以和计算机进行简单对战。
程序实现了友好的用户交互界面,让用户能很好地对游戏进行操作。
关键字:JAVA GUI 游戏ABSTRACTThe Object-Oriented Method is a method which apllies the Object-Oriented Design to the process of the software exploiture and directs the ploy of development. It extracts the prime of the Structured Design for Computer Programmers, deals matters with afolksy fashion, which is considered to be a grand new software-develop technique.As a new programming language, Java spread the Object-Oriented Design in a certain degree. With the development of the technique of computer, the insurmountable function of JAVA is exhibited for its’ mightiness. Not only applies in network, JAVA also can fulfill the requirement of the Application-Design and Game-Design.In this paper, to use the idiographic application of JAVA , I design a game called . Following the regular of the game, user can play a simple revalry with computer. This programme actualizes a folksy GUI mode, which will make user master game easily.Keywords: JAVA GUI Game目录一、系统分析............................................................................................... 错误!未定义书签。
Java程序课程设计任务书项目名称:坦克大战游戏的设计与开发英文名:Tank Battle1、主要内容:1、基于java的游戏开发与设计的分析;2、坦克大战游戏的架构搭建与设计实现;3、游戏可以通过用户可以注册新用户,修改自己的密码、个人资料。
2、具体要求1、系统的功能要求:(一)实现玩家试玩游戏功能,屏蔽用户注册和登陆功能(空功能)(二)玩家具备一个或者两个备选坦克战车(三)玩家可以选择一个到两个关卡进行作战(四)玩家可以选择两个敌对阵营中的一个加入,与其他AI战车坦克并肩作战(五)胜利判定条件为:时间制、全杀制(可选)(六)至少提供两个可以自由切换的视角(七)至少提供一种炮弹类型(八)假定项目:如果用户注册,登陆功能能够顺利做好,则提供一个玩家分数上传和排行榜功能。
2、学习并掌握以下技术:数据库的JDBC连接,JA V A编程语言,MySQL数据库的应用;JSP的开发与运用3、熟练使用以下开发工具:JCreator,Myeclipse ,MySQL ,PowerDesigner 等3、进度安排:12月28日~ 12 月29 日:查阅资料,完成文献综述,任务书;12月29 日~ 12月31日:进行系统的需求分析与设计;1月1日~ 1月3日:根据分析进行各个模块程序的设计与创建;1月4日~ 1 月6日:完成各个模块的程序编写;1月7 日~ 1 月8 日:完成全部程序的编写及系统测试;1月9日~ 1 月10日:完成课程设计报告的编写,答辩;摘要随着Java语言的不断发展和壮大,现在的Java已经广泛的应用于各个领域,包括医药,汽车工业,手机行业,游戏,等等地方。
Java游戏的开发为满足人们娱乐所需而设计。
本游戏为坦克大战游戏,是基于Java的图形用户界面而开发的,可以放松心情的小游戏。
游戏从系统操作简便、界面友好、灵活、上手即会的基本要求出发,完成整款游戏的开发。
游戏更设置了暂停、计分、音乐、速度,用户信息保存等功能,可以根据自己的爱好,挑战更高难度,为用户带来愉悦的体验。
Java实现坦克大战小游戏摘要Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。
我的课程设计是用java来做一个简单的坦克大战小游戏。
我将这个程序细分了多个部分,每个部分都建了独立的类,比如:坦克的模型类,河道,树和坦克方向等等。
之所以将之细分,是遵循了java的万事万物皆对象的原理。
在实现每个类时,最简单但也是最繁琐就是建立界面与实例化坦克,因为这牵扯了界面布局,监听的建立等;而有一些类,比如;河道、墙、坦克,这些类这可以依样画葫芦的编写。
在编写过程,借鉴了他人的一些图片模型,实现的功能也并不是和经典的FC坦克大战相同,但是每个坦克之间的互动还是实现了的。
关键词:万事万物皆对象界面布局坦克之间的互动USE JAVA TO REALIZE BATTLE CITY MINI-GAMEABSTRACTJava is a object oriented program design language what can compose cross platform application software. My curriculum design is using JAVA language to make a simple small game called Tank Battle. I break down this program into multiple parts, each part is to establish an independent class, such as: Tank Model class, River Course class, Tree class, The Direction of Tank class and so on. The reason divides into multiple parts, is because follow the principle of JAVA that everything is an object. When implements every class, the most simple but also the most troublesome is build interface and instantiate Tank class, because it is involved of the interface layout, monitoring the establishment. While there are some classes, such as: River Course class, Wall class and Tank class, can write like stick closely to the pattern given.In the preparation process, I refer some pictures of models of others, the function of the retaliate isn’t like FC Tank Battle, but the interaction between ach tank is realized.Key words: everything is an object, the interface layout, the interaction betweeneach tank目录1 课程目的与要求 (1)1、1课程目标 (1)1、2 课程的实现环境 (1)2 概要设计 (2)3 详细设计 (3)4 测试结果与心得体会………………………………………………………………………5 参考文献……………………………………………………………………………………附录……………………………………………………………………………………………源程序代码……………………………………………………………………………………1 课程的目的与要求1、1课程目标JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
网络编程程序设计坦克大战网络版专业班级:09级网络工程(2)班组长:张玉利(200903060011)成员:李瑞琳(200903060016)张杰(200903060036)朱凯强(200903060020)杨达允(200902010026)指导教师:王占中一、需求分析每个人都玩过坦克大战这个游戏,本程序完成的功能就是平时所玩的游戏中所实现的一些基本功能。
并且在单机版的基础上改写成网络版具体游戏要求:●玩家控制的坦克能够四处移动●玩家控制的坦克能够打击敌人●敌人坦克能够任意移动●坦克被摧毁能够模拟爆炸●多个玩家(即客户端)通过服务器端进行互动。
二、java文件对应的功能。
Tank.java主要是包括Tank的相关信息;以及基本方法,以及对应的按键处理public void keyPressed(KeyEvent e) 按键响应函数private void locateDirection() 确定当前的坦克的位置private Missile fire() tank发射子弹public boolean isLive() 检测坦克是否还活着public void setLive(boolean live) 设定坦克的生死状态Tankclient.Java主要是客户端登陆的功能,具体通过套节字实现。
class ConnDialog extends Dialog此类主要实现通过对话框的形式来连接登录服务器。
客户机自动实现修改udPport的功能。
TankDeadMsg.Java本文件主要是向所有客户机包括服务器发送死亡坦克的信息。
这里主要用到的是多态机制。
(Tankdeadmsg继承msg接口)public void parse(DataInputStream dis)主要功能:* 分析接收到的消息数据* 接收到的消息数据的输入流public void send(DatagramSocket ds, String IP, int udpPort)主要功能:发送死亡坦克的相关的消息*通过该socket发送数据*数据的目标IP*数据的目标端口TankMoveMsg.java本文件主要是向所有客户机包括服务器发送坦克移动的相关息。
基于java坦克大战课程设计报告摘要随着计算机的普及以及对电子游戏的认识,电子游戏已被越来越多的人选作放松、娱乐的休闲方式;电子游戏既不需要专门购买游戏器材,也不需要宽阔的游戏场地,只需要一台能独立完成任务的计算机即可,它可以是人们工作、学习时用的计算机,并不需要另行配置,这比起传统休闲游戏即省钱又省事。
局域网游戏更是可以将现实空间中零散的计算机,组织起来,使其在逻辑空间中集中起来,使游戏的组织、开展变得轻松。
如此轻松而又安逸的休闲方式,使得越来越多的人尝试,甚至已经将电子游戏作为主要休闲方式,既然有如此多的人使用,那其中必然存在巨大的商机,即使人们不愿意为一个小小的休闲游戏花费金钱,但在游戏中添加广告、游戏相关服务也包藏了巨大的财富;当然电子游戏的制作如今已是空前的火爆,大大小小的游戏公司横空出世,都想在电子游戏制作这个行业里占据一席之地,而一款成功的电子游戏需要精心的策划、分析、设计,只有这样才能获得游戏中包藏的财富,以及做出一款真正能够让玩家娱乐、放松的游戏,而不是骗取玩家钱财的工具。
关键字:局域网;电子游戏;坦克大战;目录一、系统分析............................................................................................................................ - 1 -可行性分析.......................................................................................................................... - 1 - 需求分析.............................................................................................................................. - 1 - 二、概要设计............................................................................................................................ - 2 -工作流程图.......................................................................................................................... - 2 - 项目规划.............................................................................................................................. - 3 - 开发及运行环境.................................................................................................................. - 3 - 三、详细设计与算法实现........................................................................................................ - 4 -游戏主窗口.......................................................................................................................... - 4 - 网络管理.............................................................................................................................. - 6 - 封装的游戏元素.................................................................................................................. - 8 - 四、测试.................................................................................................................................. - 10 -测试环境............................................................................................................................ - 10 - 测试结果............................................................................................................................ - 10 -五、软件截图.......................................................................................................................... - 11 -六、总结.................................................................................................................................. - 14 -七、参考文献.......................................................................................................................... - 15 -一、系统分析可行性分析技术可行性软件使用swing、GUI、Socket、面向对象设计等技术实现,这些技术均已是非常成熟的技术,之前已有相当多使用这些技术的成功案例,故现使用这些技术是可行的。
攀枝花学院学生课程设计(论文)题目:基于JAVA的坦克大战学生姓名:学号:所在院(系):计算机学院专业:计算机科学与技术班级:指导教师:职称:2011年5 月26 日攀枝花学院教务JAVA课程设计之坦克大战课程设计任务书攀枝花学院本科学生课程设计任务书注:任务书由指导教师填JAVA课程设计之坦克大战成绩评定表课程设计(论文)指导教师成绩评定表JAVA课程设计之坦克大战摘要摘要系统拥有可视化的登录界面,配有游戏帮助文档,程序的编写涵盖J2SE基础知识,包括典型的封装、继承、多态的实现,同时结合了socket网络编程、GUI图形用户界面的相关知识。
项目集成了单机个人、网络对战两个版本。
单机版实现精彩的人机对战,电脑间隔性产生敌方坦克,玩家通过血块持续攻击。
游戏进行了后门设计,玩家可以轻松穿越墙体攻击敌方坦克。
网络版游戏中作为服务器的主机需提前启动坦克服务器,服务器主线程将接收的客户端的数据包转发到其他客户端,实现客户端游戏界面的实时更新。
开始游戏后,主线程调用窗体对象的Paint方法进行绘图,画面采用双缓冲技术进行刷新。
坦克将在游戏开始时进行初始化,并随屏幕刷新的频率而移动。
关键字坦克大战,C/S网络体系,JAVA,Socket编程,GUI目录摘要 (Ⅰ)1 可行性研究 (1)1.1 可行性分析 (1)1.1.1 系统可行性 (1)1.1.2 技术可行性 (1)1.1.3 经济可行性 (1)1.1.4 操作可行性 (2)1.2 网络游戏的发展 (2)1.3 系统的现实意义 (2)1.4 系统特点 (2)1.5 Java、C语言、C++主流技术比较 (3)1.6 本章小结 (3)2 系统需求分析 (4)2.1 系统运行环境 (4)2.1.1 系统运行的软件环境 (4)2.1.2 系统运行的硬件环境 (4)2.2 相关理论 (4)2.2.1 关于Eclipse的介绍 (4)2.2.2 J2SE框架 (5)2.3 系统功能需求 (6)2.3.1 主界面人性化功能 (6)2.3.2 人机对战模式功能 (6)2.3.3 网络对战模式功能 (6)2.3.4 联机通信机制 (6)2.3.5 Java图形编程 (7)2.4 本章小结 (8)3 系统概要设计 (9)3.1系统功能设计 (9)3.1.1 坦克大战总体功能设计 (9)3.1.2 TankClient类基本功能分析 (10)3.1.3 Tank类基本功能分析 (11)3.1.4 Missile类基本功能分析 (12)3.1.5 Explode类基本功能分析 (12)3.1.6 服务器类基本功能分析 (13)3.1.7 信息传送类基本功能分析 (13)3.2 本章小结 (13)4 系统详细设计 (14)4.1 游戏主窗体实现 (14)4.2 单机游戏的实现 (15)4.3 联机功能实现 (18)4.4 网络模式主要代码 (22)4.5 本章小结 (25)5 结论 (26)5.1 课程设计总结 (26)5.2 本程序需解决的有关技术问题 (26)5.3 展望 (27)参考文献 (28)1 可行性研究1.1可行性分析1.1.1系统可行性人类进入21世纪,全球一体化,互联网就起到重要的作用,而且随着互联网的不断发展,信息技术逐渐发展壮大,将成为网络经济的核心。