Heim > Java > javaLernprogramm > Beispiel für einen Java-Quellcode zur Implementierung eines Panzerkampfspiels

Beispiel für einen Java-Quellcode zur Implementierung eines Panzerkampfspiels

黄舟
Freigeben: 2017-10-20 10:06:35
Original
4254 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich das Quellcodebeispiel der Java-Version des Tank Battle-Spiels vorgestellt. Der Herausgeber findet es recht gut, daher werde ich es jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor, um einen Blick darauf zu werfen.

Organisieren Sie die Dokumente, suchen Sie den Code einer Java-Version des Panzerkampfspiels heraus, sortieren Sie ihn und optimieren Sie ihn ein wenig, um ihn zu teilen.


package tankwar;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

import tankwar.Tank.Direction;
import barrier.EnemyBorn;
import barrier.Gold;
import barrier.Home;
import barrier.Iron;
import barrier.SelfBorn;
import barrier.Wall;
/**
 * Java学习交流QQ群:589809992 我们一起学Java!
 */
public class TankWar implements KeyListener {
  static boolean TIMEOUT = false;
  private JFrame f;
  private JPanel gamePanel;
  private PanelShow messgePanel;
  private myPanel p;
  private Tank myTank;
  public static final int AREA_WIDTH = 830;
  public static final int AREA_HEIGHT = 800;
  private ArrayList<Missle> missles = new ArrayList<Missle>();
  private ArrayList<Tank> allTanks = new ArrayList<Tank>();
  private ArrayList<Boom> booms = new ArrayList<Boom>();
  private ArrayList<Wall> walls = new ArrayList<Wall>();
  private ArrayList<Iron> irons = new ArrayList<Iron>();
  private ArrayList<Gold> golds = new ArrayList<Gold>();
  private ArrayList<Item> items = new ArrayList<Item>();
  private ArrayList<EnemyBorn> enemyBorns = new ArrayList<EnemyBorn>();
  private SelfBorn selfBorn;
  private Home home;
  private Tank enemyTank;
  private Random r;
  private ImageIcon backGround;
  private final String map;
  private int tankMax;
  private boolean over = false;
  private static int selfMax = 3;
  private boolean win;
  private boolean flash = false;
  private TankWar tw = this;
  static int SCORE = 0;

  private final JFrame mainF;
  private int style;

  public TankWar(String map, int tankMax, JFrame mainF, int style)
      throws Exception {
    this.map = map;
    this.tankMax = tankMax;
    this.mainF = mainF;
    this.style = style;
    init();
  }

