//这里实现了我方坦克以及子弹的动作,敌方坦克不会动,有个BUG,我方坦克子弹不能向左以及向上发射,求助!!!!
package TanKe.lbl;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.util.concurrent.atomic.DoubleAdder;
//JFrame为事件源
public class MytankGame extends JFrame{

Mypanel mp = null;public static void main(String[] args) {MytankGame mg = new MytankGame();}
//构造方法设置画布属性,定义自己的画框,并将划款添加进JFrame
public MytankGame() {this.setTitle("坦克大战");mp = new Mypanel();this.add(mp);//启动线程Thread t = new Thread(mp);t.start();//创建监听this.addKeyListener(mp);this.setSize(400,300);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}
//定义自己的画框,并且作为监听者类
class Mypanel extends JPanel implements KeyListener,Runnable{
Ltank LL = null;
Vector vv = new Vector();
int enSize = 6;

//构造函数实例化我的坦克
public Mypanel() {LL = new Ltank(170,130);//坦克的初始坐标//创建敌人坦克引用for(int i = 0; i < enSize; i ++) {Dtank dd = new Dtank((i+1) * 60, 0);//设置颜色dd.setColor(1);//设置方向dd.setDirect(1);//将引用添加到集合里vv.add(dd);}
}//重写父类的画笔方法
public void paint(Graphics g) {super.paint(g);//设置地图为黑色g.fillRect(0, 0, 400, 300);//画出自己的坦克this.drawTank(LL.getX(), LL.getY(), g, LL.direct, 0);//判断子弹不为空if(LL.ss != null&&LL.ss.isLive == true) {g.draw3DRect(LL.ss.x, LL.ss.y, 1, 1, false);}//画出敌方坦克for(int i = 0; i < vv.size(); i ++) {//取出坦克并且赋予坐标等属性画出来this.drawTank(vv.get(i).getX(), vv.get(i).getY(), g, vv.get(i).direct, 1);}
}
//画的动作,这么画,如何画
public void drawTank(int x, int y, Graphics g, int direct, int type) {switch (type) {case 0:g.setColor(Color.cyan);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 + 15, x + 10, y);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 + 15, y + 10, x, 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;}
}
//重写监听者的方法
public void keyPressed(KeyEvent arg0) {//识别按键if(arg0.getKeyCode() == KeyEvent.VK_W) {this.LL.setDirect(0);this.LL.moveup();}else if(arg0.getKeyCode() == KeyEvent.VK_S) {this.LL.setDirect(1);this.LL.movedown();}else if(arg0.getKeyCode() == KeyEvent.VK_A) {this.LL.setDirect(2);this.LL.moveleft();}else if(arg0.getKeyCode() == KeyEvent.VK_D) {this.LL.setDirect(3);this.LL.moveright();}//坦克开火if (arg0.getKeyCode() == KeyEvent.VK_J) {this.LL.shotDtank();}this.repaint();
}
@Override
public void keyReleased(KeyEvent arg0) {// TODO Auto-generated method stub}
@Override
public void keyTyped(KeyEvent arg0) {// TODO Auto-generated method stub}@Override
public void run() {// TODO Auto-generated method stubwhile(true) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}this.repaint();}
}

}
//定义子弹类,实现线程接口
class Shot implements Runnable{
int x;
int y;
int direct;
int speed = 2;
boolean isLive = true;

public Shot(int x, int y, int direct) {this.x = x;this.y = y;this.direct = direct;
}//线程方法public void run() {while(true) {try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}switch(direct) {case 0:y = y - speed;case 1:y = y + speed;case 2:x = x - speed;case 3:x = x + speed;}//何时死亡//子弹碰到边缘if(x<0||x>400||y<0||y>300) {this.isLive = false;break;}}}

}

//定义一个坦克类
class Tank {
int x = 0;
int y = 0;
//0,1,2,3分别是上下左右
int direct = 0;
int speed = 1;
int color;
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public Tank( int x, int y) {
this.x = x;
this.y = y;
}
//获取坦克的x,y坐标
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 getDirect() {return direct;
}public void setDirect(int direct) {this.direct = direct;
}
//速度
public int getSpeed() {return speed;
}public void setSpeed(int speed) {this.speed = speed;
}

}
//我方坦克类
class Ltank extends Tank {
Shot ss = null;

public Ltank(int x, int y) {super(x,y);
}
//开火方法
public void shotDtank() {//判断子弹方向switch(this.direct){case 0:ss = new Shot(x + 10, y, 0);break;case 1:ss = new Shot(x + 10, y + 30, 1);break;case 2:ss = new Shot(x, y + 10,2);break;case 3:ss = new Shot(x + 30, y + 10,3);break;}//启动子弹线程Thread t = new Thread(ss);t.start();
}
//坦克向上移动
public void moveup() {y= y - speed;
}
//向下移动
public void movedown() {y= y + speed;
}
//向左移动
public void moveleft() {x= x - speed;
}
//向右移动
public void moveright() {x= x + speed;
}

}
//敌方坦克类
class Dtank extends Tank {

public Dtank(int x, int y) {super(x,y);
}

}

Java-坦克大战2相关推荐

  1. java 坦克大战_java课程设计之坦克大战

    本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...

  2. java坦克大战课设报告_java课程设计之坦克大战

    本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...

  3. Java坦克大战游戏源码(java坦克大战)

    Java坦克大战游戏源码(java坦克大战) public Swingtest002() {// 设置标题setTitle("请登陆");// 绝对布局setLayout(null ...

  4. java坦克大战总体功能设计_Java坦克大战设计报告.doc

    Java坦克大战设计报告.doc <语言设计> 设计报告 信息工程学院专业班级:::指导老师:2011年7月22日 目录 目录2 题目一 坦克大战4 1.1题目简介4 1.2设计的内容.要 ...

  5. Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计

    Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计 有图有真相 操作方法:ASDW控制移动,鼠标控制炮筒旋转,鼠标左键开枪,空格发射炮弹, 开发思路是标准的游戏开发思路,单线程 ...

  6. Java坦克大战 (一) 之产生一个窗口

    本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...

  7. Java坦克大战(四)

    这是我的坦克游戏大战的最后一版,里面添加很多新的功能.这个坦克大战的有很多不足之处,但是对于初学者来说依然是一个很好的练习项目,从中我们可以学习Java基础知识,将知识与项目结合,学习面向对象编程思想 ...

  8. java 坦克大战画坦克_java简易坦克大战(2)

    public class Tank1 extends JFrame implements ActionListener { MyPanel mp = null; GuanKaPanel gkmb = ...

  9. java坦克大战(1.0)

    坦克大战 后面开始学习怎么使用java制造一个坦克大战游戏 但是不是直接开始做,而是随着这个游戏程序的制造,一边学习新知识融入到游戏中.包括多线程,反射,IO流- Java坐标体系 在几乎所有的坐标中 ...

  10. java坦克大战爆炸效果_Java极致毁童年系列、你们火星的坦克大战这样的吧

    原标题:Java极致毁童年系列.你们火星的坦克大战这样的吧 这是使用java开发的一个单机版的小游戏 (未使用任何游戏引擎) 和经典版的坦克大战有些不同, 这里是纯坦克之间的战争, 英雄坦克并不用保护 ...

最新文章

  1. 微信授权(Net Mvc)
  2. 汇编 编程实现从键盘输入三位以内的十进制负数_macOS上的汇编入门(二)——数学基础...
  3. 从零单排学Redis【青铜】
  4. python节日贺卡图片大全_新年贺卡图片_新年贺卡手工制作图片
  5. java激光图,java-OpenCV Android跟踪激光点
  6. c语言结构体在内存中的存储,C语言结构体在内存中的存储情况探究------内存对齐...
  7. 服务器显示转速负数,Moldflow使用常见问题及解决方案
  8. 理解SQL【转http://blog.jobbole.com/55086/】
  9. JavaScript提升(Hoisting)---借鉴自W3CSchool
  10. mysql 5.7.11 x64_mysql 5.7.11 winx64安装配置教程
  11. Windows设置redis开启自动启动
  12. UOS/deepin上安装坚果云
  13. CIO调查:数据挖掘并不遥远
  14. 任何人都有值得学习的地方,横瓜向[水牛党](4618415)请教问题
  15. 史上最牛、最适合自学的尚硅谷《全套Java视频教程》
  16. 《金刚经说什么》诗词辑录
  17. 相对论【3】洛伦兹速度变换和婓索实验
  18. jwt私钥和公钥怎么获取_如何为php-jwt生成密钥对?
  19. java企业物流管理系统 (JSP物流公司管理系统毕业设计)
  20. S1000D 5.0 中文版

热门文章

  1. iOS开发storyboard拖拽tableView: Static cells的使用
  2. 通过反编译分析骑砍2俘虏招募机制
  3. 战国策评析(二)---秦
  4. 华为搅局ERP,北用友南金蝶格局改变?用户:NO,我们另有选择
  5. 【数据分析】数据分析需要掌握的统计学理论基础知识
  6. Gitlab与Jaeger集成,实现Tracing链路追踪
  7. Go语言和php个和lua,当Go遇上了Lua,会发生什么
  8. MATLAB 画图--图形属性设置
  9. 数字图像处理之matlab实验(一):基本操作
  10. 什么是马甲包?有什么作用?