public void End()
{
// make sure not already ended
if (!Ended)
{
// Find winner
var winner = (from p in Players where p.Place <= 1 select p).FirstOrDefault();
// update winner
if (winner != null)
winner.Place = 1;
// generate scores, award points
foreach (var player in Players)
{
player.ScoreExpected = Math.Round(GetScoreExpected(player) * 100) / 100;
player.Score = Math.Round(GenScore(player.Place) * 100) / 100;
player.RatingChange = (int)System.Math.Round((player.Score - player.ScoreExpected) * 150);
}
// update game status
Ended = true;
EndTime = DateTime.UtcNow;
if (OnEnd != null)
OnEnd(this, winner);
}
}