這一篇沒有要講述什麼概念,只是一個小小的練習。想像兩個玩家在玩翹翹板,他們的起始條件相同,有相同的質量,待在等距離長的力臂兩端。為了獲得勝利,一邊採取增加質量的方式,另一邊採取增加力臂的方式。
玩家的類別
// 編寫人: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
我個人不覺得這是一次成功的練習,因為我是用主程式來調整兩個玩家物件的參數,比較輸贏,而非再設一個物件去做這件事,不過我認為做得到。我好奇的是,能否寫成讓這兩個玩家物件主動去探查對方的力矩值,然後調整自身的參數?下次再試看看。(後來我做了結合關係的範例練習,我判斷完全辦得到!)
沒有留言:
張貼留言