2010-06-24 57 views
3

我正在C#中邁出第一步。C#建模基於不同規則的輪迴系統

我正在構建一個基於轉向的紙牌遊戲,經歷了幾輪,每一輪都有不同的規則比以前。

這些規則是事先知道的。在某些回合中有球員不能上場的套裝,在其他回合中有套牌。在每一輪中,4名球員輪流打出他們各自擁有的13張牌。然後該牌組被重新洗牌/重新處理,並開始有不同規則的新一輪。

我有點困在嘗試建模在C#

我與往常一樣洗牌甲板和交易手方法來完成我的基本卡/甲板類,但我掙扎的最佳方式實施本輪系統。

您可以幫助進行類/函數建模嗎?我可以從那裏編碼。

謝謝! Pedro

+0

我是非初學者,我甚至無法弄清楚這個主題是什麼。請簡化事情。 – leppie 2010-06-24 10:37:22

+0

感謝您的答案,戰略模式是我一直在尋找的。非常有幫助 – pmanacas 2010-06-28 00:26:40

+0

那麼你接受答案然後:) – epitka 2011-02-12 15:50:16

回答

1

爲您的規則擁有一個基類,併爲每一輪實施每個特定規則。在這個類之外,有一些邏輯可以知道基於當前回合給出的具體規則,然後使用在每個派生類中都會覆蓋的共享邏輯(類似於IsValidMove?)。

public abstract class BaseRule 
    { 
     public virtual bool IsValidMove(object moveDescription); 
    } 

    public class Round1Rule : BaseRule 
    { 
     public override bool IsValidMove(object moveDescription) 
     { 
      return true; 
     } 
    } 

    public class Round2Rule : BaseRule 
    { 
     public override bool IsValidMove(object moveDescription) 
     { 
      return false; 
     } 
    } 
0

Player s就接口,通過Table他們是在玩上,與當前的一組Rule小號當前有效。

在每回合結束時,Table將其current_rule字段設置爲需要用於下一回合的Rule的適當子類。

Rule亞型會暴露像bool is_legal_to_play(Card card, ...)int get_score_for(Player player, ...),甚至AI-便利的方法,如float rate_move(Card card, ...)(當時實際播放那個以最大rate_move值)的方法。

Table會暴露的方法/屬性,如Rule get_current_rules()Player get_current_player()Player get_player_to_the_right_of(Player player),...

請注意,我沒有任何實際的C#經驗;這是一個非常通用的OOP方案,不符合任何特定的模板。告我。

省略號涵蓋了可能需要的其他參數,具體取決於您的規則。