  private void init() {
    f = new JFrame("坦克大战 V3.0");
    gamePanel = new JPanel(null);
    p = new myPanel();
    p.setBackground(Color.WHITE);
    r = new Random();
    messgePanel = new PanelShow();
    initMap(new File("map/" + map));

    try {
      myTank = new Tank(selfBorn.getX(), selfBorn.getY(), true, allTanks,
          walls, irons, golds, missles, home, booms, style);
    } catch (Exception e1) {
    }
    myTank.setDir(Direction.U);

    allTanks.add(myTank);
    addTank();
    try {
      backGround = new ImageIcon(
          TankWar.class.getResource("/pic/whiteback.jpg"));
    } catch (Exception e) {
    }

    p.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.WHITE));
    p.setSize(AREA_WIDTH, AREA_HEIGHT);
    messgePanel.setBounds(AREA_WIDTH, 0, 200, AREA_HEIGHT);
    gamePanel.add(messgePanel);
    gamePanel.add(p);
    f.add(gamePanel);
    f.setBounds(0, 0, AREA_WIDTH + 200, AREA_HEIGHT);
    f.setDefaultCloseOperation(3);
    f.setResizable(true);
    f.setFocusable(true);
    f.addKeyListener(this);
    f.setVisible(true);

    new Thread(new Runnable() {
      public void run() {
        while (!over) {
          if (!myTank.isLive()) {
            selfMax--;
            if (selfMax < 0) {
              f.removeKeyListener(tw);
              over = true;
              win = false;
              break;
            } else {
              myTank.setLevel(1);
              myTank.setX(selfBorn.getX());
              myTank.setY(selfBorn.getY());
              myTank.setDir(Direction.U);
              myTank.setHp(50);
              myTank.setLive(true);
            }
          }
          if (tankMax <= 0 && allTanks.size() == 1) {
            f.removeKeyListener(tw);
            over = true;
            win = true;
          }
          if (!home.isLive()) {
            f.removeKeyListener(tw);
            over = true;
            win = false;
          }
          p.repaint();
          myTank.move();
          for (int i = 1; i < allTanks.size(); i++) {
            allTanks.get(i).move();
            allTanks.get(i).setNoFire(myTank.getNoFire() + 1);
            // if(allTanks.get(i).getX()%5==0&&allTanks.get(i).getY()%5==0)
            aI(allTanks.get(i));
          }
          if (allTanks.size() <= enemyBorns.size() + 1)
            addTank();
          myTank.setNoFire(myTank.getNoFire() + 1);
          messgePanel.setEnemyCount(tankMax);
          messgePanel.setSelfCount(selfMax);
          messgePanel.setScore(SCORE);
          if (SCORE % 500 == 0) {
            SCORE += 100;
            Item item = new Item(allTanks, booms, irons, home);
            items.add(item);
            item.start();
          }
          try {
            Thread.sleep(30);
          } catch (InterruptedException e) {
          }
        }

        over();
      }

    }).start();

  }

  private class myPanel extends JPanel {
    /**
     * 
     */
    private static final long serialVersionUID = 4408440723797225328L;

    @Override
    public void paintComponent(Graphics g) {
      super.paintComponent(g);
      g.drawImage(backGround.getImage(), 0, 0, null);
      for (int j = 0; j < walls.size(); j++) {
        walls.get(j).draw(g);
      }
      for (int j = 0; j < irons.size(); j++) {
        irons.get(j).draw(g);
      }
      for (int j = 0; j < golds.size(); j++) {
        golds.get(j).draw(g);
      }
      for (int j = 0; j < enemyBorns.size(); j++) {
        enemyBorns.get(j).draw(g);
      }
      home.draw(g);
      selfBorn.draw(g);

      for (int j = 0; j < allTanks.size(); j++) {
        allTanks.get(j).drawTank(g);
      }
      for (int j = 0; j < irons.size(); j++) {
        irons.get(j).draw(g);
      }

      for (int i = 0; i < missles.size(); i++) {
        missles.get(i).drawMissle(g);
        if (!missles.get(i).isLive())
          missles.remove(i);
      }
      for (int i = 0; i < booms.size(); i++) {
        if (booms.get(i).isLive())
          booms.get(i).drawBoom(g);
        else
          booms.remove(i);
      }
      for (int j = 0; j < items.size(); j++) {
        if (!items.get(j).isLive()) {
          items.remove(j);
          continue;
        }
        items.get(j).draw(g);
      }
      if (over)
        drawOver(g);
      messgePanel.repaint();
    }
  }

  @Override
  public void keyTyped(KeyEvent e) {
    // TODO Auto-generated method stub

  }

  @Override
  public void keyPressed(KeyEvent e) {
    if (over) {
      if (e.getKeyCode() == KeyEvent.VK_F1) {
        over = false;
        missles.clear();
        allTanks.clear();
        booms.clear();
        walls.clear();
        irons.clear();
        golds.clear();
        enemyBorns.clear();
        try {
          init();
        } catch (Exception e1) {
        }
      } else {
        f.setVisible(false);
        mainF.setSize(800, 800);
        mainF.setVisible(true);
      }
    } else if (e.getKeyCode() == KeyEvent.VK_SPACE) {
      myTank.fire();
    } else {
      myTank.keyPress(e);
    }
  }

  @Override
  public void keyReleased(KeyEvent e) {

    myTank.keyReleased(e);
  }

  public void aI(Tank tank) {
    if (TIMEOUT) {
      tank.setUp(false);
      tank.setLeft(false);
      tank.setDown(false);
      tank.setRight(false);
      return;
    }

    if (r.nextInt(40) == 0)
      tank.fire();
    if (r.nextInt(10) == 0) {
      if (tank.getX() >= myTank.getX()
          && tank.getX() <= myTank.getX() + Tank.SIZE
          && tank.getY() > myTank.getY()) {
        tank.setUp(true);
        tank.setLeft(false);
        tank.setDown(false);
        tank.setRight(false);
        tank.setDir(Direction.U);
        return;
      } else if (tank.getX() >= myTank.getX()
          && tank.getX() <= myTank.getX() + Tank.SIZE
          && tank.getY() < myTank.getY()) {
        tank.setUp(false);
        tank.setLeft(false);
        tank.setDown(true);
        tank.setRight(false);
        tank.setDir(Direction.D);
        return;
      }

      else if (tank.getX() > myTank.getX()
          && tank.getY() >= myTank.getY()
          && tank.getY() <= myTank.getY() + Tank.SIZE) {
        tank.setUp(false);
        tank.setLeft(true);
        tank.setDown(false);
        tank.setRight(false);
        tank.setDir(Direction.L);
        return;
      } else if (tank.getX() < myTank.getX()
          && tank.getY() >= myTank.getY()
          && tank.getY() <= myTank.getY() + Tank.SIZE) {
        tank.setUp(false);
        tank.setLeft(false);
        tank.setDown(false);
        tank.setRight(true);
        tank.setDir(Direction.R);
        return;
      }
    }
    if (tank.getX() <= 0) {
      tank.setUp(false);
      tank.setLeft(false);
      tank.setDown(false);
      tank.setRight(true);
      tank.setDir(Direction.R);
    }
    if (tank.getY() <= 0) {
      tank.setUp(false);
      tank.setLeft(false);
      tank.setDown(true);
      tank.setRight(false);
      tank.setDir(Direction.D);
    }
    if (tank.getX() >= AREA_WIDTH - Tank.SIZE) {
      tank.setUp(false);
      tank.setLeft(true);
      tank.setDown(false);
      tank.setRight(false);
      tank.setDir(Direction.L);
    }
    if (tank.getY() >= AREA_HEIGHT - Tank.SIZE) {
      tank.setUp(true);
      tank.setLeft(false);
      tank.setDown(false);
      tank.setRight(false);
      tank.setDir(Direction.U);
    } else if (r.nextInt(300) == 1) {
      tank.setUp(true);
      tank.setLeft(false);
      tank.setDown(false);
      tank.setRight(false);
      tank.setDir(Direction.U);
    }

    else if (r.nextInt(300) == 2) {
      tank.setUp(false);
      tank.setLeft(true);
      tank.setDown(false);
      tank.setRight(false);
      tank.setDir(Direction.L);
    } else if (r.nextInt(300) == 3) {
      tank.setUp(false);
      tank.setLeft(false);
      tank.setDown(true);
      tank.setRight(false);
      tank.setDir(Direction.D);
    } else if (r.nextInt(300) == 4) {
      tank.setUp(false);
      tank.setLeft(false);
      tank.setDown(false);
      tank.setRight(true);
      tank.setDir(Direction.R);
    }
  }

  public void initMap(File file) {
    try {
      FileInputStream read = new FileInputStream(file);
      for (int i = 0; i < AREA_HEIGHT / 50; i++) {
        for (int j = 0; j < AREA_WIDTH / 50; j++) {
          switch (read.read()) {
          case 1:
            walls.add(new Wall(j * 50, i * 50));
            break;
          case 2:
            irons.add(new Iron(j * 50, i * 50));
            break;
          case 3:
            golds.add(new Gold(j * 50, i * 50));
            break;
          case 4:
            selfBorn = new SelfBorn(j * 50, i * 50);
            break;
          case 5:
            enemyBorns.add(new EnemyBorn(j * 50, i * 50));
            break;
          case 6:
            home = new Home(j * 50, i * 50);
            break;
          }
        }
      }
      read.close();
    } catch (Exception e) {
    }
    ;
  }

  public void addTank() {
    if (tankMax <= 0)
      return;
    for (int i = allTanks.size(); i < enemyBorns.size() + 1; i++) {
      try {
        int temp = r.nextInt(enemyBorns.size());
        enemyTank = new Tank(enemyBorns.get(temp).getX(), enemyBorns
            .get(temp).getY(), false, allTanks, walls, irons,
            golds, missles, home, booms, r.nextInt(3) + 1);
      } catch (Exception e) {
        e.printStackTrace();
      }
      enemyTank.setDir(Direction.D);
      enemyTank.setDown(true);
      allTanks.add(enemyTank);
      tankMax--;
      if (tankMax <= 0)
        return;
    }
  }

  public static void addMyTankLives() {
    selfMax++;
  }

  private void over() {

    for (int i = 0; i < AREA_HEIGHT / 50; i++) {
      for (int j = 0; j < AREA_WIDTH / 50; j++) {
        irons.add(new Iron(j * 50, i * 50));
        p.repaint();
        try {
          Thread.sleep(5);
        } catch (InterruptedException e) {
        }
      }
    }
    while (true) {
      flash = !flash;
      p.repaint();
      try {
        Thread.sleep(1000);
      } catch (InterruptedException e) {
      }
      f.addKeyListener(this);
    }
  }

  private void drawOver(Graphics g) {
    p.repaint();
    g.setColor(Color.red);
    g.setFont(new Font("Arial", 1, 100));
    g.drawString("GAME OVER", 100, 200);
    g.setFont(new Font("Arial", 2, 50));
    if (win)
      g.drawString("Congratulation! You Win!", 100, 400);
    else
      g.drawString("So Sorry, You Lose!", 100, 400);
    if (flash) {
      g.setFont(new Font("Arial", 2, 30));
      g.setColor(Color.BLACK);
      g.drawString("Press F1 to try again...,", 150, 500);
      g.drawString("Press the other Key to Return the Title...,", 150,
          600);
    }
  }
}
Nach dem Login kopieren

Screenshot des Code-Ausführungseffekts

Das obige ist der detaillierte Inhalt vonBeispiel für einen Java-Quellcode zur Implementierung eines Panzerkampfspiels. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage