JAVA课程设计坦克大战(含代码).doc

上传人:文库蛋蛋多 文档编号:2387035 上传时间:2023-02-17 格式:DOC 页数:43 大小:188KB
返回 下载 相关 举报
JAVA课程设计坦克大战(含代码).doc_第1页
第1页 / 共43页
JAVA课程设计坦克大战(含代码).doc_第2页
第2页 / 共43页
JAVA课程设计坦克大战(含代码).doc_第3页
第3页 / 共43页
JAVA课程设计坦克大战(含代码).doc_第4页
第4页 / 共43页
JAVA课程设计坦克大战(含代码).doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《JAVA课程设计坦克大战(含代码).doc》由会员分享,可在线阅读,更多相关《JAVA课程设计坦克大战(含代码).doc(43页珍藏版)》请在三一办公上搜索。

1、Java程序课程设计任务书项目名称:坦克大战游戏的设计与开发 英文名:Tank Battle1、 主要内容: 1、基于java的游戏开发与设计的分析;2、坦克大战游戏的架构搭建与设计实现;3、游戏可以通过用户可以注册新用户,修改自己的密码、个人资料。2、具体要求1、系统的功能要求:(一)实现玩家试玩游戏功能,屏蔽用户注册和登陆功能(空功能)(二)玩家具备一个或者两个备选坦克战车(三)玩家可以选择一个到两个关卡进行作战(四)玩家可以选择两个敌对阵营中的一个加入,与其他AI战车坦克并肩作战(五)胜利判定条件为:时间制、全杀制(可选)(六)至少提供两个可以自由切换的视角(七)至少提供一种炮弹类型(八

2、)假定项目:如果用户注册,登陆功能能够顺利做好,则提供一个玩家分数上传和排行榜功能。2、学习并掌握以下技术:数据库的JDBC连接, JAVA编程语言,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 日:完成

3、全部程序的编写及系统测试; 1月 9日 1 月 10日:完成课程设计报告的编写,答辩;摘要随着Java语言的不断发展和壮大,现在的Java已经广泛的应用于各个领域,包括医药,汽车工业,手机行业,游戏,等等地方。Java游戏的开发为满足人们娱乐所需而设计。本游戏为坦克大战游戏,是基于Java的图形用户界面而开发的,可以放松心情的小游戏。游戏从系统操作简便、界面友好、灵活、上手即会的基本要求出发,完成整款游戏的开发。游戏更设置了暂停、计分、音乐、速度,用户信息保存等功能,可以根据自己的爱好,挑战更高难度,为用户带来愉悦的体验。本课程设计报告介绍了游戏的构想,分析,开发,实现的过程。论述了游戏的功能

4、开发,设计构思。给出了游戏的设计步骤,游戏系统关键的设计思想;在游戏系统实现章节给出了部分功能流程和相关代码。关键词:游戏,坦克大战 目 录JAVA程序课程设计任务书II摘要IV目 录V第1章 引言11.1 背景11.2 课程设计内容11.3 任务分工1第二章坦克大战小游戏应用程序22.1 坦克大战小游戏应用程序概述22.1.1 坦克大战小游戏系统任务及目的22.2 主要特色系统介绍22.3 本章小结3第3章 坦克大战游戏系统的设计43.1 系统需求分析43.2 系统开发及运行环境43.3 系统主要功能要求43.4.1 坦克大战系统总体结构53.4 系统数据流图53.5 本章小结6第4章 系统

5、的具体实现74.1界面设计74.1.1 用户登录界面图74.1.2 游戏主界面84.2程序设计及调试运行84.2.1自动计血量84.2.2对坦克方向的控制94.3 本章小结9第5章 结束语10致谢11参考文献12附录 源代码13第1章 引言1.1 背景游戏是全球最大的娱乐经济项目之一,已经被命名为“第九艺术”。而由“游戏”派生出来的职业,除了软件开发外,游戏包装宣传推广、攻略指导、网络游戏管理员和职业游戏玩家等,已成为了一系列专门的岗位。面对游戏产业如此巨大的市场空间,国内各大城市纷纷加大了这方面的人才培养,中国的游戏人才培训已随着游戏行业的总体发展开始逐步迈入了正轨。虽然说中国的游戏行业开始

