示例#1
0
        private async Task SendGameStatusToPlayer(GameModel game, PlayerModel player)
        {
            var gameStatus      = GetGameStatusForPlayer(game, player);
            var userConnections = _connections.GetConnectionsByKey(player.UserId);

            var message = new GameStatusMessage
            {
                GameStatus = gameStatus
            };

            await SendMessageToClientsAsync("GameStatus", userConnections, message);
        }
        private string ParseGameStatusMessage(GameStatusMessage message)
        {
            switch (message.GameStatusChangeValue)
            {
            case GameStatusMessage.GameStatusChange.GameInitialised:
                return("New game was initialised.");

            case GameStatusMessage.GameStatusChange.StartTurn:
                return($"{message.Player.Name}'s turn.");

            default:
                return("Unknown message");
            }
        }
示例#3
0
        private void HandleMessage(GameMessage message)
        {
            if (message is PlayerActionMessage)
            {
                PlayerActionMessage actionMessage     = (PlayerActionMessage)message;
                CardPanel           relevantCardPanel = actionMessage.Player == _game.PlayerOne ? pYourHand : pOpponentsHand;
                switch (actionMessage.PlayerActionValue)
                {
                case PlayerActionMessage.PlayerAction.DrawDiscard:
                    relevantCardPanel.AddCard(actionMessage.Card);
                    pStacks.DiscardCount--;
                    pStacks.VisibleDiscard = _game.GetVisibleDiscard();
                    pActions.AllowDraw     = false;
                    pActions.AllowTake     = false;
                    pActions.AllowDiscard  = true;
                    break;

                case PlayerActionMessage.PlayerAction.DrawStock:
                    pStacks.StockCount--;
                    relevantCardPanel.AddCard(actionMessage.Card);
                    pActions.AllowDraw    = false;
                    pActions.AllowTake    = false;
                    pActions.AllowDiscard = true;
                    break;

                case PlayerActionMessage.PlayerAction.SetDiscard:
                    pStacks.DiscardCount++;
                    pStacks.VisibleDiscard = actionMessage.Card;
                    relevantCardPanel.RemoveCard(actionMessage.Card);
                    pActions.AllowDraw    = false;
                    pActions.AllowTake    = false;
                    pActions.AllowDiscard = false;
                    break;

                case PlayerActionMessage.PlayerAction.Knock:
                    // TODO: handle Knock message
                    break;

                default:
                    break;
                }
            }
            else if (message is GameStatusMessage)
            {
                GameStatusMessage statusMessage = (GameStatusMessage)message;
                switch (statusMessage.GameStatusChangeValue)
                {
                case GameStatusMessage.GameStatusChange.GameInitialised:
                    // TODO: assumes PlayerOne is always the human player
                    pYourHand.Clear();
                    InitialisePlayerCardPanel(pYourHand);
                    foreach (Card c in _game.PlayerOne.GetCards())
                    {
                        pYourHand.AddCard(c);
                    }

                    pOpponentsHand.Clear();
                    InitialiseOpponentCardPanel(pOpponentsHand);
                    foreach (Card c in _game.PlayerTwo.GetCards())
                    {
                        pOpponentsHand.AddCard(c);
                    }

                    InitialiseStacks(_game.GetStockCount(), _game.GetVisibleDiscard());
                    InitialisePlayerActions();
                    break;

                case GameStatusMessage.GameStatusChange.StartTurn:
                    if (statusMessage.Player == _game.PlayerOne)
                    {
                        pActions.AllowTake = true;
                        pActions.AllowDraw = true;
                    }
                    else
                    {
                        pActions.AllowTake = false;
                        pActions.AllowDraw = false;
                    }
                    break;

                default:
                    break;
                }
            }
        }