我正在實現一個簡單的「玩你的卡片」(否則稱爲更高/更低)的遊戲。如果你在規則非常簡單之前還沒有遇到過它。使用一套卡(例如心)。一次抽出一張卡,目的是正確猜測下一張卡的面值是高於還是低於先前抽取的卡的面值。Java - 簡單遊戲的設計建議
遊戲的邏輯並不特別複雜,我並不擔心這一點。我想出了一個設計,但我並不完全滿意。有幾個方面我確信它可以得到改進,這就是我希望得到您的建議。下面是這個類的接口(用於額外的理解意見,不實評論):
public interface PlayYourCardsRight {
/**
* Get the number of cards remaining with higher face values than the previously
* drawn card
* @return
*/
public abstract int getNumberCardsHigher();
/**
* Get the number of cards remaining with lower face values than the previously
* drawn card
* @return
*/
public abstract int getNumberCardsLower();
/**
* Get all cards that have already been drawn in the order they were drawn in
*
*/
public abstract List<Card> getPlayedCards();
/**
* Simple prediction algorithm - if there are more cards left in the deck with
* lower face values than the previous card, then predict 'Lower', if there
* are more cards left in the deck with higher face values then predict
* 'Higher', if there are equal numbers of higher/lower cards pick 'higher' or 'lower'
* at random
*
* Prediction is an Enum (Higher/Lower/None)
*
*/
public abstract Prediction getPrediction();
/*
* Draw the next card at random
*/
public abstract void nextRound();
/**
* Specifiy what the next card should be
*
* @param card
*/
public abstract void nextRound(Card card);
}
正如你可以看到它是所有相當自我解釋和簡單。這裏是我的問題:
我不希望構造函數自動繪製一張卡片。這意味着最初沒有「先前繪製的卡」。我在Prediction
枚舉中有一個NO PREDICTION
值,但由於沒有「先前繪製的牌」,所以getNumberCardsHigher()
和getNumberCardsLower()
方法不能返回理智值(當套牌中的所有牌都被繪製時,它們不能返回理智值)。
顯然,我可以簡單地拋出一個異常,但這看起來像是矯枉過正 - 尤其是隨後所有對這些方法的調用都必須被包裝在try/catch中。我也不滿意返回一個負值,因爲如果有人忘記/不能檢查它們,很容易導致一些錯誤。
歡迎任何建議!
在這種情況下,我認爲這兩種方法都不會返回'card.count'。這個解決方案表明,有13張牌更高,13張牌更低,這意味着總共26張牌,即使在一套西裝和遊戲中只有13張牌。即使我們知道發生了什麼,想象將這些信息呈現給用戶。這似乎是一個非常不滿意的行爲。 – Peter 2010-07-02 16:45:57
@Peter:我的推理如下:一張卡比卡片的缺失更低和更高。這是兩個相反的狀態在虛無概念上是平等的情況之一。這對我來說似乎並不直觀,但這只是我的看法。當沒有卡時,兩者都應該返回0,所以它們在該階段也是相等的。在開始時,它們應該返回相反的0,在這種情況下card.count。 – JRL 2010-07-02 17:05:03