6、逐步的迈入了正轨,但是现今,游戏人才出现严重的瓶颈时期,高校的扩招、金融危机的侵袭直接影响着我们最关心的就业问题,但是另一方面游戏人才的缺乏又直接制约着行业的发展,这就更加严格了对社会培训机构的稳定性和正规性的要求。在我国,游戏人才培养体系还未健全,部分开设了相关专业的高校,游由于理论和实践的脱离无法完全满足网游公司对人才的需求。所以,就中国目前的市场分析来看,加强游戏产业必须在多渠道人才培养体系上加快突破,尽快建立起多渠道人才培养体系,来满足社会对游戏人才的需求。1.2 课程设计内容坦克大战游戏是一种动作电子游戏的名称。坦克大战游戏是一种动作电子游戏的名称。玩家操作一辆己方坦克,消灭屏幕中不

7、断出现敌方坦克。己方坦克有血量限制,被敌方坦克的炮弹击中会减少血量,当血量为0时,任务失败。(1)基本的游戏操作 用户可以通过键盘来操作自己的坦克,尽量不让敌方坦克的炮弹击中自己,(2)计分,记时功能用户在游戏的过程中,系统将记录游戏的成绩1.3 任务分工第二章 坦克大战小游戏应用程序2.1 坦克大战小游戏应用程序概述此程序设计是一个小游戏(坦克大战)的实现,主要运用了用户图形界面,程序接口和基本函数绘制来实现,事件监听(包括鼠标事件,键盘事件,响应时间)也是这个程序的特色。总之,本游戏在用户界面的可操作性、游戏的美观度、计分计时存储结果方便都基本完善,有一定的可玩性。2.1.1 坦克大战小游

8、戏系统任务及目的 此小程序是为群众闲暇消遣之用,玩家在进入游戏后按游戏规则击毁敌方坦克获得相应的分数,进入下一关,直到全部过关。2.2 主要特色系统介绍玩家在使用此程序时更加能体验到乐趣。当玩家死亡以后,可以原地复活是本游戏的特色,可以激发玩家的游戏兴趣。2.3 本章小结虽然游戏在功能和界面上不能算的上很棒,但是麻雀虽小,五脏俱全,游戏具备了坦克大战这个经典游戏锁应该具有的基本雏形。通过这一章,我们对这个游戏应该有了比较宏观的了解,我们将在这一基础上探究游戏更完美的改变。 第3章 坦克大战游戏系统的设计这一章是坦克大战游戏系统的设计,从系统需求分析开始,介绍开发环境和用到的开发工具,系统主要的

9、功能设计,系统的数据流程图。3.1 系统需求分析坦克大战的设计目标为:(1)实现坦克大战游戏功能,用键盘控制坦克(2)实现游戏难度和游戏模型的选择,通过本关后可以选择进入下一关。(3)加强游戏可玩性。3.2 系统开发及运行环境硬件平台:q CPU:INTEL-I5。q 内存:1024MB以上。软件平台:q 操作系统:Windows XP。q 数据库:TXT文档。q 开发工具包:JDK Version1.6.2。q 最佳分辨率:800 X 600 3.3 系统主要功能要求本系统为了实现游戏坦克大战。本系统主要实现如下功能:q 系统界面美观大方舒适。q 实现游戏一些基础信息的保存和读取。q 画面流

10、畅,具有可玩性q 没有较大的游戏BUG。q 显示游戏者的游戏时间和积分。q 系统最大限度地实现了易维护性和易操作性。 q 系统运行稳定、安全可靠。q 玩家死亡以后如不想从新开始可以继续游戏3.4.1 坦克大战系统总体结构坦克大战游戏是基于基本的软件和普通硬件基础上的传统优秀游戏,一个游戏应该包括以下几大功能,如图3.1所示操作游戏处理产生的数据游戏开始显示数据3.4 系统数据流图游戏信息的流向,即系统数据流图如图2.3所示。开始游戏游戏中产生的数据显示玩家血量显示剩余敌方坦克数量图3.3系统数据流图3.5 本章小结本章是坦克大战游戏的具体设计过程,有具体的需求分析、系统功能模块、系统数据流图。

11、这里我们开始接触JAVA程序设计的最初步骤,也是很重要的一步。第4章 系统的具体实现界面是系统和玩家之间最直接的交互界面,界面的友好性体现了程序设计的质量,界面是否便捷易懂也是程序所基本的要求。4.1界面设计4.1.1 用户登录界面图4.1.2 游戏主界面上图就是进入游戏后的界面4.2程序设计及调试运行编写12个CLASS文件,装入一个包中,各个模块的程序代码都完成后,进行编译连接运行,经过反复调试,找出错误和不足,以达到游戏所需的基本功能和基本界面。这个过程比较繁琐,我们参考网络上现有的资源,并加以改进,对各个模块仔细分析备注并进行调试,做到程序简洁易懂,可读性好。尽量避免因代码不完善而导致

