微信公众号:Java成长录

感兴趣可以关注下哦,Java知识点,学习路线规划,Java相关电子书,一起学习呀!。

简介:纯java面向对象编程,用到多线程,GUI,异常处理

1.我方坦克粉色,敌方坦克黄色
2.wsad 上下左右运动,j发射子弹。
3.子弹匀速发射,控制子弹数量一次最多不能超过10个,子弹发射有间隔,追求真实感
4.敌方坦克与我方坦克速度基本一致,并且敌方坦克随机发射子弹,随机运动
5.开始关卡界面
6.点击左上角游戏按钮选择重新开始,新游戏按钮

没有全部完成,只写了第一关新游戏和重新开始,希望感兴趣的小伙伴能继续写下去!

package tanke;//坦克类(包括子弹)import java.util.Vector;import org.omg.CORBA.INTERNAL;
import org.omg.CORBA.PUBLIC_MEMBER;public class TK {int x=0,y=0,fngxiang=0,sudu=4,leixing=0;Boolean shengming=true;Vector<drtk> dftk = new Vector<drtk>();public int getFngxaing() {return fngxiang;}public void setFngxaing(int fngxiang) {this.fngxiang = fngxiang;}public int getSudu() {return sudu;}public void setSudu(int sudu) {this.sudu = sudu;}public int getLeixing() {return leixing;}public void setLeixing(int leixing) {this.leixing = leixing;}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 TK(int x,int y) {this.x = x;this.y = y;}
}
class wotk extends TK{Vector<zidan> zdVector = new Vector<zidan>(); zidan zd = null;public wotk(int x,int y) {super(x, y);}public void xs() {if (y>0) {y-=sudu;}  }public void xx() {if (y<545) {y+=sudu;}}public void xz() {if (x>0) {x-=sudu;}}public void xy() {if (x<560) {x+=sudu;}}public void fszd() {switch (this.fngxiang) {case 0:zd = new zidan(x+20,y-10,0);zdVector.add(zd);break;case 1:zd = new zidan(x+20,y+50,1);zdVector.add(zd);break;case 2:zd = new zidan(x-10,y+20,2);zdVector.add(zd);break;case 3:zd = new zidan(x+50,y+20,3);zdVector.add(zd);break;default:break;}Thread zdThread = new Thread(zd);zdThread.start();}
}class drtk extends TK implements Runnable{int sudu = 3;int time = 0;int fangxiang;Vector<zidan> dfzdvVector = new Vector<zidan>();public void dtjhl(Vector<drtk> dftk) {this.dftk = dftk;}public drtk(int x,int y) {super(x, y);}public boolean hxpz() { boolean b=false;switch (this.fangxiang) {case 0:for (int i = 0; i < dftk.size(); i++) {drtk dt = dftk.get(i);if (dt!=this) {if (dt.fangxiang==0||dt.fangxiang==1||dt.fangxiang==2||dt.fangxiang==3){if (dt.x<=this.x && dt.x+40>=this.x && dt.y<=this.y && dt.y+40>=this.y) {return true;}if (this.x+40>=dt.x&&this.x+40<=dt.x+40 && this.y>=dt.y && this.y<=dt.y+40) {return true;}/*if (this.x<=dt.x&&this.x+40>=dt.x&& this.y<=dt.y+40 && this.y+40>=dt.y+40) {return true;}if (dt.x+40>=this.x&&dt.x+40<=this.x+40&&dt.y+40>this.y&&dt.y+40<=this.y+40) {return true;}*/}   }}break;case 1:for (int i = 0; i < dftk.size(); i++) {drtk dt = dftk.get(i);if (dt!=this) {if (dt.fangxiang==0||dt.fangxiang==1||dt.fangxiang==2||dt.fangxiang==3){/*if (dt.x>=this.x && dt.x<=this.x+40 && dt.y>=this.y && dt.y<=this.y+40) {return true;}if (this.x<=dt.x+40&&this.x+40>=dt.x+40 && this.y<=dt.y && this.y+40>=dt.y) {return true;}*/if (this.x>=dt.x&&this.x<=dt.x+40&& this.y+40>=dt.y && this.y+40<=dt.y+40) {return true;}if (dt.x<=this.x+40&&dt.x+40>=this.x+40&&dt.y<=this.y+40&&dt.y+40>=this.y+40) {return true;}}   }}break;case 2:for (int i = 0; i < dftk.size(); i++) {drtk dt = dftk.get(i);if (dt!=this) {if (dt.fangxiang==0||dt.fangxiang==1||dt.fangxiang==2||dt.fangxiang==3){if (dt.x<=this.x && dt.x+40>=this.x && dt.y<=this.y && dt.y+40>=this.y) {return true;}/*if (this.x<=dt.x+40&&this.x+40>=dt.x+40 && this.y<=dt.y && this.y+40>=dt.y) {return true;}*/if (this.x>=dt.x&&this.x<=dt.x+40&& this.y+40>=dt.y && this.y+40<=dt.y+40) {return true;}/*if (dt.x+40>=this.x&&dt.x+40<=this.x+40&&dt.y+40>this.y&&dt.y+40<=this.y+40) {return true;}*/} }}break;case 3:for (int i = 0; i < dftk.size(); i++) {drtk dt = dftk.get(i);if (dt!=this) {if (dt.fangxiang==0||dt.fangxiang==1||dt.fangxiang==2||dt.fangxiang==3){/*if (dt.x>=this.x && dt.x<=this.x+40 && dt.y>=this.y && dt.y<=this.y+40) {return true;}*/if (this.x+40>=dt.x&&this.x+40<=dt.x+40 && this.y>=dt.y && this.y<=dt.y+40) {return true;}/*if (this.x<=dt.x&&this.x+40>=dt.x&& this.y<=dt.y+40 && this.y+40>=dt.y+40) {return true;}*/if (dt.x<=this.x+40&&dt.x+40>=this.x+40&&dt.y<=this.y+40&&dt.y+40>=this.y+40) {return true;}}   }}break;default:break;}return b;}public void run() {while (true) {try {Thread.sleep(50);} catch (Exception e) {// TODO: handle exception}switch (this.fangxiang) {case 0:for (int i = 0; i < 30; i++) {if (y>0&&!hxpz()) {y-=sudu;}try {Thread.sleep(50);} catch (Exception e) {// TODO: handle exception}}break;case 1:for (int i = 0; i < 30; i++) {if (y<560&&!hxpz()) {y+=sudu;}try {Thread.sleep(50);} catch (Exception e) {// TODO: handle exception}}break;case 2:for (int i = 0; i < 30; i++) {if (x>0&&!hxpz()) {x-=sudu;}              try {Thread.sleep(50);} catch (Exception e) {// TODO: handle exception}}break;case 3:for (int i = 0; i < 30; i++) {if (x<560&&!hxpz()) {x+=sudu;}try {Thread.sleep(50);} catch (Exception e) {// TODO: handle exception}}break;default:break;}this.fangxiang=(int)(Math.random()*4);if (this.shengming==false) {break;}this.time++;if (time%2==0) {if (shengming) {if (dfzdvVector.size()<5) {zidan zd = null;switch (this.fangxiang) {case 0:zd = new zidan(x+20, y-5, 0);dfzdvVector.add(zd);break;case 1:zd = new zidan(x+20, y+45, 1);dfzdvVector.add(zd);break;case 2:zd = new zidan(x-5, y+20, 2);dfzdvVector.add(zd);break;case 3:zd = new zidan(x+45, y+20, 3);dfzdvVector.add(zd);break;default:break;}Thread dfzdtThread = new Thread(zd);dfzdtThread.start();}}}}}
}class zidan implements Runnable{int x,y,fangxiang;int sudu = 4;boolean fanwei=true;public zidan(int x,int y,int fangxiang) {this.x = x;this.y = y;this.fangxiang = fangxiang;}@Overridepublic void run() {while (true) {try {Thread.sleep(50);} catch (Exception e) {// TODO: handle exception}switch (this.fangxiang) {case 0:y-=sudu;break;case 1:y+=sudu;break;case 2:x-=sudu;break;case 3:x+=sudu;break;default:break;}if (x<0||y<0||x>600||y>600) {this.fanwei=false;break;}}}
}
package tanke;//界面功能类
import java.awt.*;
import javax.swing.*;
import javax.swing.text.html.parser.DTD;import java.awt.event.*;
import java.util.Vector;
public class jieMian extends JFrame implements ActionListener {wdmb womb = null;gqmb wdgqmb = null;JMenuBar cdlBar;JMenu caidan;JMenuItem ejcdItem;JMenuItem ejcdItem2;public jieMian() {cdlBar = new JMenuBar();caidan = new JMenu("游戏");ejcdItem = new JMenuItem("新游戏");ejcdItem2 = new JMenuItem("重新开始");wdgqmb = new gqmb();caidan.add(ejcdItem);caidan.add(ejcdItem2);cdlBar.add(caidan);this.setJMenuBar(cdlBar);ejcdItem.addActionListener(this);ejcdItem.setActionCommand("1");ejcdItem2.addActionListener(this);ejcdItem2.setActionCommand("2");this.add(wdgqmb);Thread gq = new Thread(wdgqmb);gq.start();this.setLocation(200,200);this.setSize(800,800);this.setTitle("坦克大战");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);    }@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif (e.getActionCommand().equals("1")) {this.remove(wdgqmb);womb = new wdmb();this.add(womb);this.addKeyListener(womb);Thread mbThread = new Thread(womb);mbThread.start();this.setVisible(true);}if (e.getActionCommand().equals("2")) {this.remove(wdgqmb);this.remove(womb);womb = new wdmb();this.add(womb);this.addKeyListener(womb);Thread mbThread = new Thread(womb);mbThread.start();this.setVisible(true);}}
}
class gqmb extends JPanel implements Runnable{int time=0;public gqmb() {// TODO Auto-generated constructor stub    }public void paint(Graphics g) {super.paint(g);g.fillRect(0, 0, 600, 600);if (time%2==0) {g.setColor(Color.yellow);Font my = new Font("华文行楷",Font.BOLD,58);g.setFont(my);g.drawString("第一关", 200, 300);}}public void run() {while (true) {try {Thread.sleep(600);} catch (Exception e) {// TODO: handle exception}time++;this.repaint();}}}class wdmb extends JPanel implements KeyListener,Runnable{wotk wotk = null;int tksl=5;drtk dt = null;Vector<drtk> dftk = new Vector<drtk>();public wdmb() {wotk = new wotk(280, 550);for (int i = 0; i < tksl; i++) {drtk dt = new drtk(i*139, 5);dt.dtjhl(dftk);dftk.add(dt);Thread dtydThread = new Thread(dt);dtydThread.start();zidan zd = new zidan(dt.x+20, dt.y+45, dt.fangxiang);dt.dfzdvVector.add(zd);Thread dfzdtThread = new Thread(zd);dfzdtThread.start();}}public void paint(Graphics g) {super.paint(g);Font my = new Font("华文行楷", Font.BOLD, 38);g.setFont(my);g.drawString("吴大萌的小坦克,谁也打不过", 100, 650);g.fillRect(0,0, 600, 600);for (int i = 0; i <wotk.zdVector.size() ; i++) {zidan zd = wotk.zdVector.get(i);if (zd.fanwei==true&&zd!=null) {g.setColor(Color.WHITE);g.fill3DRect(zd.x, zd.y, 3, 3, false);}if (wotk.zd.fanwei==false) {wotk.zdVector.remove(zd);break;}}if (wotk.shengming) {this.drawtanke(wotk.getX(), wotk.getY(), g, wotk.getFngxaing(), 1); }for (int i = 0; i < dftk.size(); i++) {drtk dt1 = dftk.get(i);if (dt1.shengming) {this.drawtanke(dt1.getX(),dt1.getY(), g,dt1.fangxiang, 0);for(int j=0;j<dt1.dfzdvVector.size();j++){zidan dtzd=dt1.dfzdvVector.get(j);if(dtzd.fanwei){g.setColor(Color.white);g.fill3DRect(dtzd.x,dtzd.y,3,3,false);}else{dt1.dfzdvVector.remove(j);}}}}}/*public boolean hxpz() {for (int i = 0; i < dftk.size(); i++) {drtk dt = dftk.get(i);for (int j = i+1; j < dftk.size(); j++) {drtk dt2 = dftk.get(j);if (dt.x+40<dt2.x||dt.y+40<dt2.y||dt.x-40>dt2.x||dt.y-40>dt2.y) {return true;}}}return false;}*/public void jbtk(zidan zd, TK tk) {switch (tk.fngxiang) {case 0:case 1:if (zd.x>tk.x && zd.y>tk.y && zd.x<tk.x+40 && zd.y<tk.y+40) {zd.fanwei=false;tk.shengming=false;}break;case 2:case 3:if (zd.x>tk.x && zd.y>tk.y && zd.x<tk.x+40 && zd.y<tk.y+40) {zd.fanwei=false;tk.shengming=false;}break;default:break;}}public void jbdf() {for (int i = 0; i < wotk.zdVector.size(); i++) {zidan zd = wotk.zdVector.get(i);if (zd.fanwei) {for (int j = 0; j < dftk.size(); j++) {drtk dt = dftk.get(j);if (dt.shengming) {this.jbtk(zd, dt);}}}}    }public void jzwf() {for (int i = 0; i < dftk.size(); i++) {drtk dt3 = dftk.get(i);if (dt3.shengming) {for (int j = 0; j <dt3.dfzdvVector.size(); j++) {zidan zd = dt3.dfzdvVector.get(j);if (zd.fanwei) {this.jbtk(zd,wotk);}}}}}public void drawtanke(int x,int y,Graphics g,int fangxiang,int leixing) {switch (leixing) {case 0:g.setColor(Color.yellow);break;case 1:g.setColor(Color.pink);default:break;}switch (fangxiang) {case 0:g.fill3DRect(x, y, 10,40, false);g.fill3DRect(x+10,y+10, 20, 20, false);g.fillOval(x+10, y+10, 20, 20);g.fill3DRect(x+30, y, 10, 40, false);g.drawLine(x+20, y-5, x+20,y+10);break;case 1:g.fill3DRect(x, y, 10,40, false);g.fill3DRect(x+10,y+10, 20, 20, false);g.fillOval(x+10,y+10, 20, 20);g.fill3DRect(x+30,y, 10, 40, false);g.drawLine(x+20,y+30,x+20,y+55);break;case 2:g.fill3DRect(x,y,40,10, false);g.fill3DRect(x+10,y+10, 20, 20, false);g.fillOval(x+10, y+10, 20, 20);g.fill3DRect(x,y+30, 40, 10, false);g.drawLine(x+10,y+20, x-5, y+20);break;case 3:g.fill3DRect(x,y,40,10, false);g.fill3DRect(x+10,y+10, 20, 20, false);g.fillOval(x+10,y+10, 20, 20);g.fill3DRect(x, y+30, 40, 10, false);g.drawLine(x+30, y+20, x+45, y+20);break;default:break;}}@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void keyPressed(KeyEvent e) {if (e.getKeyCode()==KeyEvent.VK_W) {wotk.setFngxaing(0);wotk.xs();}else if (e.getKeyCode()==KeyEvent.VK_S) {wotk.setFngxaing(1);wotk.xx();}else if (e.getKeyCode()==KeyEvent.VK_A) {wotk.setFngxaing(2);wotk.xz();}else if (e.getKeyCode()==KeyEvent.VK_D) {wotk.setFngxaing(3);wotk.xy();}if (e.getKeyCode()==KeyEvent.VK_J) {if (wotk.zdVector.size()<10) {wotk.fszd();}   }this.repaint();}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void run() {while (true) {try {Thread.sleep(50);} catch (Exception e) {// TODO: handle exception}this.jbdf();this.jzwf();this.repaint();}}
}
package tanke;//主函数public class tanke {public static void main(String[] args) {jieMian jm = new jieMian();}}

java编写坦克大战相关推荐

  1. Java编写坦克大战-Tank类+Bot类+Blast类

    Tank类 package com.learn.exercise.tanke;import com.learn.exercise.tanke.Direction;import java.awt.*; ...

  2. java 坦克大战 教程_[Java教程]坦克大战(一)

    [Java教程]坦克大战(一) 0 2016-09-16 08:00:05 坦克大战(一) 相信大家对坦克大战都不陌生,并且网上也有很多用java实现的小程序,最近用了几天时间将其使用javaScri ...

  3. 【Java_项目篇1】--JAVA实现坦克大战游戏--坦克移动+添加敌方坦克(二)

    前期文章: [Java_项目篇<1>]--JAVA实现坦克大战游戏--画出坦克(一) 控制小球移动 1.外部类 实现KeyListener监听接口写法 package com.test3; ...

  4. c语言编写坦克大战设计报告,c语言编写坦克大战源代码

    <c语言编写坦克大战源代码>由会员分享,可在线阅读,更多相关<c语言编写坦克大战源代码(10页珍藏版)>请在人人文库网上搜索. 1.include tank.h#include ...

  5. 基于Java的坦克大战游戏的设计与实现(论文+PPT+源码)

    幻灯片1 基于Java的坦克大战游戏的设计与实现 幻灯片2 CONTENTS 1 4 设计工具与相关技术 详细设计 2 5 系统分析 结论 3 总体设计 幻灯片3 PPT模板下载:http://www ...

  6. java小组坦克大战游戏开发文档开发日志_java实现坦克大战游戏

    本文实例为大家分享了java实现坦克大战游戏的具体代码,供大家参考,具体内容如下 一.实现的功能 1.游戏玩法介绍 2.自定义游戏(选择游戏难度.关卡等) 3.自定义玩家姓名 4.数据的动态显示 二. ...

  7. Java实现坦克大战,单机版和联网版

    Java实现坦克大战 源码获取途径 部分源代码 源码获取途径 百度网盘链接: 百度网盘地址 提取码:5r7i GitHub Github获取地址 部分源代码 public class TankClie ...

  8. python编写坦克大战过程

    目录 一.首先明白编写坦克大战有哪些需求 二.细节编写 1.完成游戏的主要逻辑 2.完成坦克 1)完成我方坦克 2)完成敌方坦克 3.完成子弹 1)我方坦克射击 2)敌方坦克 3)我方子弹和敌方坦克碰 ...

  9. 【JAVA程序设计】基于JAVA的坦克大战小游戏--入门级小游戏

    基于JAVA的坦克大战小游戏--入门级小游戏 零.项目获取 一.项目简介 二.开发环境 三.游戏玩法 四.运行截图 零.项目获取 获取方式(点击下载):是云猿实战 项目经过多人测试运行,可以确保100 ...

