From fd6665a536ff2122e2df4d9365f1a29e2e48dda3 Mon Sep 17 00:00:00 2001 From: terry <724796052@qq.com> Date: Sat, 25 Jun 2022 09:53:30 +0800 Subject: [PATCH] =?UTF-8?q?4.1=20=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/坦克大战笔记.docx | Bin 75235 -> 73089 bytes src/{com/demo/tank => }/audio/explode.wav | Bin src/{com/demo/tank => }/audio/tank_fire.wav | Bin src/{com/demo/tank => }/audio/tank_move.wav | Bin src/{com/demo/tank => }/audio/war1.wav | Bin src/com/demo/tank/course4/Bullet.java | 117 ++++++++++++++ src/com/demo/tank/course4/Direction.java | 5 + src/com/demo/tank/course4/Explode.java | 46 ++++++ src/com/demo/tank/course4/Group.java | 5 + src/com/demo/tank/course4/MainV4.java | 21 +++ .../demo/tank/course4/ResourceManager.java | 33 ++++ src/com/demo/tank/course4/Tank.java | 121 ++++++++++++++ src/com/demo/tank/course4/TankFrameV4.java | 151 ++++++++++++++++++ src/com/demo/tank/util/Audio.java | 99 ++++++++++++ src/com/demo/tank/util/ImageUtil.java | 24 +++ src/{com/demo/tank => }/images/0.gif | Bin src/{com/demo/tank => }/images/1.gif | Bin src/{com/demo/tank => }/images/10.gif | Bin src/{com/demo/tank => }/images/2.gif | Bin src/{com/demo/tank => }/images/3.gif | Bin src/{com/demo/tank => }/images/4.gif | Bin src/{com/demo/tank => }/images/5.gif | Bin src/{com/demo/tank => }/images/6.gif | Bin src/{com/demo/tank => }/images/7.gif | Bin src/{com/demo/tank => }/images/8.gif | Bin src/{com/demo/tank => }/images/9.gif | Bin src/{com/demo/tank => }/images/BadTank1.png | Bin src/{com/demo/tank => }/images/BadTank2.png | Bin src/{com/demo/tank => }/images/GoodTank1.png | Bin src/{com/demo/tank => }/images/GoodTank2.png | Bin src/{com/demo/tank => }/images/bulletD.gif | Bin src/{com/demo/tank => }/images/bulletL.gif | Bin src/{com/demo/tank => }/images/bulletR.gif | Bin src/{com/demo/tank => }/images/bulletU.gif | Bin src/{com/demo/tank => }/images/bulletU.png | Bin src/{com/demo/tank => }/images/e1.gif | Bin src/{com/demo/tank => }/images/e10.gif | Bin src/{com/demo/tank => }/images/e11.gif | Bin src/{com/demo/tank => }/images/e12.gif | Bin src/{com/demo/tank => }/images/e13.gif | Bin src/{com/demo/tank => }/images/e14.gif | Bin src/{com/demo/tank => }/images/e15.gif | Bin src/{com/demo/tank => }/images/e16.gif | Bin src/{com/demo/tank => }/images/e2.gif | Bin src/{com/demo/tank => }/images/e3.gif | Bin src/{com/demo/tank => }/images/e4.gif | Bin src/{com/demo/tank => }/images/e5.gif | Bin src/{com/demo/tank => }/images/e6.gif | Bin src/{com/demo/tank => }/images/e7.gif | Bin src/{com/demo/tank => }/images/e8.gif | Bin src/{com/demo/tank => }/images/e9.gif | Bin src/{com/demo/tank => }/images/missileLD.gif | Bin src/{com/demo/tank => }/images/missileLU.gif | Bin src/{com/demo/tank => }/images/missileRD.gif | Bin src/{com/demo/tank => }/images/missileRU.gif | Bin src/{com/demo/tank => }/images/square0.jpg | Bin src/{com/demo/tank => }/images/square1.jpg | Bin src/{com/demo/tank => }/images/square2.jpg | Bin src/{com/demo/tank => }/images/square3.jpg | Bin src/{com/demo/tank => }/images/square4.jpg | Bin src/{com/demo/tank => }/images/square5.jpg | Bin src/{com/demo/tank => }/images/square6.jpg | Bin src/{com/demo/tank => }/images/tank.png | Bin src/{com/demo/tank => }/images/tankD.gif | Bin src/{com/demo/tank => }/images/tankL.gif | Bin src/{com/demo/tank => }/images/tankLD.gif | Bin src/{com/demo/tank => }/images/tankLU.gif | Bin src/{com/demo/tank => }/images/tankR.gif | Bin src/{com/demo/tank => }/images/tankRD.gif | Bin src/{com/demo/tank => }/images/tankRU.gif | Bin src/{com/demo/tank => }/images/tankU.gif | Bin 71 files changed, 622 insertions(+) rename src/{com/demo/tank => }/audio/explode.wav (100%) rename src/{com/demo/tank => }/audio/tank_fire.wav (100%) rename src/{com/demo/tank => }/audio/tank_move.wav (100%) rename src/{com/demo/tank => }/audio/war1.wav (100%) create mode 100644 src/com/demo/tank/course4/Bullet.java create mode 100644 src/com/demo/tank/course4/Direction.java create mode 100644 src/com/demo/tank/course4/Explode.java create mode 100644 src/com/demo/tank/course4/Group.java create mode 100644 src/com/demo/tank/course4/MainV4.java create mode 100644 src/com/demo/tank/course4/ResourceManager.java create mode 100644 src/com/demo/tank/course4/Tank.java create mode 100644 src/com/demo/tank/course4/TankFrameV4.java create mode 100644 src/com/demo/tank/util/Audio.java create mode 100644 src/com/demo/tank/util/ImageUtil.java rename src/{com/demo/tank => }/images/0.gif (100%) rename src/{com/demo/tank => }/images/1.gif (100%) rename src/{com/demo/tank => }/images/10.gif (100%) rename src/{com/demo/tank => }/images/2.gif (100%) rename src/{com/demo/tank => }/images/3.gif (100%) rename src/{com/demo/tank => }/images/4.gif (100%) rename src/{com/demo/tank => }/images/5.gif (100%) rename src/{com/demo/tank => }/images/6.gif (100%) rename src/{com/demo/tank => }/images/7.gif (100%) rename src/{com/demo/tank => }/images/8.gif (100%) rename src/{com/demo/tank => }/images/9.gif (100%) rename src/{com/demo/tank => }/images/BadTank1.png (100%) rename src/{com/demo/tank => }/images/BadTank2.png (100%) rename src/{com/demo/tank => }/images/GoodTank1.png (100%) rename src/{com/demo/tank => }/images/GoodTank2.png (100%) rename src/{com/demo/tank => }/images/bulletD.gif (100%) rename src/{com/demo/tank => }/images/bulletL.gif (100%) rename src/{com/demo/tank => }/images/bulletR.gif (100%) rename src/{com/demo/tank => }/images/bulletU.gif (100%) rename src/{com/demo/tank => }/images/bulletU.png (100%) rename src/{com/demo/tank => }/images/e1.gif (100%) rename src/{com/demo/tank => }/images/e10.gif (100%) rename src/{com/demo/tank => }/images/e11.gif (100%) rename src/{com/demo/tank => }/images/e12.gif (100%) rename src/{com/demo/tank => }/images/e13.gif (100%) rename src/{com/demo/tank => }/images/e14.gif (100%) rename src/{com/demo/tank => }/images/e15.gif (100%) rename src/{com/demo/tank => }/images/e16.gif (100%) rename src/{com/demo/tank => }/images/e2.gif (100%) rename src/{com/demo/tank => }/images/e3.gif (100%) rename src/{com/demo/tank => }/images/e4.gif (100%) rename src/{com/demo/tank => }/images/e5.gif (100%) rename src/{com/demo/tank => }/images/e6.gif (100%) rename src/{com/demo/tank => }/images/e7.gif (100%) rename src/{com/demo/tank => }/images/e8.gif (100%) rename src/{com/demo/tank => }/images/e9.gif (100%) rename src/{com/demo/tank => }/images/missileLD.gif (100%) rename src/{com/demo/tank => }/images/missileLU.gif (100%) rename src/{com/demo/tank => }/images/missileRD.gif (100%) rename src/{com/demo/tank => }/images/missileRU.gif (100%) rename src/{com/demo/tank => }/images/square0.jpg (100%) rename src/{com/demo/tank => }/images/square1.jpg (100%) rename src/{com/demo/tank => }/images/square2.jpg (100%) rename src/{com/demo/tank => }/images/square3.jpg (100%) rename src/{com/demo/tank => }/images/square4.jpg (100%) rename src/{com/demo/tank => }/images/square5.jpg (100%) rename src/{com/demo/tank => }/images/square6.jpg (100%) rename src/{com/demo/tank => }/images/tank.png (100%) rename src/{com/demo/tank => }/images/tankD.gif (100%) rename src/{com/demo/tank => }/images/tankL.gif (100%) rename src/{com/demo/tank => }/images/tankLD.gif (100%) rename src/{com/demo/tank => }/images/tankLU.gif (100%) rename src/{com/demo/tank => }/images/tankR.gif (100%) rename src/{com/demo/tank => }/images/tankRD.gif (100%) rename src/{com/demo/tank => }/images/tankRU.gif (100%) rename src/{com/demo/tank => }/images/tankU.gif (100%) diff --git a/docs/坦克大战笔记.docx b/docs/坦克大战笔记.docx index 8435f3439196e405a9d8e12506c4738e9e363aad..b3f2d422d2cb444f01c87228d554e9d7ceb2da77 100644 GIT binary patch delta 17220 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 M#zu(!@m>S{e_twAlK=n! delta 19251 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 diff --git a/src/com/demo/tank/audio/explode.wav b/src/audio/explode.wav similarity index 100% rename from src/com/demo/tank/audio/explode.wav rename to src/audio/explode.wav diff --git a/src/com/demo/tank/audio/tank_fire.wav b/src/audio/tank_fire.wav similarity index 100% rename from src/com/demo/tank/audio/tank_fire.wav rename to src/audio/tank_fire.wav diff --git a/src/com/demo/tank/audio/tank_move.wav b/src/audio/tank_move.wav similarity index 100% rename from src/com/demo/tank/audio/tank_move.wav rename to src/audio/tank_move.wav diff --git a/src/com/demo/tank/audio/war1.wav b/src/audio/war1.wav similarity index 100% rename from src/com/demo/tank/audio/war1.wav rename to src/audio/war1.wav diff --git a/src/com/demo/tank/course4/Bullet.java b/src/com/demo/tank/course4/Bullet.java new file mode 100644 index 0000000..4beea81 --- /dev/null +++ b/src/com/demo/tank/course4/Bullet.java @@ -0,0 +1,117 @@ +package com.demo.tank.course4; + +import java.awt.*; + +public class Bullet { + private int x, y; + private Direction direction; + private static final int SPEED = 5; + public static final int WIDTH = ResourceManager.bulletD.getWidth(); + public static final int HEIGHT = ResourceManager.bulletD.getHeight(); + private boolean live = true; + private Group group = Group.BAD; + private TankFrameV4 tf; + + public Bullet(int x, int y, Direction direction, Group group, TankFrameV4 tf) { + this.x = x; + this.y = y; + this.direction = direction; + this.group = group; + this.tf = tf; + } + + public void paint(Graphics g){ + if(!live){ + tf.bullets.remove(this); + } + switch (direction){ + case UP: + g.drawImage(ResourceManager.bulletU, x, y, null); + break; + case DOWN: + g.drawImage(ResourceManager.bulletD, x, y, null); + break; + case LEFT: + g.drawImage(ResourceManager.bulletL, x, y, null); + break; + case RIGHT: + g.drawImage(ResourceManager.bulletR, x, y, null); + break; + } + move(); + } + + private void move() { + switch (direction){ + case UP: y -= SPEED; + break; + case DOWN: y += SPEED; + break; + case LEFT: x -= SPEED; + break; + case RIGHT: x += SPEED; + break; + default: + break; + } + if(x < 0 || y < 0 || x > TankFrameV4.GAME_WIDTH || y > TankFrameV4.GAME_HEIGHT){ + live = false; + } + } + + //检测是否跟坦克碰撞 + public void collideWith(Tank tank){ + //关闭队友伤害 + if(this.group == tank.getGroup()) return; + Rectangle bulletRect = new Rectangle(x, y, WIDTH, HEIGHT); + Rectangle tankRect = new Rectangle(tank.getX(), tank.getY(), Tank.WIDTH, Tank.HEIGHT); + if(bulletRect.intersects(tankRect)){ + tank.die(); + this.die(); + } + } + + private void die() { + this.live = false; + } + + 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 Direction getDirection() { + return direction; + } + + public void setDirection(Direction direction) { + this.direction = direction; + } + + public boolean isLive() { + return live; + } + + public void setLive(boolean live) { + this.live = live; + } + + public Group getGroup() { + return group; + } + + public void setGroup(Group group) { + this.group = group; + } +} diff --git a/src/com/demo/tank/course4/Direction.java b/src/com/demo/tank/course4/Direction.java new file mode 100644 index 0000000..5427a9b --- /dev/null +++ b/src/com/demo/tank/course4/Direction.java @@ -0,0 +1,5 @@ +package com.demo.tank.course4; + +public enum Direction { + LEFT, RIGHT, UP, DOWN; +} diff --git a/src/com/demo/tank/course4/Explode.java b/src/com/demo/tank/course4/Explode.java new file mode 100644 index 0000000..7fbf453 --- /dev/null +++ b/src/com/demo/tank/course4/Explode.java @@ -0,0 +1,46 @@ +package com.demo.tank.course4; + +import com.demo.tank.util.Audio; + +import java.awt.*; + +public class Explode { + private int x, y; + public static final int WIDTH = ResourceManager.explodes[0].getWidth(); + public static final int HEIGHT = ResourceManager.explodes[0].getHeight(); + private boolean living = true; + private TankFrameV4 tf; + + private int step = 0; + + public Explode(int x, int y, TankFrameV4 tf) { + this.x = x; + this.y = y; + this.tf = tf; +// new Thread(() -> new Audio("audio/explode.wav").play()).start(); + } + + public void paint(Graphics g){ + g.drawImage(ResourceManager.explodes[step++], x, y, null); + if(step >= ResourceManager.explodes.length){ + step = 0; + } + } + + 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; + } + +} diff --git a/src/com/demo/tank/course4/Group.java b/src/com/demo/tank/course4/Group.java new file mode 100644 index 0000000..07b5304 --- /dev/null +++ b/src/com/demo/tank/course4/Group.java @@ -0,0 +1,5 @@ +package com.demo.tank.course4; + +public enum Group { + GOOD, BAD +} diff --git a/src/com/demo/tank/course4/MainV4.java b/src/com/demo/tank/course4/MainV4.java new file mode 100644 index 0000000..0c799f5 --- /dev/null +++ b/src/com/demo/tank/course4/MainV4.java @@ -0,0 +1,21 @@ +package com.demo.tank.course4; + +import com.demo.tank.util.Audio; + +import java.io.IOException; + +public class MainV4 { + public static void main(String[] args) throws InterruptedException, IOException { + TankFrameV4 tf = new TankFrameV4(); + for(int i = 0; i < 5; i++){ + tf.enemyTanks.add(new Tank(50 + i*80, 200, Direction.DOWN, Group.BAD, tf)); + } + +// new Thread(() -> new Audio("audio/war1.wav").loop()).start(); + + while (true){ + Thread.sleep(50); + tf.repaint(); + } + } +} diff --git a/src/com/demo/tank/course4/ResourceManager.java b/src/com/demo/tank/course4/ResourceManager.java new file mode 100644 index 0000000..3a47bce --- /dev/null +++ b/src/com/demo/tank/course4/ResourceManager.java @@ -0,0 +1,33 @@ +package com.demo.tank.course4; + +import com.demo.tank.util.ImageUtil; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.IOException; + +public class ResourceManager { + public static BufferedImage tankL, tankR, tankU, tankD; + public static BufferedImage bulletL, bulletR, bulletU, bulletD; + public static BufferedImage[] explodes = new BufferedImage[16]; + + static { + try { + tankU = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("images/BadTank1.png")); + tankL = ImageUtil.rotateImage(tankU, -90); + tankR = ImageUtil.rotateImage(tankU, 90); + tankD = ImageUtil.rotateImage(tankU, 180); + + bulletL = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("images/bulletL.gif")); + bulletR = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("images/bulletR.gif")); + bulletU = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("images/bulletU.gif")); + bulletD = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("images/bulletD.gif")); + + for (int i= 0; i<16; i++){ + explodes[i] = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("images/e"+ (i+1)+".gif")); + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/com/demo/tank/course4/Tank.java b/src/com/demo/tank/course4/Tank.java new file mode 100644 index 0000000..4fcf7dc --- /dev/null +++ b/src/com/demo/tank/course4/Tank.java @@ -0,0 +1,121 @@ +package com.demo.tank.course4; + +import java.awt.*; +import java.util.Random; + +public class Tank { + private int x,y; + private Direction dir; + private static final int SPEED = 8; + private boolean moving = false; + private boolean living = true; + private Group group = Group.BAD; + private TankFrameV4 tankFrame; + public static final int WIDTH = ResourceManager.tankD.getWidth(); + public static final int HEIGHT = ResourceManager.tankD.getHeight(); + private Random random = new Random(); + + public Tank(int x, int y, Direction dir, Group group, TankFrameV4 tankFrame) { + this.x = x; + this.y = y; + this.dir = dir; + this.group = group; + this.tankFrame = tankFrame; + } + + public void paint(Graphics g) { + if(!living) tankFrame.enemyTanks.remove(this); + //根据方向绘制坦克 + switch (dir){ + case UP: + g.drawImage(ResourceManager.tankU, x, y, null); + break; + case DOWN: + g.drawImage(ResourceManager.tankD, x, y, null); + break; + case LEFT: + g.drawImage(ResourceManager.tankL, x, y, null); + break; + case RIGHT: + g.drawImage(ResourceManager.tankR, x, y, null); + break; + } + move(); + } + + public void move(){ + //如果没有移动 return + if(!moving) return; + switch (dir){ + case UP: y -= SPEED; + break; + case DOWN: y += SPEED; + break; + case LEFT: x -= SPEED; + break; + case RIGHT: x += SPEED; + break; + default: + break; + } +// if(random.nextInt(10) > 8) this.fire(); + } + + public void fire() { + int bx = x + Tank.WIDTH/2 - Bullet.WIDTH/2; + int by = y + Tank.HEIGHT/2 - Bullet.HEIGHT/2; + tankFrame.bullets.add(new Bullet(bx, by, this.dir, this.group, tankFrame)); + } + + public void die(){ + this.living = false; + } + + 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 Direction getDir() { + return dir; + } + + public void setDir(Direction dir) { + this.dir = dir; + } + + public boolean isMoving() { + return moving; + } + + public void setMoving(boolean moving) { + this.moving = moving; + } + + public boolean isLiving() { + return living; + } + + public void setLiving(boolean living) { + this.living = living; + } + + public Group getGroup() { + return group; + } + + public void setGroup(Group group) { + this.group = group; + } +} diff --git a/src/com/demo/tank/course4/TankFrameV4.java b/src/com/demo/tank/course4/TankFrameV4.java new file mode 100644 index 0000000..dc4e6be --- /dev/null +++ b/src/com/demo/tank/course4/TankFrameV4.java @@ -0,0 +1,151 @@ +package com.demo.tank.course4; + +import java.awt.*; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.ArrayList; +import java.util.List; + +public class TankFrameV4 extends Frame { + public static final int GAME_WIDTH = 800; + public static final int GAME_HEIGHT = 600; + Image image = null; + + Tank tank = new Tank(500, 500, Direction.UP, Group.GOOD,this); +// Bullet bullet = new Bullet(520, 440, Direction.UP); + List bullets = new ArrayList(); + List enemyTanks = new ArrayList<>(); + Explode explode = new Explode(200, 300, this); + + public TankFrameV4(){ + setVisible(true); + setBounds(500, 200 , GAME_WIDTH, GAME_HEIGHT); + setResizable(false); + setTitle("tank war"); + this.addKeyListener(new MyKeyListener()); + this.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + System.exit(0); + } + }); + } + + @Override + public void update(Graphics g) { + if(image == null){ + image = this.createImage(GAME_WIDTH, GAME_HEIGHT); + } + Graphics imgGraphic = image.getGraphics(); + Color color = g.getColor(); + imgGraphic.setColor(Color.BLACK); + imgGraphic.fillRect(0,0, GAME_WIDTH, GAME_HEIGHT); + imgGraphic.setColor(color); + paint(imgGraphic); + g.drawImage(image, 0, 0, null); + } + + @Override + public void paint(Graphics g){ + //打印出子弹数量 + Color color = g.getColor(); + g.setColor(Color.WHITE); + g.drawString("当前子弹数量:" + bullets.size(), 60, 50); + g.drawString("当前敌人数量:" + enemyTanks.size(), 60, 80); + g.setColor(color); + + tank.paint(g); + + explode.paint(g); + + for(int i = 0; i< enemyTanks.size(); i++){ + enemyTanks.get(i).paint(g); + } + + for (int i = 0; i< bullets.size(); i++){ + bullets.get(i).paint(g); + } + + for(int i = 0; i< bullets.size(); i++){ + for(int j=0; j< enemyTanks.size(); j++){ + bullets.get(i).collideWith(enemyTanks.get(j)); + } + } +// for(Iterator it = bullets.iterator(); it.hasNext();){ +// Bullet b = it.next(); +// if(!b.isLive()){ +// it.remove(); +// } +// } +// +// for (Bullet b : bullets){ +// b.paint(g); +// } + } + + class MyKeyListener extends KeyAdapter{ + boolean bL = false; + boolean bR = false; + boolean bU = false; + boolean bD = false; + + @Override + public void keyPressed(KeyEvent e) { + switch (e.getKeyCode()){ + case KeyEvent.VK_A: + bL = true; + break; + case KeyEvent.VK_D: + bR = true; + break; + case KeyEvent.VK_W: + bU = true; + break; + case KeyEvent.VK_S: + bD = true; + break; + default: + break; + } + setTankDirection(); + } + + @Override + public void keyReleased(KeyEvent e) { + switch (e.getKeyCode()){ + case KeyEvent.VK_A: + bL = false; + break; + case KeyEvent.VK_D: + bR = false; + break; + case KeyEvent.VK_W: + bU = false; + break; + case KeyEvent.VK_S: + bD = false; + break; + case KeyEvent.VK_J: + tank.fire(); + break; + default: + break; + } + setTankDirection(); + } + + public void setTankDirection(){ + if(!bL && !bR && !bU && !bD){ + tank.setMoving(false); + }else{ + tank.setMoving(true); + if(bL) tank.setDir(Direction.LEFT); + if(bR) tank.setDir(Direction.RIGHT); + if(bU) tank.setDir(Direction.UP); + if(bD) tank.setDir(Direction.DOWN); + } + } + } +} diff --git a/src/com/demo/tank/util/Audio.java b/src/com/demo/tank/util/Audio.java new file mode 100644 index 0000000..7336d7b --- /dev/null +++ b/src/com/demo/tank/util/Audio.java @@ -0,0 +1,99 @@ + +package com.demo.tank.util; + +import java.io.IOException; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.DataLine; +import javax.sound.sampled.FloatControl; +import javax.sound.sampled.SourceDataLine; + +public class Audio { + + byte[] b = new byte[1024 * 1024 * 15]; + + + public void loop() { + try { + + while (true) { + int len = 0; + sourceDataLine.open(audioFormat, 1024 * 1024 * 15); + sourceDataLine.start(); + //System.out.println(audioInputStream.markSupported()); + audioInputStream.mark(12358946); + while ((len = audioInputStream.read(b)) > 0) { + sourceDataLine.write(b, 0, len); + } + audioInputStream.reset(); + + sourceDataLine.drain(); + sourceDataLine.close(); + } + + } catch (Exception e) { + e.printStackTrace(); + } + } + + private AudioFormat audioFormat = null; + private SourceDataLine sourceDataLine = null; + private DataLine.Info dataLine_info = null; + + private AudioInputStream audioInputStream = null; + + public Audio(String fileName) { + try { + audioInputStream = AudioSystem.getAudioInputStream(Audio.class.getClassLoader().getResource(fileName)); + audioFormat = audioInputStream.getFormat(); + dataLine_info = new DataLine.Info(SourceDataLine.class, audioFormat); + sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLine_info); + //FloatControl volctrl=(FloatControl)sourceDataLine.getControl(FloatControl.Type.MASTER_GAIN); + //volctrl.setValue(-40);// + + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void play() { + try { + byte[] b = new byte[1024*5]; + int len = 0; + sourceDataLine.open(audioFormat, 1024*5); + sourceDataLine.start(); + //System.out.println(audioInputStream.markSupported()); + audioInputStream.mark(12358946); + while ((len = audioInputStream.read(b)) > 0) { + sourceDataLine.write(b, 0, len); + } + // audioInputStream.reset(); + + sourceDataLine.drain(); + sourceDataLine.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + + + public void close() { + try { + audioInputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { + // Audio a = new Audio("audio/explode.wav"); + Audio a = new Audio("audio/war1.wav"); + a.loop(); + + } + +} diff --git a/src/com/demo/tank/util/ImageUtil.java b/src/com/demo/tank/util/ImageUtil.java new file mode 100644 index 0000000..4ddfa0b --- /dev/null +++ b/src/com/demo/tank/util/ImageUtil.java @@ -0,0 +1,24 @@ +package com.demo.tank.util; + +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; + +public class ImageUtil { + public static BufferedImage rotateImage(final BufferedImage bufferedimage, + final int degree) { + int w = bufferedimage.getWidth(); + int h = bufferedimage.getHeight(); + int type = bufferedimage.getColorModel().getTransparency(); + BufferedImage img; + Graphics2D graphics2d; + (graphics2d = (img = new BufferedImage(w, h, type)) + .createGraphics()).setRenderingHint( + RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BILINEAR); + graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2); + graphics2d.drawImage(bufferedimage, 0, 0, null); + graphics2d.dispose(); + return img; + } +} diff --git a/src/com/demo/tank/images/0.gif b/src/images/0.gif similarity index 100% rename from src/com/demo/tank/images/0.gif rename to src/images/0.gif diff --git a/src/com/demo/tank/images/1.gif b/src/images/1.gif similarity index 100% rename from src/com/demo/tank/images/1.gif rename to src/images/1.gif diff --git a/src/com/demo/tank/images/10.gif b/src/images/10.gif similarity index 100% rename from src/com/demo/tank/images/10.gif rename to src/images/10.gif diff --git a/src/com/demo/tank/images/2.gif b/src/images/2.gif similarity index 100% rename from src/com/demo/tank/images/2.gif rename to src/images/2.gif diff --git a/src/com/demo/tank/images/3.gif b/src/images/3.gif similarity index 100% rename from src/com/demo/tank/images/3.gif rename to src/images/3.gif diff --git a/src/com/demo/tank/images/4.gif b/src/images/4.gif similarity index 100% rename from src/com/demo/tank/images/4.gif rename to src/images/4.gif diff --git a/src/com/demo/tank/images/5.gif b/src/images/5.gif similarity index 100% rename from src/com/demo/tank/images/5.gif rename to src/images/5.gif diff --git a/src/com/demo/tank/images/6.gif b/src/images/6.gif similarity index 100% rename from src/com/demo/tank/images/6.gif rename to src/images/6.gif diff --git a/src/com/demo/tank/images/7.gif b/src/images/7.gif similarity index 100% rename from src/com/demo/tank/images/7.gif rename to src/images/7.gif diff --git a/src/com/demo/tank/images/8.gif b/src/images/8.gif similarity index 100% rename from src/com/demo/tank/images/8.gif rename to src/images/8.gif diff --git a/src/com/demo/tank/images/9.gif b/src/images/9.gif similarity index 100% rename from src/com/demo/tank/images/9.gif rename to src/images/9.gif diff --git a/src/com/demo/tank/images/BadTank1.png b/src/images/BadTank1.png similarity index 100% rename from src/com/demo/tank/images/BadTank1.png rename to src/images/BadTank1.png diff --git a/src/com/demo/tank/images/BadTank2.png b/src/images/BadTank2.png similarity index 100% rename from src/com/demo/tank/images/BadTank2.png rename to src/images/BadTank2.png diff --git a/src/com/demo/tank/images/GoodTank1.png b/src/images/GoodTank1.png similarity index 100% rename from src/com/demo/tank/images/GoodTank1.png rename to src/images/GoodTank1.png diff --git a/src/com/demo/tank/images/GoodTank2.png b/src/images/GoodTank2.png similarity index 100% rename from src/com/demo/tank/images/GoodTank2.png rename to src/images/GoodTank2.png diff --git a/src/com/demo/tank/images/bulletD.gif b/src/images/bulletD.gif similarity index 100% rename from src/com/demo/tank/images/bulletD.gif rename to src/images/bulletD.gif diff --git a/src/com/demo/tank/images/bulletL.gif b/src/images/bulletL.gif similarity index 100% rename from src/com/demo/tank/images/bulletL.gif rename to src/images/bulletL.gif diff --git a/src/com/demo/tank/images/bulletR.gif b/src/images/bulletR.gif similarity index 100% rename from src/com/demo/tank/images/bulletR.gif rename to src/images/bulletR.gif diff --git a/src/com/demo/tank/images/bulletU.gif b/src/images/bulletU.gif similarity index 100% rename from src/com/demo/tank/images/bulletU.gif rename to src/images/bulletU.gif diff --git a/src/com/demo/tank/images/bulletU.png b/src/images/bulletU.png similarity index 100% rename from src/com/demo/tank/images/bulletU.png rename to src/images/bulletU.png diff --git a/src/com/demo/tank/images/e1.gif b/src/images/e1.gif similarity index 100% rename from src/com/demo/tank/images/e1.gif rename to src/images/e1.gif diff --git a/src/com/demo/tank/images/e10.gif b/src/images/e10.gif similarity index 100% rename from src/com/demo/tank/images/e10.gif rename to src/images/e10.gif diff --git a/src/com/demo/tank/images/e11.gif b/src/images/e11.gif similarity index 100% rename from src/com/demo/tank/images/e11.gif rename to src/images/e11.gif diff --git a/src/com/demo/tank/images/e12.gif b/src/images/e12.gif similarity index 100% rename from src/com/demo/tank/images/e12.gif rename to src/images/e12.gif diff --git a/src/com/demo/tank/images/e13.gif b/src/images/e13.gif similarity index 100% rename from src/com/demo/tank/images/e13.gif rename to src/images/e13.gif diff --git a/src/com/demo/tank/images/e14.gif b/src/images/e14.gif similarity index 100% rename from src/com/demo/tank/images/e14.gif rename to src/images/e14.gif diff --git a/src/com/demo/tank/images/e15.gif b/src/images/e15.gif similarity index 100% rename from src/com/demo/tank/images/e15.gif rename to src/images/e15.gif diff --git a/src/com/demo/tank/images/e16.gif b/src/images/e16.gif similarity index 100% rename from src/com/demo/tank/images/e16.gif rename to src/images/e16.gif diff --git a/src/com/demo/tank/images/e2.gif b/src/images/e2.gif similarity index 100% rename from src/com/demo/tank/images/e2.gif rename to src/images/e2.gif diff --git a/src/com/demo/tank/images/e3.gif b/src/images/e3.gif similarity index 100% rename from src/com/demo/tank/images/e3.gif rename to src/images/e3.gif diff --git a/src/com/demo/tank/images/e4.gif b/src/images/e4.gif similarity index 100% rename from src/com/demo/tank/images/e4.gif rename to src/images/e4.gif diff --git a/src/com/demo/tank/images/e5.gif b/src/images/e5.gif similarity index 100% rename from src/com/demo/tank/images/e5.gif rename to src/images/e5.gif diff --git a/src/com/demo/tank/images/e6.gif b/src/images/e6.gif similarity index 100% rename from src/com/demo/tank/images/e6.gif rename to src/images/e6.gif diff --git a/src/com/demo/tank/images/e7.gif b/src/images/e7.gif similarity index 100% rename from src/com/demo/tank/images/e7.gif rename to src/images/e7.gif diff --git a/src/com/demo/tank/images/e8.gif b/src/images/e8.gif similarity index 100% rename from src/com/demo/tank/images/e8.gif rename to src/images/e8.gif diff --git a/src/com/demo/tank/images/e9.gif b/src/images/e9.gif similarity index 100% rename from src/com/demo/tank/images/e9.gif rename to src/images/e9.gif diff --git a/src/com/demo/tank/images/missileLD.gif b/src/images/missileLD.gif similarity index 100% rename from src/com/demo/tank/images/missileLD.gif rename to src/images/missileLD.gif diff --git a/src/com/demo/tank/images/missileLU.gif b/src/images/missileLU.gif similarity index 100% rename from src/com/demo/tank/images/missileLU.gif rename to src/images/missileLU.gif diff --git a/src/com/demo/tank/images/missileRD.gif b/src/images/missileRD.gif similarity index 100% rename from src/com/demo/tank/images/missileRD.gif rename to src/images/missileRD.gif diff --git a/src/com/demo/tank/images/missileRU.gif b/src/images/missileRU.gif similarity index 100% rename from src/com/demo/tank/images/missileRU.gif rename to src/images/missileRU.gif diff --git a/src/com/demo/tank/images/square0.jpg b/src/images/square0.jpg similarity index 100% rename from src/com/demo/tank/images/square0.jpg rename to src/images/square0.jpg diff --git a/src/com/demo/tank/images/square1.jpg b/src/images/square1.jpg similarity index 100% rename from src/com/demo/tank/images/square1.jpg rename to src/images/square1.jpg diff --git a/src/com/demo/tank/images/square2.jpg b/src/images/square2.jpg similarity index 100% rename from src/com/demo/tank/images/square2.jpg rename to src/images/square2.jpg diff --git a/src/com/demo/tank/images/square3.jpg b/src/images/square3.jpg similarity index 100% rename from src/com/demo/tank/images/square3.jpg rename to src/images/square3.jpg diff --git a/src/com/demo/tank/images/square4.jpg b/src/images/square4.jpg similarity index 100% rename from src/com/demo/tank/images/square4.jpg rename to src/images/square4.jpg diff --git a/src/com/demo/tank/images/square5.jpg b/src/images/square5.jpg similarity index 100% rename from src/com/demo/tank/images/square5.jpg rename to src/images/square5.jpg diff --git a/src/com/demo/tank/images/square6.jpg b/src/images/square6.jpg similarity index 100% rename from src/com/demo/tank/images/square6.jpg rename to src/images/square6.jpg diff --git a/src/com/demo/tank/images/tank.png b/src/images/tank.png similarity index 100% rename from src/com/demo/tank/images/tank.png rename to src/images/tank.png diff --git a/src/com/demo/tank/images/tankD.gif b/src/images/tankD.gif similarity index 100% rename from src/com/demo/tank/images/tankD.gif rename to src/images/tankD.gif diff --git a/src/com/demo/tank/images/tankL.gif b/src/images/tankL.gif similarity index 100% rename from src/com/demo/tank/images/tankL.gif rename to src/images/tankL.gif diff --git a/src/com/demo/tank/images/tankLD.gif b/src/images/tankLD.gif similarity index 100% rename from src/com/demo/tank/images/tankLD.gif rename to src/images/tankLD.gif diff --git a/src/com/demo/tank/images/tankLU.gif b/src/images/tankLU.gif similarity index 100% rename from src/com/demo/tank/images/tankLU.gif rename to src/images/tankLU.gif diff --git a/src/com/demo/tank/images/tankR.gif b/src/images/tankR.gif similarity index 100% rename from src/com/demo/tank/images/tankR.gif rename to src/images/tankR.gif diff --git a/src/com/demo/tank/images/tankRD.gif b/src/images/tankRD.gif similarity index 100% rename from src/com/demo/tank/images/tankRD.gif rename to src/images/tankRD.gif diff --git a/src/com/demo/tank/images/tankRU.gif b/src/images/tankRU.gif similarity index 100% rename from src/com/demo/tank/images/tankRU.gif rename to src/images/tankRU.gif diff --git a/src/com/demo/tank/images/tankU.gif b/src/images/tankU.gif similarity index 100% rename from src/com/demo/tank/images/tankU.gif rename to src/images/tankU.gif