c#,委托,纸牌游戏
本文关键字:纸牌游戏 委托 | 更新日期: 2023-09-27 18:14:59
我将使用委托编写一个黑杰克游戏,根据我的一个朋友的说法,你可以通过一个PlayerEventArgs:EventArgs类来实现这一点,该类管理所有事件作为draw和hold。如何?
我可以从我的gui类中创建一个引用上述类的委托,并调用PlayerEventArgs类中的方法,或者我怎么做?
我应该有两个eventandler例如:PlayerDrawEventHandler和PlayerHoldEventHandler在gui类??public event EventHandler<PlayerEventArgs> PlayerTurnCardEventHandler;
是的,对于不同的动作有两个不同的事件处理程序是很好的。
解耦代码
创建一个接口,像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))