コード例 #1
0
        public void UpdateMetrics(Models.Team Team1, Models.Team Team2, int Score1, int Score2)
        {
            using (var dbContext = new Foostats2.Models.FoostatsContext()){
                Team1 = dbContext.Teams.Include(x => x.Player1).Include(x => x.Player2).SingleOrDefault(x => x.Id == Team1.Id);
                Team2 = dbContext.Teams.Include(x => x.Player1).Include(x => x.Player2).SingleOrDefault(x => x.Id == Team2.Id); // reload

                var gameInfo      = GameInfo.DefaultGameInfo;
                var t1p1Trueskill = dbContext.Trueskill.
                                    Include(x => x.Player).
                                    FirstOrDefault(x => x.Player.Id == Team1.Player1.Id);
                var t1p2Trueskill = Team1.Player2 == null ? null :
                                    dbContext.Trueskill.
                                    Include(x => x.Player).
                                    FirstOrDefault(x => x.Player.Id == Team1.Player2.Id);
                var t2p1Trueskill = dbContext.Trueskill.
                                    Include(x => x.Player).
                                    FirstOrDefault(x => x.Player.Id == Team2.Player1.Id);
                var t2p2Trueskill = Team2.Player2 == null ? null :
                                    dbContext.Trueskill.
                                    Include(x => x.Player).
                                    FirstOrDefault(x => x.Player.Id == Team2.Player2.Id);
                Rating t1p1, t1p2, t2p1, t2p2;
                t1p1 = t1p1Trueskill != null ? new Rating(t1p1Trueskill.Mean, t1p1Trueskill.StandardDeviation) : gameInfo.DefaultRating;
                t1p2 = t1p2Trueskill != null ? new Rating(t1p2Trueskill.Mean, t1p2Trueskill.StandardDeviation) : gameInfo.DefaultRating;
                t2p1 = t2p1Trueskill != null ? new Rating(t2p1Trueskill.Mean, t2p1Trueskill.StandardDeviation) : gameInfo.DefaultRating;
                t2p2 = t2p2Trueskill != null ? new Rating(t2p2Trueskill.Mean, t2p2Trueskill.StandardDeviation) : gameInfo.DefaultRating;

                var team1player1 = new Player(Team1.Player1.Id);
                var team1player2 = Team1.Player2 == null ? null : new Player(Team1.Player2.Id);
                var team2player1 = new Player(Team2.Player1.Id);
                var team2player2 = Team2.Player2 == null ? null : new Player(Team2.Player2.Id);

                var team1 = new Team();
                team1.AddPlayer(team1player1, t1p1);
                if (team1player2 != null)
                {
                    team1.AddPlayer(team1player2, t1p2);
                }

                var team2 = new Team();
                team2.AddPlayer(team2player1, t2p1);
                if (team2player2 != null)
                {
                    team2.AddPlayer(team2player2, t2p2);
                }

                var teams = Teams.Concat(team1, team2);

                var team1Place = Score1 >= Score2 ? 1 : 2;
                var team2Place = Score2 >= Score1 ? 1 : 2;
                var newRatings = TrueSkillCalculator.CalculateNewRatings(gameInfo, teams, team1Place, team2Place);

                var    team1player1NewRating = newRatings[team1player1];
                Rating team1player2NewRating = team1player2 == null ? null : newRatings[team1player2];
                var    team2player1NewRating = newRatings[team2player1];
                Rating team2player2NewRating = team2player2 == null ? null : newRatings[team2player2];


                if (t1p1Trueskill != null)
                {
                    t1p1Trueskill.Mean = team1player1NewRating.Mean;
                    t1p1Trueskill.StandardDeviation  = team1player1NewRating.StandardDeviation;
                    t1p1Trueskill.ConservativeRating = team1player1NewRating.ConservativeRating;
                }
                else
                {
                    dbContext.Trueskill.Add(new Models.Trueskill()
                    {
                        Player             = Team1.Player1,
                        Mean               = team1player1NewRating.Mean,
                        StandardDeviation  = team1player1NewRating.StandardDeviation,
                        ConservativeRating = team1player1NewRating.ConservativeRating
                    });
                }

                if (team1player2 != null)
                {
                    if (t1p2Trueskill != null)
                    {
                        t1p2Trueskill.Mean = team1player2NewRating.Mean;
                        t1p2Trueskill.StandardDeviation  = team1player2NewRating.StandardDeviation;
                        t1p2Trueskill.ConservativeRating = team1player2NewRating.ConservativeRating;
                    }
                    else
                    {
                        dbContext.Trueskill.Add(new Models.Trueskill()
                        {
                            Player             = Team1.Player2,
                            Mean               = team1player2NewRating.Mean,
                            StandardDeviation  = team1player2NewRating.StandardDeviation,
                            ConservativeRating = team1player2NewRating.ConservativeRating
                        });
                    }
                }

                if (t2p1Trueskill != null)
                {
                    t2p1Trueskill.Mean = team2player1NewRating.Mean;
                    t2p1Trueskill.StandardDeviation  = team2player1NewRating.StandardDeviation;
                    t2p1Trueskill.ConservativeRating = team2player1NewRating.ConservativeRating;
                }
                else
                {
                    dbContext.Trueskill.Add(new Models.Trueskill()
                    {
                        Player             = Team2.Player1,
                        Mean               = team2player1NewRating.Mean,
                        StandardDeviation  = team2player1NewRating.StandardDeviation,
                        ConservativeRating = team2player1NewRating.ConservativeRating
                    });
                }

                if (team2player2 != null)
                {
                    if (t2p2Trueskill != null)
                    {
                        t2p2Trueskill.Mean = team2player2NewRating.Mean;
                        t2p2Trueskill.StandardDeviation  = team2player2NewRating.StandardDeviation;
                        t2p2Trueskill.ConservativeRating = team2player2NewRating.ConservativeRating;
                    }
                    else
                    {
                        dbContext.Trueskill.Add(new Models.Trueskill()
                        {
                            Player             = Team2.Player2,
                            Mean               = team2player2NewRating.Mean,
                            StandardDeviation  = team2player2NewRating.StandardDeviation,
                            ConservativeRating = team2player2NewRating.ConservativeRating
                        });
                    }
                }

                dbContext.SaveChanges();
            }
        }
