我正在迈出C#的第一步。
我正在构建一个基于回合制的纸牌游戏,经过几轮比赛,每一轮都有不同的规则。
这些规则事先是已知的。在某些轮次中,有玩家无法玩的套装,在其他轮次中有特朗普套装。在每轮比赛中,4名玩家轮流玩每张13张牌。然后对牌组进行重新洗牌/重新处理,并开始一个不同规则的新一轮。
我在C#
中尝试对此进行建模时有点困惑我的基本卡片/甲板课程使用通常的shuffle套牌和交易手法完成,但我正在努力实现这一轮系统的最佳方法。
你能帮助进行类/函数建模吗?我可以从那里编写代码。
谢谢! 佩德罗
答案 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方案,不遵循任何特定的模板。苏我。
省略号涵盖了根据您的规则可能需要的其他参数。