private async void StartRaceAsync(object sender, RoutedEventArgs e) { // Start race GObutton.Visibility = Visibility.Collapsed; await Task.WhenAll(Race.Bars.Select(bar => bar.SemaphoreTurnOn()).ToArray()).ConfigureAwait(true); await Race.StartRace().ConfigureAwait(true); // Result dialog var score = (int)Scoring.MakeScore(Race.NumberOfCars, Car.PlaceOfCurrentUser(), Race.Bid); // Update game stats List <IndividualStat> stats = new List <IndividualStat>(); foreach (Car car in Race.Cars) { var scoreStats = (int)Scoring.MakeScore(Race.NumberOfCars, Car.PlaceOfCar(car), Race.Bid); stats.Add(new IndividualStat ( Car.PlaceOfCar(car), car.CarBar.GetColor(), car.Nickname, scoreStats, car.GetDurance())); } Game game = new Game(Race.Distance, stats); game.Stats = game.Stats.OrderBy(a => a.Place).ToList(); GameHistory.Games.Add(game); await GameHistory.SerializeNow().ConfigureAwait(true); // Update account stats IndividualStat playerStat = game.Stats.First(elem => elem.Nickname == Account.CurrentAccount.Nickname); Account.CurrentAccount.LastMatch = DateTime.Now; Account.CurrentAccount.Money += Math.Round((double)playerStat.Points / Race.Cars.Length, 2); Account.CurrentAccount.NumberOfGames++; Account.CurrentAccount.Points += playerStat.Points; await Account.SerializeNow().ConfigureAwait(true); if (!backed) { AfterGameDialog afterGameDialog = new AfterGameDialog(MakeMessageForPlayer(score), this, game); await afterGameDialog.ShowAsync(); } }
private async void Button_ClickAsync(object sender, RoutedEventArgs e) { GObutton.IsEnabled = false; var winner = await Race.StartRace().ConfigureAwait(true); // Update game stats List <Car> list = Car.EndQueue.ToArray().ToList(); List <IndividualStat> stats = new List <IndividualStat>(); foreach (Car car in Race.Cars) { var score = (int)Scoring.MakeScore( Race.NumberOfCars, list.IndexOf(car), Race.Bid); stats.Add( new IndividualStat( list.IndexOf(car), car.CarBar.GetColor(), car.Nickname, score, (car.EndTime - car.StartTime).Minutes * 60 + (car.EndTime - car.StartTime).Seconds)); } Game game = new Game(Race.Distance, stats); GameHistory.Games.Add(game); await GameHistory.SerializeNow().ConfigureAwait(true); // Update account stats IndividualStat playerStat = game.Stats.First(elem => elem.Nickname == Account.CurrentAccount.Nickname); Account.CurrentAccount.LastMatch = DateTime.Now; Account.CurrentAccount.Money += (double)playerStat.Points / Race.Cars.Length; Account.CurrentAccount.NumberOfGames++; Account.CurrentAccount.Points += playerStat.Points; await Account.SerializeNow().ConfigureAwait(true); GObutton.IsEnabled = true; }