火柴人版王者-Java

前言

该项目是基于Java编写的火柴人版王者荣耀,代码来自b站up主https://space.bilibili.com/1485853314,代码中所需的图片资源在视频链接下,请自行获取:【【Java项目】不到2小时用Java做出王者荣耀_手把手教你开发游戏 王者_Java游戏开发_游戏项目_腾讯游戏_Java教程】 https://www.bilibili.com/video/BV1yX4y1L7E7/?p=3&share_source=copy_web&vd_source=4611ec45767280678018f593c547e388

com.sxt包


主类


package com.sxt;
import com.sxt.beast.Beast;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.ImageObserver;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;

public class GameFrame extends JFrame {
    int state = 0;
    private int windowWidth = 1400;
    private int windowHeight = 700;
    private Image offScreenImage = null;
    private Image attack = Toolkit.getDefaultToolkit().getImage("img/attack.jpg");
    private Image gameWin = Toolkit.getDefaultToolkit().getImage("img/gameWin.png");
    private Image gameLose = Toolkit.getDefaultToolkit().getImage("img/gameLose.png");
    Background background = new Background(this);
    Champion player;
    Champion champion = new ChampionHouyi(this, 700, 3800);
    MinionBlue mb = new MinionBlue(this);
    MinionRed mr = new MinionRed(this);
    Turret turret = new Turret(this);
    public Beast beast = new Beast(this);
    JButton attackButton;
    public ArrayList<GameObject> objList = new ArrayList();
    ArrayList<GameObject> redList = new ArrayList();
    ArrayList<GameObject> blueList = new ArrayList();
    public ArrayList<GameObject> removeList = new ArrayList();

    public GameFrame() {
    }

    public void launch() {
        this.setSize(this.windowWidth, this.windowHeight);
        this.setLocationRelativeTo((Component)null);
        this.setDefaultCloseOperation(3);
        this.setResizable(false);
        this.setTitle("尚学堂王者荣耀");
        this.setVisible(true);
        this.addKeyListener(new KeyMonitor());
        this.objList.add(this.background);
        this.objList.addAll(this.turret.turretList);
        this.objList.addAll(this.beast.beastList);
        this.blueList.add((GameObject)this.turret.turretList.get(0));
        this.redList.add((GameObject)this.turret.turretList.get(4));
        this.attackButton = new JButton();
        this.attackButton.setSize(130, 132);
        this.attackButton.setLocation(1150, 430);
        this.attackButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                GameFrame.this.player.attack(GameFrame.this.redList);
            }
        });
        this.add(this.attackButton);

        while(true) {
            if (this.state == 1) {
                this.turret.addTurret();
            }

            this.repaint();

            try {
                Thread.sleep(17L);
            } catch (Exception var2) {
                var2.printStackTrace();
            }
        }
    }

    public void paint(Graphics g) {
        if (this.offScreenImage == null) {
            this.offScreenImage = this.createImage(5984, 4452);
        }

        Graphics gImage = this.offScreenImage.getGraphics();
        int i;
        if (this.state == 0) {
            for(i = 0; i < this.champion.championList.size(); ++i) {
                Image classical = ((Champion)this.champion.championList.get(i)).classical;
                gImage.drawImage(classical, i * 160, 20, (ImageObserver)null);
                JButton championButton = new JButton();
                championButton.setSize(150, 150);
                championButton.setLocation(i * 150, 0);
                int finalI = i;
                championButton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        GameFrame.this.state = 1;
                        GameFrame.this.player = (Champion)GameFrame.this.champion.championList.get(finalI);
                        GameFrame.this.objList.add(GameFrame.this.player);
                        GameFrame.this.player.addButton();
                    }
                });
                this.add(championButton);
            }
        } else if (this.state == 1) {
            for(i = 0; i < this.objList.size(); ++i) {
                ((GameObject)this.objList.get(i)).paintSelf(gImage);
            }

            gImage.drawImage(this.attack, this.player.getX() + 500, this.player.getY() + 100, (ImageObserver)null);
            this.objList.removeAll(this.removeList);
        } else if (this.state == 2) {
            gImage.drawImage(this.gameWin, 0, 5, (ImageObserver)null);
        } else if (this.state == 3) {
            gImage.drawImage(this.gameLose, 0, 5, (ImageObserver)null);
        }

        if (this.state != 1) {
            g.drawImage(this.offScreenImage, 0, 0, (ImageObserver)null);
        } else {
            g.drawImage(this.offScreenImage, -this.player.getX() + 700, -this.player.getY() + 350, (ImageObserver)null);
        }

        this.requestFocus();
    }

    public static void main(String[] args) {
        GameFrame gameFrame = new GameFrame();
        gameFrame.launch();
    }

    private class KeyMonitor extends KeyAdapter {
        private KeyMonitor() {
        }

        public void keyPressed(KeyEvent e) {
            int key = e.getKeyCode();
            GameFrame.this.player.keyPressed(e);
        }

        public void keyReleased(KeyEvent e) {
            int key = e.getKeyCode();
            GameFrame.this.player.keyReleased(e);
        }
    }
}




GameObject 包

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt;

import com.sxt.beast.Beast;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.util.ArrayList;
import java.util.Iterator;

public abstract class GameObject {
    private int x;
    private int y;
    private Image img;
    public GameFrame gameFrame;
    private int spd;
    private int hp;
    private int currentHp;
    private GameObject target;
    private boolean hasTarget = false;
    private int dis;
    private int attackCoolDownTime;
    private boolean attackCoolDown = true;
    private boolean alive = true;
    boolean beControlled = false;

    public GameObject(GameFrame gameFrame) {
        this.gameFrame = gameFrame;
    }

    public GameObject(int x, int y, GameFrame gameFrame) {
        this.x = x;
        this.y = y;
        this.gameFrame = gameFrame;
    }

    public GameObject() {
    }

    public void addHp(Graphics g, int difX, int difY, int width, int height, Color color) {
        g.setColor(Color.black);
        g.drawRect(this.getX() - difX, this.getY() - difY, width, height);
        g.setColor(color);
        g.fillRect(this.getX() - difX, this.getY() - difY, width * this.getCurrentHp() / this.getHp(), height);
    }

    public double getDis(int x1, int y1, int x2, int y2) {
        return Math.sqrt(Math.pow((double)(x1 - x2), 2.0) + Math.pow((double)(y1 - y2), 2.0));
    }

    public boolean recIntersectsRec(Rectangle r1, Rectangle r2) {
        return r1.intersects(r2);
    }

    public boolean recIntersectsCir(Rectangle rec, int x, int y, int r) {
        return this.getDis(x, y, rec.x, rec.y) < (double)r || this.getDis(x, y, rec.x, rec.y + rec.height) < (double)r || this.getDis(x, y, rec.x + rec.width, rec.y) < (double)r || this.getDis(x, y, rec.x + rec.width, rec.y + rec.height) < (double)r;
    }

