我将使用代表写一个黑杰克游戏,据我的一个朋友说,你可以通过一个PlayerEventArgs:EventArgs类来管理所有事件作为绘制和保持来实现这一点。怎么样?
我可以从我的GUI类创建一个引用上面的类的委托,并调用PlayerEventArgs类中的方法或者我该怎么做?
我应该有两个EventHandler,例如:GUI类中的PlayerDrawEventHandler和PlayerHoldEventHandler ???
public event EventHandler<PlayerEventArgs> PlayerTurnCardEventHandler;
答案 0 :(得分:1)
是的,为不同的操作提供两个不同的事件处理程序是很好的。
解密你的代码。
创建一个接口,就像IPlayer一样,在其中定义了事件。
他们创建一个实现IPlayer接口的Player对象。
创建一个经理类(在你的情况下是游戏的引擎)创建一个实例 玩家类并订阅活动。
答案 1 :(得分: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))