Presentation is loading. Please wait.

Presentation is loading. Please wait.

硬幣遊戲解題詳解 王豐緒 銘傳大學資訊工程學系.

Similar presentations


Presentation on theme: "硬幣遊戲解題詳解 王豐緒 銘傳大學資訊工程學系."— Presentation transcript:

1 硬幣遊戲解題詳解 王豐緒 銘傳大學資訊工程學系

2 題目 有四種硬幣(壹元、伍元、拾元、伍拾元),每種硬幣有自己的遊戲方式如下: 壹元硬幣 : 猜正反面的遊戲
伍元硬幣 : 擲骰子猜大小遊戲 ( 小 : 1, 2, 3; 大 : 4, 5, 6) 拾元硬幣 : 比大小遊戲 , 電腦與使用者從 13 張牌中隨機各挑一張 , 比大小。 伍拾元硬幣 : 猜猜數字遊戲 ( 電腦隨機產生介於1-20的數字,使用者每猜一個數字,如果答錯,電腦會顯示大一點或小一點 ) ,使用者最多可以猜4次。 寫一個遊戲程式,隨機產生 10 個硬幣,接著玩每個硬幣的遊戲,如果贏了,就獲得該幣值的錢,依此類推。最後,顯示遊戲者得了多少錢。

3 破題 資料的分析 功能的分析 硬幣(Coin) 遊戲(Game) 變與不變的分析 取得錢數; 啟動硬幣遊戲;每一種遊戲都需要啟動
一元(CoinOne) 五元(CoinFive) 十元(CoinTen) 五十元(CoinFifty) 遊戲(Game) Game1, Game2, Game3, Game4 變與不變的分析 (不變)每一種硬幣都有遊戲 (變)每一種硬幣都有自己專屬的遊戲 功能的分析 取得錢數; 啟動硬幣遊戲;每一種遊戲都需要啟動 (不變)取得錢數的動作; 啟動錢幣遊戲的方法; 遊戲的開始 (變)產生錢幣遊戲的動作; 遊戲的玩法內容

4 <<abstract>>
元件規劃與設計(一) <<abstract>> Coin 基本資料: protected int money ; protected Game gm; //不變 動作: int getMoney(); abstract Game genGame(); //製造動作 3. boolean runGame(MainWindow mw) { //樣版動作 gm = genGame(mw); //叫用製造動作 return gm.run(); //Game的樣板動作 }

5 <<abstract>>
元件規劃與設計(二) <<abstract>> Game 基本資訊 protected MainWindow mainWindow; 動作: private void displayWelcomeMessage() public abstract boolean start(); //卡榫 public boolean run() {//模板動作 :遊戲開始 displayWelcomeMessage(); return start(); //呼叫卡榫動作 } }

6 Coin類別 protected int money ; protected Game gm; public Coin(int m) {
money = m; } public int getMoney(){ return money; public abstract Game genGame(MainWindow mw) ; public boolean runGame(MainWindow mw) { gm=genGame(mw); //叫用製造動作 return gm.run(); //Game的樣板動作

7 Coin1類別 每一個繼承Coin的類別需要實作一個抽象動作
abstract Game genGam(MainWindow);//產生特殊的 遊戲 public Coin1() { super(1); } public Game genGame(MainWindow mw) return new Game1(mw);

8 Game類別 protected MainWindow mainWindow; public Game(MainWindow mw) {
} private void displayWelcomeMessage() { MessageBox msg = new MessageBox(mainWindow); msg.show("準備開始遊戲了,祝你好運!"); public boolean run() { //模板動作 displayWelcomeMessage(); return start(); //呼叫卡榫動作 public abstract boolean start(); //卡榫動作

9 Game1類別 每一個繼承Game的類別需要實作一個抽象動作 abstract boolean start(); //遊戲的內容
public boolean start() { int guess; InputBox ib = new InputBox(mainWindow); MessageBox msg = new MessageBox(mainWindow); msg.show("Welcome to the Coin Flip Game"); guess =ib.getInteger("Enter a guess (1/0):"); if ( flip() == guess) { msg.show("You win!"); return true; } else { msg.show("You lose!"); return false ;

10 測試主程式 public void run() { int response; int sum = 0; do {
randomCoins() ; //隨機產生20個硬幣 sum = 0; for (int i=0; i<20;i++){ if (coins[i].runGame(mainWindow)) { //if win sum += coins[i].getMoney(); } MessageBox msg = new MessageBox(mainWindow); msg.show("Totally, you win " + sum + "!"); ResponseBox rb = new ResponseBox(mainWindow) ; response = rb.prompt(" Continue ?"); } while (response == ResponseBox.YES) ;

11 小結 本範例用到了卡榫, 樣板動作, 製造動作 卡榫適用於子類別(應用)與父類別(抽象)的銜接 樣板動作適用於提供一個一致性界面
例如, 本例中Game1類別的start()銜接了Game類別 樣板動作適用於提供一個一致性界面 例如, 本例中Game類別的run()和Coin類別的runGame() 製造動作是一個抽象動作,適用於為子類別(應用) 產生特別的附屬類別 例如, 本例中Coin類別的genGame()動作


Download ppt "硬幣遊戲解題詳解 王豐緒 銘傳大學資訊工程學系."

Similar presentations


Ads by Google