public class Tank1 extends JFrame implements ActionListener {

MyPanel mp = null;

GuanKaPanel gkmb = null;

JMenuBar cdt = null;

JMenu cd = null;

JMenuItem cdx1 = null;

public static void main(String[] args) {

Tank1 t1 = new Tank1();// 主函数的调用

}

public Tank1() {

cdt = new JMenuBar();

cd = new JMenu("游戏(G)");

cd.setMnemonic('G');

cdx1 = new JMenuItem("新游戏(N)");

cdx1.addActionListener(this);

cdx1.setActionCommand("xyx");

cd.add(cdx1);

cdt.add(cd);

JMenuItem menuItem = new JMenuItem("\u9000\u51FA\u6E38\u620F");

menuItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

JiLu.bcjl();

System.exit(0);

}

});

cd.add(menuItem);

/*

* mp = new MyPanel(); this.add(mp); this.addKeyListener(mp); Thread t =

* new Thread(mp);// 开启线程 t.start();

*/

gkmb = new GuanKaPanel();

getContentPane().add(gkmb);

gkmb.setLayout(null);

Thread t1 = new Thread(gkmb);

t1.start();

this.setTitle("张宇的坦克大战");

this.setJMenuBar(cdt);

this.setSize(1080, 820);

this.setLocation(250, 150);

this.setResizable(false);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("xyx")) {

mp = new MyPanel();

this.remove(gkmb);

getContentPane().add(mp);

this.addKeyListener(mp);

Thread t = new Thread(mp);// 开启线程

t.start();

this.setVisible(true);

}

}

}

class MyPanel extends JPanel implements KeyListener, Runnable {

MyTank mt = null;

// 敌方坦克集合类,arr单线程 vec多线程。

Vector bzjh = new Vector();// 爆炸类集合。

Vector dtk = new Vector();

int tksl = 18;// 敌方坦克数量

Image tp1 = null;

Image tp2 = null;

Image tp3 = null;

public void tjsj(Graphics g) {

/*

* this.drawTank(330, 660, g, 0, 0); g.setColor(Color.black);

* g.drawString(JiLu.getMtsl()+"" ,360, 680);

*/

this.drawTank(330, 660, g, 0, 1);

g.setColor(Color.black);

g.drawString(JiLu.getDtsl() + "", 360, 680);

g.drawString(JiLu.getSdtj() + "", 980, 300);

this.drawTank(900, 200, g, 0, 1);

g.setColor(Color.black);

JiLu.dqjl();

Font f = new Font("楷体", Font.BOLD, 20);

g.setFont(f);

g.drawString("你消灭的坦克总数", 800, 300);

// g.drawString("消灭坦克999辆有惊喜", 800, 600);

}

public MyPanel() {

mt = new MyTank(330, 530);

for (int i = 0; i < tksl; i++) {

DiTank dt = new DiTank((i) * 45 + 5, 10);

Thread t = new Thread(dt);// 启动敌方坦克线程

t.start();

dtk.add(dt);

dt.setDtk(dtk);// 修改敌方坦克的集合类

/*

* ZiDan zd=new ZiDan(dt.x,dt.y+0, 2); dt.dzd.add(zd);//装子弹 Thread

* dzdfs =new Thread(zd); dzdfs.start();//坦克初始子弹。

*/

// 装敌方坦克

}

tp1 = Toolkit.getDefaultToolkit().getImage(

Panel.class.getResource("/bzxg1.gif"));

tp2 = Toolkit.getDefaultToolkit().getImage(

Panel.class.getResource("/bzxg2.gif"));

tp3 = Toolkit.getDefaultToolkit().getImage(

Panel.class.getResource("/bzxg3.gif"));

Shengyin sy = new Shengyin("./newmagua.wav");

// Shengyin sy=new Shengyin("./tank.wav");

sy.start();

}

public void paint(Graphics g) {// 注意方法名,不要搞混了。

super.paint(g);

this.tjsj(g);

g.fillRect(0, 0, 800, 600);

if (mt.shengming) {

this.drawTank(mt.getX(), mt.getY(), g, mt.getFangxiang(), 0);// 控制方向

// 画我方坦克

}

for (int i = 0; i < dtk.size(); i++) {

DiTank dt = dtk.get(i);

if (dt.shengming) {

this.drawTank(dt.getX(), dt.getY(), g, dt.getFangxiang(), 1);

for (int j = 0; j < dt.dzd.size(); j++) {

ZiDan dtzd = dt.dzd.get(j);

if (dtzd.shengming)// 敌方坦克子弹

{

g.setColor(Color.white);

g.fill3DRect(dtzd.x + 8, dtzd.y, 3, 3, false);

} else {

dt.dzd.remove(dtzd);

}

}

this.repaint();

// 画敌方坦克

}

}

// 子弹

for (int i = 0; i < mt.aa.size(); i++) {

ZiDan zd = mt.aa.get(i);

if (zd != null && zd.shengming == true) {

g.setColor(Color.red);

g.fill3DRect(zd.x, zd.y, 3, 3, false);

}

if (zd.shengming == false) {

mt.aa.remove(zd);

}

}

// 爆炸

for (int i = 0; i < bzjh.size(); i++) {

BaoZha bz = bzjh.get(i);

if (bz.shengcunqi > 6) {

System.out.println("666");

g.drawImage(tp1, bz.x, bz.y, 30, 30, this);

} else if (bz.shengcunqi > 3) {

g.drawImage(tp2, bz.x, bz.y, 30, 30, this);

} else {

g.drawImage(tp3, bz.x, bz.y, 30, 30, this);

}

try {

Thread.sleep(30);

this.repaint();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

this.repaint();

bz.scqjs();

if (bz.shengcunqi == 0) {

bzjh.remove(bz);

}

}

}

public void jzwf() {

for (int i = 0; i < dtk.size(); i++) {

DiTank dt = dtk.get(i);

for (int j = 0; j < dt.dzd.size(); j++) {

ZiDan zd = dt.dzd.get(j);

this.jzsf(zd, mt);

}

}

}

public void jzdf() {

for (int i = 0; i < mt.aa.size(); i++) {

// 每发子弹和每个坦克

ZiDan zd = mt.aa.get(i);// 装子弹

// System.out.println("1");

if (zd.shengming) {

for (int j = 0; j < dtk.size(); j++) {

DiTank dt = dtk.get(j);// 装坦克

// System.out.println("2");

if (dt.shengming) {

if (this.jzsf(zd, dt)) {

JiLu.dtjs();// 敌方坦克数量减少

JiLu.sdtj();// 记录杀敌数

}

}

}

}

this.repaint();

}

}

public boolean jzsf(ZiDan zd, Tank dt) {

Boolean b = false;

switch (dt.fangxiang) {

case 0:

case 2:

if (zd.x > dt.x && zd.x < dt.x + 20 && zd.y > dt.y

&& zd.y < dt.y + 30) {

zd.shengming = false;

dt.shengming = false;

b = true;

BaoZha bz = new BaoZha(dt.x, dt.y);

bzjh.add(bz);

}

// System.out.println("4");

break;

case 1:

case 3:

if (zd.x > dt.x && zd.x < dt.x + 30 & zd.y > dt.y

&& zd.y < dt.y + 20) {

zd.shengming = false;

dt.shengming = false;

b = true;

BaoZha bz = new BaoZha(dt.x, dt.y);

bzjh.add(bz);

}

// System.out.println("4");

break;

}

return b;

}

public void drawTank(int x, int y, Graphics g, int fangxiang, int leixing) {// 高封装度

// 任意定义敌我坦克

switch (leixing) {

case 0:// 我的坦克

g.setColor(Color.yellow);

break;

case 1:// 敌方的坦克

g.setColor(Color.green);

break;

default:

break;

}

switch (fangxiang) {

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 - 3);

break;

case 1:

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 - 3, y + 10);

break;

case 2:

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 + 33);

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 + 33, y + 10);

