0

我将使用委托编写一个 Black Jack 游戏,据我的一位朋友说,您可以通过一个 PlayerEventArgs:EventArgs 类来管理所有事件作为抽签和保持来实现这一点。如何?

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

我应该有两个事件处理程序,例如:GUI 类中的 PlayerDrawEventHandler 和 PlayerHoldEventHandler 吗???

public event EventHandler<PlayerEventArgs> PlayerTurnCardEventHandler;
4

2 回答 2

1

你可以实现这样的事情:

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))
于 2011-11-18T11:21:22.503 回答
1

是的,最好有两个不同的事件处理程序来处理不同的操作。

解耦你的代码。

创建一个接口,例如 IPlayer,其中定义了事件。

他们创建了一个实现 IPlayer 接口的 Player 对象。

创建一个管理器类(在您的情况下是游戏的引擎)创建一个 Player 类的实例并订阅事件。

于 2011-11-18T10:18:12.677 回答