ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:123.18KB ,
资源ID:27690618      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27690618.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Robocode关于坦克大战的课程设计报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Robocode关于坦克大战的课程设计报告.docx

1、Robocode关于坦克大战的课程设计报告目 录一课程设计的目的与要求1.1课程设计目的.1.2课程设计的实验环境1.3课程设计的预备知识1.4课程设计主要内容二系统分析 2.1可行性分析. 2.2需求分析. 2.3工作流程图.三课程设计内容 3.1程序具体设计.3.2主要方法和变量3.3游戏主窗口.四系统的功能测试与调整 4.1菜单项测试.4.2游戏运行测试4.3坦克爆炸测试4.4保存游戏信息测试4.5帮助功能测试.五设计体会与小结六附录 一程设计的目的与要求1.1 课程设计目的JAVA面性对象程序设计是电子商务专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环

2、节。本课程的程序设计专题实际是计算机相关专业学生学习完JAVA面性对象程序设计课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。1.2 课程设计的实验环境硬件要求能运行Windows 9.X操作系统的微机系统。JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。1.3 课程设计的预备知识熟悉JAVA语言以及ECLIPSE开发工具。1.4 课程设计主要内容坦克大战游戏是在Eclipse环境下编程的游戏,其中包括对主战坦克的编写、坦克的初始位置

3、的编写、坦克的移动方向的编写、坦克的速度的编写、坦克的子弹速度的编写、敌军的子弹速度的编写、设置游戏难度的编写、子弹的编写、敌军坦克的编写、构造函数的编写等等。游戏主要实现的功能有:(1).坦克可以上下左右移动(2).坦克可以发子弹(可以连发)(3).我的坦克击中敌人坦克时,敌人就消失(显示爆炸效果)(4).我被击中后显示爆炸效果(5).防止敌人坦克重叠运动(6).玩游戏时可以暂停和继续(7).记录玩家的成绩二系统分析2.1可行性分析2.1.1技术可行性软件使用swing、GUI、Socket、面向对象设计等技术实现,这些技术均已是非常成熟的技术,之前已有相当多使用这些技术的成功案例,故现使用

4、这些技术是可行的。2.1.2经济可行性本软件为免费软件,将免费提供软件的下载、运行和维护服务,软件暂无收入,待公布之后随着使用者越来越多,将添加相应的广告、服务,从而增加收入,若使用者寥寥无几,将再次分析是否重新策划软件或者放弃开发,以减少损失。2.2需求分析设计一个图形用户界面,将所有游戏的元素都能在此用于界面上表现出来,界面能够接受用户的操作,具有人机交互功能。用户可以选择重新开始游戏,退出游戏,暂停游戏游戏帮助。界面中包含我方坦克,和敌人坦克以及坦克发出的子弹和爆炸后的效果。坦克:坦克分为两种,敌方坦克和用户控制的坦克。用户方和敌方坦克均可以发射子弹,可以改变路径的行走,且在行走过程中遇

5、到墙等阻碍物和游戏边界时要改变方向,而不能一直顶着障碍物不放。坦克之间不能穿越,碰撞到后自动调换方向。墙:游戏中的边界王家的坦克和敌人的坦克都不能越过,坦克的子弹也不能穿过。子弹:子弹可以由敌方和用户方发射,且发射出去的子弹可以直线移动,直到碰到障碍物就消失,子弹可以穿越树林和河流。敌方坦克受到一颗子弹攻击会爆炸从而导致死亡,死亡后坦克消失。用户方受到子弹攻击后会减少寿命,且受到四次攻击则死亡,此时如还有敌方坦克存在,则用户方输掉本次游戏。爆炸:当子弹射击到坦克身上时,要产生爆炸效果。方向:坦克和子弹都有方向,可以选择上下左右四个方向,且子弹的方向从属于坦克的方向。2.3工作流程图三课程设计内

