Einfache Produktion im Java-King of Glory Game

1. Vorbereitungsarbeiten

Erstellen Sie zunächst ein neues Java-Projekt mit dem Namen „Honor of Kings “, erstellen Sie unter src zwei Pakete mit den Namen „com.sxt“ und „com.stx.beast“ und erstellen Sie die erforderlichen Klassen in den entsprechenden Paketen.

Erstellen Sie einen Ordner mit dem Namen „img“, um die erforderlichen Bildmaterialien zu speichern.

2. Codepräsentation

Paket com.sxt;
 
import javax.swing.*;
java.awt.* importieren;
 
öffentliche Klasse Hintergrund erweitert GameObject {     public Background(GameFrame gameFrame) {         super(gameFrame);         // TODO Automatisch generierter Konstruktor-Stub     }     Image bg = Toolkit.getDefaultToolkit().getImage("img/Map.jpg");     public void paintSelf(Graphics g){         g.drawImage(bg,0,0,null);     }     @Override     public Rechteck getRec() {         // TODO Automatisch generierter Methoden-Stub         return null;     } }
 




 

 


 

 





2.

Paket com.sxt;
 
java.awt.Color importieren;
import java.awt.Graphics;
import java.awt.Rectangle;
 
import com.sxt.beast.Beast;
 
öffentliche Klasse Bullet erweitert 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 = Angreifer;         this.target = Ziel;         setAd(ad);         setSpd(spd);         // TODO Automatisch generierter Konstruktor-Stub     }     public Bullet(GameFrame gameFrame, GameObject attacker, GameObject target, int ad, int spd, String img) {         super(attacker.getX(), attacker.getY(), gameFrame);         this.attacker = Angreifer;         this.target = Ziel;         setImg(img);         setAd(ad);         setSpd(spd);         // TODO Automatisch generierter Konstruktor-Stub     }     public Bullet() {         super();         // TODO Automatisch generierter Konstruktor-Stub     }     public void move() {         // 子弹与目标碰撞,子弹消失,目标减血         if (recIntersectsRec(getRec(), target.getRec())) {             if (Beast.class. isAssignableFrom(target.getClass())) {                 target.setTarget(gameFrame.player);                 target.setHasTarget(true);             }             target.setCurrentHp(target.getCurrentHp() - getAd());             gameFrame.removeList.add(this);         }         double dis = getDis(getX(), getY(), target.getX(), target.getY());         int xSpeed ​​= (int) (getSpd() * (target.getX() - getX()) / dis);         int ySpeed ​​= (int) (getSpd() * (target.getY() - getY()) / dis);         setX(getX() + xSpeed);         setY(getY() + ySpeed);     }     @Override     public void paintSelf(Graphics g) {         // TODO Automatisch generierter Methoden-Stub         g.drawImage(getImg(), getX() - 16, getY() - 16, null);         if (this.getImg() == null) {             g.setColor(Color.BLACK);             g.fillOval(getX() - 5, getY() - 5, 10, 10);             g.drawRect(getX() - 5, getY() - 5, 10, 10);         }         bewegen();     }     @Override     public Rechteck getRec() {
 






 








 













 







 









 











 


        // TODO Automatisch generierter Methoden-Stub
        return new Rechteck(getX() - 5, getY() - 5, 10, 10);
    }
 
    /**
     * @return the ad
     */
    public int getAd() {         return ad;     }     /**      * @param ad die einzustellende Anzeige      */     public void setAd(int ad) {         this.ad = ad;     } }


 






 

3.

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.util.ArrayList;
 
import javax.swing.JButton;
 
public abstract class Champion extends GameObject {
 
    // 移动
    public boolean up, down, left, 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<Champion>();
    
    static {
        for (int i = 1; i < 8; i++) {
            imgs[i] = "img/" + i + ".png";
        }
    }
 
    public Champion(GameFrame gameFrame, int x, int y) {
        super(gameFrame);
        setImg("img/stand.png");
        setX(x);
        setY(y);
        setSpd(75);
        setHp(24000);
        setDis(250);
        setAttackCoolDownTime(100);
        setCurrentHp(getHp());
        championList.add(new ChampionDaji(gameFrame));
        championList.add(new ChampionHouyi(gameFrame));
    }
    