    public void attack(ArrayList<GameObject> gameObjList) {
        if (this.hasTarget) {
            if (!this.recIntersectsCir(this.target.getRec(), this.getX(), this.getY(), this.getDis())) {
                this.setHasTarget(false);
            } else if (!this.target.isAlive()) {
                this.setHasTarget(false);
            } else if (this.isAttackCoolDown() && this.isAlive()) {
                Bullet bullet = null;
                if (Turret.class.isAssignableFrom(this.getClass())) {
                    bullet = new Bullet(this.gameFrame, this, this.getTarget(), 500, 50);
                } else if (Minion.class.isAssignableFrom(this.getClass())) {
                    bullet = new Bullet(this.gameFrame, this, this.getTarget(), 50, 30);
                } else if (this instanceof Champion) {
                    bullet = new Bullet(this.gameFrame, this, this.getTarget(), 500, 50, "img/bullet.gif");
                }

                this.gameFrame.objList.add(bullet);
                (new AttackCD()).start();
            }
        } else {
            Iterator var3 = gameObjList.iterator();

            GameObject obj;
            while(var3.hasNext()) {
                obj = (GameObject)var3.next();
                if (this.recIntersectsCir(obj.getRec(), this.getX(), this.getY(), this.getDis())) {
                    this.setTarget(obj);
                    this.setHasTarget(true);
                    break;
                }
            }

            if (!this.hasTarget && gameObjList == this.gameFrame.blueList) {
                if (this.recIntersectsCir(this.gameFrame.player.getRec(), this.getX(), this.getY(), this.getDis())) {
                    this.setTarget(this.gameFrame.player);
                    this.setHasTarget(true);
                }
            } else {
                var3 = this.gameFrame.beast.beastList.iterator();

                while(var3.hasNext()) {
                    obj = (GameObject)var3.next();
                    if (this.recIntersectsCir(obj.getRec(), this.getX(), this.getY(), this.getDis())) {
                        this.setTarget(obj);
                        this.setHasTarget(true);
                        break;
                    }
                }
            }
        }

    }

    public abstract void paintSelf(Graphics var1);

    public abstract Rectangle getRec();

