C#使用不同的规则建模基于回合的回合系统

时间:2010-06-24 10:33:32

标签: c#

我正在迈出C#的第一步。

我正在构建一个基于回合制的纸牌游戏,经过几轮比赛,每一轮都有不同的规则。

这些规则事先是已知的。在某些轮次中,有玩家无法玩的套装,在其他轮次中有特朗普套装。在每轮比赛中,4名玩家轮流玩每张13张牌。然后对牌组进行重新洗牌/重新处理,并开始一个不同规则的新一轮。

我在C#

中尝试对此进行建模时有点困惑

我的基本卡片/甲板课程使用通常的shuffle套牌和交易手法完成,但我正在努力实现这一轮系统的最佳方法。

你能帮助进行类/函数建模吗?我可以从那里编写代码。

谢谢! 佩德罗

3 个答案:

答案 0 :(得分: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;
        }
    }

答案 1 :(得分:1)

答案 2 :(得分:0)

Player将通过他们正在播放的Table与当前有效的Rule进行交互。

在每个回合结束时,Table将其current_rule字段设置为需要用于下一回合的Rule的相应子类。

Rule子类型会公开bool is_legal_to_play(Card card, ...)int get_score_for(Player player, ...)之类的方法,甚至像float rate_move(Card card, ...)这样的AI促进方法(然后实际播放具有最大rate_move值的方法)。

Table会公开方法/属性,例如Rule get_current_rules()Player get_current_player()Player get_player_to_the_right_of(Player player),...

请注意我实际上没有任何C#经验;这是一个非常通用的OOP方案,不遵循任何特定的模板。苏我。

省略号涵盖了根据您的规则可能需要的其他参数。