java 坦克大战画坦克_java简易坦克大战(2)
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)相关推荐
- java画板中画直线_java实现画图板上画一条直线
目标:在画图板上画一条直线,供大家参考,具体内容如下 一.首先需要建立一个界面 过程:1.创建界面对象(Java语言中已经有,可直接创建对象来使用). 2.对于一个界面,我们需要设置它的大小.居中.界 ...
- Java教务管理系统学生端_Java 简易教务管理系统
Main.java import java.util.Scanner; public class Main { public static void main(String[] args) { Sys ...
- java飞机大战背景图片_Java简单飞机大战(1)
在完成了多线程小球之后,就可以写一个飞机大战小游戏了,虽然比较简单,但玩起来还是有一点乐趣的.下面就讲一下我的大概思路和一些实现步骤. 一开始当然要想好一个框架,毕竟框架还是很重要的.当点击开始按钮的 ...
- java飞机大战分数显示_Java简单飞机大战(2)
上一篇飞机大战文章差不多介绍了简单的飞机大战的实现,剩下要做的就是添加一个分数排行榜和计分器.计分器十分简单,画一个字符串Score,然后显示当前获得的分数即可.既然是排行榜,当然是要记录前几名的分数 ...
- java中字符串分割器_java简易文本分割器实现代码
本文实例为大家分享了java文本分割器的具体代码,供大家参考,具体内容如下 import java.io.*; class cutintopieces{ public static void main ...
- java repaint 重画图形_Java Graphics的paint和repaint方法
调用paint的一般是repaint()或当显示器刷新的时候调用的类似repaint()的类. 当对于桌面执行了某类操作,改变了桌面上的图象时,jvm收到界面被调整的信息,此时会调用visibl ...
- java画好看坦克_坦克大战第一节——画出自己的坦克(新手篇)
刚刚开始学习java,对java不是很熟悉,但是自己的兴趣挺喜欢java.现在自己在自学java做一个小游戏,坦克大战. 自己现在完成了画出自己的坦克和坦克的移动方向.希望各位大神指导一下我这个刚刚学 ...
- java 坦克大战画坦克_【JAVA语言程序设计基础篇】--JAVA实现坦克大战游戏--画出坦克(二)...
坦克类: //坦克父类 可以设置坦克出现位置(x,y) class Tank { int x = 0; int y = 0; public Tank (int x,int y){ this.x = x ...
- java版坦克大战_JAVA实现坦克大战1.0版本
1 packagetankGame;2 import java.awt.*;3 import javax.swing.*;4 import java.awt.event.*;5 import java ...
最新文章
- 同步电路设计的一些问题(时序分析基础,同步电路设计规则)
- 梯度下降与delta法则
- SpringBoot笔记:SpringBoot启动参数配置
- python深度优先算法 八皇后_八皇后问题——DFS(深度优先搜索)
- 二阶振荡环节的谐振频率_晶体振荡器和谐振器的区别 555压控振荡器电路图
- QT子线程与主线程的信号槽通信
- Cocos2d-x一张小背景重复贴图充满整个屏幕
- selenium2.0(WebDriver) API - 转载自:http://www.cnblogs.com/puresoul/p/3477918.html
- 四因素三水平正交试验表_正交实验设计过程
- python设计模式-模板方法模式
- (arxiv-2022)具有自适应距离对齐的时空步态特征
- 第13课:实战之用 Python 写一个抢票软件
- JavaSE常见面试题
- 解决NameError: name ‘xxx‘ is not defined
- 计算机维修志愿服务,计控学院深入社区开展“电脑维修”学雷锋志愿活动
- RabbitMQ延时队列
- Nginx系列--upstream模块的使用
- java秃头表情包_最怕空气突然的安静表情包 - 最怕空气突然的安静微信表情包 - 最怕空气突然的安静QQ表情包 - 发表情 fabiaoqing.com...
- [Data Structure] 数据结构中各种树
- imx6ull gpio 中断