    public int getX() {
        return this.x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return this.y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public Image getImg() {
        return this.img;
    }

    public void setImg(String img) {
        this.img = Toolkit.getDefaultToolkit().getImage(img);
    }

    public int getSpd() {
        return this.spd;
    }

    public void setSpd(int spd) {
        this.spd = spd;
    }

    public int getHp() {
        return this.hp;
    }

    public void setHp(int hp) {
        this.hp = hp;
    }

    public int getCurrentHp() {
        return this.currentHp;
    }

    public void setCurrentHp(int currentHp) {
        if (currentHp < this.getHp() && Beast.class.isAssignableFrom(this.getClass())) {
            System.out.println("yes");
            this.setTarget(this.gameFrame.player);
            this.setHasTarget(true);
        }

        this.currentHp = currentHp;
    }

    public GameObject getTarget() {
        return this.target;
    }

    public void setTarget(GameObject target) {
        this.target = target;
    }

    public boolean isHasTarget() {
        return this.hasTarget;
    }

    public void setHasTarget(boolean hasTarget) {
        this.hasTarget = hasTarget;
    }

    public int getDis() {
        return this.dis;
    }

    public void setDis(int dis) {
        this.dis = dis;
    }

    public int getAttackCoolDownTime() {
        return this.attackCoolDownTime;
    }

    public void setAttackCoolDownTime(int attackCoolDownTime) {
        this.attackCoolDownTime = attackCoolDownTime;
    }

    public boolean isAttackCoolDown() {
        return this.attackCoolDown;
    }

    public void setAttackCoolDown(boolean attackCoolDown) {
        this.attackCoolDown = attackCoolDown;
    }

    public boolean isAlive() {
        return this.alive;
    }

    public void setAlive(boolean alive) {
        this.alive = alive;
    }

    class AttackCD extends Thread {
        AttackCD() {
        }

        public void run() {
            GameObject.this.setAttackCoolDown(false);

            try {
                Thread.sleep((long)GameObject.this.attackCoolDownTime);
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            GameObject.this.setAttackCoolDown(true);
            this.stop();
        }
    }
}




Minion类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.ImageObserver;
import java.util.ArrayList;
import java.util.Iterator;

public abstract class Minion extends GameObject {
    private boolean nextMinion = true;
    private boolean nextLine = true;
    private int minionCount = 0;
    private boolean ifFindTarget = false;

    public Minion(GameFrame gameFrame) {
        super(gameFrame);
        this.setHp(800);
        this.setCurrentHp(this.getHp());
        this.setDis(100);
        this.setAttackCoolDownTime(2000);
    }

    public abstract void move(ArrayList<GameObject> var1);

    public boolean hitMinion(int x, int y, ArrayList<GameObject> objList) {
        Rectangle r = new Rectangle(x - 16, y - 16, 45, 45);
        Iterator var6 = objList.iterator();

        GameObject obj;
        do {
            if (!var6.hasNext()) {
                return false;
            }

            obj = (GameObject)var6.next();
        } while(obj.getClass() != this.getClass() || obj == this || !r.intersects(obj.getRec()));

        return true;
    }

    public void findTarget(ArrayList<GameObject> objList) {
        Iterator var3 = objList.iterator();

        while(var3.hasNext()) {
            GameObject obj = (GameObject)var3.next();
            if (this.recIntersectsCir(obj.getRec(), this.getX(), this.getY(), 200)) {
                this.setTarget(obj);
                this.setIfFindTarget(true);
            }
        }

        if (objList == this.gameFrame.blueList && this.recIntersectsCir(this.gameFrame.player.getRec(), this.getX(), this.getY(), 200)) {
            this.setTarget(this.gameFrame.player);
            this.setIfFindTarget(true);
        }

    }

    public void moveToTarget() {
        double dis = this.getDis(this.getX(), this.getY(), this.getTarget().getX(), this.getTarget().getY());
        int xSpeed = (int)((double)(this.getSpd() * (this.getTarget().getX() - this.getX())) / dis);
        int ySpeed = (int)((double)(this.getSpd() * (this.getTarget().getY() - this.getY())) / dis);
        if (!this.hitMinion(this.getX() + xSpeed, this.getY(), this.gameFrame.objList)) {
            this.setX(this.getX() + xSpeed);
        }

        if (!this.hitMinion(this.getX(), this.getY() + ySpeed, this.gameFrame.objList)) {
            this.setY(this.getY() + ySpeed);
        }

    }

    public void createMinion(GameFrame gameFrame, ArrayList<GameObject> minionList) {
        if (this.nextLine) {
            if (this.nextMinion) {
                if (minionList == this.gameFrame.blueList) {
                    MinionBlue mb = new MinionBlue(gameFrame);
                    gameFrame.objList.add(mb);
                    minionList.add(mb);
                } else {
                    MinionRed mr = new MinionRed(gameFrame);
                    gameFrame.objList.add(mr);
                    minionList.add(mr);
                }

                ++this.minionCount;
                (new NextMinion()).start();
            }

            if (this.minionCount == 3) {
                this.minionCount = 0;
                (new NextLine()).start();
            }
        }

    }

    public void paintSelf(Graphics g) {
        if (this.getCurrentHp() <= 0) {
            this.setAlive(false);
            this.gameFrame.removeList.add(this);
            if (this instanceof MinionBlue) {
                this.gameFrame.blueList.remove(this);
            } else {
                this.gameFrame.redList.remove(this);
            }
        } else {
            if (this instanceof MinionBlue) {
                this.addHp(g, 17, 28, 45, 10, Color.GREEN);
            } else {
                this.addHp(g, 17, 28, 45, 10, Color.RED);
            }

            g.drawImage(this.getImg(), this.getX() - 16, this.getY() - 16, (ImageObserver)null);
            if (!this.beControlled) {
                if (this instanceof MinionBlue) {
                    this.move(this.gameFrame.redList);
                } else {
                    this.move(this.gameFrame.blueList);
                }
            }
        }

    }

    public Rectangle getRec() {
        return new Rectangle(this.getX() - 16, this.getY() - 16, 45, 45);
    }

    public boolean isIfFindTarget() {
        return this.ifFindTarget;
    }

    public void setIfFindTarget(boolean ifFindTarget) {
        this.ifFindTarget = ifFindTarget;
    }

    class NextLine extends Thread {
        NextLine() {
        }

        public void run() {
            Minion.this.nextLine = false;

            try {
                Thread.sleep(15000L);
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            Minion.this.nextLine = true;
            this.stop();
        }
    }

    class NextMinion extends Thread {
        NextMinion() {
        }

        public void run() {
            Minion.this.nextMinion = false;

            try {
                Thread.sleep(1500L);
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            Minion.this.nextMinion = true;
            this.stop();
        }
    }
}




MinionBlue类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt;

import java.util.ArrayList;

public class MinionBlue extends Minion {
    public MinionBlue(GameFrame gameFrame) {
        super(gameFrame);
        this.setImg("img/minion/blue.jpg");
        this.setX(1325);
        this.setY(3750);
    }

    public void move(ArrayList<GameObject> objList) {
        if (this.isIfFindTarget()) {
            if (!this.recIntersectsCir(this.getTarget().getRec(), this.getX(), this.getY(), 200)) {
                this.setIfFindTarget(false);
            } else {
                if (!this.isHasTarget()) {
                    this.moveToTarget();
                }

                this.attack(objList);
            }
        } else {
            this.findTarget(objList);
            if (this.getX() < 4425) {
                this.setSpd(25);
                if (!this.hitMinion(this.getX() + this.getSpd(), this.getY(), this.gameFrame.blueList)) {
                    this.setX(this.getX() + this.getSpd());
                }
            } else if (this.getX() < 5100 && this.getX() >= 4425) {
                this.setSpd(20);
                if (!this.hitMinion(this.getX() + this.getSpd(), this.getY(), this.gameFrame.blueList)) {
                    this.setX(this.getX() + this.getSpd());
                }

                if (!this.hitMinion(this.getX(), this.getY() - this.getSpd(), this.gameFrame.blueList)) {
                    this.setY(this.getY() - this.getSpd());
                }
            } else if (this.getX() >= 4900) {
                this.setSpd(18);
                if (!this.hitMinion(this.getX(), this.getY() - this.getSpd(), this.gameFrame.blueList)) {
                    this.setY(this.getY() - this.getSpd());
                }
            }
        }

    }
}




MinionRed类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt;

import java.util.ArrayList;

public class MinionRed extends Minion {
    public MinionRed(GameFrame gameFrame) {
        super(gameFrame);
        this.setImg("img/minion/red.jpg");
        this.setX(5050);
        this.setY(1125);
    }

    public void move(ArrayList<GameObject> objList) {
        if (this.isIfFindTarget()) {
            if (!this.recIntersectsCir(this.getTarget().getRec(), this.getX(), this.getY(), 200)) {
                this.setIfFindTarget(false);
            } else {
                if (!this.isHasTarget()) {
                    this.moveToTarget();
                }

                this.attack(objList);
            }
        } else {
            this.findTarget(objList);
            if (this.getY() < 3125) {
                this.setSpd(18);
                if (!this.hitMinion(this.getX(), this.getY() + this.getSpd(), this.gameFrame.redList)) {
                    this.setY(this.getY() + this.getSpd());
                }
            } else if (this.getY() < 3750 && this.getY() >= 3125) {
                this.setSpd(20);
                if (!this.hitMinion(this.getX(), this.getY() + this.getSpd(), this.gameFrame.redList)) {
                    this.setY(this.getY() + this.getSpd());
                }

                if (!this.hitMinion(this.getX() - this.getSpd(), this.getY(), this.gameFrame.redList)) {
                    this.setX(this.getX() - this.getSpd());
                }
            } else if (this.getY() >= 3750) {
                this.setSpd(25);
                if (!this.hitMinion(this.getX() - this.getSpd(), this.getY(), this.gameFrame.redList)) {
                    this.setX(this.getX() - this.getSpd());
                }
            }
        }

    }
}




Turret类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.ImageObserver;
import java.util.ArrayList;

public class Turret extends GameObject {
    ArrayList<Turret> turretList = new ArrayList();
    public Turret turretBlueOne;
    public Turret turretBlueTwo;
    public Turret turretBlueThree;
    public Turret turretBlueBase;
    public Turret turretRedOne;
    public Turret turretRedTwo;
    public Turret turretRedThree;
    public Turret turretRedBase;

    public Turret(GameFrame gameFrame) {
        super(gameFrame);
        this.setImg("img/turret.png");
        this.turretList.add(this.turretBlueOne = new TurretBlue(1860, 3790, gameFrame));
        this.turretList.add(this.turretBlueTwo = new TurretBlue(2650, 3820, gameFrame));
        this.turretList.add(this.turretBlueThree = new TurretBlue(3995, 3830, gameFrame));
        this.turretList.add(this.turretBlueBase = new TurretBlue(1130, 3650, gameFrame));
        this.turretList.add(this.turretRedOne = new TurretRed(5100, 3030, gameFrame));
        this.turretList.add(this.turretRedTwo = new TurretRed(5120, 2100, gameFrame));
        this.turretList.add(this.turretRedThree = new TurretRed(5060, 1570, gameFrame));
        this.turretList.add(this.turretRedBase = new TurretRed(4850, 1100, gameFrame));
    }

    public Turret(int x, int y, GameFrame gameFrame) {
        super(x, y, gameFrame);
        this.setImg("img/turret.png");
        this.setHp(6000);
        this.setCurrentHp(this.getHp());
        this.setAttackCoolDownTime(1000);
        this.setDis(300);
    }

    public void addTurret() {
        if (!this.gameFrame.turret.turretBlueOne.isAlive() && this.gameFrame.turret.turretBlueTwo.isAlive() && this.gameFrame.blueList.indexOf(this.gameFrame.turret.turretBlueTwo) == -1) {
            this.gameFrame.blueList.add(this.gameFrame.turret.turretBlueTwo);
        }

        if (!this.gameFrame.turret.turretBlueTwo.isAlive() && this.gameFrame.turret.turretBlueThree.isAlive() && this.gameFrame.blueList.indexOf(this.gameFrame.turret.turretBlueThree) == -1) {
            this.gameFrame.blueList.add(this.gameFrame.turret.turretBlueThree);
        }

        if (!this.gameFrame.turret.turretBlueThree.isAlive() && this.gameFrame.turret.turretBlueBase.isAlive() && this.gameFrame.blueList.indexOf(this.gameFrame.turret.turretBlueBase) == -1) {
            this.gameFrame.blueList.add(this.gameFrame.turret.turretBlueBase);
        }

        if (!this.gameFrame.turret.turretBlueBase.isAlive()) {
            this.gameFrame.state = 3;
        }

        if (!this.gameFrame.turret.turretRedOne.isAlive() && this.gameFrame.turret.turretRedTwo.isAlive() && this.gameFrame.redList.indexOf(this.gameFrame.turret.turretRedTwo) == -1) {
            this.gameFrame.redList.add(this.gameFrame.turret.turretRedTwo);
        }

        if (!this.gameFrame.turret.turretRedTwo.isAlive() && this.gameFrame.turret.turretRedThree.isAlive() && this.gameFrame.redList.indexOf(this.gameFrame.turret.turretRedThree) == -1) {
            this.gameFrame.redList.add(this.gameFrame.turret.turretRedThree);
        }

        if (!this.gameFrame.turret.turretRedThree.isAlive() && this.gameFrame.turret.turretRedBase.isAlive() && this.gameFrame.redList.indexOf(this.gameFrame.turret.turretRedBase) == -1) {
            this.gameFrame.redList.add(this.gameFrame.turret.turretRedBase);
        }

        if (!this.gameFrame.turret.turretRedBase.isAlive()) {
            this.gameFrame.state = 2;
        }

    }

    public void paintSelf(Graphics g) {
        if (this.getCurrentHp() <= 0) {
            this.setAlive(false);
            this.gameFrame.removeList.add(this);
            if (this instanceof TurretBlue) {
                this.gameFrame.blueList.remove(this);
            } else {
                this.gameFrame.redList.remove(this);
            }
        } else {
            if (this instanceof TurretBlue) {
                this.addHp(g, 50, 130, 100, 20, Color.GREEN);
                this.attack(this.gameFrame.redList);
            } else {
                this.addHp(g, 50, 130, 100, 20, Color.RED);
                this.attack(this.gameFrame.blueList);
            }

            g.drawImage(this.getImg(), this.getX() - 50, this.getY() - 100, (ImageObserver)null);
            g.drawOval(this.getX() - 300, this.getY() - 300, 600, 600);
        }

    }

    public Rectangle getRec() {
        return new Rectangle(this.getX() - 50, this.getY() - 100, 100, 180);
    }
}




TurretBlue类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt;

public class TurretBlue extends Turret {
    public TurretBlue(GameFrame gameFrame) {
        super(gameFrame);
    }

    public TurretBlue(int x, int y, GameFrame gameFrame) {
        super(x, y, gameFrame);
    }
}




TurretRed类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt;

public class TurretRed extends Turret {
    public TurretRed(GameFrame gameFrame) {
        super(gameFrame);
    }

    public TurretRed(int x, int y, GameFrame gameFrame) {
        super(x, y, gameFrame);
    }
}




ChampionHouyi类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt;

import com.sxt.beast.Beast;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Polygon;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JButton;

public class ChampionHouyi extends Champion {
    boolean ifAbilityThree = false;
    boolean ifAbilityTwo = false;
    MouseMonitor m;
    MouseMonitorTwo m2;
    Polygon p;
    double sin;
    double cos;
    GameObject abilityThreeTarget;
    boolean ifXOutside;
    boolean ifYOutside;
    int X_AbilityTwo;
    int Y_AbilityTwo;

    public ChampionHouyi(GameFrame gameFrame) {
        super(gameFrame);
        this.abilityOne = Toolkit.getDefaultToolkit().getImage("img/Houyi/abilityOne.jpg");
        this.abilityTwo = Toolkit.getDefaultToolkit().getImage("img/Houyi/abilityTwo.jpg");
        this.abilityThree = Toolkit.getDefaultToolkit().getImage("img/Houyi/abilityThree.jpg");
        this.classical = Toolkit.getDefaultToolkit().getImage("img/Houyi/Classical.jpg");
        this.coolDownTimeOne = 14000;
        this.coolDownTimeTwo = 10000;
        this.coolDownTimeThree = 28000;
    }

    public ChampionHouyi(GameFrame gameFrame, int i, int j) {
        super(gameFrame, i, j);
    }

    public void exit(MouseAdapter ma) {
        this.gameFrame.removeMouseListener(ma);
    }

    public void attack() {
        if (this.isAttackCoolDown()) {
            ArrayList<GameObject> targets = new ArrayList();
            Iterator var3 = this.gameFrame.redList.iterator();

            GameObject beastObj;
            while(var3.hasNext()) {
                beastObj = (GameObject)var3.next();
                if (this.recIntersectsCir(beastObj.getRec(), this.getX() - 250, this.getY() - 250, 500)) {
                    targets.add(beastObj);
                    if (targets.size() == 3) {
                        break;
                    }
                }
            }

            var3 = this.gameFrame.beast.beastList.iterator();

            while(var3.hasNext()) {
                beastObj = (GameObject)var3.next();
                if (this.recIntersectsCir(beastObj.getRec(), this.getX() - 250, this.getY() - 250, 500)) {
                    targets.add(beastObj);
                    if (targets.size() == 3) {
                        break;
                    }
                }
            }

            for(int i = 0; i < targets.size(); ++i) {
                Bullet bullet;
                if (i == 0) {
                    bullet = new Bullet(this.gameFrame, this, (GameObject)targets.get(i), 400, 50, "img/bullet.gif");
                } else {
                    bullet = new Bullet(this.gameFrame, this, (GameObject)targets.get(i), 200, 50, "img/bullet.gif");
                }

                this.gameFrame.objList.add(bullet);
            }

            (new AttackCD()).start();
        }

    }

    public void abilityTwoAttack() {
        Iterator var2 = this.gameFrame.objList.iterator();

        while(true) {
            GameObject redObj;
            do {
                if (!var2.hasNext()) {
                    return;
                }

                redObj = (GameObject)var2.next();
            } while(!(redObj instanceof MinionRed) && !Beast.class.isAssignableFrom(redObj.getClass()));

            if (this.recIntersectsCir(redObj.getRec(), this.X_AbilityTwo - 60, this.Y_AbilityTwo - 60, 120)) {
                redObj.setCurrentHp(redObj.getCurrentHp() - 400);
            }

            if (this.recIntersectsCir(redObj.getRec(), this.X_AbilityTwo - 30, this.Y_AbilityTwo - 30, 60)) {
                redObj.setCurrentHp(redObj.getCurrentHp() - 200);
            }
        }
    }

    public void abilityThreeMove() {
        this.p.translate((int)(50.0 * this.cos), -((int)(50.0 * this.sin)));
        Iterator var2 = this.gameFrame.objList.iterator();

        while(true) {
            GameObject redObj;
            do {
                if (!var2.hasNext()) {
                    int var3;
                    int[] var4;
                    int y;
                    int var6;
                    if (!this.ifXOutside) {
                        var3 = (var4 = this.p.xpoints).length;

                        for(var6 = 0; var6 < var3; ++var6) {
                            y = var4[var6];
                            if (y < 0 || y >= 5165) {
                                this.ifXOutside = true;
                                break;
                            }
                        }
                    }

                    if (!this.ifYOutside) {
                        var3 = (var4 = this.p.ypoints).length;

                        for(var6 = 0; var6 < var3; ++var6) {
                            y = var4[var6];
                            if (y < 0 || y >= 4085) {
                                this.ifYOutside = true;
                                break;
                            }
                        }
                    }

                    return;
                }

                redObj = (GameObject)var2.next();
            } while(!(redObj instanceof MinionRed) && !Beast.class.isAssignableFrom(redObj.getClass()));

            if (this.p.intersects(redObj.getRec())) {
                redObj.setCurrentHp(redObj.getCurrentHp() - 400);
                this.abilityThreeTarget = redObj;
                (new AbilityControlCD()).start();
                this.ifAbilityThree = false;
                (new AbilityThreeCD()).start();
            }
        }
    }

    public void abilityOne() {
        if (this.coolDownOne) {
            (new AbilityOneDuration()).start();
            (new AbilityOneCD()).start();
        }

    }

    public void abilityTwo() {
        if (this.coolDownTwo) {
            this.m2 = new MouseMonitorTwo();
            this.gameFrame.addMouseListener(this.m2);
            this.X_AbilityTwo = 0;
            this.Y_AbilityTwo = 0;
        }

    }

    public void abilityThree() {
        if (this.coolDownThree) {
            this.m = new MouseMonitor();
            this.p = new Polygon();
            this.gameFrame.addMouseListener(this.m);
            this.ifAbilityThree = true;
            this.ifXOutside = false;
            this.ifYOutside = false;
        }

    }

    public void abilityEffect(Graphics g) {
        if (this.ifAbilityTwo) {
            System.out.println("222");
            g.setColor(Color.RED);
            g.fillOval(this.X_AbilityTwo - 60, this.Y_AbilityTwo - 60, 120, 120);
            g.setColor(Color.BLACK);
            g.fillOval(this.X_AbilityTwo - 30, this.Y_AbilityTwo - 30, 60, 60);
            this.abilityTwoAttack();
            this.X_AbilityTwo = 0;
            this.Y_AbilityTwo = 0;
            this.ifAbilityTwo = false;
            (new AbilityTwoCD()).start();
        }

        if (this.ifAbilityThree) {
            System.out.println("333");
            g.setColor(Color.RED);
            g.fillPolygon(this.p);
            this.abilityThreeMove();
            if (this.ifXOutside || this.ifYOutside) {
                this.ifAbilityThree = false;
                this.p = new Polygon();
                (new AbilityThreeCD()).start();
            }
        }

    }

    class AbilityControlCD extends Thread {
        AbilityControlCD() {
        }

        public void run() {
            ChampionHouyi.this.abilityThreeTarget.beControlled = true;

            try {
                Thread.sleep(20000L);
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            ChampionHouyi.this.abilityThreeTarget.beControlled = false;
            this.stop();
        }
    }

    class AbilityOneCD extends Thread {
        AbilityOneCD() {
        }

        public void run() {
            ChampionHouyi.this.coolDownOne = false;

            try {
                ChampionHouyi var10000;
                int one;
                for(one = ChampionHouyi.this.coolDownTimeOne; ChampionHouyi.this.coolDownTimeOne > 0; var10000.coolDownTimeOne -= 1000) {
                    Thread.sleep(1000L);
                    System.out.println("技能一冷却时间: " + ChampionHouyi.this.coolDownTimeOne / 1000);
                    var10000 = ChampionHouyi.this;
                }

                ChampionHouyi.this.coolDownTimeOne = one;
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            ChampionHouyi.this.coolDownOne = true;
            this.stop();
        }
    }

    class AbilityOneDuration extends Thread {
        AbilityOneDuration() {
        }

        public void run() {
            JButton substitute = ChampionHouyi.this.gameFrame.attackButton;
            ChampionHouyi.this.gameFrame.remove(ChampionHouyi.this.gameFrame.attackButton);
            JButton button = new JButton();
            button.setSize(130, 132);
            button.setLocation(1150, 430);
            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    ChampionHouyi.this.attack();
                }
            });
            ChampionHouyi.this.gameFrame.add(button);

            try {
                Thread.sleep(5000L);
            } catch (Exception var4) {
                var4.printStackTrace();
            }

            ChampionHouyi.this.gameFrame.remove(button);
            ChampionHouyi.this.gameFrame.add(substitute);
            this.stop();
        }
    }

    class AbilityThreeCD extends Thread {
        AbilityThreeCD() {
        }

        public void run() {
            ChampionHouyi.this.coolDownThree = false;

            try {
                for(int three = ChampionHouyi.this.coolDownTimeThree; three > 0; three -= 1000) {
                    Thread.sleep(1000L);
                    System.out.println("三技能冷却时间: " + three / 1000);
                }
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            ChampionHouyi.this.coolDownThree = true;
            this.stop();
        }
    }

    class AbilityTwoCD extends Thread {
        AbilityTwoCD() {
        }

        public void run() {
            ChampionHouyi.this.coolDownTwo = false;

            try {
                ChampionHouyi var10000;
                int two;
                for(two = ChampionHouyi.this.coolDownTimeTwo; ChampionHouyi.this.coolDownTimeTwo > 0; var10000.coolDownTimeTwo -= 1000) {
                    Thread.sleep(1000L);
                    System.out.println("技能二冷却时间: " + ChampionHouyi.this.coolDownTimeTwo / 1000);
                    var10000 = ChampionHouyi.this;
                }

                ChampionHouyi.this.coolDownTimeTwo = two;
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            ChampionHouyi.this.coolDownTwo = true;
            this.stop();
        }
    }

    class AttackCD extends Thread {
        AttackCD() {
        }

        public void run() {
            ChampionHouyi.this.setAttackCoolDown(false);

            try {
                Thread.sleep((long)ChampionHouyi.this.getAttackCoolDownTime());
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            ChampionHouyi.this.setAttackCoolDown(true);
            this.stop();
        }
    }

    private class MouseMonitor extends MouseAdapter {
        private MouseMonitor() {
        }

        public void mousePressed(MouseEvent e) {
            int mouseX = e.getX();
            int mouseY = e.getY();
            int playerX = 700;
            int playerY = 350;
            double dis = ChampionHouyi.this.getDis(mouseX, mouseY, playerX, playerY);
            ChampionHouyi.this.cos = (double)(mouseX - playerX) / dis;
            ChampionHouyi.this.sin = (double)(-(mouseY - playerY)) / dis;
            int difX = (int)(60.0 * ChampionHouyi.this.sin);
            int difY = (int)(60.0 * ChampionHouyi.this.cos);
            ChampionHouyi.this.p.addPoint(ChampionHouyi.this.getX() - difX, ChampionHouyi.this.getY() - difY);
            ChampionHouyi.this.p.addPoint(ChampionHouyi.this.getX() + difX, ChampionHouyi.this.getY() + difY);
            ChampionHouyi.this.p.addPoint(ChampionHouyi.this.getX() + difX + (int)(20.0 * ChampionHouyi.this.cos), ChampionHouyi.this.getY() + difY - (int)(20.0 * ChampionHouyi.this.sin));
            ChampionHouyi.this.p.addPoint(ChampionHouyi.this.getX() - difX + (int)(20.0 * ChampionHouyi.this.cos), ChampionHouyi.this.getY() - difY - (int)(20.0 * ChampionHouyi.this.sin));
            ChampionHouyi.this.ifAbilityThree = true;
            ChampionHouyi.this.exit(this);
        }
    }

    private class MouseMonitorTwo extends MouseAdapter {
        private MouseMonitorTwo() {
        }

        public void mousePressed(MouseEvent e) {
            System.out.println("pressed");
            int mouseX = e.getX();
            int mouseY = e.getY();
            int playerX = 700;
            int playerY = 350;
            double dis = ChampionHouyi.this.getDis(mouseX, mouseY, playerX, playerY);
            if (dis < 250.0) {
                ChampionHouyi.this.X_AbilityTwo = e.getX() - playerX + ChampionHouyi.this.getX();
                ChampionHouyi.this.Y_AbilityTwo = e.getY() - playerY + ChampionHouyi.this.getY();
            }

            ChampionHouyi.this.ifAbilityTwo = true;
            ChampionHouyi.this.exit(this);
        }
    }
}




ChampionDaji类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt;

import com.sxt.beast.Beast;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Polygon;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;

public class ChampionDaji extends Champion {
    boolean ifAbilityOne = false;
    boolean ifAbilityTwo = false;
    MouseMonitor m;
    Polygon p;
    double sin;
    double cos;
    ArrayList<GameObject> attacked;
    int step = 0;
    GameObject abilityTwoTarget;
    Bullet abilityTwoBullet;
    Bullet[] bulletList = new Bullet[]{new Bullet(), new Bullet(), new Bullet(), new Bullet(), new Bullet()};

    public ChampionDaji(GameFrame gameFrame) {
        super(gameFrame);
        this.abilityOne = Toolkit.getDefaultToolkit().getImage("img/Daji/abilityOne.jpg");
        this.abilityTwo = Toolkit.getDefaultToolkit().getImage("img/Daji/abilityTwo.jpg");
        this.abilityThree = Toolkit.getDefaultToolkit().getImage("img/Daji/abilityThree.jpg");
        this.classical = Toolkit.getDefaultToolkit().getImage("img/Daji/Classical.jpg");
        this.coolDownTimeOne = 6000;
        this.coolDownTimeTwo = 8000;
        this.coolDownTimeThree = 8000;
    }

    public void exit() {
        this.gameFrame.removeMouseListener(this.m);
    }

    public void abilityOneMove() {
        this.p.translate((int)(50.0 * this.cos), -((int)(50.0 * this.sin)));
        Iterator var2 = this.gameFrame.objList.iterator();

        while(true) {
            while(var2.hasNext()) {
                GameObject redObj = (GameObject)var2.next();
                if (redObj instanceof MinionRed && this.p.intersects(redObj.getRec()) && this.attacked.indexOf(redObj) == -1) {
                    redObj.setCurrentHp(redObj.getCurrentHp() - 400);
                    this.attacked.add(redObj);
                } else if (Beast.class.isAssignableFrom(redObj.getClass()) && this.p.intersects(redObj.getRec()) && this.attacked.indexOf(redObj) == -1) {
                    redObj.setCurrentHp(redObj.getCurrentHp() - 400);
                    this.attacked.add(redObj);
                }
            }

            return;
        }
    }

    public void abilityOne() {
        if (this.coolDownOne) {
            this.m = new MouseMonitor();
            this.p = new Polygon();
            this.gameFrame.addMouseListener(this.m);
            this.attacked = new ArrayList();
        }

    }

    public void abilityTwo() {
        if (this.coolDownTwo) {
            boolean find = false;
            Iterator var3 = this.gameFrame.objList.iterator();

            label27:
            while(true) {
                GameObject redObj;
                do {
                    if (!var3.hasNext()) {
                        break label27;
                    }

                    redObj = (GameObject)var3.next();
                } while(!(redObj instanceof MinionRed) && !Beast.class.isAssignableFrom(redObj.getClass()));

                if (this.recIntersectsCir(redObj.getRec(), this.getX(), this.getY(), 250) && redObj.isAlive()) {
                    this.abilityTwoBullet = new Bullet(this.gameFrame, this, redObj, 250, 60, "img/Daji/abilityTwoBullet.png");
                    this.gameFrame.objList.add(this.abilityTwoBullet);
                    this.abilityTwoTarget = redObj;
                    this.ifAbilityTwo = true;
                    find = true;
                    break;
                }
            }

            if (find) {
                (new AbilityTwoCD()).start();
                find = false;
            }
        }

    }

    public void abilityThree() {
        if (this.coolDownThree) {
            ArrayList<GameObject> targetList = new ArrayList();

            for(int i = 0; i < this.gameFrame.objList.size(); ++i) {
                GameObject target = (GameObject)this.gameFrame.objList.get(i);
                if ((target instanceof MinionRed || Beast.class.isAssignableFrom(target.getClass())) && this.recIntersectsCir(target.getRec(), this.getX(), this.getY(), 250) && target.isAlive()) {
                    targetList.add(target);
                }
            }

            if (targetList.size() != 0) {
                Random random = new Random();

                for(int count = 0; count < 5; ++count) {
                    int r = random.nextInt(targetList.size());
                    if (!((GameObject)targetList.get(r)).isAlive()) {
                        GameObject substitute = (GameObject)targetList.get(r);
                        substitute.setAlive(true);
                        this.bulletList[count] = new Bullet(this.gameFrame, this, substitute, 250, 60, "img/Daji/abilityTwoBullet.png");
                    } else {
                        this.bulletList[count] = new Bullet(this.gameFrame, this, (GameObject)targetList.get(r), 250, 60, "img/Daji/abilityTwoBullet.png");
                    }
                }

                (new AbilityThreeBulletCD()).start();
                (new AbilityThreeCD()).start();
            }
        }

    }

    public void abilityEffect(Graphics g) {
        if (this.ifAbilityOne) {
            g.setColor(Color.RED);
            g.fillPolygon(this.p);
            this.abilityOneMove();
            ++this.step;
            if (this.step == 10) {
                this.step = 0;
                this.ifAbilityOne = false;
            }
        }

        if (this.ifAbilityTwo) {
            System.out.println(this.abilityTwoTarget.beControlled);
            if (this.abilityTwoBullet.getRec().intersects(this.abilityTwoTarget.getRec())) {
                (new AbilityControllCD()).start();
                this.ifAbilityTwo = false;
            }
        }

    }

    class AbilityControllCD extends Thread {
        AbilityControllCD() {
        }

        public void run() {
            ChampionDaji.this.abilityTwoTarget.beControlled = true;

            try {
                Thread.sleep(20000L);
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            ChampionDaji.this.abilityTwoTarget.beControlled = false;
            this.stop();
        }
    }

    class AbilityOneCD extends Thread {
        AbilityOneCD() {
        }

        public void run() {
            ChampionDaji.this.coolDownOne = false;

            try {
                for(int one = ChampionDaji.this.coolDownTimeOne; one > 0; one -= 1000) {
                    Thread.sleep(1000L);
                    System.out.println("一技能冷却时间: " + one / 1000);
                }
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            ChampionDaji.this.coolDownOne = true;
            this.stop();
        }
    }

    class AbilityThreeBulletCD extends Thread {
        AbilityThreeBulletCD() {
        }

        public void run() {
            try {
                ChampionDaji.this.gameFrame.objList.add(ChampionDaji.this.bulletList[0]);
                Thread.sleep(200L);
                ChampionDaji.this.gameFrame.objList.add(ChampionDaji.this.bulletList[1]);
                Thread.sleep(200L);
                ChampionDaji.this.gameFrame.objList.add(ChampionDaji.this.bulletList[2]);
                Thread.sleep(200L);
                ChampionDaji.this.gameFrame.objList.add(ChampionDaji.this.bulletList[3]);
                Thread.sleep(200L);
                ChampionDaji.this.gameFrame.objList.add(ChampionDaji.this.bulletList[4]);
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            this.stop();
        }
    }

    class AbilityThreeCD extends Thread {
        AbilityThreeCD() {
        }

        public void run() {
            ChampionDaji.this.coolDownThree = false;

            try {
                for(int three = ChampionDaji.this.coolDownTimeThree; three > 0; three -= 1000) {
                    Thread.sleep(1000L);
                    System.out.println("三技能冷却时间: " + three / 1000);
                }
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            ChampionDaji.this.coolDownThree = true;
            this.stop();
        }
    }

    class AbilityTwoCD extends Thread {
        AbilityTwoCD() {
        }

        public void run() {
            ChampionDaji.this.coolDownTwo = false;

            try {
                for(int two = ChampionDaji.this.coolDownTimeTwo; two > 0; two -= 1000) {
                    Thread.sleep(1000L);
                    System.out.println("二技能冷却时间: " + two / 1000);
                }
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            ChampionDaji.this.coolDownTwo = true;
            this.stop();
        }
    }

    private class MouseMonitor extends MouseAdapter {
        private MouseMonitor() {
        }

        public void mousePressed(MouseEvent e) {
            int mouseX = e.getX();
            int mouseY = e.getY();
            int playerX = 700;
            int playerY = 350;
            double dis = ChampionDaji.this.getDis(mouseX, mouseY, playerX, playerY);
            ChampionDaji.this.cos = (double)(mouseX - playerX) / dis;
            ChampionDaji.this.sin = (double)(-(mouseY - playerY)) / dis;
            int difX = (int)(60.0 * ChampionDaji.this.sin);
            int difY = (int)(60.0 * ChampionDaji.this.cos);
            ChampionDaji.this.p.addPoint(ChampionDaji.this.getX() - difX, ChampionDaji.this.getY() - difY);
            ChampionDaji.this.p.addPoint(ChampionDaji.this.getX() + difX, ChampionDaji.this.getY() + difY);
            ChampionDaji.this.p.addPoint(ChampionDaji.this.getX() + difX + (int)(20.0 * ChampionDaji.this.cos), ChampionDaji.this.getY() + difY - (int)(20.0 * ChampionDaji.this.sin));
            ChampionDaji.this.p.addPoint(ChampionDaji.this.getX() - difX + (int)(20.0 * ChampionDaji.this.cos), ChampionDaji.this.getY() - difY - (int)(20.0 * ChampionDaji.this.sin));
            ChampionDaji.this.exit();
            (ChampionDaji.this.new AbilityOneCD()).start();
            ChampionDaji.this.ifAbilityOne = true;
        }
    }
}




Champion类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.image.ImageObserver;
import java.util.ArrayList;
import javax.swing.JButton;

public abstract class Champion extends GameObject {
    public boolean up;
    public boolean down;
    public boolean left;
    public boolean right;
    static String[] imgs = new String[8];
    int moveCount = 1;
    Image abilityOne;
    Image abilityTwo;
    Image abilityThree;
    Image classical;
    int coolDownTimeOne;
    int coolDownTimeTwo;
    int coolDownTimeThree;
    boolean coolDownOne = true;
    boolean coolDownTwo = true;
    boolean coolDownThree = true;
    ArrayList<Champion> championList = new ArrayList();

    static {
        for(int i = 1; i < 8; ++i) {
            imgs[i] = "img/move/" + i + ".png";
        }

    }

    public Champion(GameFrame gameFrame, int x, int y) {
        super(gameFrame);
        this.setImg("img/stand.png");
        this.setX(x);
        this.setY(y);
        this.setSpd(75);
        this.setHp(24000);
        this.setDis(250);
        this.setAttackCoolDownTime(100);
        this.setCurrentHp(this.getHp());
        this.championList.add(new ChampionDaji(gameFrame));
        this.championList.add(new ChampionHouyi(gameFrame));
    }

    public Champion(GameFrame gameFrame) {
        super(gameFrame);
        this.setImg("img/stand.png");
        this.setX(700);
        this.setY(3800);
        this.setSpd(75);
        this.setHp(24000);
        this.setDis(250);
        this.setAttackCoolDownTime(100);
        this.setCurrentHp(this.getHp());
    }

    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == 68) {
            this.right = true;
        }

        if (key == 65) {
            this.left = true;
        }

        if (key == 87) {
            this.up = true;
        }

        if (key == 83) {
            this.down = true;
        }

    }

    public void keyReleased(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == 68) {
            this.right = false;
        }

        if (key == 65) {
            this.left = false;
        }

        if (key == 87) {
            this.up = false;
        }

        if (key == 83) {
            this.down = false;
        }

    }

    public void move() {
        if (this.up) {
            this.setY(this.getY() - this.getSpd());
        }

        if (this.down) {
            this.setY(this.getY() + this.getSpd());
        }

        if (this.left) {
            this.setX(this.getX() - this.getSpd());
        }

        if (this.right) {
            this.setX(this.getX() + this.getSpd());
        }

        if (!this.up && !this.down && !this.left && !this.right) {
            this.setImg("img/stand.png");
        } else {
            this.setImg(imgs[this.moveCount]);
            ++this.moveCount;
            if (this.moveCount == 8) {
                this.moveCount = 1;
            }
        }

    }

    public void addButton() {
        JButton button1 = new JButton();
        button1.setSize(100, 100);
        button1.setLocation(1056, 513);
        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Champion.this.abilityOne();
            }
        });
        JButton button2 = new JButton();
        button2.setSize(100, 100);
        button2.setLocation(1090, 370);
        button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Champion.this.abilityTwo();
            }
        });
        JButton button3 = new JButton();
        button3.setSize(100, 100);
        button3.setLocation(1220, 300);
        button3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Champion.this.abilityThree();
            }
        });
        this.gameFrame.add(button1);
        this.gameFrame.add(button2);
        this.gameFrame.add(button3);
    }

    public abstract void abilityOne();

    public abstract void abilityTwo();

    public abstract void abilityThree();

    public abstract void abilityEffect(Graphics var1);

    public void paintSelf(Graphics g) {
        if (this.getCurrentHp() <= 0) {
            this.setAlive(false);
            this.gameFrame.removeList.add(this);
        } else {
            this.addHp(g, 30, 80, 80, 20, Color.GREEN);
            g.drawImage(this.abilityOne, this.getX() + 360, this.getY() + 180, (ImageObserver)null);
            g.drawImage(this.abilityTwo, this.getX() + 400, this.getY() + 40, (ImageObserver)null);
            g.drawImage(this.abilityThree, this.getX() + 520, this.getY() - 30, (ImageObserver)null);
            g.drawImage(this.getImg(), this.getX() - 33, this.getY() - 50, (ImageObserver)null);
            this.move();
            this.abilityEffect(g);
        }

    }

    public Rectangle getRec() {
        return new Rectangle(this.getX() - 30, this.getY() - 60, 60, 120);
    }
}