6、容3.1程序具体设计图形用户界面需要用到抽象窗口工具即AWT和Swing来设计实现,由于游戏需要有功能按键来控制游戏的重新开始,退出,暂停,帮助等,所以在实现过程中,设计菜单项。坦克都是调用各自类里面的draw函数来画出来,最后new一个图形面板出来,把所有的元素都add进面板就可以了。界面的构造在程序中由MyPanel类的构造方法来完成,即没构造一个用户类都会产生这样一个包含各种游戏元素在内的界面。由于画面是静止的,而我们游戏的画面要求是动态的,游戏中的坦克和子弹都是在不断的动,可穿透的普通墙体也在“动”,所以对于画面,必须要不断的更新,重画才能产生动态的效果。界面中的元素都是在构造界面的时

7、候用界面实例对象的add方法加入进去的,且“动”的元素要不断更新。坦克主要由Tank类来实现。坦克的属性:速度(有X轴和Y轴的速度之分),坦克大小,坦克所在新的位置(X坐标和Y坐标),坦克是否还活着,行动方向等。所有的这些属性都有一个初始化值,从而在游戏一开始就可以运行。在设计过程中,坦克出现的位置由坐标而定。用户之后的位置由键盘监听方向,按指定方向以恒定的速度前进此速度为全局静态变量,当没有接受到键盘的控制时,则保持静止。敌方的坦克则是根据随机数来控制随机的方向和路径的,当敌方坦克撞到阻碍物时,会转回到前一步的位置,从而解决了坦克撞到阻碍物不回头的问题,这个功能由Tank类里的changTo

8、OldDir()方法实现。坦克的方向和子弹发射以及游戏的重新开始都是由键盘来控制的,所以在Tank类里面必须要实现这些功能。Tank类的keyPressed()方法用于接受键盘的按键监听,接收到相应的键盘信息后,如接收到F,则表示发射子弹,所以此时要调用Tank类里的fire()方法,fire()方法不带传递参数,因为子弹的方向总是从属于坦克的方向和位置。 由于坦克在碰到墙,界面边界和“家”等阻碍物时要改变方向,所以在Tank里面必须对于每一种阻碍物要设计一个方法来作为应对策略,当然解决方法是把下一步的位置调整到上一步的位置。子弹的属性:子弹前进的X轴和Y轴的速度初始速度都为10,子弹的长度和

9、宽度初始的长宽都为10,子弹的位置,子弹的方向,子弹是否live等。由于不同方向的子弹其实是图片,所以这里要考虑不同图片的选择用对应的方向来指定,所以要建立Map键值对,用String属性的方向来指定不同的图片。如:imgs.put(“L”, bulletImages0);类里面惯例有个构造方法,用来默认传递位置和方向,当然这里用到了同构,另外一个构造函数来取得子弹的状态和界面。darw()方法和move()方法来控制画子弹和移动子弹。接下来就是要考虑到子弹打到个=各元素上的反应,敌方的子弹打到敌方时,不会杀死自己人,所以这里只要直接return true就可以了,不用移除子弹碰到的坦克,更不

