c #, делегаты, карточная игра - PullRequest
0 голосов
/ 18 ноября 2011

Я собираюсь написать игру в Блэк Джек с использованием делегатов, по словам моего друга, вы можете сделать это, имея один класс PlayerEventArgs: EventArgs, который управляет всеми событиями как рисованием и удержанием.Как?

Могу ли я из своего GUI-класса создать делегат, который ссылается на вышеупомянутый класс и вызвать методы внутри класса PlayerEventArgs, или как мне это сделать?

Должен ли я иметь два EventHandlersнапример: PlayerDrawEventHandler и PlayerHoldEventHandler в классе GUI ???

public event EventHandler<PlayerEventArgs> PlayerTurnCardEventHandler;

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Вы можете реализовать что-то вроде этого:

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))
1 голос
/ 18 ноября 2011

Да, хорошо иметь два разных обработчика событий для разных действий.

Отделите ваш код.

Создайте интерфейс, такой как IPlayer, в котором определены события.

Они создают объект Player, который реализует интерфейс IPlayer.

Создайте класс менеджера (в вашем случае движок игры), создайте экземпляр Класс игрока и подписка на события.

...