Bullet类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt;

import com.sxt.beast.Beast;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.ImageObserver;

public class Bullet extends GameObject {
    GameObject attacker;
    GameObject target;
    int ad;

    public Bullet(GameFrame gameFrame, GameObject attacker, GameObject target, int ad, int spd) {
        super(attacker.getX(), attacker.getY(), gameFrame);
        this.attacker = attacker;
        this.target = target;
        this.setAd(ad);
        this.setSpd(spd);
    }

    public Bullet(GameFrame gameFrame, GameObject attacker, GameObject target, int ad, int spd, String img) {
        super(attacker.getX(), attacker.getY(), gameFrame);
        this.attacker = attacker;
        this.target = target;
        this.setImg(img);
        this.setAd(ad);
        this.setSpd(spd);
    }

    public Bullet() {
    }

    public void move() {
        if (this.recIntersectsRec(this.getRec(), this.target.getRec())) {
            if (Beast.class.isAssignableFrom(this.target.getClass())) {
                this.target.setTarget(this.gameFrame.player);
                this.target.setHasTarget(true);
            }

            this.target.setCurrentHp(this.target.getCurrentHp() - this.getAd());
            this.gameFrame.removeList.add(this);
        }

        double dis = this.getDis(this.getX(), this.getY(), this.target.getX(), this.target.getY());
        int xSpeed = (int)((double)(this.getSpd() * (this.target.getX() - this.getX())) / dis);
        int ySpeed = (int)((double)(this.getSpd() * (this.target.getY() - this.getY())) / dis);
        this.setX(this.getX() + xSpeed);
        this.setY(this.getY() + ySpeed);
    }

