diff --git a/docs/坦克大战笔记.docx b/docs/坦克大战笔记.docx index fb28f85..d8fa2c4 100644 Binary files a/docs/坦克大战笔记.docx and b/docs/坦克大战笔记.docx differ diff --git a/src/com/demo/tank/audio/explode.wav b/src/com/demo/tank/audio/explode.wav new file mode 100644 index 0000000..dc72ab1 Binary files /dev/null and b/src/com/demo/tank/audio/explode.wav differ diff --git a/src/com/demo/tank/audio/tank_fire.wav b/src/com/demo/tank/audio/tank_fire.wav new file mode 100644 index 0000000..85279eb Binary files /dev/null and b/src/com/demo/tank/audio/tank_fire.wav differ diff --git a/src/com/demo/tank/audio/tank_move.wav b/src/com/demo/tank/audio/tank_move.wav new file mode 100644 index 0000000..959b998 Binary files /dev/null and b/src/com/demo/tank/audio/tank_move.wav differ diff --git a/src/com/demo/tank/audio/war1.wav b/src/com/demo/tank/audio/war1.wav new file mode 100644 index 0000000..099a31e Binary files /dev/null and b/src/com/demo/tank/audio/war1.wav differ diff --git a/src/com/demo/tank/coruse2/Bullet.java b/src/com/demo/tank/coruse2/Bullet.java index 804d89c..3913f84 100644 --- a/src/com/demo/tank/coruse2/Bullet.java +++ b/src/com/demo/tank/coruse2/Bullet.java @@ -42,7 +42,7 @@ public class Bullet { default: break; } - if(x < 0 || y<0 || x> TankFrame.GAME_WIDTH || x > TankFrame.GAME_HEIGHT){ + if(x < 0 || y<0 || x> TankFrame.GAME_WIDTH || y > TankFrame.GAME_HEIGHT){ live = false; } } diff --git a/src/com/demo/tank/course3/Bullet.java b/src/com/demo/tank/course3/Bullet.java new file mode 100644 index 0000000..70f708f --- /dev/null +++ b/src/com/demo/tank/course3/Bullet.java @@ -0,0 +1,82 @@ +package com.demo.tank.course3; + +import java.awt.*; + +public class Bullet { + private int x, y; + private Direction direction; + private static final int SPEED = 5; + private static final int WIDTH = 20; + private static final int HEIGHT = 20; + private boolean live = true; + private TankFrameV3 tf; + + public Bullet(int x, int y, Direction direction, TankFrameV3 tf) { + this.x = x; + this.y = y; + this.direction = direction; + this.tf = tf; + } + + public void paint(Graphics g){ + if(!live){ + tf.bullets.remove(this); + } + Color color = g.getColor(); + g.setColor(Color.RED); + g.fillOval(x, y, WIDTH, HEIGHT); + g.setColor(color); + 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 > TankFrameV3.GAME_WIDTH || y > TankFrameV3.GAME_HEIGHT){ + 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; + } +} diff --git a/src/com/demo/tank/course3/Direction.java b/src/com/demo/tank/course3/Direction.java new file mode 100644 index 0000000..54ddc50 --- /dev/null +++ b/src/com/demo/tank/course3/Direction.java @@ -0,0 +1,5 @@ +package com.demo.tank.course3; + +public enum Direction { + LEFT, RIGHT, UP, DOWN; +} diff --git a/src/com/demo/tank/course3/MainV3.java b/src/com/demo/tank/course3/MainV3.java new file mode 100644 index 0000000..d486bf9 --- /dev/null +++ b/src/com/demo/tank/course3/MainV3.java @@ -0,0 +1,13 @@ +package com.demo.tank.course3; + +import java.io.IOException; + +public class MainV3 { + public static void main(String[] args) throws InterruptedException, IOException { + TankFrameV3 tf = new TankFrameV3(); + while (true){ + Thread.sleep(50); + tf.repaint(); + } + } +} diff --git a/src/com/demo/tank/course3/ResourceManager.java b/src/com/demo/tank/course3/ResourceManager.java new file mode 100644 index 0000000..db7228d --- /dev/null +++ b/src/com/demo/tank/course3/ResourceManager.java @@ -0,0 +1,20 @@ +package com.demo.tank.course3; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.IOException; + +public class ResourceManager { + public static BufferedImage tankL, tankR, tankU, tankD; + + static { + try { + tankL = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("com/demo/tank/images/tankL.gif")); + tankR = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("com/demo/tank/images/tankR.gif")); + tankU = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("com/demo/tank/images/tankU.gif")); + tankD = ImageIO.read(ResourceManager.class.getClassLoader().getResourceAsStream("com/demo/tank/images/tankD.gif")); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/com/demo/tank/course3/Tank.java b/src/com/demo/tank/course3/Tank.java new file mode 100644 index 0000000..6db57e1 --- /dev/null +++ b/src/com/demo/tank/course3/Tank.java @@ -0,0 +1,91 @@ +package com.demo.tank.course3; + +import java.awt.*; + +public class Tank { + private int x,y; + private Direction dir; + private static final int SPEED = 10; + private boolean moving; + private TankFrameV3 tankFrame; + + + public Tank(int x, int y, Direction dir, TankFrameV3 tankFrame) { + this.x = x; + this.y = y; + this.dir = dir; + this.tankFrame = tankFrame; + } + + public void paint(Graphics g) { + //根据方向绘制坦克 + 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; + } + } + + 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 void fire() { + tankFrame.bullets.add(new Bullet(x, y, this.dir, tankFrame)); + } +} diff --git a/src/com/demo/tank/course3/TankFrameV3.java b/src/com/demo/tank/course3/TankFrameV3.java new file mode 100644 index 0000000..62573ab --- /dev/null +++ b/src/com/demo/tank/course3/TankFrameV3.java @@ -0,0 +1,135 @@ +package com.demo.tank.course3; + +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 TankFrameV3 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, this); +// Bullet bullet = new Bullet(520, 440, Direction.UP); + List bullets = new ArrayList(); + + public TankFrameV3(){ + setVisible(true); + setBounds(200, 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.setColor(color); + + tank.paint(g); + for (int i = 0; i< bullets.size(); i++){ + bullets.get(i).paint(g); + } +// 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_SPACE: + 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/images/0.gif b/src/com/demo/tank/images/0.gif new file mode 100644 index 0000000..79c5218 Binary files /dev/null and b/src/com/demo/tank/images/0.gif differ diff --git a/src/com/demo/tank/images/1.gif b/src/com/demo/tank/images/1.gif new file mode 100644 index 0000000..eface51 Binary files /dev/null and b/src/com/demo/tank/images/1.gif differ diff --git a/src/com/demo/tank/images/10.gif b/src/com/demo/tank/images/10.gif new file mode 100644 index 0000000..ffd49b8 Binary files /dev/null and b/src/com/demo/tank/images/10.gif differ diff --git a/src/com/demo/tank/images/2.gif b/src/com/demo/tank/images/2.gif new file mode 100644 index 0000000..b88b47e Binary files /dev/null and b/src/com/demo/tank/images/2.gif differ diff --git a/src/com/demo/tank/images/3.gif b/src/com/demo/tank/images/3.gif new file mode 100644 index 0000000..88e81e8 Binary files /dev/null and b/src/com/demo/tank/images/3.gif differ diff --git a/src/com/demo/tank/images/4.gif b/src/com/demo/tank/images/4.gif new file mode 100644 index 0000000..4cc91ab Binary files /dev/null and b/src/com/demo/tank/images/4.gif differ diff --git a/src/com/demo/tank/images/5.gif b/src/com/demo/tank/images/5.gif new file mode 100644 index 0000000..c1cc5d7 Binary files /dev/null and b/src/com/demo/tank/images/5.gif differ diff --git a/src/com/demo/tank/images/6.gif b/src/com/demo/tank/images/6.gif new file mode 100644 index 0000000..4f43fc7 Binary files /dev/null and b/src/com/demo/tank/images/6.gif differ diff --git a/src/com/demo/tank/images/7.gif b/src/com/demo/tank/images/7.gif new file mode 100644 index 0000000..20358ba Binary files /dev/null and b/src/com/demo/tank/images/7.gif differ diff --git a/src/com/demo/tank/images/8.gif b/src/com/demo/tank/images/8.gif new file mode 100644 index 0000000..ae410c9 Binary files /dev/null and b/src/com/demo/tank/images/8.gif differ diff --git a/src/com/demo/tank/images/9.gif b/src/com/demo/tank/images/9.gif new file mode 100644 index 0000000..11efedd Binary files /dev/null and b/src/com/demo/tank/images/9.gif differ diff --git a/src/com/demo/tank/images/BadTank1.png b/src/com/demo/tank/images/BadTank1.png new file mode 100644 index 0000000..d661b80 Binary files /dev/null and b/src/com/demo/tank/images/BadTank1.png differ diff --git a/src/com/demo/tank/images/BadTank2.png b/src/com/demo/tank/images/BadTank2.png new file mode 100644 index 0000000..c2a2b01 Binary files /dev/null and b/src/com/demo/tank/images/BadTank2.png differ diff --git a/src/com/demo/tank/images/GoodTank1.png b/src/com/demo/tank/images/GoodTank1.png new file mode 100644 index 0000000..8afb8b0 Binary files /dev/null and b/src/com/demo/tank/images/GoodTank1.png differ diff --git a/src/com/demo/tank/images/GoodTank2.png b/src/com/demo/tank/images/GoodTank2.png new file mode 100644 index 0000000..a1b131a Binary files /dev/null and b/src/com/demo/tank/images/GoodTank2.png differ diff --git a/src/com/demo/tank/images/bulletD.gif b/src/com/demo/tank/images/bulletD.gif new file mode 100644 index 0000000..be33e5f Binary files /dev/null and b/src/com/demo/tank/images/bulletD.gif differ diff --git a/src/com/demo/tank/images/bulletL.gif b/src/com/demo/tank/images/bulletL.gif new file mode 100644 index 0000000..1ab986a Binary files /dev/null and b/src/com/demo/tank/images/bulletL.gif differ diff --git a/src/com/demo/tank/images/bulletR.gif b/src/com/demo/tank/images/bulletR.gif new file mode 100644 index 0000000..514e982 Binary files /dev/null and b/src/com/demo/tank/images/bulletR.gif differ diff --git a/src/com/demo/tank/images/bulletU.gif b/src/com/demo/tank/images/bulletU.gif new file mode 100644 index 0000000..274c570 Binary files /dev/null and b/src/com/demo/tank/images/bulletU.gif differ diff --git a/src/com/demo/tank/images/bulletU.png b/src/com/demo/tank/images/bulletU.png new file mode 100644 index 0000000..f6f7203 Binary files /dev/null and b/src/com/demo/tank/images/bulletU.png differ diff --git a/src/com/demo/tank/images/e1.gif b/src/com/demo/tank/images/e1.gif new file mode 100644 index 0000000..4ba0e92 Binary files /dev/null and b/src/com/demo/tank/images/e1.gif differ diff --git a/src/com/demo/tank/images/e10.gif b/src/com/demo/tank/images/e10.gif new file mode 100644 index 0000000..5667574 Binary files /dev/null and b/src/com/demo/tank/images/e10.gif differ diff --git a/src/com/demo/tank/images/e11.gif b/src/com/demo/tank/images/e11.gif new file mode 100644 index 0000000..7d6747c Binary files /dev/null and b/src/com/demo/tank/images/e11.gif differ diff --git a/src/com/demo/tank/images/e12.gif b/src/com/demo/tank/images/e12.gif new file mode 100644 index 0000000..97f85df Binary files /dev/null and b/src/com/demo/tank/images/e12.gif differ diff --git a/src/com/demo/tank/images/e13.gif b/src/com/demo/tank/images/e13.gif new file mode 100644 index 0000000..473cab1 Binary files /dev/null and b/src/com/demo/tank/images/e13.gif differ diff --git a/src/com/demo/tank/images/e14.gif b/src/com/demo/tank/images/e14.gif new file mode 100644 index 0000000..676fa2a Binary files /dev/null and b/src/com/demo/tank/images/e14.gif differ diff --git a/src/com/demo/tank/images/e15.gif b/src/com/demo/tank/images/e15.gif new file mode 100644 index 0000000..d3795f8 Binary files /dev/null and b/src/com/demo/tank/images/e15.gif differ diff --git a/src/com/demo/tank/images/e16.gif b/src/com/demo/tank/images/e16.gif new file mode 100644 index 0000000..4a913c3 Binary files /dev/null and b/src/com/demo/tank/images/e16.gif differ diff --git a/src/com/demo/tank/images/e2.gif b/src/com/demo/tank/images/e2.gif new file mode 100644 index 0000000..f22cbb8 Binary files /dev/null and b/src/com/demo/tank/images/e2.gif differ diff --git a/src/com/demo/tank/images/e3.gif b/src/com/demo/tank/images/e3.gif new file mode 100644 index 0000000..58c1e2a Binary files /dev/null and b/src/com/demo/tank/images/e3.gif differ diff --git a/src/com/demo/tank/images/e4.gif b/src/com/demo/tank/images/e4.gif new file mode 100644 index 0000000..981e9e2 Binary files /dev/null and b/src/com/demo/tank/images/e4.gif differ diff --git a/src/com/demo/tank/images/e5.gif b/src/com/demo/tank/images/e5.gif new file mode 100644 index 0000000..fc93522 Binary files /dev/null and b/src/com/demo/tank/images/e5.gif differ diff --git a/src/com/demo/tank/images/e6.gif b/src/com/demo/tank/images/e6.gif new file mode 100644 index 0000000..1bba69a Binary files /dev/null and b/src/com/demo/tank/images/e6.gif differ diff --git a/src/com/demo/tank/images/e7.gif b/src/com/demo/tank/images/e7.gif new file mode 100644 index 0000000..9719061 Binary files /dev/null and b/src/com/demo/tank/images/e7.gif differ diff --git a/src/com/demo/tank/images/e8.gif b/src/com/demo/tank/images/e8.gif new file mode 100644 index 0000000..710d7ea Binary files /dev/null and b/src/com/demo/tank/images/e8.gif differ diff --git a/src/com/demo/tank/images/e9.gif b/src/com/demo/tank/images/e9.gif new file mode 100644 index 0000000..0535c88 Binary files /dev/null and b/src/com/demo/tank/images/e9.gif differ diff --git a/src/com/demo/tank/images/missileLD.gif b/src/com/demo/tank/images/missileLD.gif new file mode 100644 index 0000000..4a1d311 Binary files /dev/null and b/src/com/demo/tank/images/missileLD.gif differ diff --git a/src/com/demo/tank/images/missileLU.gif b/src/com/demo/tank/images/missileLU.gif new file mode 100644 index 0000000..e1fb913 Binary files /dev/null and b/src/com/demo/tank/images/missileLU.gif differ diff --git a/src/com/demo/tank/images/missileRD.gif b/src/com/demo/tank/images/missileRD.gif new file mode 100644 index 0000000..d58cc9c Binary files /dev/null and b/src/com/demo/tank/images/missileRD.gif differ diff --git a/src/com/demo/tank/images/missileRU.gif b/src/com/demo/tank/images/missileRU.gif new file mode 100644 index 0000000..1eed195 Binary files /dev/null and b/src/com/demo/tank/images/missileRU.gif differ diff --git a/src/com/demo/tank/images/square0.jpg b/src/com/demo/tank/images/square0.jpg new file mode 100644 index 0000000..5b80bf0 Binary files /dev/null and b/src/com/demo/tank/images/square0.jpg differ diff --git a/src/com/demo/tank/images/square1.jpg b/src/com/demo/tank/images/square1.jpg new file mode 100644 index 0000000..324341d Binary files /dev/null and b/src/com/demo/tank/images/square1.jpg differ diff --git a/src/com/demo/tank/images/square2.jpg b/src/com/demo/tank/images/square2.jpg new file mode 100644 index 0000000..be66ad8 Binary files /dev/null and b/src/com/demo/tank/images/square2.jpg differ diff --git a/src/com/demo/tank/images/square3.jpg b/src/com/demo/tank/images/square3.jpg new file mode 100644 index 0000000..109430b Binary files /dev/null and b/src/com/demo/tank/images/square3.jpg differ diff --git a/src/com/demo/tank/images/square4.jpg b/src/com/demo/tank/images/square4.jpg new file mode 100644 index 0000000..ba00d68 Binary files /dev/null and b/src/com/demo/tank/images/square4.jpg differ diff --git a/src/com/demo/tank/images/square5.jpg b/src/com/demo/tank/images/square5.jpg new file mode 100644 index 0000000..56198aa Binary files /dev/null and b/src/com/demo/tank/images/square5.jpg differ diff --git a/src/com/demo/tank/images/square6.jpg b/src/com/demo/tank/images/square6.jpg new file mode 100644 index 0000000..2923b9a Binary files /dev/null and b/src/com/demo/tank/images/square6.jpg differ diff --git a/src/com/demo/tank/images/tank.png b/src/com/demo/tank/images/tank.png new file mode 100644 index 0000000..54c82ba Binary files /dev/null and b/src/com/demo/tank/images/tank.png differ diff --git a/src/com/demo/tank/images/tankD.gif b/src/com/demo/tank/images/tankD.gif new file mode 100644 index 0000000..4c29adf Binary files /dev/null and b/src/com/demo/tank/images/tankD.gif differ diff --git a/src/com/demo/tank/images/tankL.gif b/src/com/demo/tank/images/tankL.gif new file mode 100644 index 0000000..af51e88 Binary files /dev/null and b/src/com/demo/tank/images/tankL.gif differ diff --git a/src/com/demo/tank/images/tankLD.gif b/src/com/demo/tank/images/tankLD.gif new file mode 100644 index 0000000..2f6bca7 Binary files /dev/null and b/src/com/demo/tank/images/tankLD.gif differ diff --git a/src/com/demo/tank/images/tankLU.gif b/src/com/demo/tank/images/tankLU.gif new file mode 100644 index 0000000..1e1a514 Binary files /dev/null and b/src/com/demo/tank/images/tankLU.gif differ diff --git a/src/com/demo/tank/images/tankR.gif b/src/com/demo/tank/images/tankR.gif new file mode 100644 index 0000000..a83f583 Binary files /dev/null and b/src/com/demo/tank/images/tankR.gif differ diff --git a/src/com/demo/tank/images/tankRD.gif b/src/com/demo/tank/images/tankRD.gif new file mode 100644 index 0000000..60e2e81 Binary files /dev/null and b/src/com/demo/tank/images/tankRD.gif differ diff --git a/src/com/demo/tank/images/tankRU.gif b/src/com/demo/tank/images/tankRU.gif new file mode 100644 index 0000000..d66ef25 Binary files /dev/null and b/src/com/demo/tank/images/tankRU.gif differ diff --git a/src/com/demo/tank/images/tankU.gif b/src/com/demo/tank/images/tankU.gif new file mode 100644 index 0000000..8825a23 Binary files /dev/null and b/src/com/demo/tank/images/tankU.gif differ