基本的な機能は実現されています。ローカル戦車の進路探索は比較的弱いです。各戦車は同時に最大 5 発の砲弾を発射できます。敵には 3 種類の兵力があり、メニュー バーは反応しません。これは非常に簡単です。必要に応じて自分で追加できます。学習用にすべてのコードをアップロードします。
- パッケージ Tank.common;
-
- abstract public クラス Bullet 実装 Runnable、Common {
- private int x, y;
- private int Speed;
- private int Direction;
- private boolean active;
- protected int power;
-
- public Bullet(int x, int y, int 速度, int 方向) {
- this.x = x;
- this.y = y;
- this.speed = 速度;
- this.direction = 方向;
- 生きている = true;
- }
-
- public void die() {
- live = false;
- }
-
- public int getPower() {
- return power;
- }
-
- public int getX() {
- return x;
- }
-
- public int getY() {
- return y;
- }
-
- public boolean isAlive() {
- return alive;
- }
-
- public void run() {
- while (true) {
- try {
- Thread.sleep(15);
- } catch ( InterruptedException e) {
- // TODO 自動生成された catch ブロック
- e.printStackTrace();
- }
- switch (方向) {
- case UP:
- y -= 速度;
- ブレーク;
- case DOWN:
- y += 速度;
- ブレーク;
- ケース右:
- x += 速度;
- ブレーク;
- ケース左:
- x -= 速度;
- ブレーク;
- }
- if (x < 0 || x > WIDTH || y >高さ || y 生きている = false;
- return;
- }
- }
- }
-
- }
-
パッケージ Tank.common;
- public インターフェース Common {
- public static Final int UP = 0;
- public static Final int DOWN = 1;
- public static Final int RIGHT = 2;
- public static Final int LEFT = 3 ;
- パブリック静的final int WIDTH = 600;
- パブリック静的final int HEIGHT = 400;
- パブリック静的final int WATER = 0;
- パブリック静的final int WALLS = 1;
- パブリック静的final int STEELS = 2;
- パブリック静的final int GRASS = 3;
-
- }
-
-
-
コードをコピー
- パッケージ Tank.common;
-
- import java.awt.Color;
- import java.util.ArrayList;
-
- import Tank.entity.NormalBullet;
-
- public abstract class Tank は Common {
- protected int x;
- を実装します
- protected int y;
-
- private Color color;
-
- private int 速度;
-
- private int 方向;
-
- private ArrayList箇条書き;
-
- プライベート ArrayListタンク;
-
- プライベート Bullet 弾丸;
-
- プライベート int maxBulletNum;
-
- プライベート ブール アライブ;
-
- 保護された int ライフ;
-
- ArrayList壁;
-
- プライベート int タンク画像 ID;
-
- {
- 速度 = 2;
- 方向 = 上;
- 生きている = true;
- }
-
- パブリック Tank() {
- this.x = 0;
- this.y = 0;
- color = Color.black;
- }
-
- public Tank(int x, int y, Color color) {
- this.x = x;
- this.y = y;
- this.color = color;
- maxBulletNum = 5;
- Bullets = new ArrayList();
- Walls = new ArrayList();
- }
-
- protected boolean canMove(int x, int y) {
- if (x < 0 || x > WIDTH - 20 || y < 0 || y > HEIGHT - 20) {
- return false;
- }
- if (tanks == null) {
- return true;
- }
-
- if (tanks.size() 1) {
- return true;
- }
-
- for (int i = 0; i 壁 tempWall = Walls.get(i);
- if (tempWall.isAlive( )) {
- if (x >= tempWall.getX() && y >= tempWall.getY()) {
- if (x <= tempWall.getX() + 20 && y <= tempWall.getY( ) + 20) {
- return tempWall.canBeWalk();
- }
- } else if (x >= tempWall.getX() && y if (x && (y + 20) >= tempWall.getY()) {
- return tempWall.canBeWalk();
- }
- } else if (x <= tempWall.getX() && y > = tempWall.getY()) {
- if ((x + 20) >= tempWall.getX()
- && y return tempWall.canBeWalk();
- }
- } else if (x <= tempWall.getX() && y <= tempWall.getY()) {
- if ((x + 20) >= tempWall.getX()
- && (y + 20) > = tempWall.getY()) {
- return tempWall.canBeWalk();
- }
- }
- }
- }
-
- for (int i = 0;私は<タンクのサイズ(); ++i) {
- タンク tempTank = Tanks.get(i);
- if (tempTank == this)
- Break;
- if (tempTank.isAlive()) {
- if (x >= tempTank.getX() && y >= tempTank.getY()) {
- if (x return false;
- }
- } else if ( x >= tempTank.getX() && y if (x && (y + 20) >= tempTank.getY() ) {
- return false;
- }
- } else if (x = tempTank.getY()) {
- if ((x + 20) >= tempTank.getX()
- && y <= tempTank.getY() + 20) {
- return false;
- }
- } else if (x <= tempTank.getX() && y <= tempTank.getY()) {
- if ( (x + 20) >= tempTank.getX()
- && (y + 20) >= tempTank.getY()) {
- return false;
- }
- }
- }
- }
- return true;
- }
-
- public voiddamage(int power) {
- lifes -= power;
- if (lifes live = false;
- }
- }
-
- public ArrayList getBullet() {
- 弾丸を返す;
- }
-
- public Color getColor() {
- カラーを返す;
- }
-
- public int getDirection() {
- 方向を返す;
- }
-
- public int getImageID() {
- TankImageID を返す;
- }
-
- public int getSpeed() {
- 戻り速度;
- }
-
- public ArrayList getWalls() {
- return this.walls;
- }
-
- public int getX() {
- return x;
- }
-
- public int getY() {
- return y;
- }
-
- public boolean isAlive() {
- return live;
- }
-
- public void move(int direction) {
- setDirection(direction);
- int x = this.x;
- int y = this.y;
- switch (direction) {
- case UP:
- y -=速度;
- ブレーク;
- ケース DOWN:
- y += 速度;
- ブレーク;
- ケース 右:
- x += 速度;
- ブレーク;
- ケース 左:
- x -= 速度;
- ブレーク;
- }
- if (canMove (x, y)) {
- this.x = x;
- this.y = y;
- }
- }
-
- public void setAllTanks(ArrayList タンク) {
- this.tanks = タンク;
- }
-
- public void setDirection(int 方向) {
- this.direction = 方向;
- }
-
- Final protected void setImageID(int ID) {
- this.tankImageID = ID;
- }
-
- public void setSpeed(int Speed) {
- this.speed = Speed;
- }
-
- public void setWalls(ArrayListwallList ) {
- this.walls = WallList;
- }
-
- public void Shot() {
- スイッチ (方向) {
- case UP:
- Bullet = new NormalBullet(x + 10, y, UP);
- Break;
- case DOWN :
- 箇条書き = 新しい NormalBullet(x + 10, y + 20, DOWN);
- ブレーク;
- ケース右:
- ブレット = 新しい NormalBullet(x + 20, y + 10, RIGHT);
- ブレーク;
- ケース左:
- Bullet = new NormalBullet(x, y + 10, LEFT);
- Break;
- }
- for (int i = 0; i Bullet temp = Bullets.get(i) );
- if (!temp.isAlive()) {
- Bullets.remove(temp);
- }
- }
- if (bullets.size() >= maxBulletNum) {
-
- } else {
- new Thread(bullet) .start();
- Bullets.add(bullet);
- }
-
- }
- }
复制代
- パッケージtank.common;
-
- パブリック抽象クラスWall {
- private int x, y;
-
- private intwallImageID;
-
- private boolean canWalk;
-
- private boolean canFly;
-
- private booleanalive;
-
- private boolean canHit;
-
- public Wall(int x, int y, int ID, boolean walk, boolean fly, boolean Hit) {
- this.x = x;
- this.y = y;
- this.wallImageID = ID;
- this .canWalk = walk;
- this.canFly = fly;
- this.alive = true;
- this.canHit = Hit;
- }
-
- public boolean canBeFly() {
- return canFly;
- }
-
- public boolean canBeHit() {
- return this.canHit;
- }
-
- public boolean canBeWalk() {
- return canWalk;
- }
-
- public void die() {
- live = false;
- }
-
- public int getImageID() {
- return WallImageID;
- }
-
- public int getX() {
- return x;
- }
-
- public int getY() {
- return y;
- }
-
- public boolean isAlive() {
- return alive;
- }
-
- }
-
复制代
- package Tank.entity;
-
- public class Bomb {
- private int x;
- private int y;
-
- private int life = 9;
-
- private boolean active;
-
- public Bomb(int x, int y) {
- this.x = x;
- this.y = y;
- 生きている = true;
- }
-
- public void decrese() {
- if (life > 0) {
- life--;
- } else {
- 生きている= false;
- }
- }
-
- public int getLife() {
- return life;
- }
-
- public int getX() {
- return x;
- }
-
- public int getY() {
- return y;
- }
-
- public boolean isAlive() {
- 生き返る;
- }
-
- }
-
复制代
- パッケージtank.entity;
-
- インポートtank.common.EnemyTank;
- インポートtank.common.Tank;
-
- public class EnemyTank1 extends EnemyTank {
-
- public EnemyTank1(int x, int y, Tank hero) {
- super(x, y, hero, 3, 1);
- setSpeed(2);
- setShotSpeed(0.8);
- }
- }
-
复制代
- パッケージtank.entity;
-
- インポートtank.common.EnemyTank;
- インポートtank.common.Tank;
-
- public class EnemyTank2 extends EnemyTank {
- public EnemyTank2(int x, int y, Tank hero) {
- super (x, y, hero, 5, 2);
- setSpeed(3);
- setShotSpeed(0.5);
- }
- }
-
复制代
- パッケージtank.entity;
-
- インポートtank.common.EnemyTank;
- インポートtank.common.Tank;
-
- public class EnemyTank3 extends EnemyTank {
- public EnemyTank3(int x, int y, Tank hero) {
- super (x, y, hero, 10, 3);
- setSpeed(5);
- setShotSpeed(0.2);
- }
- }
-
复制代
- package Tank.entity;
-
- import Tank.common.Wall;
-
- public class Grass extends Wall {
- public Grass(int x, int y) {
- super(x, y, 3, true, true, false);
- }
- }
-
复制代
- package Tank.entity;
-
- import java.awt.Color;
-
- import Tank.common.Tank;
-
- public class MyTank extends Tank {
- public MyTank(int x, int y) {
- super(x) , y, Color. yellow);
- lifes = 5;
- super.setImageID(0);
- }
-
- public int getLife() {
- return lifes;
- }
-
- }
-
复制代
- パッケージ Tank.entity;
-
- import Tank.common.Bullet;
-
- public class NormalBullet extends Bullet {
-
- public NormalBullet(int x, int y, int direct) {
- super(x, y, 2,方向);
- power = 1;
- }
-
- }
-
复制代
- package Tank.entity;
-
- import java.util.ArrayList;
-
- import Tank.common.EnemyTank;
-
- public class Stage {
- private int totalEnemyNum;
- private int LeaveEnemyNum;
- private int totalHeroLife;
- private int LeaveHeroLife;
- private int level;
- private WallContainerwallContainer;
- private ArrayList enemeyTanks;
- private int activeEnemyTankNum;
- private EnemyTank activeEnemyTanks[];
- private MyTank hero;
-
- public Stage(int totalEnemyNum, int totalHeroLife, int level,
- int activeEnemyTankNum) {
- this.totalEnemyNum = totalEnemyNum;
- this.totalHeroLife = totalHeroLife;
- this.level = level;
- this.activeEnemyTankNum = activeEnemyTankNum;
- this.leaveEnemyNum = this.totalEnemyNum;
- this.leaveHeroLife = this.totalHeroLife;
- this.enemeyTanks = new ArrayList();
- this。 activeEnemyTanks = new EnemyTank[this.activeEnemyTankNum];
- this.hero = new MyTank(290, 370);
- this.wallContainer = new WallContainer();
- }
-
- public void addEnemyTank(EnemyTank タンク) {
- enemeyTanks.add(タンク);
- }
-
- public void autoCreateEnemyTank() {
- for (int i = 0; i double key = Math.random();
- if (key this.enemeyTanks.add(new EnemyTank1(0, 0, hero));
- } else if (key >= 0.66) {
- this.enemeyTanks.add(new EnemyTank2(0, 0, hero));
- } else {
- this.enemeyTanks.add(new EnemyTank3(0, 0, hero));
- }
- }
- }
-
- public int getActiveEnemyTankNum() {
- return this.activeEnemyTankNum;
- }
-
- public EnemyTank[] getEnemyTank () {
- return this.activeEnemyTanks;
- }
-
- public MyTank getHeroTank() {
- return this.hero;
- }
-
- public int getLeaveEnemyNum() {
- return this.leaveEnemyNum;
- }
-
- public int getLeaveHeroLife() {
- return this.leaveHeroLife;
- }
-
- public int getLevel() {
- return this.level;
- }
-
- public WallContainer getWallContainer() {
- return this.wallContainer;
- }
-
- public boolean isHeroDead() {
- if (this.leaveHeroLife return true;
- } else
- return false;
- }
-
- public EnemyTank PopEnemyTank() {
- if (leaveEnemyNum > 0) {
- this.leaveEnemyNum--;
- EnemyTank temp = enemeyTanks.get(enemeyTanks.size() - 1);
- enemeyTanks.remove(temp);
- return temp;
- } else
- return null;
- }
-
- public MyTank PopHero() {
- LeaveHeroLife--;
- MyTank temp = new MyTank(290, 370);
- temp.setWalls(wallContainer.getWallList());
- return temp;
- }
-
- public void setHeroTank(MyTank Tank) {
- this.hero = Tank;
- }
- }
复制代码
- package Tank.entity;
-
- import Tank.common.Wall;
-
- public class Steels extends Wall {
- public Steels(int x, int y) {
- super(x, y, 2, false, false, false);
- }
- }
-
复制代
- package Tank.entity;
-
- import java.util.ArrayList;
-
- import Tank.common.Common;
- import Tank.common.Wall;
-
- public class WallContainer は Common {
- private ArrayList を実装します。 data;
-
- public WallContainer() {
- data = new ArrayList();
- for (int i = 0; i this.addWall(10 + i * 20, 100 , WATER);
- if (i == 11) {
- i += 4;
- }
- }
-
- for (int i = 0; i this.addWall(10 + i) * 20, 160, WALLS);
- if (i == 12) {
- i += 4;
- }
- }
-
- for (int i = 0; i this.addWall (10 + i * 20, 220, STEELS);
- if (i == 11) {
- i += 4;
- }
- }
-
- for (int i = 0; i this.addWall(10 + i * 20, 280, GRASS);
- if (i == 12) {
- i += 4;
- }
- }
- }
-
- public void addWall(int x, int y, int kind) {
- switch (kind) {
- case WATER:
- data.add(new Water(x, y));
- Break;
- case WALLS:
- data.add(new Walls(x, y));
- Break ;
- ケース STEELS:
- data.add(new Steels(x, y));
- ブレーク;
- ケース GRASS:
- data.add(new Grass(x, y));
- ブレーク;
- }
- }
-
- public ArrayList getWallList() {
- ArrayList temp = data;
- return temp;
- }
-
- public boolean isEmpty() {
- return data.isEmpty();
- }
-
- public void RemoveDead() {
- for (int i = 0; i 壁温度 = data.get(i);
- if (!temp.isAlive())
- data.remove(temp);
- }
- }
- }
-
复制代
- package Tank.entity;
-
- import Tank.common.Wall;
-
- public class Walls extends Wall {
- public Walls(int x, int y) {
- super(x, y, 1, false, false, true);
- }
- }
-
复制發
- package Tank.entity;
-
- import Tank.common.Wall;
-
- public class Water extends Wall {
- public Water(int x, int y) {
- super(x, y, 0, false, true, false);
- }
- }
-
复制代
- パッケージ Tank.gui;
-
- import javax.swing.JFrame;
- import javax.swing.JMenu;
- import javax.swing.JMenuBar;
- import javax.swing.JMenuItem;
-
- public class TankFrame extends JFrame {
-
- /**
- *
- */
- private static Final longserialVersionUID = 1L;
- private TankPanel gamePanel;
-
- public TankFrame() {
- super("谷克大战————玄雨制作");
- これ。 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- // 追加游戏主面板
- gamePanel = new TankPanel();
- this.add(gamePanel);
- gamePanel.addMouseListener(gamePanel);
- this.addKeyListener(gamePanel);
-
- //追加菜单栏
- JMenuBar menuBar = new JMenuBar();
- // ///////////////////////////////
- JMenu menu1 = new JMenu("菜单");
- menuBar.add(menu1);
- JMenuItem itemNewGame = new JMenuItem("新游戏");
- menu1.add(itemNewGame);
- menu1.addSeparator();
- JMenuItem itemList = new JMenuItem ("排行トレンド");
- menu1.add(itemList);
- menu1.addSeparator();
- JMenuItem itemExit = new JMenuItem("退出");
- menu1.add(itemExit);
- // ///// /////////////////////////////
- JMenu menu2 = new JMenu("设置");
- JMenuItem itemSet = new JMenuItem("设置" ");
- menu2.add(itemSet);
- menuBar.add(menu2);
- // //////////////////////////// /////
- JMenu menu3 = new JMenu("帮助");
- menuBar.add(menu3);
- JMenuItem itemInfo = new JMenuItem("关について");
- menu3.add(itemInfo);
- JMenuItem itemHelp = new JMenuItem("帮助");
- menu3.add(itemHelp);
- this.setJMenuBar(menuBar);
-
- this.setResizable(false);
- this.pack();
- this.setVisible(true);
- }
-
- }
-
复制定
- package Tank.start;
-
- import Tank.gui.TankFrame;
-
- public class TankStart {
-
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO自動生成されたメソッド スタブ
- new TankFrame().setLocation(250, 150);
- }
-
- }
-
复制代
|