break;

}

}

public void keyPressed(KeyEvent e) {// 键盘监听

if (e.getKeyCode() == KeyEvent.VK_W) {

mt.setFangxiang(0);

mt.xiangshang();

}

else if (e.getKeyCode() == KeyEvent.VK_A) {

mt.setFangxiang(1);

mt.xiangzuo();

}

else if (e.getKeyCode() == KeyEvent.VK_S) {

mt.setFangxiang(2);

mt.xiangxia();

}

else if (e.getKeyCode() == KeyEvent.VK_D) {

mt.setFangxiang(3);

mt.xiangyou();

}

if (e.getKeyCode() == KeyEvent.VK_J) {

if (mt.aa.size() < 8) {

mt.fszd();// 启动子弹

}

}

this.repaint();

}

public void keyReleased(KeyEvent e) {

}

public void keyTyped(KeyEvent e) {

}

public void run() {

while (true) {// 节约cpu,内存资源。

try {

Thread.sleep(50);

// System.out.println("麻瓜");

}

catch (InterruptedException e) {

System.out.println("爆炸");

}

// System.out.println("0");

this.jzdf();

this.jzwf();

/*

* 检错:

*

* 1、代码的错误 2、逻辑的错误 3、变量的错误

*/

}

}

}

package t1;

import java.util.Vector;

class Tank

{

int x=0,y=0;//定义坦克的坐标

int fangxiang=2;//定义方向

int sudu=3;//定义速度

boolean shengming=true;

public int getFangxiang() {

return fangxiang;

}

public void setFangxiang(int fangxiang) {

this.fangxiang = fangxiang;

}

public int getSudu() {

return sudu;

}

public void setSudu(int sudu) {

this.sudu = sudu;

}

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 Tank(int x, int y) {

super();

this.x = x;

this.y = y;

}

}

package t1;

class ZiDan implements Runnable

