package imageban;
/**
 * 该枚举类定义了坦克,子弹运动的方向
 * @author dell
 *
 */
public enum Direction {
/*
* 从左到右一次是
* 左 ,上,,右,,下,,停止
*/
L,  U, R, D,  STOP

}

***************************************************************

package imageban;
import java.util.ArrayList;
/**
 * 这是敌方坦克基地,里面有有五个坦克
 * 
 * @author dell
 * 
 */
public class EnemysBase {
// 装有五个坦克的链表
ArrayList<Enemy> enemy = new ArrayList<Enemy>();
// 提供一个坦克基地
public static EnemysBase enemyBase = new EnemysBase();
/**
* 往链表里添加五个坦克
*/
public void addEnemy() {
for (int i = 0; i < 4; i++) {
enemy.add(new Enemy("images/enemy0.gif",50 + 350*i , 10));
}

}

/**
* 根据索引获得坦克

* @param i要获得的那个坦克
* @return Enemy 坦克
*/
public Enemy getEnemy(int i) {

return enemy.get(i);
}

/*
* 在初始化的时候就添加了五个坦克
*/
private EnemysBase() {
addEnemy();
}

/***
* 获得坦克基地里坦克的数量

* @return int
*/
public int size() {
return enemy.size();
}

/*
* 获得坦克基地
*/
public static EnemysBase getEnemyBase() {
return enemyBase;
}

/*
* 如果坦克死了,就删除该坦克
*/
public void remove(int i) {
enemy.remove(i);
}

}

***************************************************************

package imageban;

import java.awt.Color;
import java.awt.Graphics;
import java.io.IOException;

import tankImage.Explosion;

/**
 * 此类的作用是当坦克被击中时发生爆炸的效果
 * 
 * @author Arthur
 * 
 */
public class Explode extends Tank{
Explosion explosion = new Explosion("images/blast",4);
    public Explode(String imagePath,int x,int y,int n){
     super(imagePath,x,y);
    }

public Explosion getExplosion() {
return explosion;
}

public void setExplosion(Explosion explosion) {
this.explosion = explosion;
}

int step = 0;// 储存数组的下标

// 画爆炸的园
public void draw(Graphics g) {

if (step == explosion.size()) {
this.setAlive(false);
step = 0;
return;
}
Color c = g.getColor();
g.setColor(Color.yellow);
g.drawImage(explosion.getImage(step), this.getX(), this.getY(), null);
g.setColor(c);
step++;
}

@Override
public void fire(Graphics g) {
// TODO Auto-generated method stub

}

@Override
public void loadMissiles() {
// TODO Auto-generated method stub

}

@Override
public void locateDirection() throws IOException {
// TODO Auto-generated method stub

}
}

******************************************************************************

package imageban;

import java.awt.Graphics;
import java.awt.Rectangle;

/**
 * 定义了绘画矩形的方法接口和获得矩形的方法接口
 * @author dell
 *
 */
public interface RectangleInter {
public Rectangle getRect(); 
public void draw(Graphics g);
public void move();
}

**********************************************************

package imageban;

import java.awt.*;
import java.awt.event.*;
import music.Music;

/**
 * 战场类
 * @author dell
 *
 */
public class WarField extends Frame {
/**
* T
*/
public static final int  WIDTH =1200,HEIGHT=720;//战场的高度和宽度
private static final long serialVersionUID = 1L;
Image offScreenImage = null;
EnemysBase enemybase = EnemysBase.getEnemyBase();//坦克基地
Music music = new Music();
public void init() {
this.setTitle("TankWar");
this.setSize(WIDTH, HEIGHT);
this.setResizable(false);//设置为不可改变大小
this.setVisible(true);
music.playSound("images/start.wav",3) ;//播放背景音乐
/**
* 定义一个关闭窗口的方法
*/
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}

});
this.addKeyListener(new Key());//谈价键盘监听器
this.setBackground(Color.GREEN);
new Thread(new PaintThread()).start();
}

public void update(Graphics g) {
if (offScreenImage == null) {
offScreenImage = this.createImage(WIDTH, HEIGHT);
}
Graphics gOffScreen = offScreenImage.getGraphics();
Color c = gOffScreen.getColor();
gOffScreen.setColor(Color.black);
gOffScreen.fillRect(0, 0, WIDTH, HEIGHT);
gOffScreen.setColor(c);
paint(gOffScreen);
g.drawImage(offScreenImage, 0, 0, null);
}

/*
* 绘画坦克的最主要的方法(non-Javadoc)
* @see java.awt.Container#paint(java.awt.Graphics)
*/
@Override
public void paint(Graphics g) {
Color color = g.getColor();
MyTank.myTank.draw(g);//绘画我方坦克,即为我方坦克登陆战场
g.setColor(color);
//敌方军团来啦
for(int i=0;i<enemybase.size();i++){
Enemy e = enemybase.getEnemy(i);
e.draw(g);//敌方坦克登陆战场
}

}

public WarField() {
this.init();

}

/**
* 键盘监听内部类,用来控制炮弹的方向
* @author dell
*
*/
private class Key extends KeyAdapter {

@Override
public void keyPressed(KeyEvent e) {
MyTank.myTank.keyPressed(e);
}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
MyTank.myTank.keyReleased(e);
}

}

/**
* 线程内部类
* @author dell
*
*/
private class PaintThread implements Runnable {

public void run() {
while (true) {
repaint();//这个方法自动调用上面的paint方法
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

}

}

图片版坦克大战其他相关的 类(三)相关推荐

  1. Java小项目:图片版坦克大战

    0.1最低版本 (1)要求:产生一个空白窗口 (2)掌握技巧: a.通过eclipse建立新的项目 b.为新的项目指定不同的源代码和输出目录 c.指定项目所用的JDK d.通过eclipse建立新的类 ...

  2. 基于Netty的联机版坦克大战

    基于Netty的联机版坦克大战 项目介绍 项目github地址:基于Netty的联机版坦克大战 该项目实现了联机版坦克大战,项目包括客户端与服务端 项目使用技术: 使用Netty实现客户端和服务端之间 ...

  3. jQuery 版坦克大战游戏

    查看效果 下载地址 jQuery 版坦克大战游戏,仅完成了一个基本的对战模块雏形,为你打造功能完备的大型射击类网页游戏做准备.通过这个小游戏的编程实战,你可以了解到角色转换.角色移动.子弹碰撞判断.生 ...

  4. Java版坦克大战游戏

    技术:Java等 摘要: Java随着各种电子设备,其中尤其是移动通信设备的发展所诞生的一项新的开发技术.Java定位在各种电子设备产品的功能应用上,对电子产品的多样,智能化,提供了很大的帮助.本次设 ...

  5. python版坦克大战

    Python版坦克大战 Python一千行代码搞定坦克大战游戏. 在开发坦克大战游戏项目中,我们使用的是pygame模块来完成的,所以得先装好pygame模块.本游戏一共封装了11个类和两个模块(py ...

  6. 基于ComblockEngine+Unity的联机版坦克大战(一)

    文章目录 阶段目标 环境搭建 流程设计 相关说明 相关代码 上述源码地址 写在前面的一段话: 之前准备用LuaServer写一个简单moba手游,后来觉得,LuaServer毕竟是前公司内部的产品,不 ...

  7. java swing 版坦克大战

    1.基于Java swing版坦克大战,git链接:https://github.com/zhangliqingyun/TankGame.git 2.项目包结构图,TankGame.java程序启动类 ...

  8. 从零开始5——简陋版坦克大战(2)

    从零开始5--简陋版坦克大战(2) 往期内容 从零开始5--简陋版坦克大战(1) 从零开始制作一款游戏4--DarkRoom-I改进版 2020新春献礼--从零开始制作一款游戏3 从零开始制作一款游戏 ...

  9. html5+javascript+css实现---网页版坦克大战---无需运行环境

    html5+javascript+css实现-网页版坦克大战-无需运行环境,只需一个浏览器,重拾少年情. 运行环境-除老版IE浏览器都可以: 源码需要请:点赞留言邮箱: 可以跳关,回退关卡.支持双人坦 ...

  10. java怎么给坦克上图片_Java坦克大战 (七) 之图片版

    在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学完J2SE的小伙伴们一点启示! 坦克大战效果图: 坦克大战V0.7图片版实现功能: 1.将方向定义为一个E ...

最新文章

  1. C# 栈 、队列的概念
  2. A股暴跌,户均亏2万!刚写好的辞职信又撕了……
  3. TCP和UDP和IP和HTTP和socket
  4. ubuntu 12.04 交叉编译 arm/mips 平台的 strace
  5. 【PAT乙级】1073 多选题常见计分法 (20 分)
  6. 快手文档 - www.kuaishou.net
  7. C# 接受MQTT服务器推送的消息
  8. OpenCV学习笔记(1)——显示图片
  9. 搭建LNMP环境(CentOS 6.8 + nginx1.10 + mysql5.6 + php5.6 )
  10. python2还能用吗_官方推荐python3,为何还有人在用python2呢?
  11. java 关于日期的操作
  12. Python大数据处理扩展库pySpark用法精要
  13. python设计模式六大原则_学习设计模式 - 六大基本原则之迪米特法则(示例代码)...
  14. 数学建模——层次分析法模型
  15. 【数据采集】-目前比较流行的几种数据采集方式
  16. TBSchedule调度平台疑难解答
  17. Excel 文件格式解析
  18. 【AIOT】HumanCenteredSensing
  19. 大学生计算机基础学多久,大学生计算机基础学期总结
  20. java微信录音arm转mp3_使用FFmpeg将微信录音 amr格式 转 MP3格式

热门文章

  1. 江西单招主计算机学校,2019年江西单招学校,江西单招信息技术试题,2019江西单招综合素质...
  2. Vue源码:mustache模板引擎学习
  3. MySQL查询日期类数据常用函数
  4. HTML:表单学习笔记
  5. scapy获取ip_如何使用scapy从数据包中读取整个ip层和tcp层?
  6. 理解线程/多线程处理数组(MultiThreaded dealing with arrays)
  7. PyTorch 之 Checkpoint 机制解析
  8. Focal Loss-RetinaNet算法解析
  9. 强推WordPress里的一款代码高亮插件——EnlighterJS
  10. ABP框架系列之四十九:(Startup-Configuration-启动配置)