坦克大战之继承的实现

来签个到,留个痕迹

  • Main.java
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println(
                "*******************坦克大战之继承的实现*******************"
        );
        System.out.print(
                "请输入坦克的名字:"
        );
        String tankName = sc.nextLine();
        while(tankName.length() == 0){
            System.out.print(
                    "您的输入有误!请输入坦克的名字:"
            );
            tankName = sc.nextLine();
        }
        System.out.print(
                "请输入坦克的攻击力(INT以内的整数):"
        );
        String tankPower = sc.nextLine();
        while(tankPower.matches("^\\d+$") == false || !(tankPower.length() >= 1 && tankPower.length() <= 9)){
            System.out.print(
                    "您的输入有误!请重新输入坦克的攻击力(INT以内的整数):"
            );
            tankPower = sc.nextLine();
        }
        System.out.print(
                "请输入坦克的速度(INT以内的整数):"
        );
        String tankSpeed = sc.nextLine();
        while(tankPower.matches("^\\d+$") == false || !(tankSpeed.length() >= 1 && tankSpeed.length() <= 9)){
            System.out.print(
                    "您的输入有误!请重新输入坦克的速度(INT以内的整数):"
            );
            tankSpeed = sc.nextLine();
        }
        System.out.print(
                "请输入坦克的能量(INT以内的整数):"
        );
        String tankEnergy = sc.nextLine();
        while(tankPower.matches("^\\d+$") == false || !(tankEnergy.length() >= 1 && tankEnergy.length() <= 9)){
            System.out.print(
                    "您的输入有误!请重新输入坦克的能量(INT以内的整数):"
            );
            tankEnergy = sc.nextLine();
        }
        System.out.print(
                "请输入坦克的方向(1. 上 2. 下 3. 左 4. 右):"
        );
        String tankDir = sc.nextLine();
        while(tankPower.matches("^^\\d+$") == false || tankDir.length() != 1){
            System.out.print(
                    "您的输入有误!请重新输入坦克的方向(1. 上 2. 下 3. 左 4. 右):"
            );
            tankDir = sc.nextLine();
        }
        /*创建坦克类实例对象*/
        Tank tank = new Tank(
                Integer.valueOf(tankPower),
                Integer.valueOf(tankSpeed),
                Integer.valueOf(tankEnergy),
                tankName,
                Integer.valueOf(tankDir)
        );
        String tmp = "";
        System.out.println(
                "*******************输入任意字符可使坦克进行移动(输入\"quit\"即可停止运动!)*******************"
        );
        while(sc.hasNext()){
            tmp = sc.next();
            System.out.println(
                    "*******************坦克正在移动中*******************"
            );
            if(tmp.compareTo("quit") == 0) break;
            if(tank.attack() == -1) break;          //坦克能量耗尽!
        }
    }
}

  • Weapen.java
/**
 * 武器类
 *
 *
 */
public class Weapen {

    private String weapenString;
    private int power;
    private int speed;
    private int energy;

    Weapen(int power, int speed, int energy, String weapenString)
    {
        setPower(power);
        setSpeed(speed);
        setEnergy(energy);
        setWeapenString(weapenString);
    }

    public int getPower() {
        return power;
    }

    public void setPower(int power) {
        this.power = power;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    public int getEnergy() {
        return energy;
    }

    public void setEnergy(int energy) {
        this.energy = energy;
    }

    public String getWeapenString() {
        return weapenString;
    }

    public void setWeapenString(String weapenString) {
        this.weapenString = weapenString;
    }
}

  • Tank.java

/**
* 坦克类
*
*
*/

public class Tank extends Weapen{

   private int dir; /*坦克的方向: 1. 上 2. 下 3. 左 4. 右*/
   private String dirString[] = {"上", "下", "左", "右"};
   private int reduceEnergy;   //消耗的能量

   Tank(int power, int speed, int energy, String weapenString, int dir)
   {
       super(power, speed, energy, weapenString);
       setDir(dir);
       setReduceEnergy(0);
   }

   public int getDir() {
       return dir;
   }

   public void setDir(int dir) {
       this.dir = dir;
   }

   public int getReduceEnergy() {
       return reduceEnergy;
   }

   public void setReduceEnergy(int reduceEnergy) {
       this.reduceEnergy = reduceEnergy;
   }

   public double getReduceEnergyPercent(){

       int nowHasReduceEnergy = getReduceEnergy();
       int startEnergy = getEnergy();
       double percent = (nowHasReduceEnergy * 1.0) / (startEnergy * 1.0);

       return (percent >= 1.0 ? 1.0 : percent);
   }

   public int toCheckEnergy(){
       int nowHasReduceEnergy = getReduceEnergy();
       int startEnergy = getEnergy();
       double percent = getReduceEnergyPercent();

       if(percent >= 0.7){
           System.out.println("报告! 您已消耗超过70%的能量, 不得不为您降速度!以确保您的安全!");
           return (int)(getSpeed() * percent);
       }
       else if(percent >= 0.5){
           System.out.println("报告! 您已消耗超过50%的能量, 不得不为您降速度!以确保您的安全!");
           return (int)(getSpeed() * percent);
       }
       else if(percent >= 0.3){
           System.out.println("报告! 您已消耗超过30%的能量, 不得不为您降速度!以确保您的安全!");
           return (int)(getSpeed() * percent);
       }
       //return (int)(getSpeed() * percent);
       return 0;
   }

   public int attack(){
       setReduceEnergy(getReduceEnergy() + 1);     //能量消耗 + 1
       if(getReduceEnergyPercent() >= 1.0){
           System.out.println(
                   "抱歉坦克能量已经耗尽,已无法运动!"
           );
           return -1;
       }
       System.out.println(
               "我是坦克: " + getWeapenString() + ", 正在向 " + dirString[getDir() - 1] + " 运动, 速度: " + (getSpeed() - toCheckEnergy()) + ", 攻击力: " + getPower()
       );
       /*System.out.println(
               "当前已经消耗能量:" + (getReduceEnergyPercent() * 100) + "%"
       );*/
       System.out.printf("当前已经消耗能量:%.2f%%", (getReduceEnergyPercent() * 100));
       System.out.println();
       return 0;
   }
}

猜你喜欢

转载自blog.csdn.net/HKer_YM/article/details/91045216