12、的游戏运行中可能出现的错误。4.2.1自动计血量游戏的自动计血量功能是非常有必要的,可以让玩家很直观地看到自己所玩的剩余血量。下面是自动计血量功能的部分关键代码:private class BloodBar public void draw(Graphics g) Color c = g.getColor();g.setColor(Color.RED);g.drawRect(x, y-10, WIDTH, 10);int w = WIDTH * life/100;g.fillRect(x, y-10, w, 10);g.setColor(c);4.2.2对坦克方向的控制通过上下左右四个键,可以

13、控制坦克向八个方向灵活的移动void localDirection() if(bL & !bU & !bR & !bD) dir = Direction.L;else if(bL & bU & !bR & !bD) dir = Direction.LU;else if(bL & !bU & !bR & bD) dir = Direction.LD;else if(!bL & bU & !bR & !bD) dir = Direction.U;else if(!bL & !bU & !bR & bD) dir = Direction.D;else if(!bL & !bU & bR & bD)

14、dir = Direction.RD;else if(!bL & bU & bR & !bD) dir = Direction.RU;else if(!bL & !bU & bR & !bD) dir = Direction.R;else dir = Direction.STOP;4.3 本章小结本章介绍了程序的具体实现和部分关键代码,包括自动计血量,对坦克方向的控制等第5章 结束语由于市场需要,游戏的更新速度步步加快,为了适应社会的需要,社会对游戏开发人员的需求,在游戏编程的学习过程中,必须理论与实践结合,提高编程能力与水平。通过小游戏的设计,对以学过的内容加深理解,对游戏开发的过程有初步的

15、认识,为以后的游戏开发设计和更加深入的学习计算机语言打下夯实的基础。目前竞争日益激烈的行业环境,对于未来行业的前景,还是要保持乐观的心态。毕竟游戏并不是一下子就可以编写成的。需要不断的技术积累,需要团队的合作,提高了工作的效率,才算是在游戏开发的道路上成功了一半。在现在这个信息化飞速发展的道路上,要成为一名合格的编程人员,那就必须走好每一步现在的路。基于Java的坦克大战小游戏,满足了用户娱乐的需求,已经达到了预期的目标。虽然该游戏大部分功能基本上已经实现,但是还是会存在一些不足:(1)游戏的关卡太少,样式不够多样化,不能满足用户对该游戏的挑战。(2)游戏的色彩不够多样化,色彩单一,不能给用户

16、增加新鲜的娱乐感。(3)对于用户信息方面,由于该程序没有涉及到数据库的相关内容,在用户信息存储,用户信息更新功能方面表现欠佳。在用户信息功能的方面有待进一步改善。致谢参考文献1 (美) 埃克尔著 陈昊鹏,饶若楠等译. Java编程思想J. 机械工业出版社,20052(美)Gary J.Bronson著 张珑 刘雅文译. Java编程原理J. 清华大学出版社,20043(美)Michael Morrison著 徐刚,于健,薛雷译. 游戏编程入门J. 人民邮电出版社,2005.94(美)Wendy Stahler著 冯宝坤,曹英译. 游戏编程中的数理应用J. 红旗出版社,20055(美)克罗夫特(

17、David Wallace Croft)著 彭晖译. Java游戏高级编程J. 清华大学出版社,20056 (美)David Brackeen著 邱仲潘译. Java游戏编程J. 科学出版社,20047 聂庆亮编著. Java应用开发指南J. 清华大学出版社,20108 耿祥义,张跃平编著. Java面向对象程序设计J. 清华大学出版社,20109 杨绍方编著. Java编程实用技术与案例J. 清华大学出版社,2000.1110 明日科技编著. Java编程全能词典J. 电子工业出版社,2010附录 源代码package com.tianlesoftware.tank;import java.

18、awt.Color;import java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import java.awt.Toolkit;import java.awt.event.KeyEvent;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Random;/* * 坦克类,可以生成自己的坦克和敌人的坦克。 * author tianlesoftware * */public class Tan

19、k private int x, y;/自己坦克的生命值private int life = 100;private static Random r = new Random();/good 为true表示是自己的坦克 ,false表示是敌人的坦克private boolean good;/坦克移动的步长public static final int XSPEED = 5;public static final int YSPEED = 5;TankWar tw;private int step = r.nextInt(12) + 3;/坦克的状态,活着,死者。private boolean