最新文章

  1. c语言删除s字符串中所有子串t,从串s中删除所有和串t相同的子串的算法
  2. 怎么更进一步学python_【百尺竿头,更进一步学Python】Python进阶课程——进程,线程和协程的区别...
  3. matlab的维纳滤波函数用法_MATLAB基础学习之图形标注
  4. 【转】CT图像重构方法详解——傅里叶逆变换法、直接反投影法、滤波反投影法
  5. 中文电子病例命名实体识别项目
  6. 禁止IE页面自动跳转到EDGE浏览器的方法教程
  7. c#求三角形面积周长公式_C#源代码—三角形面积、圆的面积
  8. [转]Groovy和Grails简介
  9. Netty工作笔记0064---WebSocket长连接开发3
  10. 太原理工大学ICPC队介绍(2021版)
  11. android lt;webview,Android WebView使用基础 – 圣骑士wind – 博客园
  12. 【java】生成13位条形码(Ean-13码)
  13. 测开高阶技术- Docker/环境布置/容器 讲清楚了,全套教程
  14. 计算机科学 期刊怎么样,《计算机科学》杂志怎么样?提交的好吗?
  15. flac转换成wav的方法,flac转wav步骤
  16. 毕业设计-ssm-气象雷达
  17. Java_Web实战(一) --环境搭建
  18. 学习笔记——day47(jsp)
  19. 晶振频率,时钟频率,时钟周期,时钟节拍,机器周期,指令周期的概念解析
  20. 3896. 【NOIP2014模拟10.26】战争游戏 (Standard IO)

热门文章

  1. IPhone开发教程 一
  2. (补)算法训练Day13 | LeetCode150. 逆波兰表达式求值(栈应用);LeetCode239. 滑动窗口最大值(单调队列);LeetCode347. 前K个高频元素(小顶堆,优先级队列)
  3. Windows 7 / 2008 R2 SP1 RTM 全部版本官方下载
  4. mysql10分钟备份一次_做好mysql运维,必须熟练掌握备份和恢复,实战一次不行多来几次...
  5. Matlab入门基础
  6. html5 win8风格站点,HTML5 Win8砖块样式的界面布局
  7. 智慧城市『黑科技』:国内厂商泰瑞SmartEarth首发数字孪生战略
  8. 高效的缺陷报告和测试计划的编写
  9. 递归问题:Fibonacci 数列 排列问题
  10. JAVA WEB 龟兔赛跑