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();
            }
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
 public void AddRow(IndividualStat stat)
 {
     var cells = new (Border, TextBlock)[5];