20、live = true;/坦克要走早下一步之前的坐标。 此坐标主要是用来处理敌人坦克撞墙的。/当敌人坦克于墙接触时,坐标设为此时,既返回上一层。在次进行随机的运动。这样就避免撞墙后不能运动了。private int oldX, oldY;/自己坦克的血条,显示还有多少血private BloodBar bb = new BloodBar();private boolean bL = false, bR = false, bU = false, bD = false;private Direction dir = Direction.STOP;private Direction ptDir =

21、Direction.D;/* * 一系列装载坦克图片的过程。原理同爆炸和炮弹相同。 */private static Toolkit tk = Toolkit.getDefaultToolkit(); private static Image tankImgs = null;/用map来保存,是为了方便处理,避免出错。因为坦克的方向很多。要是出错了就不好查找。private static Map imgs = new HashMap();static tankImgs = new Imagetk.getImage(Tank.class.getClassLoader().getResource(

22、images/tankL.gif),tk.getImage(Explode.class.getClassLoader().getResource(images/tankLD.gif),tk.getImage(Explode.class.getClassLoader().getResource(images/tankU.gif),tk.getImage(Explode.class.getClassLoader().getResource(images/tankRU.gif),tk.getImage(Explode.class.getClassLoader().getResource(images

23、/tankR.gif),tk.getImage(Explode.class.getClassLoader().getResource(images/tankLU.gif),tk.getImage(Explode.class.getClassLoader().getResource(images/tankD.gif),tk.getImage(Explode.class.getClassLoader().getResource(images/tankRD.gif),;imgs.put(L, tankImgs0);imgs.put(LD, tankImgs1);imgs.put(U, tankImg

24、s2);imgs.put(RU, tankImgs3);imgs.put(R, tankImgs4);imgs.put(LU, tankImgs5);imgs.put(D, tankImgs6);imgs.put(RD, tankImgs7);public static final int WIDTH = 30;/tankImgs0.getWidth(null); 求的实际长度后写上确定值。public static final int HEIGHT = 30;/ 此时图片还未装载到内存,所以的不到值 tankImgs0.getHeight(null);public Tank(int x, i

25、nt y, boolean good) this.x = x;this.y = y;this.oldX = x;this.oldY = y;this.good = good;public Tank(int x, int y, boolean good, Direction dir, TankWar tw) this(x, y, good);this.dir = dir;this.tw = tw;/* * 更据方向,画出坦克 * param g */public void Draw(Graphics g) if(!live) if(!good) tw.tanks.remove(this);ret

26、urn;if(good) bb.draw(g);switch(ptDir) case L :g.drawImage(imgs.get(L),x, y, null);break;case LU :g.drawImage(imgs.get(LU),x, y, null);break;case R :g.drawImage(imgs.get(R),x, y, null);break;case RU :g.drawImage(imgs.get(RU),x, y, null);break;case RD :g.drawImage(imgs.get(RD),x, y, null);break;case D

27、 :g.drawImage(imgs.get(D),x, y, null);break;case LD :g.drawImage(imgs.get(LD),x, y, null);break;case U :g.drawImage(imgs.get(U),x, y, null);break;move();/* * 根据方向控制坦克的移动 * */void move() this.oldX = x;this.oldY = y;switch(dir) case L :x -= XSPEED;break;case LU :x -= XSPEED;y -= YSPEED;break;case R :x

28、 += XSPEED;break;case RU :x += XSPEED;y -= YSPEED;break;case RD :x += XSPEED;y += YSPEED;break;case D :y += YSPEED;break;case LD :x -= XSPEED;y += YSPEED;break;case U :y -= YSPEED;break;case STOP :break;if(this.dir != Direction.STOP) this.ptDir = this.dir;if(x 0 ) x = 0;if(y TankWar.GAME_WIDTH ) x =

29、 TankWar.GAME_WIDTH - Tank.WIDTH;if( y + Tank.HEIGHT) TankWar.GAME_HEIGHT) y = TankWar.GAME_HEIGHT - Tank.HEIGHT;if(!good) / 使敌人的坦克走固定步数后在转方向,使看上去个更自然Direction dirs = Direction.values();if(step = 0) step = r.nextInt(12) + 3;int rm = r.nextInt(dirs.length);dir = dirsrm;step -;if(r.nextInt(40) 37) /敌人

30、坦克发泡间隔 this.fire();/* * 处理敌人坦克撞墙,如撞上就返回上一步。再次进行运动。 */private void stay() y = oldY;x = oldX;/* * 处理按键盘的操作。 * param e */public void KeyPressed(KeyEvent e) int key = e.getKeyCode();switch(key) case KeyEvent.VK_F2 :if(!this.live) this.live = true;this.life = 100; break;case KeyEvent.VK_RIGHT : bR = true

31、; break;case KeyEvent.VK_LEFT : bL = true; break;case KeyEvent.VK_UP : bU = true; break;case KeyEvent.VK_DOWN : bD = true; break;default : break;localDirection();/* * 处理按了那些方向键。 * 已对坦克进行相应的控制 * */void localDirection() if(bL & !bU & !bR & !bD) dir = Direction.L;else if(bL & bU & !bR & !bD) dir = Dire

32、ction.LU;else if(bL & !bU & !bR & bD) dir = Direction.LD;else if(!bL & bU & !bR & !bD) dir = Direction.U;else if(!bL & !bU & !bR & bD) dir = Direction.D;else if(!bL & !bU & bR & bD) dir = Direction.RD;else if(!bL & bU & bR & !bD) dir = Direction.RU;else if(!bL & !bU & bR & !bD) dir = Direction.R;els

33、e dir = Direction.STOP;/* * 处理释放键盘事件。 * 再次事件中有发射炮弹。释放时处理,就避免了炮弹成一个之线的问题。 * param e */public void keyReleased(KeyEvent e) int key = e.getKeyCode();switch(key) case KeyEvent.VK_SPACE :fire(); break;case KeyEvent.VK_RIGHT : bR = false; break;case KeyEvent.VK_LEFT : bL = false; break;case KeyEvent.VK_UP

34、 : bU = false; break;case KeyEvent.VK_DOWN : bD = false; break;case KeyEvent.VK_A : superFire(); break;default : break;localDirection();/* * 坦克开火事件 * return */public Missile fire() if(!live) return null;int x = this.x + Tank.WIDTH/2 - Missile.WIDTH/2;int y = this.y + Tank.HEIGHT/2 - Missile.HEIGHT/2

35、;Missile m = new Missile(ptDir, x, y, good, this.tw);tw.missiles.add(m);return m;/* * 自己坦克的超级自己,既按下a键后,从八个方向发射子弹。威力很大。 * */private void superFire() Direction dirs = Direction.values();for(int i=0; i8; i+) fire(dirsi);public Missile fire(Direction dir) if(!live) return null;int x = this.x + Tank.WIDT

36、H/2 - Missile.WIDTH/2;int y = this.y + Tank.HEIGHT/2 - Missile.HEIGHT/2;Missile m = new Missile(dir, x, y, good, this.tw);tw.missiles.add(m);return m;public Rectangle getRect() return new Rectangle(x, y, WIDTH, HEIGHT);public boolean isLive() return live;public void setLive(boolean live) this.live =

37、 live;public boolean isGood() return good;public void setGood(boolean good) this.good = good;/* * 坦克撞墙 * param w * return */public boolean collidesWithWall(Wall w) if(this.live & this.getRect().intersects(w.getRect() this.stay();return true;return false;/* * 处理敌人坦克之间的碰撞。 * param tanks * return */pub

38、lic boolean collidesWithTanks(List tanks) for(int i=0; itanks.size(); i+) Tank t = tanks.get(i);if(this != t) if(this.live & t.isLive() & this.getRect().intersects(t.getRect() this.stay();t.stay();return true;return false;public int getLife() return life;public void setLife(int life) this.life = lif

39、e;/* * 画出自己坦克还有多少血 * author Administrator * */private class BloodBar public void draw(Graphics g) Color c = g.getColor();g.setColor(Color.RED);g.drawRect(x, y-10, WIDTH, 10);int w = WIDTH * life/100;g.fillRect(x, y-10, w, 10);g.setColor(c);/* * 自己的坦克吃血块,将血加满 * param b * return */public boolean eat(B

40、lood b) if(this.live & b.isLife() & this.getRect().intersects(b.getRect() this.life = 100;b.setLife(false);return true;return false;package com.tianlesoftware.tank;import java.awt.Color;import java.awt.Graphics;import java.awt.Rectangle;public class Wall /* * x,y 表示墙的起点 * w,h 表示墙的长度和宽度 */private int x, y, w, h;TankWar tw;public Wall(int x, int y, int w, int h, TankWar tw) this.x = x;this.y = y;this.h = h;this.w = w;this.tw = tw;/* * 画出游戏界面中墙 * param g

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号