    public void paintSelf(Graphics g) {
        g.drawImage(this.getImg(), this.getX() - 16, this.getY() - 16, (ImageObserver)null);
        if (this.getImg() == null) {
            g.setColor(Color.BLACK);
            g.fillOval(this.getX() - 5, this.getY() - 5, 10, 10);
            g.drawRect(this.getX() - 5, this.getY() - 5, 10, 10);
        }

        this.move();
    }

    public Rectangle getRec() {
        return new Rectangle(this.getX() - 5, this.getY() - 5, 10, 10);
    }

    public int getAd() {
        return this.ad;
    }

    public void setAd(int ad) {
        this.ad = ad;
    }
}




Background类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.image.ImageObserver;

public class Background extends GameObject {
    Image bg = Toolkit.getDefaultToolkit().getImage("img/Map.jpg");

    public Background(GameFrame gameFrame) {
        super(gameFrame);
    }

    public void paintSelf(Graphics g) {
        g.drawImage(this.bg, 0, 0, (ImageObserver)null);
    }

    public Rectangle getRec() {
        return null;
    }
}




野怪包

beast包




Bear类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt.beast;

import com.sxt.GameFrame;

public class Bear extends Beast {
    public Bear(int x, int y, GameFrame gameFrame) {
        super(x, y, gameFrame);
        this.setImg("img/beast/bear.jpg");
        this.width = 85;
        this.height = 112;
        this.setDis(65);
    }
}