{

int x,y;//定义坐标

int fangxiang;//定义方向

int sudu=5;//行走速度

boolean shengming=true;

public ZiDan(int x, int y,int fangxiang) {

super();

this.x = x;

this.y = y;

this.fangxiang=fangxiang;

}

public void run() {

// TODO Auto-generated method stub

while(true)

{//死循环需要睡眠

try {

Thread.sleep(50);

} catch (InterruptedException e) {

e.printStackTrace();

}

switch (this.fangxiang) {

case 0:

y-=sudu;

break;

case 1:

x-=sudu;

break;

case 2:

y+=sudu;

break;

case 3:

x+=sudu;

break;

}

if(x<0x>800y<0y>600)

{

shengming=false;

break;

}

}

}

}

java 坦克大战画坦克_java简易坦克大战(2)相关推荐

  1. java画板中画直线_java实现画图板上画一条直线

    目标:在画图板上画一条直线,供大家参考,具体内容如下 一.首先需要建立一个界面 过程:1.创建界面对象(Java语言中已经有,可直接创建对象来使用). 2.对于一个界面,我们需要设置它的大小.居中.界 ...

  2. Java教务管理系统学生端_Java 简易教务管理系统

    Main.java import java.util.Scanner; public class Main { public static void main(String[] args) { Sys ...

  3. java飞机大战背景图片_Java简单飞机大战(1)

    在完成了多线程小球之后,就可以写一个飞机大战小游戏了,虽然比较简单,但玩起来还是有一点乐趣的.下面就讲一下我的大概思路和一些实现步骤. 一开始当然要想好一个框架,毕竟框架还是很重要的.当点击开始按钮的 ...

  4. java飞机大战分数显示_Java简单飞机大战(2)

    上一篇飞机大战文章差不多介绍了简单的飞机大战的实现,剩下要做的就是添加一个分数排行榜和计分器.计分器十分简单,画一个字符串Score,然后显示当前获得的分数即可.既然是排行榜,当然是要记录前几名的分数 ...

  5. java中字符串分割器_java简易文本分割器实现代码

    本文实例为大家分享了java文本分割器的具体代码,供大家参考,具体内容如下 import java.io.*; class cutintopieces{ public static void main ...

  6. java repaint 重画图形_Java Graphics的paint和repaint方法

    调用paint的一般是repaint()或当显示器刷新的时候调用的类似repaint()的类.    当对于桌面执行了某类操作,改变了桌面上的图象时,jvm收到界面被调整的信息,此时会调用visibl ...

  7. java画好看坦克_坦克大战第一节——画出自己的坦克(新手篇)

    刚刚开始学习java,对java不是很熟悉,但是自己的兴趣挺喜欢java.现在自己在自学java做一个小游戏,坦克大战. 自己现在完成了画出自己的坦克和坦克的移动方向.希望各位大神指导一下我这个刚刚学 ...

  8. java 坦克大战画坦克_【JAVA语言程序设计基础篇】--JAVA实现坦克大战游戏--画出坦克(二)...

    坦克类: //坦克父类 可以设置坦克出现位置(x,y) class Tank { int x = 0; int y = 0; public Tank (int x,int y){ this.x = x ...

  9. java版坦克大战_JAVA实现坦克大战1.0版本

    1 packagetankGame;2 import java.awt.*;3 import javax.swing.*;4 import java.awt.event.*;5 import java ...

最新文章

  1. 同步电路设计的一些问题(时序分析基础,同步电路设计规则)
  2. 梯度下降与delta法则
  3. SpringBoot笔记:SpringBoot启动参数配置
  4. python深度优先算法 八皇后_八皇后问题——DFS(深度优先搜索)
  5. 二阶振荡环节的谐振频率_晶体振荡器和谐振器的区别 555压控振荡器电路图
  6. QT子线程与主线程的信号槽通信
  7. Cocos2d-x一张小背景重复贴图充满整个屏幕
  8. selenium2.0(WebDriver) API - 转载自:http://www.cnblogs.com/puresoul/p/3477918.html
  9. 四因素三水平正交试验表_正交实验设计过程
  10. python设计模式-模板方法模式
  11. (arxiv-2022)具有自适应距离对齐的时空步态特征
  12. 第13课:实战之用 Python 写一个抢票软件
  13. JavaSE常见面试题
  14. 解决NameError: name ‘xxx‘ is not defined
  15. 计算机维修志愿服务,计控学院深入社区开展“电脑维修”学雷锋志愿活动
  16. RabbitMQ延时队列
  17. Nginx系列--upstream模块的使用
  18. java秃头表情包_最怕空气突然的安静表情包 - 最怕空气突然的安静微信表情包 - 最怕空气突然的安静QQ表情包 - 发表情 fabiaoqing.com...
  19. [Data Structure] 数据结构中各种树
  20. imx6ull gpio 中断

热门文章

  1. Python程序题练习
  2. 一个圆周率的计算公式代码
  3. 不患人之不己知,患不知人也。
  4. 使用vue写一个计时器
  5. 行为设计学-让创意更有黏性
  6. SpringBosent框架
  7. HTML href指向function
  8. 在SATA SSD + NVMe SSD双硬盘中安装ubuntu双系统
  9. Android破解游戏内购心得
  10. 2020年微信怎么推刷脸支付