c#,委托,纸牌游戏

本文关键字:纸牌游戏 委托 | 更新日期: 2023-09-27 18:14:59

我将使用委托编写一个黑杰克游戏,根据我的一个朋友的说法,你可以通过一个PlayerEventArgs:EventArgs类来实现这一点,该类管理所有事件作为draw和hold。如何?

我可以从我的gui类中创建一个引用上述类的委托,并调用PlayerEventArgs类中的方法,或者我怎么做?

我应该有两个eventandler例如:PlayerDrawEventHandler和PlayerHoldEventHandler在gui类??
public event EventHandler<PlayerEventArgs> PlayerTurnCardEventHandler;

c#,委托,纸牌游戏

是的,对于不同的动作有两个不同的事件处理程序是很好的。

解耦代码

创建一个接口,像IPlayer一样,在其中定义了事件。

他们创建了一个播放器对象来实现IPlayer接口。

创建一个管理器类(在你的例子中是游戏的引擎)玩家类和订阅事件

你可以这样实现:

public interface IMessage
{
}
public class PlayerDraw: IMessage
{
    public AnyType Arguments { get; set; }
}
public interface IMessageHandler<T> where T: IMessage
{
    void Handle(T message);
}
private class MessageHandlers: 
   IMessageHandler<PlayerDraw>, 
   IMessageHandler<PlayerHold>
{
    public void Handle(PlayerDraw message)
    {
        // Use your message here;
    }
    public void Handle(PlayerHold message)
    {
        // Use your message here;
    }
    ...
}
public class GameManager
{
    private readonly Dictionary<Type, Action<IMessage>> _messageRoutes = 
        new Dictionary<Type, Action<IMessage>>();
    public void RegisterHandler<T>(Action<T> handler) where T : IMessage
    { ... }
    public void Send<T>(T message) where T : IMessage
    { ... }
}

现在您需要一个地方来注册您的消息处理程序:

var messages = new MessageHandlers();
GameManager.RegisterHandler<PlayerDraw>(messages.Handle);
GameManager.RegisterHandler<PlayerHold>(messages.Handle);

并以这种方式使用您的机制:

GameManager.Send<PlayerDraw>(new PlayerDraw(Arguments))