/// <summary> /// a method which returns the statitics object of a user in a game /// </summary> public static List <UserStatsInGame> FindUserStatsInGame(int gameID) { DataTable dt = UsersInGamesDal.FindUsersInGame(gameID); List <UserStatsInGame> ret = new List <UserStatsInGame>(); foreach (DataRow dr in dt.Rows) { ret.Add(new UserStatsInGame(dr)); } return(ret); }
/// <summary> /// Returns The users elo at season /// </summary> public int GetUserEloAtSeason(int seasonID) { try { int elo = (int)(double)UsersInGamesDal.FindPlayerRankInSeason(seasonID, username)["ELO"]; return(elo); } catch { int elo = (int)UsersInGamesDal.FindPlayerStartRankInSeason(seasonID, username)["ELO"]; return(elo); } }
/// <summary> /// a method which ends the game /// </summary> private void EndProgression() { //change room status gameRoom.status = GameStatus.Ended; //change elo List <Player> sortedPlayers = SortedPlayerList(); List <int> eloChanges = new List <int>(); for (int i = 0; i < sortedPlayers.Count; i++) { eloChanges.Add(0); } //SME algorithm for (int i = 0; i < sortedPlayers.Count - 1; i++) { //winner part if (sortedPlayers[i].numberOfCards != sortedPlayers[i + 1].numberOfCards) { eloChanges[i] += Elo.ChangeInRating(sortedPlayers[i].user.elo, sortedPlayers[i + 1].user.elo, 1); } else//if draw { eloChanges[i] += Elo.ChangeInRating(sortedPlayers[i].user.elo, sortedPlayers[i + 1].user.elo, 0.5); } //loser part if (sortedPlayers[sortedPlayers.Count - 1 - i].numberOfCards != sortedPlayers[sortedPlayers.Count - 2 - i].numberOfCards) { eloChanges[sortedPlayers.Count - 1 - i] += Elo.ChangeInRating(sortedPlayers[sortedPlayers.Count - 1 - i].user.elo, sortedPlayers[sortedPlayers.Count - 2 - i].user.elo, 0); } else//if draw { eloChanges[sortedPlayers.Count - 1 - i] += Elo.ChangeInRating(sortedPlayers[sortedPlayers.Count - 1 - i].user.elo, sortedPlayers[sortedPlayers.Count - 2 - i].user.elo, 0.5); } } //changeXp List <int> xpChanges = new List <int>(); for (int i = 0; i < sortedPlayers.Count; i++) { xpChanges.Add(50 / (sortedPlayers[i].numberOfCards + 1)); } //updateAll for (int i = 0; i < sortedPlayers.Count; i++) { Player p = sortedPlayers[i]; UsersInGamesDal.UpdateUserInGame(p.user.username, gameRoom.GameID, xpChanges[i], eloChanges[i], i == 0, p.numberOfCards); p.user.xp += xpChanges[i]; } //End Game For All Broadcast(new EndGameBroadcast()); }
/// <summary> /// Gets a datatable of all players whose rank this season is corresponding to the rank id /// </summary> public static DataTable GetAllPlayersInRankThisSeasonDataTable(int rankID) { return(UsersInGamesDal.FindAllPlayersInRankInSeason(rankID, DAL.SeasonsDal.GetCurrentSeason())); }
/// <summary> /// adds a user to the game /// </summary> public Player AddUserToGame(User user) { UsersInGamesDal.AddUserToGame(user.username, this.GameID); return(game.AddPlayer(user)); }
/// <summary> /// returns how many games this user has lost /// </summary> public int HowManyGamesLost() { return(UsersInGamesDal.HowManyGamesUserWonOrLost(username, false)); }
/// <summary> /// returns how many games this user has won /// </summary> public int HowManyGamesWon() { return(UsersInGamesDal.HowManyGamesUserWonOrLost(username, true)); }
/// <summary> /// Returns The users beginning elo at season /// </summary> public int GetUserBeginningEloAtSeason(int seasonID) { int elo = (int)UsersInGamesDal.FindPlayerStartRankInSeason(seasonID, username)["ELO"]; return(elo); }
/// <summary> /// a constructor that finds user in game statistics /// </summary> public UserStatsInGame(string user, int gameID) : this(UsersInGamesDal.FindUserInGame(user, gameID)) { }