示例#1
0
 private Schotten2Game Complete(Schotten2Game game, GameState state, int handIndex)
 {
     game.State = _engine.CompleteTurn(game.State, handIndex);
     game.State.CurrentPlayerId = game.State.IsAttackersTurn ? game.AttackerId : game.DefenderId;
     _storage.UpdateGame(game);
     if (game.State.LastEvent != GameEvent.PlayCard)
     {
         _storage.SaveLog(game.MatchId, state, game.State.LastEvent, game.State.CurrentPlayerId, game.State.LastSection, handIndex);
     }
     return(game);
 }
示例#2
0
 private void SendState(Schotten2Game game)
 {
     Clients.User(game.AttackerId).UpdateState(_service.MapResponse(game, game.AttackerId));
     Clients.User(game.DefenderId).UpdateState(_service.MapResponse(game, game.DefenderId));
 }
示例#3
0
        public Schotten2Response MapResponse(Schotten2Game game, string playerId)
        {
            var isAttacker      = playerId == game.AttackerId;
            var isDefender      = playerId == game.DefenderId;
            var state           = game.State;
            var isCurrentPlayer = playerId == game.State.CurrentPlayerId;

            var handCards = new List <Card>();

            if (isAttacker)
            {
                handCards = state.AttackerCards;
            }
            else if (isDefender)
            {
                handCards = state.DefenderCards;
            }

            var OpponentCardsCount = 0;

            if (isAttacker)
            {
                OpponentCardsCount = state.DefenderCards.Count;
            }
            else if (isDefender)
            {
                OpponentCardsCount = state.AttackerCards.Count;
            }

            var gameOver = "";

            if (!string.IsNullOrEmpty(game.WinnerId))
            {
                if (isAttacker || isDefender)
                {
                    gameOver = playerId == game.WinnerId ? "Win" : "Loss";
                }
                else
                {
                    gameOver = "GameOver";
                }
            }

            var model = new Schotten2Response()
            {
                IsAttacker         = isAttacker,
                IsCurrentPlayer    = isCurrentPlayer,
                EnablePreparation  = isCurrentPlayer && state.EnablePreparation,
                NewCards           = state.NewCards,
                OilCount           = state.OilCount,
                Sections           = state.Sections,
                HandCards          = handCards,
                OpponentCardsCount = OpponentCardsCount,
                SiegeCardsCount    = state.SiegeCards.Count,
                DiscardCards       = state.DiscardCards,
                LastPlayer         = state.LastPlayer,
                LastEvent          = state.LastEvent.ToString("F"),
                LastSection        = state.LastSection,
                GameOver           = gameOver,
            };

            return(model);
        }