10、用调用爆炸来显示爆炸效果。具体代码:public boolean hitTanks(List tanks) /当子弹打到坦克时for (int i = 0; i tanks.size(); i+) if (hitTank(tanks.get(i) /对每一个坦克,调用hitTankreturn true;return false;子弹打到其他坦克上时用hitTank(Tank t) 方法,子弹打到墙上时hitWall(CommonWall w)方法,打到金属墙上hitWall(MetalWall w),打到家hitHome(),当然在这些方法里,都要作相应的操作来表示接受到子弹的后果,:还有,

11、当子弹射击到对方(用户方对敌方)时,当敌方射击到用户方,用户方要减少生命值,没接受一枪,就执行t.setLife(t.getLife() - 50); / 受一粒子弹寿命减少50接受4枪就死,总生命值200,当然方法里面还要做其他很多的判断,如生命值是否小于0,如果是的话就执行t.setLive(false);从而结束游戏。坦克的爆炸效果独立出来用一个类来描述,爆炸的属性:位置和存活状态,另外,画爆炸效果的时候要取得用户界面控制,所以要定义private static Toolkit tk = Toolkit.getDefaultToolkit();其他的方法只能的大同小异。菜单功能包括游戏的

12、重新开始,暂停,退出等。这些功能的用户界面放在了MyPanel的构造方法里,用到的是面板类和相应的监听功能,实现出来很简单。3.2 主要方法和变量属性int Fram_width 游戏用户界面的全局静态变量宽度,初始化为600int Fram_length游戏用户界面的全局静态变量长度,初始化为500void update(Graphics g)图形用户界面的更新方法void framPaint(Graphics g)画图形用户界面的方法,需要重画的界面元素都在这个方法里面void actionPerformed(ActionEvent e)监听菜单项的方法static void main(S

13、tring args)主函数,启动整个程序用户类主要是综合调用各个类来协作完成游戏的设计。2.3游戏主窗口游戏主窗口是人机交互的窗口,对玩家而言,他们只和游戏主窗口打交道,并不关心游戏内部是如何实现的,所以游戏主窗口部分最重要的便是游戏数据的输入、输出。在程序中须创建一个类,继承自Frame来创建一个窗口。2.3.1游戏数据的输入游戏中坦克需要能往上、下、左、右四个方向运动,故须设立4个按键,使其能操作坦克,另须设一个键控制坦克开火。为方便操作,本游戏设置WSAD分别表示上下左右,小键盘数字键4,表示开火。具体实现为,为窗口添加KeyListener(键盘监听器),监听键盘的按下和抬起。在类中

14、添加内部的适配器类,由于不需要其它类访问,将其设计为private的,以保证面向对象设计的封装性。2.3.2游戏数据的输出玩家需要从游戏输出数据中获得游戏信息,如坦克在往上行驶、坦克发了颗子弹、坦克爆炸等,这些均需要通过游戏数据的输出来告知玩家。由于继承自Frame,Frame类中的方法paint,可以在窗口中绘制图形,即满足了游戏需要图形界面的需求;另有方法repaint可以刷新窗口,以及时提供游戏信息,故须创建线程,不断地刷新窗口,来获取最新的游戏信息。四系统的功能测试与调整4.1菜单项测试菜单项可以选择开始新游戏,退出,暂停,继续,储存游戏记录,帮助功能,对于开始新游戏,退出两个功能,要

15、给出提示,用户是否真的想继续操作!菜单效果图:4.2 游戏运行测试4.3 坦克爆炸测试4.4保存游戏信息设置4.5 帮助功能测试五. 设计体会与小结本软件是使用java开发的小型游戏,其不仅实现了基本的功能需求,而且涉及到了java程序的编写的各个知识点,如事件监听、多线程、异常处理、数组、向量。图形界面等,所创建的每一个类都体现了java面向对象编程的特点,为以后的网络编程等java的高级运用打下了基础。由于本软件拓展方便、界面生动,多处使用了各种设计模式,是程序的编写效率更高,运行效率更高。由于程序中多数是面向父类或者面向接口的编程,以后如果要更换某些模块、元素的功能,以及添加功能,是非常

16、容易的。六附录程序代码:package come.test9;/* * 1.坦克大战 * 2.坦克可以上下左右移动 * 3.坦克可以发子弹(可以连发) * 4.我的坦克击中敌人坦克时,敌人就消失(显示爆炸效果) * 5.我被击中后显示爆炸效果 * 6.防止敌人坦克重叠运动 * 7.玩游戏时可以暂停和继续 * 8.可以分关 * 9.记录玩家的成绩import java.awt.*;import java.io.*;import javax.imageio.ImageIO;import javax.swing.*;import come.test9.Help;import come.test9.S

17、hot;import come.test9.EnemyTank;import come.test9.Recorder;import come.test9.MyPanel;import come.test9.MyTank;import come.test9.ReSuccess;import java.awt.event.*;import java.util.*;public class TankGame extends JFrame implements ActionListener MyPanel mp=null; /定义一个开始面板 MyStartPanel msp=null; /做出我需要

18、的菜单 JMenuBar jmb=null; /开始游戏 JMenu jm1=null; JMenu jm2=null; JMenuItem jmi1=null; JMenuItem jmi2=null; JMenuItem jmi3=null; JMenuItem jmi4=null; JMenuItem jmi5=null; JMenuItem jmi21=null; public static void main(String args) / TODO Auto-generated method stub TankGame d2=new TankGame(); /构造函数 public

19、TankGame() jmb=new JMenuBar(); jm1=new JMenu(游戏(G); /设置快捷键 jm1.setMnemonic(G); /设置菜单选项 jmi1=new JMenuItem(新游戏(N); jmi1.setMnemonic(N); jmi2=new JMenuItem(暂停(S); jmi2.setMnemonic(s); jmi3=new JMenuItem(继续(C); jmi3.setMnemonic(c); jmi4=new JMenuItem(储存游戏记录(Q); jmi4.setMnemonic(q); jmi5=new JMenuItem(退

20、出游戏(E); jmi5.setMnemonic(E); /对jmi1响应 jmi1.addActionListener(this); jmi1.setActionCommand(newgame); /对jmi2响应 jmi2.addActionListener(this); jmi2.setActionCommand(suspend); /对jmi3响应 jmi3.addActionListener(this); jmi3.setActionCommand(continue); /对jmi4响应 jmi4.addActionListener(this); jmi4.setActionComm

21、and(save); /对jmi5响应 jmi5.setActionCommand(exit); jmi5.addActionListener(this);jm2=new JMenu(帮助(H); jm2.setMnemonic(h); jmi21=new JMenuItem(操作说明(U); jmi21.setMnemonic(u); jmi21.addActionListener(this); jmi21.setActionCommand(help); this.setJMenuBar(jmb); jmb.add(jm1); jmb.add(jm2); jm1.add(jmi1); jm1

22、.add(jmi2); jm1.add(jmi3); jm1.add(jmi4); jm1.add(jmi5); jm2.add(jmi21); msp=new MyStartPanel(); /启动msp的线程 Thread t=new Thread(msp); t.start(); this.add(msp); this.setSize(600,500);setResizable(false); setTitle(坦克大战); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); public

23、 void actionPerformed(ActionEvent e) /对用户不同的点击做不同的处理 if(e.getActionCommand().equals(newgame) if(this.mp!=null) this.remove(mp); /创建战场面板 mp=new MyPanel(new game); /启动面板的线程 Thread t=new Thread(mp); /先删除旧的面板 this.remove(msp); t.start(); this.add(mp); /注册监听 this.addKeyListener(mp); Recorder.setEnSize(5)

24、;Recorder.setMyLife(1); Recorder.setAllEnemy(0); /要显示战斗场面 先要移除开始画面 this.remove(msp); /显示刷新JFrame this.setVisible(true); /战斗暂停 else if(e.getActionCommand().equals(suspend) /让子弹和坦克的速度变为0 MyTank.setSpeed(0); EnemyTank.setSpeed(0); Shot.setSpeed(0); /让坦克不能改变方向 EnemyTank.setTingzhi(true); MyTank.setMytin

25、gzhi(true); EnemyTank.setStrar(false); MyTank.setStrar(false); /战斗重新开始 else if(e.getActionCommand().equals(continue) /恢复子弹和坦克的速度 MyTank.setSpeed(3); EnemyTank.setSpeed(1); Shot.setSpeed(3); EnemyTank.setStrar(true); MyTank.setStrar(true); /储存游戏 else if(e.getActionCommand().equals(save) /调用保存游戏函数 Rec

26、order.saveRecording (); /跳出保存成功窗口 ReSuccess re=new ReSuccess(); else if(e.getActionCommand().equals(exit) /用户点击了退出游戏菜单 /保存击毁敌人数量 Recorder.saveRecording(); System.exit(0); /帮助 else if(e.getActionCommand().equals(help) Help h=new Help(); /开始面板class MyStartPanel extends JPanel implements Runnable int t

27、imes=0; public void paint(Graphics g) super.paint(g); g.fill3DRect(0, 0, 440, 360, false); if(times%2=0) /提示信息 g.setColor(Color.yellow); Font myFont=new Font(华文新魏,Font.BOLD,50); g.setFont(myFont); g.drawString(第一关, 140, 140); Override public void run() while(true) /休眠 try Thread.sleep(100); catch (I

28、nterruptedException e) / TODO Auto-generated catch block e.printStackTrace(); times+; /重画 this.repaint(); /我的面板class MyPanel extends JPanel implements KeyListener,Runnable String flag; /定义一个我的坦克 MyTank mytank=null; /定义敌人的坦克组 Vector ets=new Vector(); /定义炸弹集合 Vector bombs=new Vector(); int enSize=5; /定义三张图片,组成一颗炸弹 Image image1=null; Image image2=null; Image ima

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

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