Beast类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt.beast;

import com.sxt.Bullet;
import com.sxt.GameFrame;
import com.sxt.GameObject;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.ImageObserver;
import java.util.ArrayList;

public class Beast extends GameObject {
    public ArrayList<Beast> beastList = new ArrayList();
    int width;
    int height;
    int initialX;
    int initialY;
    public boolean isAggressive = false;
    Beast beast = null;

    public Beast(GameFrame gameFrame) {
        super(gameFrame);
        this.beastList.add(new RedBuff(3045, 3170, gameFrame));
        this.beastList.add(new Bear(2800, 2855, gameFrame));
        this.beastList.add(new Bird(3570, 3380, gameFrame));
        this.beastList.add(new Xiyi(4585, 2365, gameFrame));
        this.beastList.add(new BlueBuff(4025, 2295, gameFrame));
        this.beastList.add(new Wolf(4235, 1945, gameFrame));
    }

    public Beast(int x, int y, GameFrame gameFrame) {
        super(x, y, gameFrame);
        this.setHp(1000);
        this.setCurrentHp(this.getHp());
        this.setSpd(10);
        this.setAttackCoolDownTime(2000);
        this.initialX = this.getX();
        this.initialY = this.getY();
        this.beast = this;
    }

    public void moveToTarget() {
        double dis = this.getDis(this.getX(), this.getY(), this.getTarget().getX(), this.getTarget().getY());
        if (dis > 500.0) {
            this.isAggressive = false;
            this.setHasTarget(false);
        } else {
            int xSpeed = (int)((double)(this.getSpd() * (this.getTarget().getX() - this.getX())) / dis);
            int ySpeed = (int)((double)(this.getSpd() * (this.getTarget().getY() - this.getY())) / dis);
            this.setX(this.getX() + xSpeed);
            this.setY(this.getY() + ySpeed);
        }

    }

