c#,代表,纸牌游戏
我将使用代理编写一个Black Jack游戏,据我的一个朋友说,您可以通过使用一个PlayerEventArgs:EventArgs类来完成此操作,该类将所有事件管理为draw and hold。怎么做 我可以从我的GUI类中创建一个引用上述类并调用PlayerEventArgs类中的方法的委托吗?或者我如何做到这一点 我是否应该在GUI类中有两个事件处理程序,例如:PlayerDrawEventHandler和PlayerHoldEventHandlerc#,代表,纸牌游戏,c#,delegates,event-handling,playing-cards,C#,Delegates,Event Handling,Playing Cards,我将使用代理编写一个Black Jack游戏,据我的一个朋友说,您可以通过使用一个PlayerEventArgs:EventArgs类来完成此操作,该类将所有事件管理为draw and hold。怎么做 我可以从我的GUI类中创建一个引用上述类并调用PlayerEventArgs类中的方法的委托吗?或者我如何做到这一点 我是否应该在GUI类中有两个事件处理程序,例如:PlayerDrawEventHandler和PlayerHoldEventHandler public event EventH
public event EventHandler<PlayerEventArgs> PlayerTurnCardEventHandler;
公共事件事件处理程序PlayerTurnCardEventHandler;
是的,对于不同的操作,最好有两个不同的事件处理程序
将代码解耦
创建一个接口,比如定义了事件的IPlayer
它们创建一个实现IPlayer接口的播放器对象
创建一个manager类(在您的例子中是游戏引擎)创建
Player类并订阅事件。您可以实现如下功能:
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
{ ... }
}
公共接口IMessage
{
}
公共类PlayerDraw:IMessage
{
公共AnyType参数{get;set;}
}
公共接口IMessageHandler,其中T:IMessage
{
无效句柄(T消息);
}
私有类消息处理程序:
IMessageHandler,
IMessageHandler
{
公共无效句柄(PlayerDraw消息)
{
//在这里使用你的信息;
}
公共无效句柄(PlayerHold消息)
{
//在这里使用你的信息;
}
...
}
公共类游戏管理器
{
专用只读词典_messageRoutes=
新字典();
公共无效注册表处理程序(操作处理程序),其中T:IMessage
{ ... }
公共无效发送(T消息),其中T:IMessage
{ ... }
}
现在,您需要一个注册消息处理程序的位置:
var messages = new MessageHandlers();
GameManager.RegisterHandler<PlayerDraw>(messages.Handle);
GameManager.RegisterHandler<PlayerHold>(messages.Handle);
var messages=newmessagehandlers();
GameManager.RegisterHandler(messages.Handle);
GameManager.RegisterHandler(messages.Handle);
并以以下方式使用您的机制:
GameManager.Send<PlayerDraw>(new PlayerDraw(Arguments))
GameManager.Send(新的PlayerDraw(参数))