1. 程式人生 > >[基礎題] 5.(*)按如下要求編寫Java應用程式:(1)編寫一個用於表示戰鬥能力的介面Fightable,

[基礎題] 5.(*)按如下要求編寫Java應用程式:(1)編寫一個用於表示戰鬥能力的介面Fightable,

/*5.(*)按如下要求編寫Java應用程式:
(1)編寫一個用於表示戰鬥能力的介面Fightable,
該介面包含:整型常量MAX;
方法void win(),用於描述戰鬥者獲勝後的行為;
方法int injure(int x),用於描述戰鬥者受傷後的行為。
(2)編寫一個非抽象的戰士類Warrior,實現介面Fightable。
該類中包含兩個整型變數:經驗值experience和血液值blood。
當戰士獲勝後經驗值會增加,而受傷後血液值會減少x,
並且當戰鬥者的血液值低於MAX時會輸出危險提示。
(3)編寫戰士類Warrior的子類BloodWarrior,
該類建立的戰士在血液值低於MAX/2時才會輸出危險提示。
(4)編寫主類TestWarrior,對上述介面和類進行測試。

 * */

//勝利的話 :血液不變,經驗+10
//受傷的話 :血液-10;
//如果血液低於30提示危險,等於就提示(死亡)K.0
//輸入Pk回合數,輸入PK結果,"y代表勝利,n代表受傷"
//拓展功能:當經驗值滿100時,等級+1,初始化血液100,經驗值初始化為0

import java.util.Scanner;

public class Test_05 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		BloodWarrior s1 = new BloodWarrior();
		s1.blood = 100;//初始血液值
		System.out.print("請輸入回合數:");
		int bout = sc.nextInt();
		
		System.out.println("請輸入Pk結果 (y勝利/n受傷):");
		char PK = sc.next().charAt(0);

		s1.pk(PK, bout);
	}
}

	interface Fightable {
		int max = 30;// 危險值
		void win();// 用於描述戰鬥者獲勝後的行為
		int injure(int x);// 用於描述戰鬥者受傷後的行為
	}

	class Warrinor implements Fightable {
		int blood;// 定義血液值
		int experience;// 定義經驗值
		int grade;

		public void win() {
		};

		public int injure(int x) {
			return x;
		}
	}

	class BloodWarrior extends Warrinor {
		public void win() {
			experience += 10;
			System.out.println("血液值:" + blood + "/經驗值:" + experience+"/等級:"+grade);
			if(experience == 100){
				grade += 1;
				experience=0;
				blood = 100 ;
				System.out.println("恭喜!等級提升!"+"等級:"+grade);
			}
		}

		public int injure(int x) {
			if (blood <= max) {
				System.out.println("*危險!血液值過低,請及時補血!");
			}// + "血液值:" + blood + "/經驗值:" + experience+"/等級:"+grade
			blood -= x;
			System.out.println("受傷/血液值:" + "-" + x + "\t 剩餘血液值:" + blood + "/經驗值:" + experience+"/等級:"+grade);		
//			if(grade <= 0 && blood == 0){
				if (blood == 0) {
					System.out.println("K.O");// knock out
					System.exit(0);//想直接整個程式的結束用System.exit(0);
//				}
			}return blood;
		}

		public void pk(char PK, int bout) {
			for (int i = 1; i <= bout; i++) {			
				if (PK == 'y') {
					win();
				}
				if (PK == 'n') {
					injure(10);
				}	
			}
		}
	}