    public void moveToInitialLocation() {
        double dis = this.getDis(this.getX(), this.getY(), this.initialX, this.initialY);
        if (dis < (double)this.getSpd()) {
            this.setX(this.initialX);
            this.setY(this.initialY);
            this.isAggressive = true;
        } else {
            int xSpeed = (int)((double)(this.getSpd() * (this.initialX - this.getX())) / dis);
            int ySpeed = (int)((double)(this.getSpd() * (this.initialY - this.getY())) / dis);
            this.setX(this.getX() + xSpeed);
            this.setY(this.getY() + ySpeed);
        }

    }

    public void move() {
        if (this.isHasTarget() && this.isAggressive) {
            if (!this.recIntersectsCir(this.getTarget().getRec(), this.getX(), this.getY(), this.getDis())) {
                this.moveToTarget();
            } else if (this.isAttackCoolDown() && this.isAlive()) {
                Bullet bullet = new Bullet(this.gameFrame, this, this.getTarget(), 500, 50, "img/bullet.gif");
                this.gameFrame.objList.add(bullet);
                (new AttackCD()).start();
            }
        } else {
            this.moveToInitialLocation();
            if (this.getCurrentHp() < this.getHp()) {
                this.setCurrentHp(this.getCurrentHp() + 100);
            }
        }

    }