コード例 #2
0
ファイル: WinLossCalculator.cs プロジェクト: lal1029/Foostats
        public void UpdateMetrics(Models.Team Team1, Models.Team Team2, int Score1, int Score2)
        {
            using (var dbContext = new Foostats2.Models.FoostatsContext())
            {
                Team1 = dbContext.Teams.Include(x => x.Player1).Include(x => x.Player2).SingleOrDefault(x => x.Id == Team1.Id);
                Team2 = dbContext.Teams.Include(x => x.Player1).Include(x => x.Player2).SingleOrDefault(x => x.Id == Team2.Id); // reload
                var t1p1WinLoss = dbContext.WinLoss.Include(x => x.Player).FirstOrDefault(x => x.Player.Id == Team1.Player1.Id);
                var t1p2WinLoss = Team1.Player2 == null ? null : dbContext.WinLoss.Include(x => x.Player).FirstOrDefault(x => x.Player.Id == Team1.Player2.Id);
                var t2p1WinLoss = dbContext.WinLoss.Include(x => x.Player).FirstOrDefault(x => x.Player.Id == Team2.Player1.Id);
                var t2p2WinLoss = Team2.Player2 == null ? null : dbContext.WinLoss.Include(x => x.Player).FirstOrDefault(x => x.Player.Id == Team2.Player2.Id);

                var t1WinsToAdd = Score1 >= Score2 ? 1 : 0;
                var t1LossToAdd = t1WinsToAdd == 1 ? 0 : 1;
                var t2WinsToAdd = Score2 >= Score1 ? 1 : 0;
                var t2LossToAdd = t2WinsToAdd == 1 ? 0 : 1;

                #region Update Team 1
                if (t1p1WinLoss != null)
                {
                    t1p1WinLoss.Win  += t1WinsToAdd;
                    t1p1WinLoss.Loss += t1LossToAdd;
                }
                else
                {
                    dbContext.WinLoss.Add(new Models.WinLoss()
                    {
                        Player = Team1.Player1,
                        Win    = t1WinsToAdd,
                        Loss   = t1LossToAdd
                    });
                }

                if (Team1.Player2 != null)
                {
                    if (t1p2WinLoss != null)
                    {
                        t1p2WinLoss.Win  += t1WinsToAdd;
                        t1p2WinLoss.Loss += t1LossToAdd;
                    }
                    else
                    {
                        dbContext.WinLoss.Add(new Models.WinLoss()
                        {
                            Player = Team1.Player2,
                            Win    = t1WinsToAdd,
                            Loss   = t1LossToAdd
                        });
                    }
                }
                #endregion

                #region Update Team 2
                if (t2p1WinLoss != null)
                {
                    t2p1WinLoss.Win  += t2WinsToAdd;
                    t2p1WinLoss.Loss += t2LossToAdd;
                }
                else
                {
                    dbContext.WinLoss.Add(new Models.WinLoss()
                    {
                        Player = Team2.Player1,
                        Win    = t2WinsToAdd,
                        Loss   = t2LossToAdd
                    });
                }

                if (Team2.Player2 != null)
                {
                    if (t2p2WinLoss != null)
                    {
                        t2p2WinLoss.Win  += t2WinsToAdd;
                        t2p2WinLoss.Loss += t2LossToAdd;
                    }
                    else
                    {
                        dbContext.WinLoss.Add(new Models.WinLoss()
                        {
                            Player = Team2.Player2,
                            Win    = t2WinsToAdd,
                            Loss   = t2LossToAdd
                        });
                    }
                }
                #endregion

                dbContext.SaveChanges();
            }
        }