基于JAVA语言的坦克大战
Java综合编程——坦克大战(15.1.5)
子弹类中的run()方法中
ActionEvent e
实现事件监听三步:
1. 2. 3.
确定事件源 确定监听类 监听对象的注册
举例——练习1
1. 2.tton,当该 按钮被按下后,系统给出提示 事件源JButton对象 监听器:
单独创建一个类负责监听 让JFrame负责监听
3.
把监听器加入到事件源中(注册监听) *事件对象,系统自动产生
坦克有方向, 画出所有方向的坦克
3、形成Tank类的子类
敌人坦克(EnemyTank)和我方坦克 (MyTank) 在这两个方法中覆盖父类的构造方法 将敌人坦克的颜色设置成蓝色 我方坦克设置成红色
4、
在MyPanel中绘制出一辆我方坦克,方向 向上 绘制出五辆敌人坦克,方向向下
在paint方法中用System.out.println(“调用 paint");
画直线:g.drawLine(10, 10, 40, 40); 画矩形边框:g.drawRect(60, 60, 100, 200); 画填充矩形:g.fill3DRect(50, 50, 30, 30, true); 设置颜色:g.setColor(Color.red);
基础知识
1. 2.
图形用户界面 Java绘图技术
1、图形用户界面
创建一个用户界面JFrame,取名为MainFrame 在其上添加一个JPanel,显示一个圆。
编程思路
(构建坦克大战主窗口)
坦克大战的主窗口是由一个JFrame构成的,因 为需要在上面作图,但是JFrame没有这个功能, 所以我们要在JFrame上再加上一个JPanel,在 JPanel上绘图。 我们在这里没有直接用JFrame和JPanel类,而 是定义另外两个类MainFrame和MainPanel,这 个两个类分别继承了JFrame和JPanel,然后再 由这两个类分别生成对象mf和mp,我们要在mp 对象上作图
基于JAVA语言的坦克大战
10、双机通信对战敌军
设计报告主要包括内容(参见后面的格式):
1.系统的功能需求及分析
2.系统总体结构
报
3.系统实现(包括数据结构、主要算法的实现,界面设计等,根据自己的系
告
统实际情况可以增加或删除部分内容)
书
4.系统功能测试
要 求
5.设计体会
要求:
学生完成设计后,每个同学均应提交设计报告及软件或硬件(同一小组共
通信技术实践
设 计 报 告
课题名称: 专业班级: 学生姓名: 学 号: 指导教师: 起止时间: 2014 年 3 月 16 日至 2014 年 6 月 25 日
重庆交通大学 信息科学与工程学院
重庆交通大学信息科学与工程学院课程设计任务书
课 程 通信技术实践 班级 通信工程一班 同组人
题 目 基于 java 平台的坦克大战 数
坦克大战是一款非常经典游戏,风靡全球,经久不衰,经过我们小组的 j 精心选择,决定以编写一个基于 java 基础上的坦克大战,为后来学习基于安 卓的程序编译奠定一定的基础。本次实践通过对一个坦克大战游戏的开发了 解了整个游戏开发的过程。而该报告详细阐述了相关知识、系统设计、系统 实现和新的体会等软件开发过程。力求将所学到的知识在系统开发中得以全 面的应用,并使系统在实际的操作中能按照设计的要求安全有效正确的运行。 本文的坦克大战有完整的界面,能够实现人机大战。该坦克大战游戏剧情非常 简单,游戏的主角在保护好自身生命的前提下,消灭所有的敌人,所以非常容 易上手。但剧情简单并不代表着一步一步从创建角色到实现功能的步骤是简 单的。我和我的搭档从零基础学 Java,经过多加讨论多加学习,才完成了这 次实践设计。
同完成的系统可只提交一份软件); 设计报告要求文字通畅,排版规范; 设计报告文字原则上不少于 3000 字(程序代码除外),并装订成册。
Java语言坦克大战游戏设计附有代码和图片
JISHOU UNIVERSITY本科生毕业设计题目:基于java语言坦克大战游戏开发作者:学号:所属学院:信息科学与工程学院专业年级:指导教师:职称:完成时间:吉首大学教务处制目录基于java语言坦克大战游戏开发 (1)摘要 (1)Based on the development of Java language Tank Wars Game (2)第一章游戏简要说明 (3)第二章开发环境介绍 (4)2.1 开发环境 (4)2.2 java语言特点简介 (4)2.3 Eclipse开发工具的简介 (5)第三章系统总体设计 (6)3.1程序功能的总和 (6)3.2主体模块 (6)3.3子弹模块 (6)3.4坦克模块 (7)3.5 墙模块 (7)3.6血液模块 (7)3.7爆炸模块 (8)第四章游戏详细设计过程 (9)4.1创建游戏窗口 (9)4.2改变游戏背景颜色。
(11)4.3创建坦克 (11)4.4 让坦克动起来 (12)4.5改变窗口的大小 (13)4.6让坦克受控制 (14)4.7创建一个Tank类 (15)4.8让坦克向8个方向移动 (16)4.9修改4.8中所设计的不足 (18)4.10添加子弹类 (19)4.11根据己方坦克的位置,打出子弹 (21)4.12修改坦克停下来不能打出子弹的问题 (21)4.13让坦克能够打出多发子弹 (23)4.14解决炮弹不消亡和坦克出界的问题 (23)4.15增加敌方坦克 (24)4.16击毙出现的敌方坦克 (25)4.17加入爆炸效果 (26)4.18添加多辆敌方坦克 (27)4.19让敌方坦克智能化 (29)4.20建立游戏障碍物 (31)4.21阻止坦克互相穿越 (32)4.22为我方坦克添加大招和血条 (33)4.23添加血块 (34)4.24重新载入敌军或我军坦克 (35)4.25加入图片 (35)第五章游戏的可行性测试 (37)5.1游戏界面介绍 (37)5.2游戏运行测试 (40)第六章总结 (43)参考文献 (44)基于java语言坦克大战游戏开发摘要随着网络科技的不断发展,我们的生活出现了日新月异的变化,特别是在游戏这一块,出现了前所未有的繁荣,各种各样的游戏进入我们的生活,而当初的“俄罗斯方块”、“坦克大战”、“贪吃蛇”等这些经典中的经典的游戏曾被多少人所知,更是多少80后甚至90后常聊的话题。
JAVA课程设计 坦克大战
得分显示:在游戏 界面实时显示得分 情况,方便玩家了 解游戏进度
减少内存占用:优 化数据结构,减少 不必要的内存分配
提高渲染效率: 优化渲染算法, 减少渲染时间
优化网络通信:减 少网络延迟,提高 网络通信效率
优化AI算法:提高 AI算法的效率和准 确性,提高游戏体 验
界面布局:合 理规划界面布 局,提高用户
玩家需要控制坦克,消灭敌 人,保护自己的基地
游戏支持多人在线对战,玩 家可以与朋友一起挑战
玩家控制 坦克,在 战场上与 敌人战斗
坦克可以 发射炮弹, 摧毁敌人 或障碍物
玩家需要 躲避敌人 的攻击, 保护自己 的坦克
游戏有各 种关卡, 难度逐渐 增加
玩家可以 通过升级 坦克,提 高战斗力
游戏支持 多人在线 对战,增 加游戏乐 趣
生命值耗尽:当 玩家的生命值降 至0时,游戏结束
时间耗尽:当游 戏时间耗尽时, 游戏结束
胜利条件:当玩 家达到胜利条件 时,游戏结束
失败条件:当玩 家达到失败条件 时,游戏结束
得分规则:击毁敌 方坦克得分,被敌 方坦克击毁扣分
得分方式:根据击 毁敌方坦克的数量 和难度计算得分
得分限制:得分上 限为1000分,达到 上限后不再增加得 分
,a click to unlimited possibilities
汇报人:
01
02
03
04
05
06
游戏类型:坦克大战
游戏背景:二战时期
游戏目标:摧毁敌方坦克,保 护自己的基地
游戏玩法:玩家控制坦克,通 过射击和躲避来消灭敌方坦克
游戏包含多个关卡,每个关 卡有不同的难度和挑战
设计一款坦克大战游戏
游戏界面:包括 菜单、地图、角 色、道具等元素
JAVA课程设计坦克大战含代码
游戏结束判断
生命值耗尽:当坦克的生命值降至0时,游戏结束 游戏时间结束:当游戏时间达到预设值时,游戏结束 胜利条件达成:当一方达到预设的胜利条件时,游戏结束 玩家主动退出:当玩家主动选择退出游戏时,游戏结束
游戏得分计算
得分规则:击毁敌 方坦克、保护己方 坦克、完成特定任 务等
得分方式:根据击 毁敌方坦克的数量、 保护己方坦克的数 量、完成任务的难 度等计算得分
得分显示:在游戏 界面实时显示得分 情况,方便玩家了 解游戏进度
得分记录:游戏结 束后,记录玩家的 分情况,方便玩 家查看历史成绩
游戏优化与扩展
游戏性能优化
优化算法: 使用更高 效的算法, 如动态规 划、贪心 算法等
减少内存 占用:优 化数据结 构,减少 不必要的 内存占用
优化渲染: 使用更高 效的渲染 技术,如 OpenGL、 DirectX 等
优化网络 传输:使 用更高效 的网络传 输协议, 如TCP、 UDP等
优化AI: 使用更高 效的AI算 法,如神 经网络、 遗传算法 等
优化资源 管理:合 理分配系 统资源, 避免资源 浪费
游戏扩展功能实现
增加新的坦克类型:如重型坦克、轻 型坦克等
增加新的地图:如沙漠地图、雪地地 图等
增加新的游戏模式:如团队模式、生 存模式等
音效类型:背景音乐、战斗音效、 胜利音效等
音效处理:音量调节、音效混合、 音效剪辑等
添加标题
添加标题
添加标题
添加标题
音效来源:自行创作、购买版权、 网络下载等
音效与游戏场景的结合:根据游戏 场景选择合适的音效,增强游戏体 验
游戏实体设计
坦克类设计
坦克属性:生命值、攻击 力、防御力、速度等
Java游戏开发之坦克大战代码
Java游戏开发之坦克大战代码标题:Java游戏开发之坦克大战代码关键词:Java坦克大战,坦克大战Java代码这是一个Java坦克大战的源码,实现了大部分功能,是学习Java绘图技术的好例子主类:package com.qq.TankGame;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.Paint;import java.awt.Panel;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.Vector;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JTextArea;/////**// * 功能:java绘图// * @author Administrator// *// */public class TankGame extends JFrame implements ActionListener{MyPanel mp = null;myStartPanel msp = null;EnemyTask em = null;JMenuBar jmb = null;JMenu jm = null;JMenuItem jmi1 = null;JMenuItem jmi2 = null;JMenuItem jmi3 = null;public static void main(String[] args) {TankGame tankGame = new TankGame();}public TankGame(){jmb = new JMenuBar();jm = new JMenu("游戏(G)");jm.setMnemonic('G');jmi1 = new JMenuItem("开始游戏(S)");jmi1.setMnemonic('S');jmi1.addActionListener(this);jmi1.setActionCommand("newGame");jmi2 = new JMenuItem("继续游戏(O)");jmi2.setMnemonic('O');jmi3 = new JMenuItem("退出游戏(X)");jmi3.setMnemonic('X');jmi3.addActionListener(this);jmi3.setActionCommand("exit");//启动mp线程//em = new EnemyTask();//mp = new MyPanel();msp = new myStartPanel();this.setJMenuBar(jmb);this.add(msp);//this.add(mp);jmb.add(jm);jm.add(jmi1);jm.add(jmi2);jm.add(jmi3);this.setSize(600,500);//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);//this.addKeyListener(mp);Thread t1 = new Thread(msp);t1.start();// Thread t = new Thread(mp);// t.start();}@Overridepublic void actionPerformed(ActionEvent arg0) {if(arg0.getActionCommand().equals("newGame")){mp = new MyPanel();Thread t = new Thread(mp);t.start();this.remove(msp);this.remove(mp);this.add(mp);this.setVisible(true);this.addKeyListener(mp);//Recoder.getRecording();}else if(arg0.getActionCommand()== "exit"){//Recoder.KeepRecording();Recoder.KeepExit();//KeepExit();System.exit(0);}}}class myStartPanel extends JPanel implements Runnable{ int times = 0;public void paint(Graphics g ){super.paint(g);g.fillRect(0, 0, 400, 300);if(times%2 ==0){g.setColor(Color.BLUE);Font f = new Font("华文新魏", Font.BOLD, 30);g.setFont(f);g.drawString("stage:1", 150, 150);}}@Overridepublic void run() {while(true){try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}this.repaint();times ++;}}}class MyPanel extends JPanel implements KeyListener,Runnable{ int [] TanksX = new int[20];int [] TanksY = new int[20];int [] ShotsX = new int[100];int [] ShotsY = new int[100];// int [][]Tanks = new int[20][2];// int [][]Shots = new int[20][2];int [] ETdirects = new int[20];int [] HeroShotsX = new int[10];int [] HeroShotsY = new int[10];static Hero hero = null;EnemyTask et = null;shot s = null;boolean isPaintShot = true;int a = 0, b = 0 , c = 0;int [] directs = new int [10];static //敌人坦克集合Vector<EnemyTask> ets = new Vector<EnemyTask>();int enSize = 3; //敌人坦克初始数量int enSizes = 5; //敌人坦克画面总数量int hintEnemyTanks = 0;//击中敌人坦克数量public void showInfo(Graphics g ){//画提示信息//画出提出坦克this.drawTank(80, 330, g, 0, 1);this.drawTank(160, 330, g, 0, 0);g.setColor(Color.BLACK);g.drawString(Recoder.getEnNum() + "", 105, 350);g.drawString(Recoder.getMyLife() + "", 185, 350);//画出成绩g.setColor(Color.BLACK);Font f = new Font("宋体", Font.BOLD, 15);g.setFont(f);g.drawString("你的总成绩:", 400, 20);this.drawTank(410, 30, g, 0, 1);g.drawString((20 - Recoder.getEnNum()) + "", 435, 50);}public void paint(Graphics g){super.paint(g);g.fillRect(0, 0, 400, 300);this.showInfo(g);//画出提示信息//自己坦克if(hero.isLive == true){this.drawTank(hero.getX(), hero.getY(), g, hero.direct, hero.type); }else{if(Recoder.getMyLife() > 0){hero = new Hero(30, 270 ,0,0,10 , true);hero.isLive = true;}}//画出敌人坦克for(int i = 0; i <ets.size(); i++){EnemyTask et = ets.get(i);if(!et.isLive){ets.remove(i);if(Recoder.getEnNum() >0){this.drawTank(50, 0, g, 1, 1);ets.add(et);//et.isLive = true;Thread t = new Thread(et);t.start();}// if(Recoder.getEnNum() > 0){// et.isLive = true;// }}if(et.isLive){this.drawTank(et.getX(), et.getY(),g, et.direct, et.type);System.out.println("et.ss.size()"+et.ss.size());for(int j = 0; j < et.ss.size(); j++){//敌人坦克子弹s = et.ss.get(j);if(s.isLive){if(isPaintShot){g.fill3DRect(s.x, s.y, 5, 10, false);}}else{et.ss.remove(j);}}}// if(!et.isLive){// ets.remove(i);// }}//画出子弹for(int i = 0; i< hero.ss.size(); i++){if(hero.ss.get(i)!= null && hero.ss.get(i).isLive == true){ g.fill3DRect(hero.ss.get(i).x, hero.ss.get(i).y, 5, 10, false); }if(hero.ss.get(i).isLive == false){hero.ss.remove(hero.ss.get(i));}}}// public void hintTank2(shot s , Hero et){// switch (et.direct) {// case 0:// case 1:// if(s.x < et.x + 20 && s.x > et.x// && s.y < et.y + 30 && s.y > et.y){// s.isLive = false;// et.isLive = false;// }// //break;// case 2:// case 3:// if(s.x < et.x + 30 && s.x > et.x// && s.y < et.y + 20 && s.y > et.y){// s.isLive = false;// et.isLive = false;// }// //break;////// default://// break;// }//// }public boolean hintTank(shot s , Tank et){boolean b = false;switch (et.direct) {case 0:case 1:if(s.x < et.x + 20 && s.x > et.x&& s.y < et.y + 30 && s.y > et.y){s.isLive = false;et.isLive = false;b = true;}break;case 2:case 3:if(s.x < et.x + 30 && s.x > et.x&& s.y < et.y + 20 && s.y > et.y){s.isLive = false;et.isLive = false;b = true;}break;// default:// break;}return b;}public void drawTank (int x , int y , Graphics g , int direct , int type){ switch(type){//坦克类型case 0:g.setColor(Color.RED);break;case 1:g.setColor(Color.BLUE);break;}switch (direct) {case 0://向上g.fill3DRect(x, y, 5, 30, false );g.fill3DRect(x + 15, y, 5, 30, false );g.fill3DRect(x + 5, y + 5, 10, 20, false );g.fillOval(x + 5, y + 10, 10, 10);g.drawLine(x + 10, y,x + 10, y + 15);break;case 1://向下g.fill3DRect(x, y, 5, 30, false );g.fill3DRect(x + 15, y, 5, 30, false );g.fill3DRect(x + 5, y + 5, 10, 20, false );g.fillOval(x + 5, y + 10, 10, 10);g.drawLine(x + 10, y + 15,x + 10,y + 30 ); break;case 2://向左g.fill3DRect(x, y, 30, 5, false );g.fill3DRect(x , y + 15, 30, 5, false );g.fill3DRect(x + 5, y + 5, 20, 10, false );g.fillOval(x + 10, y + 5, 10, 10);g.drawLine(x , y + 10,x + 15,y + 10 );break;case 3://向右g.fill3DRect(x, y, 30, 5, false );g.fill3DRect(x , y + 15, 30, 5, false );g.fill3DRect(x + 5, y + 5, 20, 10, false );g.fillOval(x + 10, y + 5, 10, 10);g.drawLine(x + 15,y + 10, x + 30 , y + 10); break;default:break;}}public MyPanel (){hero = new Hero(30, 270 ,0,0,10 , true);//tanks = new tank(100,100, 2 ,1);//初始化敌人坦克Recoder.setHero(hero);for(int i = 0; i < enSize; i++){//创建敌人坦克的对象Recoder.getRecording();EnemyTask et = new EnemyTask((i + 1)*50, 0, 1, 1, 5 ,true); et.setEts(ets);Recoder.setEtss(ets);//传ets到RecoderThread t = new Thread(et);t.start();shot s = new shot(et.x + 10 , et.y + 30, et.direct);et.ss.add(s);Thread t2 = new Thread(s);t2.start();ets.add(et);//加入到集合中//et.setColor(1);}Recoder.setEnSize(enSize);}@Overridepublic void keyPressed(KeyEvent arg0) {// TODO Auto-generated method stubif(arg0.getKeyCode() == KeyEvent.VK_S){//hero.setX(hero.getX() ++ 1);// int i= hero.getY();// i += hero.speed;// hero.setY(i);this.hero.MoveDown();hero.setD(1);}if(arg0.getKeyCode() == KeyEvent.VK_W){//hero.setX(hero.getX() ++ 1);// int i= hero.getY();// i -= hero.speed;// hero.setY(i);hero.MoveUp();hero.setD(0);}if(arg0.getKeyCode() == KeyEvent.VK_D){//hero.setX(hero.getX() ++ 1);// int i= hero.getX();// i += hero.speed;// hero.setX(i);hero.MoveRight();hero.setD(3);}if(arg0.getKeyCode() == KeyEvent.VK_A){//hero.setX(hero.getX() ++ 1);// int i= hero.getX();// i -= hero.speed;// hero.setX(i);hero.MoveLeft();hero.setD(2);}//判断是否按下Jif(arg0.getKeyCode() == KeyEvent.VK_J){if(hero.ss.size() <= 4){this.hero.shotEnemy();//System.out.println("j");}}if(arg0.getKeyCode() == KeyEvent.VK_SPACE){//空格暂停 if(hero.speed != 0){a = hero.speed ;hero.speed = 0;for(int i = 0; i < ets.size(); i ++){//System.out.println("aaaaaaaaaaaaaa");EnemyTask et = ets.get(i);//System.out.println("speed" + et.speed);b = et.speed;et.speed = 0;directs[i] = et.direct;//System.out.println(et.direct);//System.out.println(directs[i]);//et.direct = 0;et.isdirects = false;for(int j = 0 ; j < et.ss.size(); j ++){shot s = et.ss.get(j);c = s.speed;s.speed = 0;System.out.println("aa");}}//System.out.println("b1 =" + b);isPaintShot = false;}else{hero.speed = a;//System.out.println("a2 =" + a);for(int i = 0; i < ets.size(); i ++){//System.out.println("bbbbbbbbbbbbbbbbbbb");EnemyTask et = ets.get(i);et.isdirects = true;et.speed = b;et.direct = directs[i];for(int j = 0 ; j < et.ss.size(); j ++){shot s = et.ss.get(j);s.speed = c;isPaintShot = true;}}s.isShot = true;}}if(arg0.getKeyCode() == KeyEvent.VK_K){this.KeepExit();System.exit(0);}if(arg0.getKeyCode() == KeyEvent.VK_L){this.GetKeeper();}this.repaint();}@Overridepublic void keyReleased(KeyEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void keyTyped(KeyEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void run() {//每隔100mswhile(true){try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}this.hintEnemyTank();this.hintMyTank();// for(int i = 0; i < et.ss.size(); i ++){// shot myshot = et.ss.get(i);// if(et.isLive == true){//// if(hero.isLive = true){// this.hintTank2(myshot, hero);// }//// }// }this.repaint();}}private void hintMyTank() {for(int i = 0; i < ets.size(); i++){EnemyTask et = ets.get(i);for(int j = 0; j < et.ss.size(); j++ ){shot s = et.ss.get(j);if(s != null){if(hero.isLive){this.hintTank(s, hero);if(this.hintTank(s, hero)){//判断是否击中,返回true则hero数量减一Recoder.setMyLife(Recoder.getMyLife() - 1 );}}}}}}private void hintEnemyTank() {for(int i = 0; i < hero.ss.size(); i ++){shot myshot = hero.ss.get(i);if(myshot.isLive == true){for(int j = 0; j < ets.size(); j ++){EnemyTask et = ets.get(j);if(et.isLive = true){this.hintTank(myshot, et);if(this.hintTank(myshot, et)){hintEnemyTanks ++;Recoder.setEnNum(Recoder.getEnNum() - 1);}}}}}}private void KeepExit(){int [] heros = new int[]{hero.getX(),hero.getY(),hero.direct,};for(int i = 0 ; i < ets.size(); i ++){EnemyTask et = ets.get(i);TanksX[i] = et.getX();TanksY[i] = et.getY();ETdirects [i] = et.direct;for(int j = 1 ; j < et.ss.size(); j++){shot s = et.ss.get(j);ShotsX[j] = s.x;ShotsY[j] = s.y;}}for(int i = 0 ; i < hero.ss.size(); i++ ){shot s = hero.ss.get(i);HeroShotsX[i] = s.x ;HeroShotsY[i] = s.y;}BufferedWriter bw = null;try {bw = new BufferedWriter(new FileWriter("d:\\aa\\TanksX.txt")); for(int i = 0 ; i < enSize ; i ++){bw.write(TanksX[i] + "\r\n");bw.write(TanksY[i] + "\r\n");}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {try {bw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void GetKeeper (){//继续游戏时还原数据BufferedReader br = null ;try {br = new BufferedReader(new FileReader("d:\\aa\\TanksX.txt")); for(int i = 0; i < enSize*2 ; i ++){if(i % 2 !=0){TanksY[i] = Integer.parseInt(br.readLine());System.out.println("TanksY" + TanksY[i]);}else{TanksX[i] = Integer.parseInt(br.readLine());System.out.println("TanksX" + TanksX[i]);}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}//class tank extends Tank{//// public tank(int x, int y, int direct,int type) {// super(x, y, direct,type);// // TODO Auto-generated constructor stub// }////}下面是工具类:package com.qq.TankGame;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.Vector;class Recoder{/****/private static Vector<EnemyTask> ets = new Vector<EnemyTask>(); public static Vector<EnemyTask> getEts() {return ets;}public static void setEtss(Vector<EnemyTask> ets) {Recoder.ets = ets;}private static int enSize ;public static int getEnSize() {return enSize;}public static void setEnSize(int enSize) {Recoder.enSize = enSize;}private static Hero hero ;public static Hero getHero() {return hero;}public static void setHero(Hero hero) { Recoder.hero = hero;}public static void KeepExit(){//System.out.println(hero.getX());int [] TanksX = new int[20];int [] TanksY = new int[20];int [] ShotsX = new int[100];int [] ShotsY = new int[100];int [] ETdirects = new int[20];int [] HeroShotsX = new int[10];int [] HeroShotsY = new int[10];int [] heros = new int[]{hero.getX(),hero.getY(),hero.direct};for(int i = 0 ; i < ets.size(); i ++){EnemyTask et = ets.get(i);TanksX[i] = et.getX();TanksY[i] = et.getY();ETdirects [i] = et.direct;for(int j = 1 ; j < et.ss.size(); j++){shot s = et.ss.get(j);ShotsX[j] = s.x;ShotsY[j] = s.y;}}for(int i = 0 ; i < hero.ss.size(); i++ ){ shot s = hero.ss.get(i);HeroShotsX[i] = s.x ;HeroShotsY[i] = s.y;}BufferedWriter bw = null;BufferedWriter bw1 = null ;try {bw = new BufferedWriter(new FileWriter("d:\\aa\\TanksX.txt"));for(int i = 0 ; i < enSize ; i ++){bw.write(TanksX[i] + "\r\n");bw.write(TanksY[i] + "\r\n");}bw1 = new BufferedWriter(new FileWriter("d:\\aa\\KeepRecoding.txt")); bw1.write((20 - getEnNum()) + "\r\n" );} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {try {bw1.close();bw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private static int enNum = 5;public static int getEnNum() {return enNum;}public static void setEnNum(int enNum) {Recoder.enNum = enNum;}public static int getMyLife() {return myLife;}public static void setMyLife(int myLife) {Recoder.myLife = myLife;}private static int myLife = 3;private static BufferedReader br = null;public static void getRecording(){try {br = new BufferedReader(new FileReader("d:\\aa\\KeepRecoding.txt")); String n ;while((n = br.readLine()) != null ){String a = n;enNum = 20 - Integer.parseInt(n);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private static BufferedWriter bw = null;public static void KeepRecording (){try {bw = new BufferedWriter(new FileWriter("d:\\aa\\KeepRecoding.txt")); bw.write((20 - getEnNum()) + "\r\n" );} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {bw.close();//先开后关//new FileWriter("d:\\aa\\KeepRecoding.txt").close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public class Tank {int x = 0 ;int y = 0;int direct = 0; //方向int type = 0 ;//类型int speed = 30;//速度int color;boolean isLive;public int getColor() {return color;}public void setColor(int color) {this.color = color;}public int getS() {return speed;}public void setS(int speed) {this.speed = speed;}public Tank(int x , int y , int direct , int type, int speed, boolean isLive){ this.x = x;this.y = y;this.direct = direct;this.type= type;this.speed = speed;this.isLive = isLive;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public int getD() {return direct;}public void setD(int direct) {this.direct = direct;}public int getT() {return type;}public void setT(int type) {this.type = type;}}class EnemyTask extends Tank implements Runnable{Vector<shot> ss = new Vector<shot>();Vector<EnemyTask> ets = new Vector<EnemyTask>();boolean isdirects = true;public EnemyTask(int x, int y, int direct, int type, int speed ,boolean isLive) {super(x, y, direct, type, speed, isLive);// TODO Auto-generated constructor stub}public boolean isTouchOhterTank (){boolean b = false;switch (this.direct) {case 0://此坦克向上for(int i = 0; i < ets.size(); i++){EnemyTask et = ets.get(i);if(et != this){if(et.direct == 0 || et.direct == 1){//上或下if((this.x>=et.x && this.x <= et.x + 20//第一个点x在内&& this.y>=et.y && this.y <= et.y + 30)//第一个点y在内||(this.x + 20>=et.x && this.x+ 20 <= et.x + 20//第二个点x在内&& this.y >=et.y && this.y <= et.y + 30)//第二个点y在内){b = true;}}if(et.direct == 2 || et.direct == 3){//左或右if((this.x>=et.x && this.x <= et.x + 30//第一个点x在内&& this.y>=et.y && this.y <= et.y + 20)//第一个点y在内||(this.x + 20>=et.x && this.x+ 20 <= et.x + 30//第二个点x在内&& this.y >=et.y && this.y <= et.y + 20)//第二个点y在内){b = true;}}}}break;case 1://向下for(int i = 0; i < ets.size(); i++){EnemyTask et = ets.get(i);if(et != this){if(et.direct == 0 || et.direct == 1){//上或下if((this.x>=et.x && this.x <= et.x + 20//第一个点x在内&& this.y + 30>=et.y && this.y + 30 <= et.y + 30)//第一个点y在内||(this.x + 20>=et.x && this.x+ 20 <= et.x + 20//第二个点x在内&& this.y + 30>=et.y && this.y + 30 <= et.y + 30)//第二个点y在内){b = true;}}if(et.direct == 2 || et.direct == 3){//左或右if((this.x>=et.x && this.x <= et.x + 30//第一个点x在内&& this.y + 30 >=et.y && this.y + 30 <= et.y + 20)//第一个点y在内||(this.x + 20 >=et.x && this.x+ 20 <= et.x + 30//第二个点x在内&& this.y + 30 >=et.y && this.y + 30 <= et.y + 20)//第二个点y在内){b = true;}}}}break;case 2:for(int i = 0; i < ets.size(); i++){EnemyTask et = ets.get(i);if(et != this){if(et.direct == 0 || et.direct == 1){//上或下if((this.x>=et.x && this.x <= et.x + 20//第一个点x在内&& this.y>=et.y && this.y <= et.y + 30)//第一个点y在内||(this.x >=et.x && this.x<= et.x + 20//第二个点x在内&& this.y + 20 >=et.y && this.y + 20 <= et.y + 30)//第二个点y在内){b = true;}}if(et.direct == 2 || et.direct == 3){//左或右if((this.x>=et.x && this.x <= et.x + 30//第一个点x在内&& this.y>=et.y && this.y <= et.y + 20)//第一个点y在内||(this.x >=et.x && this.x<= et.x + 30//第二个点x在内&& this.y + 20>=et.y && this.y + 20 <= et.y + 20)//第二个点y在内){b = true;}}}}break;case 3:for(int i = 0; i < ets.size(); i++){EnemyTask et = ets.get(i);if(et != this){if(et.direct == 0 || et.direct == 1){//上或下if((this.x + 30>=et.x && this.x + 30 <= et.x + 20//第一个点x在内&& this.y>=et.y && this.y <= et.y + 30)//第一个点y在内||(this.x + 30 >=et.x && this.x+ 30 <= et.x + 20//第二个点x在内&& this.y + 20 >=et.y && this.y + 20 <= et.y + 30)//第二个点y在内){b = true;}}if(et.direct == 2 || et.direct == 3){//左或右if((this.x + 30>=et.x && this.x + 30 <= et.x + 30//第一个点x在内&& this.y>=et.y && this.y <= et.y + 20)//第一个点y在内||(this.x + 30>=et.x && this.x+ 30 <= et.x + 30//第二个点x在内&& this.y + 20>=et.y && this.y + 20 <= et.y + 20)//第二个点y在内){b = true;}}}}break;default:break;}return b ;}@Overridepublic void run() {int a = (int) (Math.random() * 10 + 2);//连动步数int times = 0;while(true){try {Thread.sleep(300);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}//if(x > 0 && x < 400 - 30 & y > 0 && y < 300 - 30){ //if(!this.isTouchOhterTank()){switch(this.direct){case 0://System.out.println(isTouchOhterTank());for(int i = 0 ;i < a ; i++){if(y - this.speed > 0 && !this.isTouchOhterTank()){y -= this.speed;}try {Thread.sleep(50);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;case 1:for(int i = 0 ;i < a ; i++){if(y + speed < 300 - 30 && !this.isTouchOhterTank()){ y += this.speed;}try {Thread.sleep(50);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;case 2:for(int i = 0 ;i < a ; i++){if(x - speed > 0 && !this.isTouchOhterTank()){x -= this.speed;}try {Thread.sleep(50);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;case 3:for(int i = 0 ;i < a ; i++){if(x + speed < 400 - 30 && !this.isTouchOhterTank()){ x += this.speed;}try {Thread.sleep(50);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;}//}times ++;if(times % 2 == 0){if(isLive){if(ss.size() < 3){shot s = null;switch (direct) {case 0://向上s = new shot(x + 10 , y ,0);ss.add(s);break;case 1://向下s = new shot(x + 10 , y + 30 , 1);ss.add(s);break;case 2://向左s = new shot(x , y + 10 , 2);ss.add(s);break;case 3://右s = new shot(x + 30 , y + 10 , 3);ss.add(s);break;default:break;}Thread t = new Thread(s);t.start();}}}//}// //随机改变方向// public void changeDirect(){//// }if(isdirects){this.direct = (int) (Math.random() * 4); }if(this.isLive == false){break;}if(ss.size() < 3){}}}public void setEts(Vector<EnemyTask> ets) { this.ets = ets;}// @Override// public void run() {// while(true){// try {// Thread.sleep(50);// } catch (InterruptedException e) {// // TODO Auto-generated catch block// e.printStackTrace();// }//// y ++ ;// System.out.println(y);// }//// }}class Hero extends Tank{//public Hero(int x , int y, int direct, int type,int speed, boolean isLive){super(x, y, direct, type,speed , isLive);}Vector<shot> ss = new Vector<shot>();shot s = null;//开火public void shotEnemy(){//System.out.println("shotEnemy");if(Recoder.getMyLife() > 0){//生命没有了,不能发子弹 switch (this.direct) {case 0://向上s = new shot(x + 10 , y ,0);ss.add(s);break;case 3://右s = new shot(x + 30 , y + 10 , 3);ss.add(s);break;case 1://向下s = new shot(x + 10 , y + 30 , 1);ss.add(s);break;case 2://向左s = new shot(x , y + 10 , 2);ss.add(s);break;default:break;}Thread t = new Thread(s);t.start();}}//向上,下,左,右public void MoveUp(){if(y - this.speed > 0){y -= speed;}}public void MoveDown(){if(y + this.speed < 300 -30){y += speed;}}public void MoveLeft(){if(x - this.speed > 0){x -= speed;}}public void MoveRight(){if(x + this.speed < 400 -30){x += speed;}}}class shot implements Runnable{int x ,y;int direct;int speed = 20; //子弹速度boolean isShot = true;boolean isLive = true;//子弹是否活着 public shot(int x,int y, int direct){this.x = x;this.y = y;this.direct = direct;}@Overridepublic void run() {while(true){try {Thread.sleep(50);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(isShot){switch (direct) {case 0://向上y -= speed;break;case 1://下y += speed;break;case 2://右x -= speed;break;case 3://左x += speed;break;default:break;}}//System.out.println(x + " " + y);if(x < 0 || x > 400 || y < 0 || y > 300){ //System.out.println("this.islive = false");this.isLive = false;break;}}} }。
JAVA实现经典游戏坦克大战的示例代码
JAVA实现经典游戏坦克⼤战的⽰例代码⽬录前⾔主要设计功能截图代码实现总结前⾔⼩时候⼤家都玩过坦克⼤战吧,熟悉的旋律和丰富的关卡陪伴了我们⼀整个寒暑假,还记得传说中的经典坦克⼤战吗?那些怀旧的记忆,伴随着我们⼀起⾛过来的经典坦克⼤战,刚开始那战战兢兢,屡屡被敌⼈坦克击毁的情景历历在⽬。
现在好了,再也不⽤担⼼敌⼈坦克了,可以横冲直撞,横扫敌⼈坦克了。
快哉《坦克⼤战》游戏以坦克战⽃为主题,⽤java语⾔实现,采⽤了swing技术进⾏了界⾯化处理,设计思路⽤了⾯向对象思想。
主要需求可以⽣成不同的地图,消灭地图上的所有坦克为胜利;可以设置关卡地图,不断增加难度。
主要设计1、要有难度关卡:第⼀关,第⼆关,第三关,第四关,第五关;第⼀关地图最简单,第五关地图最难;2、坦克要有⾎条,打多次才会死3、地图要我有我⽅坦克四辆(相当于4条命)和多辆敌⽅坦克4、我⽅坦克的炮弹数量是固定的,设置为5005、地图右边显⽰基本信息6、地图上要在砖块,铁块,河流功能截图游戏开始页⾯代码实现窗⼝布局public class GameFrame extends JFrame {/*** serialVersionUID*/private static final long serialVersionUID = -1176914786963603304L;public GameFrame() {super();this.setSize(800, 700);this.setTitle("坦克⼤战");this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);this.setResizable(false);// 显⽰器屏幕⼤⼩Dimension screenSizeInfo = Toolkit.getDefaultToolkit().getScreenSize();int leftTopX = ((int) screenSizeInfo.getWidth() - this.getWidth()) / 2;int leftTopY = ((int) screenSizeInfo.getHeight() - this.getHeight()) / 2;// 设置显⽰的位置在屏幕中间this.setLocation(leftTopX, leftTopY);}}地图渲染核⼼算法@Servicepublic class PaintService {@Autowiredprivate GameContext context;private Brick rightBrick = new Brick(700, 50);private Iron rightIron = new Iron(700, 50);private Water rightWater = new Water(700, 50);/*** 画出东西(包括坦克、障碍物。
基于java的游戏坦克大战论文
目录摘要 (I)ABSTRACT (II)第一章绪论 (1)1.1课题研究的背景 (1)1.2课题研究的任务 (1)第二章系统分析 (2)2.1课题的可行性分析 (2)2.2需求分析 (2)第三章系统总体设计 (3)3.1游戏总体流程设计 (3)3.2游戏界面设计 (4)第四章游戏详细设计 (6)4.1各个类的实现 (6)4.2程序的详细设计 (7)第五章测试 (9)5.1软件测试说明 (9)5.1.1 软件测试的目标 (9)5.1.2 软件测试的原则 (9)5.2测试计划 (10)5.2.1 进行通过测试 (10)5.2.2 进行有效类测试 (10)5.3测试用例 (10)总结 (10)参考文献 (11)致 (12)附录一坦克大战中的类 (15)附录二坦克大战程序 (31)毕业设计(论文)原创性声明和使用授权说明原创性声明本人重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部容。
作者签名:日期:学位论文原创性声明本人重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
基于Java的网络版坦克大战游戏设计_毕业设计
伊犁师范学院本科生毕业论文(设计)论文题目:基于Java的网络版坦克大战游戏设计基于Java的网络版坦克大战游戏设计(伊犁师范学院计算机科学系06-2班,新疆伊宁市 835000)摘要:本设计采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。
运行程序后允许用户选择执行选项菜单。
在开始游戏后,启动服务器和客户端,对背景的所有物体进行绘图。
在主程序运行的线程中,画面刷新将以一定的频率采用双缓冲技术对屏幕重绘,实时反映整个游戏的进行状态。
用户控制的坦克运行在主线程中,随屏幕刷新的频率而移动。
坦克将在游戏开始时进行初始化,然后将坦克绘制在地图的上层。
本设计主要实现的功能是让坦克移动并能够智能的打出炮弹,躲避子弹,炸毁对方坦克。
能够支持网络对战和单机对战两种模式。
关键词:面向对象;坦克大战;网络游戏;Java;Socket 类中图分类号:TP311.1目录摘要 ......................................................................... 第1章前言.. (1)1.1游戏设计的需求分析 (1)1.1.1国内外电子网络游戏的现状 (1)1.1.2本系统的现实意义 (1)1.1.3本系统和其他开发游戏区别 (2)1.2开发技术概述 (2)1.2.1J AVA、C语言、C++三种主流编程技术比较 (2)1.3本章小结 (2)第2章相关技术理论 (3)2.1系统运行环境 (3)2.1.1系统运行的软件环境 (3)2.1.2系统运行的硬件环境 (3)2.2相关理论 (3)2.2.1关于E CLIPSE的介绍 (3)2.2.2J2SE框架 (3)2.2.3联机通信机制 (4)2.2.4J AVA图形编程 (5)2.3本章小结 (5)第3章系统设计 (5)3.1系统可行性分析 (6)3.1.1技术可行性 (6)3.1.2经济可行性 (6)3.1.3操作可行性 (6)3.2系统需求分析 (6)3.2.1在人机对战模式下实现的功能 (6)3.2.2在网络对战模式下实现的功能 (6)3.3系统功能设计 (6)3.3.1坦克大战总体功能设计 (7)3.3.2T ANK C LIENT类基本功能分析 (7)3.3.3T ANK类基本功能分析 (8)3.3.4M ISSILE类基本功能分析 (9)3.3.5E XPLODE类基本功能分析 (9)3.3.6服务器类基本功能分析 (10)3.3.7信息传送类基本功能分析 (10)3.4本章小结 (10)第4章系统实现 (11)4.1游戏主窗体实现 (11)4.2单机游戏的实现 (12)4.3联机功能实现 (14)4.4 本章小结 (17)第5章总结与展望 (18)5.1总结 (18)5.2设计中的不足之处 (18)5.3展望 (18)致谢 (19)参考文献 (20)第1章前言人类进入21世纪,全球一体化,互联网就起到重要的作用,而且随着互联网的不断发展,信息技术逐渐发展壮大,将成为网络经济的核心。
java课设报告坦克大战
java课设报告坦克大战什么是Java课设报告坦克大战?Java课设报告坦克大战是一个基于Java编程语言开发的游戏项目。
它模拟了坦克战争的场景,玩家需要操控一辆坦克,与其他玩家或者电脑控制的敌人进行战斗,完成各种任务。
这个项目旨在提高学生的Java编程能力和团队协作能力。
第一步:需求分析和设计在开始编写代码之前,我们需要进行需求分析和设计。
首先,确定游戏的功能和玩法。
例如,游戏应该具有地图、坦克、子弹等基本元素,玩家可以使用键盘控制坦克的移动和攻击,坦克和子弹应该有相应的属性和行为,坦克应该能够与其他坦克进行交互等等。
其次,我们需要设计游戏的界面和用户交互方式,包括游戏的开始菜单、游戏画面、得分、生命值等界面元素。
最后,我们应该考虑游戏的可扩展性,使得我们能够在后续的开发过程中添加更多的功能和元素。
第二步:编写代码在设计完成后,我们开始编写Java代码。
首先,我们创建一个Java项目,并进行必要的配置,例如添加游戏所需的外部库和资源文件。
然后,我们开始编写代码。
我们可以将游戏的不同元素,例如地图、坦克、子弹等,抽象成不同的类,并为每个类定义相应的属性和方法。
我们还可以使用设计模式和面向对象的编程思想,使得代码更加清晰和可维护。
同时,我们需要为游戏添加适当的事件处理器,以响应用户的操作和更新游戏状态。
我们还可以使用Java图形库或者相关的游戏引擎,使游戏具有更好的视觉效果和用户体验。
第三步:测试和调试在代码编写完成后,我们需要进行测试和调试。
我们可以编写一些测试用例,验证游戏的各个功能和元素是否正常工作。
同时,我们需要定期检查并修复可能存在的bug和错误,确保游戏的稳定性和可玩性。
在这个过程中,我们可以与团队成员合作,互相交流和帮助,提高解决问题的效率和质量。
第四步:项目上线和发布在完成测试和调试后,我们可以将游戏部署到服务器上,并发布给玩家。
我们可以选择通过应用商店或者网站进行发布,或者将游戏打包成可执行文件,供玩家下载和安装。
基于Java的坦克大战游戏的设计与实现毕业设计论文
基于Java的坦克大战游戏的设计与实现摘要:随着人们对生活质量的要求一天比一天高,为了让人们更好地开掘自身的智慧,游戏就此进入了大众的视野,在人们的生活中有着重要的位置,已然变得必不可少。
游戏产业推动高新技术不断升级,极大地促进了经济的增长,推动了“第四产业”的经济腾飞。
坦克大战游戏是童年时期经常玩的经典游戏,我们对它都十分了解。
游戏通过分析JA V A游戏开发和代码设计,用Eclipse软件开发了坦克大战游戏,运用接口技术,使一个类能够实现多个接口,使用套接字Socket 来完成client端和server端的连接。
玩家通过连接访问进入游戏,通过操纵坦克来守卫基地,玩家还可以获得超级武器来提升坦克的属性,摧毁全部敌方坦克来取得胜利,操作非常简单,还具有非常高的普遍率,适合所有人群玩。
该游戏既满足了人们的个性化需求,也让玩家在游戏过程中丢掉烦恼,尽情地释放压力。
关键词:Java 坦克大战游戏SocketThe Design and Implementation of The Java Based Tank War GameAbstract:As people demand higher quality of life every day, in order to make people better dig their own wisdom, the game into the public vision, in people's lives have a vital position, has become an indispensable part. The game industry to promote the upgrading of high-tech, which greatly promoted the economic growth, and promote the "fourth industry" economic take-off. Tank war game is often played in childhood, but also the classic game. Game through the analysis of JA V A game development and code design, with Eclipse software developed a tank war game, the use of interface technology, so that a class can achieve multiple interfaces, the use of socket Socket to complete client and server side of the connection. Players access the game through the connection, through the manipulation of tanks to guard the base, the eradication of all enemy tanks to win, players can also get super weapons to enhance the properties of the tank, the operation is very simple, suitable for people of all ages to play. The game not only meets the individual needs of people, but also allows players to lose trouble in the course of the game, enjoy the pressure to release.Key words: Java; Tank war game; SocketII目录1.引言 (1)2.系统分析 (1)2.1需求和技术分析 (1)2.2功能分析 (2)3.总体设计 (2)3.1总体功能 (2)3.2坦克大战总体流程图 (4)4.详细设计 (5)4.1面板功能设计 (5)4.2子弹功能设计 (8)4.3坦克功能设计 (9)4.4服务器设计 (10)4.5客户端设计 (13)5. 游戏测试 (15)5.1测试方法 (15)5.2系统测试 (15)5.3测试分析和小结 (17)6.结论 (18)参考文献 (18)1.引言随着社会和时代的进步,来自各个方面的压力让人没精打采,为了分解人们的压力,休养那变得疲顿的头脑和劳累的身心,特设计了坦克大战小游戏,游戏操作非常容易,只要将手指放在键盘上敲击相关的游戏键就可以玩,在玩游戏的过程中能够体验现实生活中没有的快乐,既有利于身心健康,又不会影响工作和学习。
坦克大战【java项目】
坦克⼤战【java项⽬】坦克⼤战(JAVA项⽬)1.项⽬简介复刻童年经典⼩游戏——坦克⼤战:⽤户进⼊游戏界⾯后,通过键盘上的数字1,2键选择游戏模式,选择1并按回车键进⼊单⼈模式;选择2并按回车键进⼊双⼈模式。
玩家1可通过按键WASD控制坦克⽅向及移动,并且按空格发射⼦弹。
玩家2通过⽅向键控制坦克⽅向移动,并且按K键发射⼦弹。
⼦弹碰到围墙后消失,⼦弹碰到坦克后产⽣爆炸特效。
左上⾓记录敌⽅坦克的实时数量。
玩家击败所有敌⽅坦克,游戏胜利;若所有我⽅坦克被击败,或者我⽅基地被摧毁,则游戏失败。
2.⼩组成员及分⼯成员负责任务组长黄抒鸿博客撰写,游戏规则的制定,碰撞检测,爆炸特效的实现,随机事件的编写组员雷正伟前期调研,⾯向对象设计,窗体绘制,闪动问题的解决,键盘事件的编写3.项⽬功能架构图与主要功能流程图3.1项⽬功能架构图3.2主要功能流程图3.3⾯向对象类设计图4.功能详解4.1 窗体绘制及添加键盘事件4.1.1 创建窗⼝·创建类继承JFrame·创建启动⽅法launch()4.1.2 为窗⼝上⾊·重写paint()⽅法,设置图形颜⾊和⼤⼩4.1.3 添加选项⽂字4.1.4 为窗⼝添加键盘事件添加内部类,实现KeyAdapter类,重写keyPressed⽅法,写⼊键盘事件,1选择单⼈模式,2选择双⼈模式窗⼝添加键盘监视器添加指针图⽚在项⽬⽂件夹下创建⽂件夹images,关于项⽬的图⽚,插件都放在这个⽂件夹内创建图⽚对象在launch()⽅法中重绘图形4.2双缓冲解决闪动问题创建⼀个图⽚Image offScreemImage = null;重写paint()⽅法创建⼀个和弹出窗⼝宽⾼相同的图⽚,获取该图⽚的图形对象,把所有内容添加到该图⽚中//创建和容器⼀样⼤⼩的Image图⽚if(offScreemImage == null) {offScreemImage = this.createImage(width,height);}//获的该图⽚的图形Graphics gImage = offScreemImage.getGraphics();gImage.setColor(Color.GRAY);gImage.fillRect(0, 0, width, height);//添加游戏选项gImage.setColor(Color.BLUE);gImage.setFont(new Font("仿宋", Font.BOLD, 50));if (state == 0 ) {gImage.drawString("选择游戏模式", 220, 100);gImage.drawString("单⼈模式", 220, 200);gImage.drawString("双⼈模式", 220, 300);//绘制指针gImage.drawImage(select, 160, y, null);} else if (state ==1 || state ==2) {gImage.drawString("游戏开始", 220, 100);if (state ==1) {gImage.drawString("单⼈模式", 220, 200);} else if(state ==2) {gImage.drawString("双⼈模式", 220, 200);}}4.3⾯向对象设计游戏⽗类:坦克类:玩家⼀和玩家⼆玩家2和玩家1的⽅法都是⼀样的,只需要修改键盘事件。
坦克大战游戏编程实现
坦克大战游戏编程实现游戏编程实现坦克大战坦克大战是一款经典的电子游戏,在游戏中,玩家将控制一个坦克,通过操作坦克的移动和攻击,与其他玩家或电脑进行战斗。
本文将介绍如何使用编程语言实现坦克大战游戏。
设计思路在实现坦克大战游戏之前,首先需要明确游戏的基本要素和规则。
玩家将操作一个坦克,通过键盘或操纵杆控制坦克的移动和攻击。
游戏画面由地图、坦克、子弹等元素构成。
坦克可以向前、向后、向左、向右移动,可以发射子弹进行攻击。
玩家需要躲避敌方坦克的攻击,同时尽可能击败敌方坦克。
编程实现坦克的移动和攻击可以通过编程语言来实现。
以下是使用Java语言来编写坦克大战游戏的示例代码:```javapublic class TankGame extends JFrame {private Tank tank; // 玩家坦克private List<Tank> enemyTanks; // 敌方坦克列表private List<Bullet> bullets; // 子弹列表public TankGame() {// 初始化游戏窗口this.setSize(800, 600);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);// 初始化玩家坦克tank = new Tank(400, 500);// 初始化敌方坦克列表enemyTanks = new ArrayList<>();enemyTanks.add(new Tank(100, 100));enemyTanks.add(new Tank(300, 200));// 初始化子弹列表bullets = new ArrayList<>();// 添加键盘监听器,控制坦克移动和攻击this.addKeyListener(new KeyListener() {@Overridepublic void keyPressed(KeyEvent e) {int keycode = e.getKeyCode();switch (keycode) {case KeyEvent.VK_UP:tank.moveUp();break;case KeyEvent.VK_DOWN: tank.moveDown();break;case KeyEvent.VK_LEFT: tank.moveLeft();break;case KeyEvent.VK_RIGHT: tank.moveRight();break;case KeyEvent.VK_SPACE: bullets.add(tank.fire());break;default:break;}// 重新绘制游戏画面repaint();}@Overridepublic void keyReleased(KeyEvent e) { }@Overridepublic void keyTyped(KeyEvent e) { }});}// 绘制游戏画面public void paint(Graphics g) {super.paint(g);// 绘制玩家坦克tank.draw(g);// 绘制敌方坦克for (Tank enemyTank : enemyTanks) { enemyTank.draw(g);}// 绘制子弹for (Bullet bullet : bullets) {bullet.draw(g);}}public static void main(String[] args) {new TankGame();}}```在上述示例代码中,我们创建了一个继承自JFrame的主窗口,并在窗口中添加了一个玩家坦克、敌方坦克和子弹的列表。
JAVA课程设计坦克大战(含代码)
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代码Tank
import java.awt.*;import java.awt.event.*;import java.util.*;//定义坦克类public class Tank {public static final int XSPEED = 5; //坦克水平速度public static final int YSPEED = 5; //坦克垂直速度public static final int WIDTH = 30; //坦克宽度public static final int HEIGHT = 30; //坦克高度private boolean live = true; //初始化生命为trueprivate BloodBar bb = new BloodBar();//声明血块变量private int life = 100; //初始化生命值为100TankClient tc;//生命坦克客户端变量private boolean good;//设置区分敌我两方标志private int x, y; //声明两个整型私有变量x,y坐标private int oldX, oldY;//记录上一步的坐标private static Random r = new Random(); //创建一个随机数r对象//声明方向变量private boolean bL=false, bU=false, bR=false, bD = false;enum Direction {L, LU, U, RU, R, RD, D, LD, STOP};/*坦克的八个方向和一个stop 状态*/private Direction dir = Direction.STOP;private Direction ptDir = Direction.D;private int step = r.nextInt(12) + 3;//整数step在[3,14]间随机取值//构造方法public Tank(int x, int 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, TankClient tc) { this(x, y, good);this.dir = dir;this.tc = tc;}//画出坦克public void draw(Graphics g) {if(!live) {if(!good) {tc.tanks.remove(this);}return;}Color c = g.getColor();//获取颜色if(good) g.setColor(Color.RED);//我方坦克颜色设置为红色else g.setColor(Color.BLUE);g.fillOval(x, y, WIDTH, HEIGHT);g.setColor(c);//画出子弹if(good) bb.draw(g);switch(ptDir) {case L:g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x, y + Tank.HEIGHT/2);break;case LU:g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x, y);break;case U:g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH/2, y);break;case RU:g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH, y);break;case R:g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH, y + Tank.HEIGHT/2);break;case RD:g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH, y + Tank.HEIGHT);break;case D:g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH/2, y + Tank.HEIGHT);break;case LD:g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x, y + Tank.HEIGHT);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 U:y -= YSPEED;break;case RU:x += XSPEED;y -= YSPEED;break;case R:x += XSPEED;break;case RD:x += XSPEED;y += YSPEED;break;case D:y += YSPEED;break;case LD:x -= XSPEED;y += YSPEED;break;case STOP:break;}if(this.dir != Direction.STOP) {this.ptDir = this.dir;}//控制坦克不出界if(x < 0) x = 0;if(y < 30) y = 30;if(x + Tank.WIDTH > TankClient.GAME_WIDTH) x = TankClient.GAME_WIDTH - Tank.WIDTH;if(y + Tank.HEIGHT > TankClient.GAME_HEIGHT) y = TankClient.GAME_HEIGHT - Tank.HEIGHT;if(!good) {Direction[] dirs = Direction.values();if(step == 0) {step = r.nextInt(12) + 3;int rn = r.nextInt(dirs.length);//改变方向dir = dirs[rn];}step --;if(r.nextInt(40) > 38) this.fire();}}private void stay() {x = oldX;y = oldY;}//键按下的消息处理public void keyPressed(KeyEvent e) {int key = e.getKeyCode();switch(key) {case KeyEvent.VK_Q :if(!this.live) {this.live = true;this.life = 100;}break;case KeyEvent.VK_LEFT :bL = true;break;case KeyEvent.VK_UP :bU = true;break;case KeyEvent.VK_RIGHT :bR = true;break;case KeyEvent.VK_DOWN :bD = true;break;}locateDirection();}//设定方向void locateDirection() {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.U;else if(!bL && bU && bR && !bD) dir = Direction.RU;else if(!bL && !bU && bR && !bD) dir = Direction.R;else if(!bL && !bU && bR && bD) dir = Direction.RD;else if(!bL && !bU && !bR && bD) dir = Direction.D;else if(bL && !bU && !bR && bD) dir = Direction.LD;else if(!bL && !bU && !bR && !bD) dir = Direction.STOP;}//键抬起的消息处理public void keyReleased(KeyEvent e) {int key = e.getKeyCode();switch(key) {case KeyEvent.VK_CONTROL:fire();break;case KeyEvent.VK_LEFT :bL =true;break;case KeyEvent.VK_UP :bU = true;break;case KeyEvent.VK_RIGHT :bR = true;break;case KeyEvent.VK_DOWN :bD = true;break;case KeyEvent.VK_A ://按下A开火superFire();break;}locateDirection();}//开火发射方法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;Missile m = new Missile(x, y, good, ptDir, this.tc);tc.missiles.add(m);return m;}public Missile fire(Direction dir) {if(!live) return null;int x = this.x + Tank.WIDTH/2 - Missile.WIDTH/2;int y = this.y + Tank.HEIGHT/2 - Missile.HEIGHT/2;Missile m = new Missile(x, y, good, dir, this.tc);tc.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 = live;}//判断坦克状态是否良好public boolean isGood() {return good;}//坦克与墙相撞public boolean collidesWithWall(Wall w) {if(this.live && this.getRect().intersects(w.getRect())) {this.stay();return true;}return false;}//坦克与坦克相撞public boolean collidesWithTanks(java.util.List<Tank> tanks) {for(int i=0; i<tanks.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;}//发射超级子弹private void superFire() {Direction[] dirs = Direction.values();for(int i=0; i<8; i++) {fire(dirs[i]);}}//返回坦克的生命值public int getLife() {return life;}//设置坦克的生命值public void setLife(int life) {this.life = life;}//创建生命值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);}}//判断坦克是否吃到东西public boolean eat(Blood b) {if(this.live && b.isLive() && this.getRect().intersects(b.getRect())) { this.life = 100;b.setLive(false);return true;}return false;}}。
Java课程设计——坦克大战
Java课程设计——坦克⼤战坦克⼤战——坦克类⼀. 团队课程设计博客链接⼆.个⼈负责模块和任务说明模块:坦克类(玩家坦克类+电脑坦克类),代码整合三.代码的提交记录截图四.负责模块和任务详细说明玩家坦克继承VisibleImage类,电脑坦克类继承⾃玩家坦克类,UML如下:1.玩家坦克类构造⽅法:设置坐标位置(坦克出⽣的位置),坦克的图⽚,坦克的类型(玩家还是电脑),⾯板(可将坦克放置于当前⾯板中),代码截图如下:移动⽅向:(上下左右)左移思路:若当前⽅向不是左移,则将图⽚更改为左移图⽚,并且更新⽅向为左。
若经过碰撞检测发现不会产⽣碰撞,则改变坐标,并且要判断坐标是否在边界。
其他⽅向同理,代码截图如下:碰撞检测:(墙与电脑坦克)思路:获取当前坐标周围⼀定范围内的矩形边框,同时获取当前⾯板内的所有墙体对象,将其存放于数组中。
将获得的矩形范围与所有墙体互相匹配,若符合则说明会产⽣碰撞。
注意草地例外。
坦克碰撞检测同理,注意要将⾃⼰除外,并且要查看当前坦克是否存活,代码截图如下:获得⼦弹:根据上下左右的⽅向判断坦克头的位置,即⼦弹发射的⽅向的预设,以保证之后⼦弹朝预设⽅向移动(⼦弹的移动在⼦弹类⾥)攻击⽅法:获得⼦弹,将⼦弹添加⾄⾯板(因为⼦弹有四个⽅向),启动攻击冷却线程。
触碰边界⽅法:根据屏幕与主窗体之间的⼤⼩关系,进⽽判断坦克是否移动到边界。
冷却线程:使⽤sleep()⽅法,经过休眠之后,要注意改变线程的状态,将其改为可攻击。
其余setter,getter⽅法则不进⾏详细描述。
2.电脑坦克类构造⽅法:继承⾃⽗类玩家坦克类,设置好初始⽅向,攻击冷却时间移动⽅向:在⽗类的基础上,改变了⽗类的⼿动产⽣新⽅向,⽽是随机产⽣新⽅向,并且在该⽅向的移动时间是设置好的,检测是否达到边界同理:碰撞检测,攻击⽅法的思路都与玩家坦克类相似,不同之处在于,玩家坦克类的⽅向是⼈为改动的,⽽电脑坦克类的⽅向是随机产⽣的,故要重写⽗类的这两个⽅法。
java课程设计-坦克大战
攀枝花学院学生课程设计(论文)题目:基于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世纪,全球一体化,互联网就起到重要的作用,而且随着互联网的不断发展,信息技术逐渐发展壮大,将成为网络经济的核心。
基于java的游戏坦克大战论文
目录1251第一章绪论课题研究的背景如今我们的生活节奏越来越快,每个人的生活压力也在不断变大,长期紧绷着神经容易产生心理和生理上的双重伤害,人们需要在工作和学习之外放松自己,玩玩游戏正是放松自己的方式之一。
坦克大战,一个众所周知的小游戏,曾经在红白机时代风靡一时。
其界面简单,耐玩,关卡多,可玩性高,没有局限的年龄层。
Java是现在全球最时髦的开发工具之一,它拥有庞大且完善的类库,内置了其他语言需要靠库甚至是操作系统才能支持的功能,拥有一个虚拟机,总之,Java 的出现,确实给整个程序界带来了巨大的冲击,也许现在还无法准确评估Java为整个IT业带来的影响,但是有一点毋庸置疑—Java将不可避免的影响一带程序员。
使用Java作为开发工具,来做坦克大战这个小游戏,是一种很理性的选择。
Java游戏可以在本地桌面系统下运行,也可以在Web浏览器下运行。
我在大学四年中学到了很多计算机的知识,JAVA语言,软件工程,数据结构,软件工程等课程。
如今我将用我所学的知识来完成一个坦克大战游戏,来锻炼自己的动手能力,独立作出一个小程序。
课题研究的任务本文中所做的主要工作如下:(1)介绍了制作坦克大战游戏的意义和目的。
(2)设计坦克大战游戏各个类,实现各类效果和目标。
(3)分析并解决游戏中的若干技术问题。
(4)完成坦克大战游戏,进行测试并分析结果.第二章系统分析课题的可行性分析1、课题要求(1)与实践活动和相关的文件和资料由教师提供。
(3)具体问题再做详细调查研究并与指导老师面谈。
2、可行性分析技术可行性:游戏对机器没有多大要求,现在无论什么电脑,只要能安装J2SDK,就能在电脑上开发这款游戏。
制作出来的游戏可以在本地桌面运行,也可在WEB上运行,现在JAVA语言非常成熟,完全能够完成这个游戏。
经济可行性:开发这个游戏除了耗费自己的时间和精力以外,不需要其他的资金问题,完成后放到网上开放下载,无需任何费用,有兴趣的人可以自己下载来玩。
基于Java的坦克大战软件程序设计剖析
华中科技大学文华学院基于Java的坦克大战游戏软件程序设计学生姓名:秦光睿学号:110102011111 学部(系):_信息科学与技术学部_专业年级: _11级电子信息工程_指导教师:田笛职称或学位:_硕士_2015年5月2日摘要随着网络时代的到来及发展,游戏产业方兴未艾,出现了前所未有的繁荣。
“贪吃蛇”、“俄罗斯方块”这些简单的游戏曾为一代接一代的游戏玩家所熟悉。
并且随着网络通信技术的迅速发展,更加有趣、更为生动的游戏层出不穷。
由于Java技术的不断发展,Java良好的跨平台特性在移动平台的开发中显示出了巨大的威力。
Java语言面向对象的优势也使得开发游戏变得非常容易,同时eclipse平台的优越性也给了这类游戏程序的设计带来了很多的优点和方便。
本论文主要介绍了坦克大战游戏的设计思路和实现过程。
这种设计主要是利用函数对背景的所有物体进行绘图,然后利用线程以及事件监听机制对物体进行控制,例如坦克,从而实现各种功能,最后就可以构成一个活生生的坦克大战游戏了。
Java功能在移动设备上的实现,Java应用程序产生的服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。
本论文着眼于java语言的优点,开发一款可可供娱乐的游戏程序——坦克大战。
[关键字]:eclipse平台,游戏,Java,坦克大战目录摘要 ....................................................... - I - Abstract ...................................................... - I - 第一章程序结构、思想和相关技术 ................................ - 4 -1.1 本程序需解决的有关技术问题............................. - 4 -1.2 程序流程............................................... - 4 -1.3 绘图与事件监听以及线程技术和IO流编程................... - 5 -1.3.1 Graphics类................................................ - 5 -1.3.2 KeyListener监听机制.......................... 错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10、双机通信对战敌军
设计报告主要包括内容(参见后面的格式):
1.系统的功能需求及分析
2.系统总体结构
报
3.系统实现(包括数据结构、主要算法的实现,界面设计等,根据自己的系
告
统实际情况可以增加或删除部分内容)
书
4.系统功能测试
要 求
5.设计体会
要求:
学生完成设计后,每个同学均应提交设计报告及软件或硬件(同一小组共
经过这次实践设计,提高了我对 java 语言的相关认识,并对其相关应用 更加熟练,还提高了和搭档的团队合作能力,能够和搭档一起从发现问题到 解决问题。为毕业设计基于 java 或者安卓的游戏编程奠定了一定的基础。
1
二、相关知识
本次设计是用自己的笔记本电脑在 windows7 操作系统基础上,利用 java 语言在开发工具 eclipse 上编写程序代码,并可直接运行调试。这里所用的相 关知识,首先是 Java 语言及其编程软件的安装与使用,然后是编程过程中遇 到的各种 Java 知识,最后实现游戏功能调试并修改。各主要模块知识简要介 绍如下。
同完成的系统可只提交一份软件); 设计报告要求文字通畅,排版规范; 设计报告文字原则上不少于 3000 字(程序代码除外),并装订成册。
版
1.题目用黑体三号,段后距 18 磅(或 1 行),居中对齐;
面
要
2.标题用黑体四号,段前、段后距 6 磅(或 0.3 行);
求
3.正文用小四号宋体,行距为固定值“20”,程序代码用固定值“15”;
C
26-27
C-
24-25
D
0-23
报告等级 A+
分值 39-40
A
A根据学生完成的项目设计
报告书情况,由指导教师
B+
项 目 设 计 报 告 给定等级(直接在此评分
3
B
(40%)
表中打“√”)及成绩(特
别提醒:设计报告相同者
B-
均记 0 分) C+
38 36-37 34-35 32-33 30-31 28-29
1
一、课题意义
根据目前我国人民生活水平的提高,人们不再将娱乐停留在物质生活上, 更加爱注重精神生活的娱乐性,所以有了越来越多、各式各样的手机电脑游 戏的产生。
游戏本身是一种娱乐方式,能带给人们无尽的乐趣,而且游戏行业的发 展还将会带动众多周边产业,如五金、塑料、机械、电子、 显像管,高端机 型甚至使用了 40 英寸以上的大屏幕背投、液晶显示器等,这些显像设备不但 要依赖国内众多显像管生产企业提供支持,更要针对游戏的内容进行深入开 发和优化,以适应游戏内容的飞速发展和变化,大大突破了传统家电类显像 设备的限制,对国内显像管制造企业的发展、创新具有极大的推动作用,大 型游戏机的外部框体制造涉及工业设计、模具加工、五金加工、塑料成形、 特殊印刷等工艺流程,由此带动了一大批相关的零部件生产制造企业,而这 些企业均为生产密集型企业,大幅度增加了劳动就业的需求。
指导教师 2人
李益才
用 java 语言来编写坦克大战游戏,实现敌我两军对战模式。现对具体要求总
结如下:1、 坦克能够四处移动
2、 坦克可以打击敌军
任
3、 敌军能够四处移动
务
4、 敌军能够打击我军
要
5、 打击能够模拟爆炸
求
6、 场景能够产生障碍
7、 我军能够增长生命
8、 我军敌军能够重生
9、 我军战亡可计总分
4.1 实现条件..........................................................................................................................8 4.2 设计流程图......................................................................................................................9 4.3 编码与测试....................................................................................................................12 五、设计心得..............................................................................................................................17 六、结论与展望..........................................................................................................................17 6.1 结论................................................................................................................................17 6.2 展望................................................................................................................................18 七、参考文献..............................................................................................................................18
通信技术实践
设 计 报 告
课题名称: 专业班级: 学生姓名: 学 号: 指导教师: 起止时间: 2014 年 3 月 16 日至 2014 年 6 月 25 日
重庆交通大学 信息科学与工程学院
重庆交通大学信息科学与工程学院课程设计任务书
课 程 通信技术实践 班级 通信工程一班 同组人
题 目 基于 java 平台的坦克大战 数
1
(20%)
实验扣 2 分,缺 4 次及以上不得分。
答辩等级
分值
A+
39-40
A
A根据学生 PPT 汇报、系统
演示及回答问题情况,由
B+
系统演示(功能) 答辩组(老师)给出答辩等
2
B
及答辩(40%) 级(直接在此评分表中打
“√”),指导教师按等级
B-
相应分值打分 C+
38 36-37 34-35 32-33 。
指导地 1、指导地点:语音大楼 60103
点及考 2、考核时间:第 18 周星期三上午(答辩方式考核,学生用 PPT 汇报
核时间
及演示)
重庆交通大学信息学院课程设计评分表
序 项目
号
评分标准及说明
评分
纪 律 及 平 时 成 绩 按规定时间到实验室完成实验及综合实验,每缺 1 次
2.1 Java 语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE, JavaME, JavaSE)的总称。Java 自面世后就非常流行,发展迅速,对 C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植 性和安全性,广泛应用于个人 PC、数据中心、游戏控制台、科学超级计算机、 移动电话和互联网,同时拥有全球最大的开发者专业社群。
坦克大战是一款非常经典游戏,风靡全球,经久不衰,经过我们小组的 j 精心选择,决定以编写一个基于 java 基础上的坦克大战,为后来学习基于安 卓的程序编译奠定一定的基础。本次实践通过对一个坦克大战游戏的开发了 解了整个游戏开发的过程。而该报告详细阐述了相关知识、系统设计、系统 实现和新的体会等软件开发过程。力求将所学到的知识在系统开发中得以全 面的应用,并使系统在实际的操作中能按照设计的要求安全有效正确的运行。 本文的坦克大战有完整的界面,能够实现人机大战。该坦克大战游戏剧情非常 简单,游戏的主角在保护好自身生命的前提下,消灭所有的敌人,所以非常容 易上手。但剧情简单并不代表着一步一步从创建角色到实现功能的步骤是简 单的。我和我的搭档从零基础学 Java,经过多加讨论多加学习,才完成了这 次实践设计。
C
26-27
C-
24-25
D
0-23
指导教师:
总分:
目录
一、 课题意义..............................................................................................................................1 二、相关知识................................................................................................................................2 2.1 Java 语言...............................................................................................................................2 2.2 Eclipse 的安装......................................................................................................................2 2.3 Java 语言中用到的基本概念.............................................................................................. 3 2.4 Java 语言中用到的重要基本语法...................................................................................... 4 2.5 实现双机通信的原理.......................................................................................................... 4 2.6 实现双机通信的步骤.......................................................................................................... 5 三、系统设计................................................................................................................................6 3.1 坦克大战实现的功能.......................................................................................................... 6 3.2 坦克大战总体框架流程图.................................................................................................. 6 3.3 坦克大战游戏规则介绍...................................................................................................... 8 四、系统实现................................................................................................................................8