Exemplo n.º 1
0
 public GameUser GetCurrentPlayerTurn()
 {
     if (turnsIndex >= GameUsers.Where((i) => i.State == GameUserState.Connected).ToList().Count)
     {
         turnsIndex = 0;
     }
     return(GameUsers.Where((i) => i.State == GameUserState.Connected).ToList()[turnsIndex]);
 }
Exemplo n.º 2
0
 public void EndTurn()
 {
     turnsIndex++;
     if (turnsIndex >= GameUsers.Where((i) => i.State == GameUserState.Connected).ToList().Count)
     {
         turnsIndex = 0;
     }
 }
Exemplo n.º 3
0
 public GameResult GetGameResult()
 {
     lock (gameLogicLock)
     {
         var usersRanked = GameUsers.OrderBy((i) => i.State != GameUserState.Connected).ThenBy((i) => i.Hand.Count).ToList();
         return(new GameResult
         {
             UsersRanking = usersRanked,
             RankingScores = gameRankingScores
         });
     }
 }
Exemplo n.º 4
0
        private bool IsVictory()
        {
            var gameUser = GetCurrentPlayerTurn();

            if (gameUser.Hand.Count <= 0)
            {
                return(true);
            }
            if (GameUsers.Where((i) => i.State == GameUserState.Connected).Count() == 1)
            {
                return(true);
            }
            return(false);
        }
Exemplo n.º 5
0
        private async Task AddPlayersToGame(List <Player> playersId, string gameId)
        {
            var list = new List <GameUsers>();

            foreach (var player in playersId)
            {
                var gameToUser = new GameUsers
                {
                    GameId = gameId,
                    UserId = player.Id
                };
                list.Add(gameToUser);
            }
            await _gameUsersRepository.AddRange(list);
        }
Exemplo n.º 6
0
        public void GameUserLeave(ClaimsPrincipal userLeaving, Action <long> onTurnTimeout, Action <long> onGameFinish)
        {
            lock (gameLogicLock)
            {
                var user = GameUsers
                           .Where((i) => i.UserPrincipal.GetUserLoginID() == userLeaving.GetUserLoginID())
                           .FirstOrDefault();
                if (GetCurrentPlayerTurn().UserPrincipal.GetUserLoginID() == user.UserPrincipal.GetUserLoginID() && CurrentGamePhase == GamePhase.TurnPhase)
                {
                    TurnTimer.Stop();
                    onTurnTimeout(GameLobbyID);
                }

                user.State = GameUserState.Disconnected;

                var rankToCountMappings = new Dictionary <string, int>();
                user.Hand.Select((i) => i.Value).ToList().ForEach((value) =>
                {
                    if (rankToCountMappings.ContainsKey(value.Rank))
                    {
                        rankToCountMappings[value.Rank] = rankToCountMappings[value.Rank] + 1;
                    }
                    else
                    {
                        rankToCountMappings[value.Rank] = 1;
                    }
                });
                var handList = new List <string>();
                foreach (var pair in rankToCountMappings)
                {
                    handList.Add($"×{pair.Value} {pair.Key}");
                }
                ActionHistory.Add($"{user.UserPrincipal.GetUserName()} has left. His cards are out of play: {String.Join(",", handList)}");

                if (IsVictory())
                {
                    onGameFinish(GameLobbyID);
                }
            }
        }
Exemplo n.º 7
0
 public GameUser GetPlayer(string userName)
 {
     return(GameUsers
            .Where(item => item.UserPrincipal.GetUserName() == userName)
            .FirstOrDefault());
 }
Exemplo n.º 8
0
 public GameUser GetPlayer(ClaimsPrincipal user)
 {
     return(GameUsers
            .Where(item => item.UserPrincipal.GetUserLoginID() == user.GetUserLoginID())
            .FirstOrDefault());
 }