    public Champion(GameFrame gameFrame) {
        // TODO Auto-generated constructor stub
        super(gameFrame);
        setImg("img/stand.png");
        setX(700);
        setY(3800);
        setSpd(75);
        setHp(24000);
        setDis(250);
        setAttackCoolDownTime(100);
        setCurrentHp(getHp());
    }
 
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_D) {
            right = true;
        }
        if (key == KeyEvent.VK_A) {
            left = true;
        }
        if (key == KeyEvent.VK_W) {
            up = true;
        }
        if (key == KeyEvent.VK_S) {             down = true;         }     }     public void keyReleased(KeyEvent e) {         int key = e.getKeyCode();         if (key == KeyEvent.VK_D) {             right = false;         }         if (key == KeyEvent.VK_A) {             left = false;         }         if (key == KeyEvent.VK_W) {             up = false;         }         if (key == KeyEvent.VK_S) {             down = false;         }     }     public void move() {         if (up) {             setY(getY() - getSpd());         }         if (down) {             setY(getY() + getSpd());         }         if (left) {             setX(getX() - getSpd());         }         if (right) {             setX(getX() + getSpd());         }         if (oben || unten || links || rechts) {             setImg(imgs[moveCount]);             moveCount++;             if (moveCount == 8) {                 moveCount = 1;             }         } else {             setImg("img/stand.png");         } }     /     **      * 添加三个技能按钮      * */     public void addButton() {         JButton button1 = new JButton();         button1.setSize(100, 100);         button1.setLocation(1056, 513);         button1.addActionListener(new ActionListener() {             @Override             public void actionPerformed(ActionEvent e) {                 bilityOne();             }         });         JButton button2 = new JButton();         button2.setSize(100, 100);         button2.setLocation(1090, 370);         button2.addActionListener(new ActionListener() {             @Override             public void actionPerformed(ActionEvent e) {                 abilityTwo();             }         });         JButton button3 = new JButton();         button3.setSize(100, 100);         button3.setLocation(1220, 300);         button3.addActionListener(new ActionListener() {             @Override             public void actionPerformed(ActionEvent e) {                 abilityThree();             }         });



 















 























    































        gameFrame.add(button1);
        gameFrame.add(button2);
        gameFrame.add(button3);
    }
 
    public abstract void FähigkeitOne();
    öffentliche abstrakte Leere FähigkeitTwo();
    öffentliche abstrakte Leere FähigkeitThree();
    public abstract void FähigkeitEffect(Graphics g);
    
    @Override
    public void paintSelf(Graphics g) {         // TODO Automatisch generierter Methoden-Stub         // 生命值为0         if (getCurrentHp() <= 0) {             setAlive(false);             gameFrame.removeList.add(this);         } else {             // Neues             AddHp(g, 30, 80, 80, 20, Color.GREEN);             //Erweitertes Bild             g.drawImage(abilityOne, getX() + 360, getY() + 180, null);             g.drawImage(abilityTwo, getX() + 400, getY() + 40, null);             g.drawImage(abilityThree, getX() + 520, getY() - 30, null);             // Bild             g.drawImage(this.getImg(), getX() - 33, getY() - 50, null);             // 改变画笔颜色             //g.setColor(Color.GREEN);             // 绘制中心圆点             //g.fillOval(getX(), getY(), 10, 10);             // 绘制矩形边框             //g.drawRect(getX() - 23, getY() - 50, 60, 120);             bewegen();             Fähigkeitseffekt(g);         }     }     @Override     public Rechteck getRec() {         // TODO Automatisch generierter Methoden-Stub         return new Rechteck(getX() - 30, getY() - 60, 60, 120);     } }





 



















 





 

4,

add(redObj);             }         }     }     @Override     public void FähigkeitOne() {
 








 

 

 




















 











 



 












            


 


        // TODO Automatisch generierter Methoden-Stub
        if (coolDownOne) {             m = new MouseMonitor();             p = neues Polygon();             gameFrame.addMouseListener(m);             attacked = new ArrayList<GameObject>();         }     }     @Override     public voidbilityTwo() {         // TODO Automatisch generierter Methoden-Stub         if (coolDownTwo) {             boolean find = false;             for (GameObject redObj : gameFrame.objList) {                 // Erweitert && 250 && 存活                 if ((redObj Instanz von MinionRed || Beast.class.isAssignableFrom(redObj.getClass())) && recIntersectsCir(redObj.getRec() , getX(), getY(), 250)                         && redObj.isAlive()) {                     //                     FunktionsfähigkeitTwoBullet = new Bullet(gameFrame, this, redObj, 250, 60, "img/abilityTwoBullet.png");                     gameFrame.objList.add(abilityTwoBullet);                     //                     LeistungsfähigkeitTwoTarget = redObj;                     // Identifizieren Sie                     ifAbilityTwo = true;                     find = true;                     brechen;                 }             }             if (find) {                 new AbilityTwoCD().start();                 find = false;             }         } }     /     **      * 点击技能三释放技能 先将技能范围内目标储存到targetList里 提前定义五个子弹 技能释放时初始化五个子弹 子弹目标从targetList里随机选择      * 如果期间目标死亡,制作一个目标替身,生命值设置为true 子弹与目标或替身碰撞后消失      */     @Override     public voidabilityThree() {         // TODO Automatisch generierter Methoden-Stub         // 三技能没在冷却状态         if (cool DownThree) {             // 创建列表来储存目标             ArrayList<GameObject> targetList = new ArrayList<GameObject>();             // 遍历redList             for (int i = 0; i < gameFrame.objList.size(); i++) {                 GameObject target = gameFrame.objList.get(i);                 // 是红色小兵 && 在技能范围里 && 存活                 if ((target instanceof MinionRed || Beast.class.isAssignableFrom(target.getClass())) && recIntersectsCir(target.getRec(), getX(), getY(), 250)                         && target.isAlive()) {                     targetList.add(target);                 }             }             //找到目标             if(targetList.size() != 0) {






 


























 






















                //初始化五个子弹,随机攻击列表里的目标
                Random random = new Random();
                int count = 0;
                while(count < 5) {
                    int r = random.nextInt(targetList.size());
                    if(!targetList.get(r).isAlive()) {
                        //目标死亡,制作替身
                        GameObject substitute = targetList.get(r);
                        substitute.setAlive(true);
                        bulletList[count] = new Bullet(gameFrame, this, substitute, 250, 60, "img/abilityTwoBullet.png");
                    }else {
                        bulletList[count] = new Bullet(gameFrame, this, targetList.get(r), 250, 60, "img/abilityTwoBullet.png");
                    }
                    count++;
                }
                new AbilityThreeBulletCD().start();
                new AbilityThreeCD().start();
            }
        }
    }
 
    @Override
    public void abilityEffect(Graphics g) {
        // TODO Auto-generated method stub
        if (ifAbilityOne) {
            g.setColor(Color.RED);
            g.fillPolygon(p);
            abilityOneMove();
            step++;
            if (step == 10) {
                step = 0;
                ifAbilityOne = false;
            }
        }
        if (ifAbilityTwo) {
            System.out.println(abilityTwoTarget.beControlled);
            if (abilityTwoBullet.getRec().intersects(abilityTwoTarget.getRec())) {
                new AbilityControllCD().start();
                ifAbilityTwo = false;
            }
        }
    }
 
    // 技能一冷却时间
    class AbilityOneCD extends Thread {
        public void run() {
            // 将技能一设置为冷却状态
            coolDownOne = false;
            // 线程休眠
            try {
                // one来表示一技能冷却时间
                int one = coolDownTimeOne;
                while (one > 0) {
                    Thread.sleep(1000);
                    System.out.println("一技能冷却时间: " + one / 1000);
                    one -= 1000;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 将技能一设置为攻击状态
            coolDownOne = true;
            // 线程终止
            this.stop();
        }
    }
 
    // 技能二冷却时间
    class AbilityTwoCD extends Thread {
        public void run() {
            // 将技能二设置为冷却状态
            coolDownTwo = false;
            // 线程休眠
            try {
                // one来表示二技能冷却时间
                int two = coolDownTimeTwo;
                while (two > 0) {
                    Thread.sleep(1000);
                    System.out.println("二技能冷却时间: " + two / 1000);
                    two -= 1000;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 将技能二设置为攻击状态
            coolDownTwo = true;
            // 线程终止
            this.stop();
        }
    }
 
    // 技能二控制时间
    class AbilityControllCD extends Thread {
        public void run() {
            abilityTwoTarget.beControlled = true;
            // 线程休眠
            try {
                Thread.sleep(20000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            abilityTwoTarget.beControlled = false;
            this.stop();
        }
 
    }
    // 技能三冷却时间
    class AbilityThreeCD extends Thread {
        public void run() {
            // 将技能三设置为冷却状态
            coolDownThree = false;
            // 线程休眠
            try {
                // three来表示三技能冷却时间
                int three = coolDownTimeThree;
                while (three > 0) {
                    Thread.sleep(1000);
                    System.out.println("三技能冷却时间: " + three / 1000);
                    three -= 1000;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 将技能三设置为攻击状态
            coolDownThree = true;
            // 线程终止
            this.stop();
        }
    }
    
    //技能三子弹时间间隔
    class AbilityThreeBulletCD extends Thread{
        public void run() {
            try {
                gameFrame.objList.add(bulletList[0]);
                Thread.sleep(200);
                gameFrame.objList.add(bulletList[1]);
                Thread.sleep(200);
                gameFrame.objList.add(bulletList[2]);
                Thread.sleep(200);
                gameFrame.objList.add(bulletList[3]);
                Thread.sleep(200);
                gameFrame.objList.add (bulletList[4]);
            }catch(Exception e) {                 e.printStackTrace();             }             this.stop();         }     }     // Private Klasse des Mausmonitors     MouseMonitor erweitert MouseAdapter {         @Override         public void mousePressed(MouseEvent e) { / / Wenn mit der Maus geklickt wird             int mouseX = e.getX(), mouseY = e.getY(), playerX = 700, playerY = 350;             double dis = getDis(mouseX, mouseY, playerX, playerY);             // Trigonometrische Funktion             cos = (mouseX - playerX) / dis;             sin = -(mouseY - playerY) / dis;             // Koordinatendifferenz             int difX = (int) (60 * sin);             int difY = (int) (60 * cos);             p. addPoint(getX() - difX, getY() - difY);             p.addPoint(getX() + difX, getY() + difY);             p.addPoint(getX() + difX + (int) (20 * cos) , getY() + difY - (int) (20 * sin));             p.addPoint(getX() - difX + (int) (20 * cos), getY() - difY - (int) (20 * sin) );             exit();             new AbilityOneCD().start();             ifAbilityOne = true;         }     } }





 





















5,

package com.sxt;
 
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 javax.swing.JButton;
 
import com.sxt.beast.Beast;
 
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);
        abilityOne = Toolkit.getDefaultToolkit().getImage("img/HyabilityOne.jpg");
        abilityTwo = Toolkit.getDefaultToolkit().getImage("img/HyabilityTwo.jpg");
        abilityThree = Toolkit.getDefaultToolkit().getImage("img/HyabilityThree.jpg");
        classical = Toolkit.getDefaultToolkit().getImage("img/后羿-辉光之辰.jpg");
        // 三个技能冷却时间
        coolDownTimeOne = 14000;
        coolDownTimeTwo = 10000;
        coolDownTimeThree = 28000;
        // TODO Auto-generated constructor stub
    }
 
    public ChampionHouyi(GameFrame gameFrame, int i, int j) {
        // TODO Auto-generated constructor stub
        super(gameFrame, i, j);
    }
 
    public void exit(MouseAdapter ma) {
        this.gameFrame.removeMouseListener(ma);
    }
 
    public void attack() {
        if (isAttackCoolDown()) {
            ArrayList<GameObject> targets = new ArrayList<GameObject>();// 目标列表,最多三个目标
            for (GameObject redObj : this.gameFrame.redList) {
                if (this.recIntersectsCir(redObj.getRec(), getX() - 250, getY() - 250, 500)) {
                    targets.add(redObj);
                    if (targets.size() == 3) {
                        break;
                    }
                }
            }
            for (GameObject beastObj : this.gameFrame.beast.beastList) {                 if (this.recIntersectsCir(beastObj.getRec(), getX() - 250, 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(gameFrame, this, targets.get(i), 400, 50, "img/bullet.gif");                 } else {                     bullet = new Bullet(gameFrame, this, targets.get(i), 200, 50, "img/bullet.gif");                 }                 gameFrame.objList.add(bullet);             }             new AttackCD().start();         }     }     public void FähigkeitTwoAttack() {         for (GameObject redObj : this.gameFrame.objList) {             if (redObj Instanz von MinionRed || Beast.class.isAssignableFrom(redObj.getClass())) {                 if (this.recIntersectsCir(redObj.getRec (), X_AbilityTwo - 60, Y_AbilityTwo - 60, 120)) {                     redObj.setCurrentHp(redObj.getCurrentHp() - 400);                 }                 if (this.recIntersectsCir(redObj.getRec(), X_AbilityTwo - 30, Y_AbilityTwo - 30, 60)) {                     redObj.setCurrentHp(redObj.getCurrentHp() - 200);                 }             }         }     }     public void FähigkeitThreeMove() {         p.translate((int) (50 * cos), -(int) (50 * sin));         for (GameObject redObj : gameFrame.objList) {             // 是红色方小兵 && 发生碰撞             if ((redObj Instanz von MinionRed || Beast.class.isAssignableFrom(redObj.getClass()))                     && p.intersects(redObj.getRec() )) {                 // 击中目标后, 目标减血并眩晕, 多边形消失                 redObj.setCurrentHp(redObj.getCurrentHp() - 400);                 FähigkeitThreeTarget = redObj;                 new AbilityControlCD().start();                 ifAbilityThree = false;                 new AbilityThreeCD().start();             }         }         if (!ifXOutside) {             for (int x : p.xpoints) {                 if (x < 0 || x >= 5165) {                     ifXOutside = true;                     brechen;                 }



















 












 




















            }
        }
        if (!ifYOutside) {             for (int y : p.ypoints) {                 if (y < 0 || y >= 4085) {                     ifYOutside = true;                     break;                 } }             }         /     **     *      Spielschnittstelle mit einer Fertigkeit erstellen Der Ersatz des Angriffsknopfes ersetzt den Angriffsknopf. Neues Angriffsknopf-Ereignis: 1. Zielliste definieren 2. Ziele hinzufügen, bis zu drei 3.      * Das erste in der Zielliste verursacht 400 Schaden und die restlichen 200 Schaden 4         . Hält nach dem Ende 5 Sekunden lang an         .     Ersetzen             Sie      die     Angriffstaste Dauer             new AbilityOneCD().start( ); } }         /     **     *      Klicken Sie für die zweite Fertigkeit zuerst auf die Schaltfläche, um die Fertigkeit freizugeben, und klicken Sie dann auf eine beliebige Stelle innerhalb des Fertigkeitsbereichs. Danach werden zwei Kreise unterschiedlicher Größe angezeigt angeklickte Position. Wenn Sie sich im großen Kreis befinden, erhalten Sie 300 Schaden, und wenn Sie sich im kleinen Kreis befinden, erhalten Sie zusätzlich 200 Schaden      * /     @Override     public voidabilityTwo() {         // TODO Automatisch generierte Methode Stub         if (coolDownTwo) {             m2 =         new             MouseMonitorTwo(     )         ;             gameFrame.addMouseListener     (             m2     )         ; {             m = new MouseMonitor();             p = new Polygon();             gameFrame.addMouseListener(m);             ifAbilityThree = true;             ifXOutside = false;             ifYOutside = false;         }     }     @Override     public voidbilityEffect(Graphics g) {         // TODO Auto -generierter Methoden-Stub         if (ifAbilityTwo) {             System.out.println("222");             g.setColor(Color.RED);             g.fillOval(X_AbilityTwo - 60, Y_AbilityTwo - 60, 120, 120);             g.setColor( Color.BLACK);             g.fillOval(X_AbilityTwo - 30, Y_AbilityTwo - 30, 60, 60);             bilityTwoAttack();             X_AbilityTwo = 0;             Y_AbilityTwo = 0;             ifAbilityTwo = false;             new AbilityTwoCD().start();         }         if ( ifAbilityThree) {             System.out.println("333");             g.setColor(Color.RED);             g.fillPolygon(p);             abilityThreeMove();








 












 












 

 












 




















            // Wenn außerhalb der Grenzen, endet die Fertigkeitsfreigabe
            if (ifXOutside || ifYOutside) {                 ifAbilityThree = false;                 p = new Polygon();                 new AbilityThreeCD().start();             }         }     //     Angriffsabklingzeitklasse     AttackCD erweitert Thread {         public void run() {             // Setze die Angriffsfunktion auf den Kühlzustand             setAttackCoolDown(false);             // Thread-Ruhezustand             try {                 Thread.sleep(getAttackCoolDownTime());             } Catch (Exception e) {                 e.printStackTrace();             }             // Setze die Angriffsfunktion auf den Angriffszustand             setAttackCoolDown(true);             // Thread beendet             this.stop();         }     }     // Eine Fertigkeits-Abkühlzeitklasse     AbilityOneCD erweitert Thread {         public void run() {             // Setze den Angriff Funktion zum Abkühlzustand             coolDownOne = false;             // Sleep             try {                 // one wird zum Speichern der Abkühlzeit verwendet                 int one = coolDownTimeOne;                 while (coolDownTimeOne > 0) {                     Thread.sleep(1000);                     System.out.println(" Abkühlzeit von Skill eins: " + coolDownTimeOne / 1000);                     coolDownTimeOne -= 1000;                 }                 coolDownTimeOne = one;             } Catch (Exception e) {                 e.printStackTrace();             }             // Uncool der Angriffsfunktion             coolDownOne = true;             // Thread wird beendet             this.stop() ;         }     }     // AbilityOne-Dauerklasse     AbilityOneDuration erweitert Thread {         public void run() {             // Erstelle einen Ersatz für die Angriffsschaltfläche             JButton replacement = gameFrame.attackButton;             gameFrame.remove(gameFrame.attackButton);             JButton button = new JButton() ;             button.setSize(130, 132);             button.setLocation(1150, 430);             button.addActionListener(new ActionListener() {                 @Override                 public void actionPerformed(ActionEvent e) {                     // Die erhaltene Ereignisquelle ist der Button selbst                     attack( );                 }             });             gameFrame.add(button);             // Sleep             try {






 

















 
























 






 













                Thread.sleep(5000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            gameFrame.remove(button);
            gameFrame.add(substitute);
            // 线程终止
            this.stop();
        }
    }
 
    // 二技能冷却时间
    class AbilityTwoCD extends Thread {
        public void run() {
            // 将二技能设置为冷却状态
            coolDownTwo = false;
            // 休眠
            try {
                int two = coolDownTimeTwo;
                while (coolDownTimeTwo > 0) {
                    Thread.sleep(1000);
                    System.out.println("技能二冷却时间: " + coolDownTimeTwo / 1000);
                    coolDownTimeTwo -= 1000;
                }
                coolDownTimeTwo = two;
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 将攻击功能解除冷却状态
            coolDownTwo = true;
            // 线程终止
            this.stop();
        }
    }
 
    // 技能三冷却时间
    class AbilityThreeCD extends Thread {
        public void run() {
            // 将技能三设置为冷却状态
            coolDownThree = false;
            // 线程休眠
            try {
                // three来表示三技能冷却时间
                int three = coolDownTimeThree;
                while (three > 0) {
                    Thread.sleep(1000);
                    System.out.println("三技能冷却时间: " + three / 1000);
                    three -= 1000;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 将技能三设置为攻击状态
            coolDownThree = true;
            // 线程终止
            this.stop();
        }
    }
 
    // 技能三控制时间
    class AbilityControlCD extends Thread {
        public void run() {
            abilityThreeTarget.beControlled = true;
            // 线程休眠
            try {
                Thread.sleep(20000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            abilityThreeTarget.beControlled = false;
            this.stop();
        }
 
    }
 
    // Private Klasse des Mausmonitors
    MouseMonitorTwo erweitert MouseAdapter {         @Override         public void mousePressed(MouseEvent e) {// Wenn die Maus angeklickt wird             System.out.println("pressed");             int mouseX = e.getX(), mouseY = e .getY(), playerX = 700, playerY = 350;             double dis = getDis(mouseX, mouseY, playerX, playerY);             if (dis < 250                 )                 { e.getY() - playerY + getY();             }             ifAbilityTwo = true;             exit(this);         }     }     // Private Klasse des Mausmonitors     MouseMonitor erweitert MouseAdapter {         @Override         public void mousePressed(MouseEvent e) {// Wenn die Maus klickt When             int MouseX = e.getX(), MouseY = e.getY(), PlayerX = 700, PlayerY = 350;             Double Dis = GetDis(MouseX, MouseY, PlayerX, PlayerY);             // Trigonometrische Funktion             cos = (MouseX - PlayerX ) / dis;             sin = -(mouseY - playerY) / dis;             // Koordinatendifferenz             int difX = (int) (60 * sin);             int difY = (int) (60 * cos);             p.addPoint(getX() - difX, getY() - difY);             p.addPoint(getX() + difX, getY() + difY);             p.addPoint(getX() + difX + (int) (20 * cos), getY() + difY - (int) (20 * sin));             p.addPoint(getX() - difX + (int) (20 * cos), getY() - difY - (int) (20 * sin));             ifAbilityThree = true ;             exit(this);         }     } }













 




















 

6,

package com.sxt;
 
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.util.ArrayList;
 
import javax.swing.JButton;
import javax.swing.JFrame;
 
import com.sxt.beast.Beast;
 
public class GameFrame extends JFrame {
 
    // 游戏模式 0 选择英雄,1 游戏开始,2 游戏胜利,3 游戏失败
    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<GameObject>();
    ArrayList<GameObject> redList = new ArrayList<GameObject>();// 红色方
    ArrayList<GameObject> blueList = new ArrayList<GameObject>();// 蓝色方
    public ArrayList<GameObject> removeList = new ArrayList<GameObject>();// 存放将要删除的元素
 
    public void launch() {
        // 设置尺寸
        setSize(windowWidth, windowHeight);
        // 窗口居中
        setLocationRelativeTo(null);
        // 关闭事件
        setDefaultCloseOperation(3);
        // 用户不能调整窗口大小
        setResizable(false);
        // 标题
        setTitle("王者荣耀");
        // 窗口可见
        setVisible(true);
        // 添加键盘监视器
        this.addKeyListener(new GameFrame.KeyMonitor());
        // 添加游戏元素
        objList.add(background);
        objList.addAll(turret.turretList);
        objList.addAll(beast.beastList);
        blueList.add(turret.turretList.get(0));
        redList.add(turret.turretList.get(4));
 
        /**
         * Angriffsschaltfläche
         */
        attackButton = new JButton();
        attackButton.setSize(130, 132);
        attackButton.setLocation(1150, 430);
        attackButton.addActionListener (new ActionListener() {             @Override             public void actionPerformed(ActionEvent e) {                 // Button-Ereignis                 player.attack(redList);             }         });         this.add(attackButton);         while (true) {             if (state == 1) {                 // Schergen hinzufügen                 //mb.createMinion(this, blueList);                 //mr.createMinion(this, redList);                 // Verteidigungsturm hinzufügen                 turret.addTurret();             }             repaint();             try {                 Thread.sleep(17 );             } Catch (Exception e) {                 e.printStackTrace();             }         }     }     public void paint(Graphics g) {         if (offScreenImage == null) {             offScreenImage = this.createImage(5984, 4452);         }         Graphics gImage = offScreenImage .getGraphics();         if (state == 0) {             for(int i = 0; i < Champion.championList.size(); i++) {                 //Bild hinzufügen                 Image classic = Champion.championList.get(i).classical ;                 gImage.drawImage(classical, i*160, 20, null);                 //Schaltfläche hinzufügen                 JButton ChampionButton = new JButton();                 ChampionButton.setSize(150, 150);                 ChampionButton.setLocation(i*150, 0);                 int a = i;                 ChampionButton.addActionListener(new ActionListener() {                     @Override                     public void actionPerformed(ActionEvent e) {                         state = 1;                         player = Champion.championList.get(a);                         objList.add(player);                         player.addButton();                     }                 });                 this.add(championButton);             }         } else if (state == 1) {             for (int i = 0; i < objList.size(); i++) {                 objList.get(i).paintSelf(gImage );







 
















 










                



















            }
            // Das Angriffsbild zeichnen
            gImage.drawImage(attack, player.getX() + 500, player.getY() + 100, null);
            objList.removeAll(removeList);
        } else if (state == 2) {/ / Das Spiel gewinnt
            gImage.drawImage(gameWin, 0, 5, null);
        } else if (state == 3) {//Das Spiel schlägt fehl
            gImage.drawImage(gameLose, 0, 5, null);
        }
        if (state ! = 1) {             g.drawImage(offScreenImage, 0, 0, null);         } else {             g.drawImage(offScreenImage, -player.getX() + 700, -player.getY() + 350, null);         }         /* *          * Tastaturereignisse hinzufügen können nach dem Drücken der Schaltfläche nicht aufgerufen werden, da der Fokus des Programms auf die Schaltfläche gelegt wird. this.requestFocus() ändert den Fokus zurück zur Spieloberfläche.          */         this.requestFocus();     }     // Hauptmethode     public static void main(String[] args) {         GameFrame gameFrame = new GameFrame();         gameFrame.launch();     }     // Tastaturereignisse     private Klasse KeyMonitor erweitert KeyAdapter {         @Override         public void keyPressed(KeyEvent e) {             int key = e.getKeyCode( );             player.keyPressed(e );         }         @Override         public void keyReleased(KeyEvent e) {             int key = e.getKeyCode();             player.keyReleased(e);         }     } }









 





 







 






7,

Paket com.sxt;
 
java.awt.Color importieren;
java.awt.Graphics importieren;
java.awt.Image importieren;
java.awt.Rectangle importieren;
java.awt.Toolkit importieren;
java.util.ArrayList importieren;
 
com importieren. sxt.beast.Beast;
 
öffentliche abstrakte Klasse GameObject {     // Koordinaten     private int x;     private int y;     // Bild     privates Bild img;     // Spielschnittstelle     public GameFrame gameFrame;     // Geschwindigkeit     private int spd;     // Anfangszustand value     private int hp;     // Aktueller Gesundheitswert     private int currentHp;     // Angriffsziel     privates GameObject-Ziel;     // Ob es ein Ziel gibt     private boolean hasTarget = false;     // Angriffsentfernung     private int dis;     // Angriffszeitintervall     private int attackCoolDownTime;     // Ob der Angriff abgekühlt ist     private boolean attackCoolDown = true;     // Ob er aktiv ist     private boolean alive = true;     // Ob er kontrolliert wird     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() {         // TODO Automatisch generierter Konstruktor-Stub     }     public void addHp(Graphics g, int difX, int difY, int width, int height, Color color) {         // Außenkontur zeichnen         g.setColor(Color.black);         g.drawRect(getX() - difX, getY() - difY, width, height);         // Rechteck füllen         g.setColor(color);         g.fillRect(getX() - difX, getY() - difY, (int) (width * getCurrentHp() / getHp()), height );     }     public double getDis(int x1, int y1, int x2, int y2) {         return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));     }     / / Rechteck-Rechteck-Kollisionserkennung     public boolean recIntersectsRec(Rectangle r1, Rechteck r2) {         return r1.intersects(r2);     }     public boolean recIntersectsCir(Rectangle rec, int x, int y, int r) {         /** Rechteck schneidet einen Kreis: Der Abstand zwischen dem Mittelpunkt des Kreises und mindestens einem Fixpunkt des Rechtecks ​​ist kleiner als r */         if ((getDis(x, y, rec.x, rec.y) < r) || (getDis(x, y, rec.x, rec.y + rec.height) < r) ||                 (getDis (x, y, rec.x + rec.width, rec.y) < r)                 || (getDis(x, y, rec.x + rec.width, rec.y + rec.height) < r)) {             return true;
 



























 



 





 



 








 



 




 






        }
        return false;
    }
 
    // Angriffsmethode
    public void attack(ArrayList<GameObject> gameObjList) {         if (hasTarget) {             // Ein neues Ziel finden, nachdem das Ziel den Bereich verlässt             if (!recIntersectsCir(target.getRec(), getX( ), getY(), getDis())) {                 setHasTarget(false);             }             // Das Ziel stirbt, ein neues Ziel finden             else if (!target.isAlive()) {                 setHasTarget(false);             } else if (isAttackCoolDown( ) && isAlive( )) {                 Bullet Bullet = null;                 // Turmangriff                 if (Turret.class.isAssignableFrom(getClass())) {                     Bullet = new Bullet(gameFrame, this, getTarget(), 500, 50);                 }                 / / Minion-Angriff                 else if (Minion.class.isAssignableFrom(getClass())) {                     Bullet = new Bullet(gameFrame, this, getTarget(), 50, 30);                 }                 // Spieler greift anelse                 if (diese Instanz von Champion) {                     Bullet = new Bullet (gameFrame, this, getTarget(), 500, 50, "img/bullet.gif");                 }                 gameFrame.objList.add(bullet);                 // Thread startet                 new AttackCD().start();             }         } else {             // Durchlaufen Sie die Liste             für (GameObject obj : gameObjList) {                 // Bestimmen Sie, ob sich der Angriffsbereich (Kreis) mit dem Feind (Rechteck) schneidet,                 wenn (recIntersectsCir(obj.getRec(), getX(), getY(), getDis ()) ) {                     // Das Ziel finden                     setTarget(obj);                     setHasTarget(true);                     // Aus der Schleife ausbrechen                     break;                 }             }             // Ob sich der Spieler innerhalb der Angriffsreichweite befindet             if (!hasTarget && gameObjList == gameFrame .blueList) {                 if (recIntersectsCir(gameFrame .player.getRec(), getX(), getY(), getDis())) {                     // Ziel finden                     setTarget(gameFrame.player);                     setHasTarget(true);                 }             } else {                 for (GameObject obj : gameFrame.beast. beastList) {                     // Bestimmen Sie, ob sich der Angriffsbereich (Kreis) mit dem Feind (Rechteck) schneidet,                     wenn (recIntersectsCir(obj.getRec(), getX(), getY(), getDis( ))) {                         // Ziel finden                         setTarget( obj);



















































                        setHasTarget(true);
                        // Aus der Schleife ausbrechen
                        break;
                    }
                }
            }
        }
    }
 
    class AttackCD erweitert Thread {         public void run() {             // Setze die Angriffsfunktion auf den Kühlzustand             setAttackCoolDown(false);             // Thread-Ruhezustand             versuchen {                 Thread.sleep (attackCoolDownTime);             } Catch (Exception e) {                 e.printStackTrace();             }             // Setze die Angriffsfunktion auf den Angriffszustand             setAttackCoolDown(true);             // Thread beendet             this.stop();         }     }     / / Elemente zeichnen     public abstract void paintSelf(Graphics g);     // Das Rechteck zurückgeben     public abstract Rechteck getRec();     /**      * @return the x      */     public int getX() {         return x;     }     /**      * @param x das zu setzende x      * /     public void setX(int x) {         this.x = x;     }     /**      * @return the y      */     public int getY() {         return y;     }     /**      * @param y the y zum Festlegen      */     public void setY(int y) {         this.y = y;     }     /**      * @return the img      */     public Image getImg() {         return img;     }     /**      * @param img the img to set      */     public void setImg (String img) {         this.img = Toolkit.getDefaultToolkit().getImage(img);     }     /**      * @return the spd      */     public int getSpd() {         return spd;     }     /**      * @param spd den zu setzenden SPD      */     public void setSpd(int spd) {         this.spd = spd;     }     /**      * @return the hp      */     public int getHp() {         return hp;     }     /**      * @ param hp der zu setzende HP      */     public void setHp(int hp) {         this.hp = hp;     }     /**      * @return the currentHp















 


 


 






 






 






 






 






 






 






 






 






 






 


     */
    public int getCurrentHp() {
        return currentHp;
    }
 
    /**
     * @param currentHp the currentHp to set
     */
    public void setCurrentHp(int currentHp) {
        if (currentHp < getHp()) {
            if (Beast.class.isAssignableFrom(getClass())) {
                System.out.println("yes");
                setTarget(gameFrame.player);
                setHasTarget(true);
            }
        }
        this.currentHp = currentHp;
    }
 
    /**
     * @return the target
     */
    public GameObject getTarget() {
        return target;
    }
 
    /**
     * @param target the target to set
     */
    public void setTarget(GameObject target) {
        this.target = target;
    }
 
    /**
     * @return the hasTarget
     */
    public boolean isHasTarget() {
        return hasTarget;
    }
 
    /**
     * @param hasTarget the hasTarget to set
     */
    public void setHasTarget(boolean hasTarget) {
        this.hasTarget = hasTarget;
    }
 
    /**
     * @return the dis
     */
    public int getDis() {
        return dis;
    }
 
    /**
     * @param dis the dis to set
     */
    public void setDis(int dis) {
        this.dis = dis;
    }
 
    /**
     * @return the attackCoolDownTime
     */
    public int getAttackCoolDownTime() {
        return attackCoolDownTime;
    }
 
    /**
     * @param attackCoolDownTime the attackCoolDownTime to set
     */
    public void setAttackCoolDownTime(int attackCoolDownTime) {
        this.attackCoolDownTime = attackCoolDownTime;
    }
 
    /**
     * @return the attackCoolDown
     */
    public boolean isAttackCoolDown() {
        return attackCoolDown;
    }
 
    /**
     * @param attackCoolDown the attackCoolDown to set
     */
    public void setAttackCoolDown(boolean attackCoolDown) {
        this.attackCoolDown = attackCoolDown;
    }
 
    /**
     * @return the alive
     */
    public boolean isAlive() {
        lebendig zurückkehren;
    }
 
    /**
     * @param alive the alive to set
     */
    public void setAlive(boolean alive) {         this.alive = alive;     } }


8,

package com.sxt;
 
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;
 
public abstract class Minion erweitert GameObject {     // Ob der nächste     private boolesche Minion generiert werden soll nextMinion = true;     // Ob die nächste Welle von Minions generiert werden soll     private boolean nextLine = true;     // Die Anzahl der zu generierenden Minions     private int minionCount = 0;     // Ob das Ziel erkannt werden soll     private boolean ifFindTarget = false;     public Minion( GameFrame gameFrame) {         super(gameFrame );         setHp(800);         setCurrentHp(getHp());         setDis(100);         setAttackCoolDownTime(2000);         // TODO Automatisch generierter Konstruktor-Stub     }     /**      * (1325, 3750) ( 4425, 3750) (5050, 3125) (5050, 1125)      */     public abstract void move(ArrayList<GameObject> objList);     /**      * @param x: Die Abszisse des nächsten Schritts      * @param y: Die Ordinate von der nächste Schritt      * @param objList: Soldatenliste      * @return Ob die nächste Position mit anderen Schergen kollidiert      */     public boolean hitMinion(int x, int y, ArrayList<GameObject> objList) {         // Der neue Bereich generiert ein Rechteck         Rechteck r = neues Rechteck(x - 16, y - 16, 45, 45);         for (GameObject obj : objList) {             // Dieselbe Klasse && ist nicht sie selbst             if (obj.getClass() == this.getClass() && obj != this) {                 if (r.intersects(obj .getRec())) {                     return true;                 }             }         }         return false;     }     public void findTarget(ArrayList<GameObject> objList) {         for (GameObject obj : objList) {             if ( recIntersectsCir(obj.getRec(), getX(), getY(), 200)) {                 setTarget(obj);                 setIfFindTarget(true);             }         }         if (objList == gameFrame.blueList) {             if (recIntersectsCir(gameFrame.player. getRec(), getX(), getY(), 200)) {                 setTarget(gameFrame.player);                 setIfFindTarget(true);             }         }     }     public void moveToTarget() {         double dis = getDis(getX(), getY(), getTarget().getX(), getTarget(). getY());         int xSpeed ​​​​= (int) (getSpd() * (getTarget().getX() - getX()) / dis);         int ySpeed ​= (int) (getSpd() * (getTarget().getY () - getY()) / dis);
 








 








 



 

 



















 














 




        if (!hitMinion(getX() + xSpeed, getY(), gameFrame.objList)) {
            setX(getX() + xSpeed);
        }
        if (!hitMinion(getX(), getY() + ySpeed, gameFrame.objList)) {
            setY(getY() + ySpeed);
        }
    }
 
    public void createMinion(GameFrame gameFrame, ArrayList<GameObject> minionList) {
        if (nextLine) {
            if (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);
                }
                minionCount++;
                new NextMinion().start();
            }
            if (minionCount == 3) {
                minionCount = 0;
                new NextLine().start();
            }
        }
    }
 
    // 每个小兵生成时间
    class NextMinion extends Thread {
        public void run() {
            nextMinion = false;
            // 休眠1.5s
            try {
                Thread.sleep(1500);
            } catch (Exception e) {
                e.printStackTrace();
            }
            nextMinion = true;
            // 线程终止
            this.stop();
        }
    }
 
    // 每波小兵生成时间
    class NextLine extends Thread {
        public void run() {
            nextLine = false;
            // 休眠15s
            try {
                Thread.sleep(15000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            nextLine = true;
            // 线程终止
            this.stop();
        }
    }
 
    @Override
    public void paintSelf(Graphics g) {
        // TODO Auto-generated method stub
        // 生命值为0
        if (getCurrentHp() <= 0) {
            setAlive(false);
            gameFrame.removeList.add(this);
            if (this instanceof MinionBlue) {
                gameFrame.blueList.remove(this);
            } else {
                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(getImg(), getX() - 16, getY() - 16, null);
            //绘制检测范围圆形
            //g.setColor(Color.RED);
            //g.fillOval(getX(), getY(), 10, 10);
            //g.drawRect(getX() - 16, getY() - 16, 45, 45);
            // 小兵移动
            if (!beControlled) {
                if (this instanceof MinionBlue) {
                    move(gameFrame.redList);
                } else {
                    move(gameFrame.blueList);
                }
            }
        }
    }
 
    @Override
    public Rectangle getRec() {
        // TODO Auto-generated method stub
        return new Rectangle(getX() - 16, getY() - 16, 45, 45);
    }
 
    /**
     * @return the ifFindTarget
     */
    public boolean isIfFindTarget() {
        return ifFindTarget;
    }
 
    /**
     * @param ifFindTarget the ifFindTarget to set
     */
    public void setIfFindTarget(boolean ifFindTarget) {
        this.ifFindTarget = ifFindTarget;
    }
 
}

9,

Paket com.sxt;
 
import java.util.ArrayList;
 
öffentliche Klasse MinionBlue erweitert Minion {     public MinionBlue(GameFrame gameFrame) {         super(gameFrame);         setImg("img/blue.jpg");         setX(1325);         setY(3750);         // TODO Automatisch generierter Konstruktor-Stub     }     @Override     public void move(ArrayList<GameObject> objList) {         // TODO Automatisch generierter Methoden-Stub         if (isIfFindTarget()) {             // 离开检测范围             if (!recIntersectsCir(getTarget()) .getRec(), getX(), getY(), 200)) {                 setIfFindTarget(false);             } else {                 if (!isHasTarget()) {                     moveToTarget();                 }                 attack(objList);             }         } else {             findTarget(objList);             // Zurücksetzen             if (getX() < 4425) {                 setSpd(25);                 if (!hitMinion(getX() + getSpd(), getY(), gameFrame.blueList)) {                     setX(getX() + getSpd());                 }             } else if (getX() < 5100 && getX() >= 4425) {                 setSpd(20);                 if (!hitMinion(getX() + getSpd(), getY(), gameFrame.blueList)) {                     setX(getX() + getSpd());                 }                 if (!hitMinion(getX(), getY() - getSpd(), gameFrame.blueList)) {                     setY(getY() - getSpd());                 }             } else if (getX() >= 4900) {                 setSpd(18);                 if (!hitMinion(getX(), getY() - getSpd(), gameFrame.blueList)) {                     setY(getY() - getSpd());                 }             }         } }     }
 







 




















 

















10,

Paket com.sxt;
 
import java.util.ArrayList;
 
öffentliche Klasse MinionRed erweitert Minion {     public MinionRed(GameFrame gameFrame) {         super(gameFrame);         setImg("img/red.jpg");         setX(5050);         setY(1125);         // TODO Automatisch generierter Konstruktor-Stub     }     @Override     public void move(ArrayList<GameObject> objList) {         // TODO Automatisch generierter Methoden-Stub         if (isIfFindTarget()) {             // 离开检测范围             if (!recIntersectsCir(getTarget()) .getRec(), getX(), getY(), 200)) {                 setIfFindTarget(false);             } else {                 if (!isHasTarget()) {                     moveToTarget();                 }                 attack(objList);             }         } else {             findTarget(objList);             // Zurücksetzen             if (getY() < 3125) {                 setSpd(18);                 if (!hitMinion(getX(), getY() + getSpd(), gameFrame.redList)) {                     setY(getY() + getSpd());                 }             } else if (getY() < 3750 && getY() >= 3125) {                 setSpd(20);                 if (!hitMinion(getX(), getY() + getSpd(), gameFrame.redList)) {                     setY(getY() + getSpd());                 }                 if (!hitMinion(getX() - getSpd(), getY(), gameFrame.redList)) {                     setX(getX() - getSpd());                 }             } else if (getY() >= 3750) {                 setSpd(25);                 if (!hitMinion(getX() - getSpd(), getY(), gameFrame.redList)) {                     setX(getX() - getSpd());                 }             }         } }     }
 







 





































 

11,

Paket com.sxt;
 
java.awt.Color importieren;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;
 
öffentliche Klasse Turret erweitert GameObject {     ArrayList<Turret> turretList = new ArrayList<Turret>();     öffentlicher Turm turretBlueOne;     öffentlicher Turm turretBlueTwo;     öffentlicher Turm turretBlueThree;     öffentlicher Turm turretBlueBase;     öffentlicher Turm turretRedOne;     öffentlicher Turm turretRedTwo;     öffentlicher Turm turretRedThree;     öffentlicher Turm turretRedBase;     public Turret(GameFrame gameFrame) {         super(gameFrame);         setImg("img/turret.png");         // Die neue         TurretList.add(turretBlueOne = new TurretBlue(1860, 3790, gameFrame));         turretList.add(turretBlueTwo = new TurretBlue(2650, 3820, gameFrame));         turretList.add(turretBlueThree = new TurretBlue(3995, 3830, gameFrame));         turretList.add(turretBlueBase = new TurretBlue(1130, 3650, gameFrame));         turretList.add(turretRedOne = new TurretRed(5100, 3030, gameFrame));         turretList.add(turretRedTwo = new TurretRed(5120, 2100, gameFrame));         turretList.add(turretRedThree = new TurretRed(5060, 1570, gameFrame));         turretList.add(turretRedBase = new TurretRed(4850, 1100, gameFrame));         // TODO Automatisch generierter Konstruktor-Stub     }     public Turret(int x, int y, GameFrame gameFrame) {         super(x, y, gameFrame);         setImg("img/turret.png");         setHp(6000);         setCurrentHp(getHp());         setAttackCoolDownTime(1000);         setDis(300);     }     public void addTurret() {         /**          * Die Funktion „objList“ und „redList“ und „blueList“ wird verwendet个添加到列表里          */         if (!gameFrame. turret.turretBlueOne.isAlive() && gameFrame.turret.turretBlueTwo.isAlive()                 && gameFrame.blueList.indexOf(gameFrame.turret.turretBlueTwo) == -1) {             gameFrame.blueList.add(gameFrame.turret.turretBlueTwo);         }         if (!gameFrame.turret.turretBlueTwo.isAlive() && gameFrame.turret.turretBlueThree.isAlive()                 && gameFrame.blueList.indexOf(gameFrame.turret.turretBlueThree) == -1) {             gameFrame.blueList.add(gameFrame. turret.turretBlueThree);         }         if (!gameFrame.turret.turretBlueThree.isAlive() && gameFrame.turret.turretBlueBase.isAlive()
 









 



 









 


 








    













                && gameFrame.blueList.indexOf(gameFrame.turret.turretBlueBase) == -1) {             gameFrame.blueList.add(gameFrame.turret.turretBlueBase);         }         if (!gameFrame.turret.turretBlueBase.isAlive()) {             //游戏失败             gameFrame.state = 3;         }         if (!gameFrame.turret.turretRedOne.isAlive() && gameFrame.turret.turretRedTwo.isAlive()                 && gameFrame.redList.indexOf(gameFrame.turret.turretRedTwo) == -1) {             gameFrame.redList.add(gameFrame. turret.turretRedTwo);         }         if (!gameFrame.turret.turretRedTwo.isAlive() && gameFrame.turret.turretRedThree.isAlive()                 && gameFrame.redList.indexOf(gameFrame.turret.turretRedThree) == -1) {             gameFrame.redList.add(gameFrame. turret.turretRedThree);         }         if (!gameFrame.turret.turretRedThree.isAlive() && gameFrame.turret.turretRedBase.isAlive()                 && gameFrame.redList.indexOf(gameFrame.turret.turretRedBase) == -1) {             gameFrame.redList.add(gameFrame. turret.turretRedBase);         }         if (!gameFrame.turret.turretRedBase.isAlive()) {             //游戏胜利             gameFrame.state = 2;         }     }     @Override     public void paintSelf(Graphics g) {         // 生命值为0         if (getCurrentHp() <= 0) {             setAlive(false);             gameFrame.removeList.add(this);             if (diese Instanz von TurretBlue) {                 gameFrame.blueList.remove(this);             } else {                 gameFrame.redList.remove(this);             }         } else {             // Erweitert             if (diese Instanz von TurretBlue) {                 this.addHp(g, 50, 130, 100, 20, Color.GREEN);                 attack(gameFrame.redList);             } else {                 this.addHp(g, 50, 130, 100, 20, Color.RED);                 attack(gameFrame.blueList);             }             g.drawImage(getImg(), getX() - 50, getY() - 100, null);             g.drawOval(getX() - 300, getY() - 300, 600, 600);         }     }     @Override     public Rechteck getRec() {         // TODO Automatisch generierter Methoden-Stub         return new Rechteck(getX() - 50, getY() - 100, 100, 180);     } }






 

















    
 
























 





 

12,

Paket com.sxt;
 
öffentliche Klasse TurretBlue erweitert Turret {     public TurretBlue(GameFrame gameFrame) {         super(gameFrame);         // TODO Automatisch generierter Konstruktor-Stub     }     public TurretBlue(int x, int y, GameFrame gameFrame) {         super(x, y, gameFrame);     } }
 




    



 

13,

Paket com.sxt;
 
öffentliche Klasse TurretRed erweitert Turret {     public TurretRed(GameFrame gameFrame) {         super(gameFrame);         // TODO Automatisch generierter Konstruktor-Stub     }     public TurretRed(int x, int y, GameFrame gameFrame) {         super(x, y, gameFrame);     } }
 




    



    

14,

Paket com.sxt.beast;
 
import com.sxt.GameFrame;
 
öffentliche Klasse Bear erweitert Beast {     public Bear(int x, int y, GameFrame gameFrame) {         super(x, y, gameFrame);         setImg("img/bear.jpg");         Breite = 85;         Höhe = 112;         setDis(65);         // TODO Automatisch generierter Konstruktor-Stub     } }
 








 

15,

package com.sxt.beast;
 
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;
 
import com.sxt.*;
 
public class Beast extends GameObject {
 
    public ArrayList<Beast> beastList = new ArrayList<Beast>();
    int width;
    int height;
 
    // 初始坐标
    int initialX;
    int initialY;
 
    // 有没有仇恨值
    public boolean isAggressive = false;
 
    // 复活的元素
    Beast beast = null;
 
    public Beast(GameFrame gameFrame) {
        super(gameFrame);
        beastList.add(new RedBuff(3045, 3170, gameFrame));
        beastList.add(new Bear(2800, 2855, gameFrame));
        beastList.add(new Bird(3570, 3380, gameFrame));
        beastList.add(new Xiyi(4585, 2365, gameFrame));
        beastList.add(new BlueBuff(4025, 2295, gameFrame));
        beastList.add(new Wolf(4235, 1945, gameFrame));
    }
 
    public Beast(int x, int y, GameFrame gameFrame) {
        super(x, y, gameFrame);
        setHp(1000);
        setCurrentHp(getHp());
        setSpd(10);
        setAttackCoolDownTime(2000);
        initialX = getX();
        initialY = getY();
        beast = this;
    }
 
    public void moveToTarget() {
        double dis = getDis(getX(), getY(), getTarget().getX(), getTarget().getY());
        if (dis > 500) {
            isAggressive = false;
            setHasTarget(false);
        } else {
            int xSpeed = (int) (getSpd() * (getTarget().getX() - getX()) / dis);
            int ySpeed = (int) (getSpd() * (getTarget().getY() - getY()) / dis);
            setX(getX() + xSpeed);
            setY(getY() + ySpeed);
        }
    }
 
    public void moveToInitialLocation() {
        double dis = getDis(getX(), getY(), initialX, initialY);
        if (dis < getSpd()) {
            setX(initialX);
            setY(initialY);
            isAggressive = true;
        } else {
            int xSpeed = (int) (getSpd() * (initialX - getX()) / dis);
            int ySpeed = (int) (getSpd() * (initialY - getY()) / dis);
            setX(getX() + xSpeed);
            setY(getY() + ySpeed);
        }
    }
 
    /**
    判断有没有目标及野怪的仇恨值(又没有攻击性)
        true,判断是否到攻击范围
            false,向目标移动,若中途离开出生点距离大于300或与目标距离大于400,则不再有攻击性。
            true,发射子弹,线程开始
        false,没有目标,回到出生地,自动回血,再次有攻击性
    */
    public void move() {
        if (isHasTarget() && isAggressive) {
            if (!recIntersectsCir(getTarget().getRec(), getX(), getY(), getDis())) {
                moveToTarget();
            } else if (isAttackCoolDown() && isAlive()) {
                Bullet bullet = new Bullet(gameFrame, this, getTarget(), 500, 50, "img/bullet.gif");
                gameFrame.objList.add(bullet);
                new AttackCD().start();
            }
        } else {
            moveToInitialLocation();
            if (getCurrentHp() < getHp()) {
                setCurrentHp(getCurrentHp() + 100);
            }
        }
 
    }
 
    @Override
    public void paintSelf(Graphics g) {
        // TODO Auto-generated method stub// 生命值为0
        if (getCurrentHp() <= 0) {
            System.out.println("beast die");
            setAlive(false);
            gameFrame.removeList.add(this);
            gameFrame.beast.beastList.remove(this);
            new ReviveCD().start();
        } else {
            // 添加生命值
            addHp(g, width / 2, 80, width, 20, Color.GREEN);
            g.drawImage(getImg(), getX() - width / 2, getY() - height / 2, null);
            g.setColor(Color.RED);
            g.fillOval(getX(), getY(), 10, 10);
            g.drawOval(getX() - getDis(), getY() - getDis(), 2 * getDis(), 2 * getDis());
            move();
        }
    }
 
    @Override
    public Rectangle getRec() {
        // TODO Auto-generated method stub
        return new Rectangle(getX() - width / 2, getY() - height / 2, width, height);
    }
 
    class AttackCD extends Thread {
        public void run() {
            // 将攻击功能设置为冷却状态
            setAttackCoolDown(false);
            // 线程休眠
            try {
                Thread.sleep(getAttackCoolDownTime());
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 将攻击功能设置为攻击状态
            setAttackCoolDown(true);
            // 线程终止
            this.stop();
        }
    }
 
    class ReviveCD extends Thread {
        public void run() {             // Versuchen Sie es erneut             {                 Thread.sleep(5000);             } Catch (Ausnahme e) {                 e.printStackTrace();             }             Beast reviveBeast;             if (beast instanceof RedBuff) {                 reviveBeast = new RedBuff(3045, 3170, gameFrame);             } else if (beast instanceof Bear) {                 reviveBeast = new Bear(2800, 2855, gameFrame);             } else if (beast instanceof Bird) {                 reviveBeast = new Bird(3570, 3380, gameFrame);             } else if (beast instanceof Xiyi) {                 reviveBeast = new Xiyi(4585, 2365, gameFrame);             } else if (beast instanceof BlueBuff) {                 reviveBeast = new BlueBuff(4025, 2295, gameFrame);             } else {                 reviveBeast = new Wolf(4235, 1945, gameFrame);             }             gameFrame.objList.add(reviveBeast);             gameFrame.beast.beastList.add(reviveBeast);         }     } }
























 

16,

Paket com.sxt.beast;
 
import com.sxt.GameFrame;
 
öffentliche Klasse Bird erweitert Beast {     public Bird(int x, int y, GameFrame gameFrame) {         super(x, y, gameFrame);         setImg("img/红隼.jpg");         Breite = 122;         Höhe = 98;         setDis(125);         // TODO Automatisch generierter Konstruktor-Stub     } }
 








 

17,

Paket com.sxt.beast;
 
import com.sxt.GameFrame;
 
öffentliche Klasse BlueBuff erweitert Beast {     public BlueBuff(int x, int y, GameFrame gameFrame) {         super(x, y, gameFrame);         setImg("img/blueBuff.jpg");         Breite = 142;         Höhe = 176;         setDis(70);         // TODO Automatisch generierter Konstruktor-Stub     } }
 








 

18,

Paket com.sxt.beast;
 
import com.sxt.GameFrame;
 
öffentliche Klasse RedBuff erweitert Beast {     public RedBuff(int x, int y, GameFrame gameFrame) {         super(x, y, gameFrame);         setImg("img/redBuff.jpg");         Breite = 103;         Höhe = 150;         setDis(70);         // TODO Automatisch generierter Konstruktor-Stub     } }
 








19,

Paket com.sxt.beast;
 
import com.sxt.GameFrame;
 
öffentliche Klasse Wolf erweitert Beast {     public Wolf(int x, int y, GameFrame gameFrame) {         super(x, y, gameFrame);         setImg("img/wolf.jpg");         Breite = 145;         Höhe = 140;         setDis(65);         // TODO Automatisch generierter Konstruktor-Stub     } }
 





 



 

20,

Paket com.sxt.beast;
 
import com.sxt.GameFrame;
 
öffentliche Klasse Xiyi erweitert Beast {     public Xiyi(int x, int y, GameFrame gameFrame) {         super(x, y, gameFrame);         setImg("img/蜥蜴.jpg");         Breite = 111;         Höhe = 65;         setDis(125);         // TODO Automatisch generierter Konstruktor-Stub     } }
 








3. Präsentation der Ergebnisse

おすすめ

転載: blog.csdn.net/2302_76534913/article/details/135004664