来签个到,留个痕迹
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; //坦克能量耗尽!
}
}
}
/**
* 武器类
*
*
*/
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;
}
}
/**
* 坦克类
*
*
*/
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;
}
}