練習 1: 文字版格鬥遊戲
最原始的寫法:
Javabean 類:
import java.util.Random;
public class Role {
private int blood;
private String name;
public Role() {
}
public Role(int blood, String name) {
this.blood = blood;
this.name = name;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 攻擊方法
// 呼叫方法的物件攻擊該方法的形參
public void attack(Role role) {
// 計算造成的傷害
// 傷害是一個隨機數, 範圍是 [1, 20]
Random r = new Random();
// 得到造成的傷害
int hurt = r.nextInt(20) + 1;
// 獲取被攻擊者原來的血量
int currentBlood = role.getBlood();
// 計算被攻擊者現在剩餘的血量
int remainBlood = currentBlood - hurt;
// 當前血量低於造成的傷害時, 剩餘血量將變為負數, 顯然不可能, 此時將其賦值為 0
remainBlood = remainBlood > 0 ? remainBlood : 0;
// 將剩餘血量賦值給被攻擊的物件
role.setBlood(remainBlood);
// 列印攻擊的過程
System.out.println(this.getName() + "打了" + role.getName() + "一下, 造成了 " + hurt + " 點傷害, " +
role.getName() + "還剩下 " + role.getBlood() + " 點血量.");
}
}
測試類:
public class GameTest {
public static void main(String[] args) {
// 建立一個角色
Role role1 = new Role(100, "喬峰");
// 建立另一個角色
Role role2 = new Role(100, "鳩摩智");
// 開始格鬥, 回合制遊戲
while (true) {
// role1 先攻擊 role2
role1.attack(role2);
// 判斷 role2 剩餘血量, 從而決定迴圈是否繼續
if (role2.getBlood() == 0) {
System.out.println(role1.getName() + "K.O. 了" + role2.getName());
break;
}
// 回合制遊戲, 輪到 role2 攻擊 role1 了
// role2 攻擊 role1
role2.attack(role1);
// 判斷 role1 剩餘血量, 從而決定迴圈是否繼續
if (role1.getBlood() == 0) {
System.out.println(role2.getName() + "K.O. 了" + role1.getName());
break;
}
}
}
}
執行結果:
喬峰打了鳩摩智一下, 造成了 17 點傷害, 鳩摩智還剩下 83 點血量.
鳩摩智打了喬峰一下, 造成了 9 點傷害, 喬峰還剩下 91 點血量.
喬峰打了鳩摩智一下, 造成了 6 點傷害, 鳩摩智還剩下 77 點血量.
鳩摩智打了喬峰一下, 造成了 1 點傷害, 喬峰還剩下 90 點血量.
喬峰打了鳩摩智一下, 造成了 11 點傷害, 鳩摩智還剩下 66 點血量.
鳩摩智打了喬峰一下, 造成了 18 點傷害, 喬峰還剩下 72 點血量.
喬峰打了鳩摩智一下, 造成了 4 點傷害, 鳩摩智還剩下 62 點血量.
鳩摩智打了喬峰一下, 造成了 7 點傷害, 喬峰還剩下 65 點血量.
喬峰打了鳩摩智一下, 造成了 12 點傷害, 鳩摩智還剩下 50 點血量.
鳩摩智打了喬峰一下, 造成了 4 點傷害, 喬峰還剩下 61 點血量.
喬峰打了鳩摩智一下, 造成了 19 點傷害, 鳩摩智還剩下 31 點血量.
鳩摩智打了喬峰一下, 造成了 13 點傷害, 喬峰還剩下 48 點血量.
喬峰打了鳩摩智一下, 造成了 7 點傷害, 鳩摩智還剩下 24 點血量.
鳩摩智打了喬峰一下, 造成了 20 點傷害, 喬峰還剩下 28 點血量.
喬峰打了鳩摩智一下, 造成了 19 點傷害, 鳩摩智還剩下 5 點血量.
鳩摩智打了喬峰一下, 造成了 1 點傷害, 喬峰還剩下 27 點血量.
喬峰打了鳩摩智一下, 造成了 8 點傷害, 鳩摩智還剩下 0 點血量.
喬峰K.O. 了鳩摩智