2021年6月23日 星期三

JAVA 物件導向的概念-02 兩個物件的競爭(純練習)

   這一篇沒有要講述什麼概念,只是一個小小的練習。想像兩個玩家在玩翹翹板,他們的起始條件相同,有相同的質量,待在等距離長的力臂兩端。為了獲得勝利,一邊採取增加質量的方式,另一邊採取增加力臂的方式。

玩家的類別
// 編寫人:Lancelot Cheng
public class Player {
// 玩家
int mass,arm,tau;

void showParameter(){
System.out.println("質量:" + mass +" 力臂:" + arm);
}

void moment(){ // 計算力矩
tau = mass * 10 * arm; // 這邊為了讓其值都是整數,重力加速度設為 10 公尺每秒平方。
}

public int getTau() {
return tau;
}

public void setTau(int tau) {
this.tau = tau;
}

public int getMass() {
return mass;
}

public void setMass(int mass) {
this.mass = mass;
}

public int getArm() {
return arm;
}

public void setArm(int arm) {
this.arm = arm;
}
}

主程式
// 編寫人:Lancelot Cheng
public class Main {

public static void main(String[] args) {
System.out.println("兩個物件的翹翹板競爭");

// 似用類別 Player 產生兩個玩家,並給定相同的初值。
Player pM = new Player();
pM.setArm(1);
pM.setMass(4);
pM.showParameter();
pM.moment();
System.out.println(pM.getTau());

Player pA = new Player();
pA.setArm(1);
pA.setMass(4);
pA.showParameter();
pA.moment();
System.out.println(pA.getTau());

for (int i=1; i<=100; i++){
pM.moment();
pA.moment();
if( pM.getTau() <= pA.getTau() ){
pM.setMass(pM.getMass()+1); // pM 玩家透過增加質量來取得優勢。
}
else{
pA.setArm(pA.getArm()+1); // pA 玩家透過增加力臂來取得優劫。
}
System.out.println( i + " pM 的 M 與 A:" + pM.getMass() + ";" + pM.getArm()
+ " pA 的 M 與 A:" + pA.getMass() + ";" + pA.getArm());
}
}

}

兩邊值增加的過程,結果

兩個物件的翹翹板競爭
質量:4 力臂:1
40
質量:4 力臂:1
40
1  pM 的 M 與 A:5;1  pA 的 M 與 A:4;1
2  pM 的 M 與 A:5;1  pA 的 M 與 A:4;2
3  pM 的 M 與 A:6;1  pA 的 M 與 A:4;2

中間略~~ 97 pM 的 M 與 A:81;1 pA 的 M 與 A:4;21 98 pM 的 M 與 A:82;1 pA 的 M 與 A:4;21 99 pM 的 M 與 A:83;1 pA 的 M 與 A:4;21 100 pM 的 M 與 A:84;1 pA 的 M 與 A:4;21 Process finished with exit code 0

  我個人不覺得這是一次成功的練習,因為我是用主程式來調整兩個玩家物件的參數,比較輸贏,而非再設一個物件去做這件事,不過我認為做得到。我好奇的是,能否寫成讓這兩個玩家物件主動去探查對方的力矩值,然後調整自身的參數?下次再試看看。(後來我做了結合關係的範例練習,我判斷完全辦得到!)

沒有留言:

張貼留言