    public void paintSelf(Graphics g) {
        if (this.getCurrentHp() <= 0) {
            System.out.println("beast die");
            this.setAlive(false);
            this.gameFrame.removeList.add(this);
            this.gameFrame.beast.beastList.remove(this);
            (new ReviveCD()).start();
        } else {
            this.addHp(g, this.width / 2, 80, this.width, 20, Color.GREEN);
            g.drawImage(this.getImg(), this.getX() - this.width / 2, this.getY() - this.height / 2, (ImageObserver)null);
            g.setColor(Color.RED);
            g.fillOval(this.getX(), this.getY(), 10, 10);
            g.drawOval(this.getX() - this.getDis(), this.getY() - this.getDis(), 2 * this.getDis(), 2 * this.getDis());
            this.move();
        }

    }

    public Rectangle getRec() {
        return new Rectangle(this.getX() - this.width / 2, this.getY() - this.height / 2, this.width, this.height);
    }

    class AttackCD extends Thread {
        AttackCD() {
        }

        public void run() {
            Beast.this.setAttackCoolDown(false);

            try {
                Thread.sleep((long)Beast.this.getAttackCoolDownTime());
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            Beast.this.setAttackCoolDown(true);
            this.stop();
        }
    }

    class ReviveCD extends Thread {
        ReviveCD() {
        }

        public void run() {
            try {
                Thread.sleep(5000L);
            } catch (Exception var2) {
                var2.printStackTrace();
            }

            Object reviveBeast;
            if (Beast.this.beast instanceof RedBuff) {
                reviveBeast = new RedBuff(3045, 3170, Beast.this.gameFrame);
            } else if (Beast.this.beast instanceof Bear) {
                reviveBeast = new Bear(2800, 2855, Beast.this.gameFrame);
            } else if (Beast.this.beast instanceof Bird) {
                reviveBeast = new Bird(3570, 3380, Beast.this.gameFrame);
            } else if (Beast.this.beast instanceof Xiyi) {
                reviveBeast = new Xiyi(4585, 2365, Beast.this.gameFrame);
            } else if (Beast.this.beast instanceof BlueBuff) {
                reviveBeast = new BlueBuff(4025, 2295, Beast.this.gameFrame);
            } else {
                reviveBeast = new Wolf(4235, 1945, Beast.this.gameFrame);
            }

            Beast.this.gameFrame.objList.add((GameObject) reviveBeast);
            Beast.this.gameFrame.beast.beastList.add((Beast) reviveBeast);
        }
    }
}




Bird类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt.beast;

import com.sxt.GameFrame;

public class Bird extends Beast {
    public Bird(int x, int y, GameFrame gameFrame) {
        super(x, y, gameFrame);
        this.setImg("img/beast/红隼.jpg");
        this.width = 122;
        this.height = 98;
        this.setDis(125);
    }
}




BlueBuff类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt.beast;

import com.sxt.GameFrame;

public class BlueBuff extends Beast {
    public BlueBuff(int x, int y, GameFrame gameFrame) {
        super(x, y, gameFrame);
        this.setImg("img/beast/blueBuff.jpg");
        this.width = 142;
        this.height = 176;
        this.setDis(70);
    }
}




RedBuff类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt.beast;

import com.sxt.GameFrame;

public class RedBuff extends Beast {
    public RedBuff(int x, int y, GameFrame gameFrame) {
        super(x, y, gameFrame);
        this.setImg("img/beast/redBuff.jpg");
        this.width = 103;
        this.height = 150;
        this.setDis(70);
    }
}




Wolf类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt.beast;

import com.sxt.GameFrame;

public class Wolf extends Beast {
    public Wolf(int x, int y, GameFrame gameFrame) {
        super(x, y, gameFrame);
        this.setImg("img/beast/wolf.jpg");
        this.width = 145;
        this.height = 140;
        this.setDis(65);
    }
}




Xiyi类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.sxt.beast;

import com.sxt.GameFrame;

public class Xiyi extends Beast {
    public Xiyi(int x, int y, GameFrame gameFrame) {
        super(x, y, gameFrame);
        this.setImg("img/beast/蜥蜴.jpg");
        this.width = 111;
        this.height = 65;
        this.setDis(125);
    }
}




End

你可能感兴趣的:(java,开发语言)