Пример #1
0
        public DomainResult ProgressMatch(PlayerProgression playerProgression)
        {
            if (!_isStarted)
            {
                return(DomainResult.Error(new MatchDidNotStartYet()));
            }
            if (_isFinished)
            {
                return(DomainResult.Error(new MatchAllreadyFinished()));
            }

            var playerIsNotInHomeOrGuestTeam =
                !HomeTeamPlayers.Contains(playerProgression.PlayerId) &&
                !GuestTeamPlayers.Contains(playerProgression.PlayerId);

            if (playerIsNotInHomeOrGuestTeam)
            {
                return(DomainResult.Error(new PlayerWasNotPartOfTheTeamWhenStartingTheMatch(playerProgression.PlayerId)));
            }

            var playerProgressions = PlayerProgressions.Append(playerProgression);
            var gameResult         = CreateGameResult(playerProgressions);

            var matchResultUploaded = new MatchProgressed(MatchId, playerProgression, gameResult);

            return(DomainResult.Ok(matchResultUploaded));
        }
Пример #2
0
        private List <MatchEventModel> CreateEvents()
        {
            var events = new List <MatchEventModel>();

            foreach (var e in Events)
            {
                if (e.Type != EventType.A)
                {
                    var eventModel = new MatchEventModel {
                        Id = e.Id
                    };

                    if (e.TeamId == HomeTeam.Id)
                    {
                        eventModel.Player   = HomeTeamPlayers.Where(p => p.Id == e.PlayerId).First();
                        eventModel.ViewType = 0;
                    }
                    else
                    {
                        eventModel.Player   = AwayTeamPlayers.Where(p => p.Id == e.PlayerId).First();
                        eventModel.ViewType = 1;
                    }


                    if (e.Type == EventType.P2 || e.Type == EventType.P10)
                    {
                        eventModel.ResourceId = Resource.Drawable.ic_numeric_2_box_grey600_24dp;
                    }
                    else
                    {
                        if (e.Type == EventType.P5)
                        {
                            eventModel.ResourceId = Resource.Drawable.ic_numeric_2_box_grey600_24dp;
                        }
                        else
                        {
                            if (e.Type == EventType.G)
                            {
                                eventModel.ResourceId = Resource.Drawable.ball;
                                eventModel.IsGoal     = true;

                                var assist = Events.FirstOrDefault(a => a.Time == e.Time && a.Type == EventType.A);
                                if (assist != null)
                                {
                                    var player = assist.TeamId == HomeTeam.Id ? HomeTeamPlayers.Where(p => p.Id == e.PlayerId).First() : AwayTeamPlayers.Where(p => p.Id == e.PlayerId).First();
                                    eventModel.Assist = new MatchEventModel {
                                        ResourceId = Resource.Drawable.ball, Player = player
                                    };
                                }
                            }
                        }
                    }

                    eventModel.Time         = e.Time;
                    eventModel.EventMessage = EventMessages.First(em => em.Id == e.EventMessageId);
                    events.Add(eventModel);
                }
            }

            return(events);
        }
Пример #3
0
        private void LogTeams(Coordinate ballPosition)
        {
            var height = 120;
            var width  = 25;

            var homePlayers = new int?[width, height];
            var awayPlayers = new int?[width, height];

            HomeTeamPlayers.Execute(p => homePlayers[(int)(p.Location.X * width), (int)(p.Location.Y * height)] = p.Number);
            AwayTeamPlayers.Execute(p => awayPlayers[(int)(p.Location.X * width), (int)(p.Location.Y * height)] = p.Number);

            var ballX = (int)(ballPosition.X * width);
            var ballY = (int)(ballPosition.Y * height);

            var stringBuilder = new StringBuilder("\n");

            stringBuilder.AppendLine(string.Join("", Enumerable.Repeat("_", homePlayers.GetLength(1)).ToArray()));

            for (var i = 0; i < homePlayers.GetLength(0); ++i)
            {
                for (var j = 0; j < homePlayers.GetLength(1); ++j)
                {
                    if (j == 0 || j == homePlayers.GetLength(1) - 1)
                    {
                        stringBuilder.Append("|");
                    }


                    if (homePlayers[i, j].HasValue)
                    {
                        var adjust  = i == ballX && j == ballY ? 1 : 0;
                        var prepend = i == ballX && j == ballY ? "*_" : "_";

                        stringBuilder.Append(prepend + homePlayers[i, j]);

                        j = homePlayers[i, j] >= 10 ? j + 2 + adjust : j + 1 + adjust;

                        continue;
                    }
                    else if (awayPlayers[i, j].HasValue)
                    {
                        var adjust  = i == ballX && j == ballY ? 1 : 0;
                        var prepend = i == ballX && j == ballY ? "*|" : "|";

                        stringBuilder.Append("|" + awayPlayers[i, j]);

                        j = awayPlayers[i, j] >= 10 ? j + 2 + adjust : j + 1 + adjust;

                        continue;
                    }

                    stringBuilder.Append(" ");
                }

                stringBuilder.AppendLine();
            }

            stringBuilder.AppendLine(string.Join("", Enumerable.Repeat("_", homePlayers.GetLength(1)).ToArray()));

            Log(stringBuilder.ToString());
        }
Пример #4
0
        public void Play(IFixture fixture, Action <double, double[, ]> updateUi)
        {
            HeatMap = new double[Configuration.HeatMapDimensions.Item1, Configuration.HeatMapDimensions.Item2];

            if (PlayerMatch)
            {
                updateUi(0.5d, null);
            }

            var ballPosition = new Coordinate {
                X = 0.5d, Y = 0.5d
            };
            var kickoff = DateTime.Now;

            PlayerMatch  = updateUi != null;
            PhasesOfPlay = 0;

            if (PlayerMatch)
            {
                updateUi(0.5d, HeatMap);
                Thread.Sleep(5000);
            }

            LogTeam(Side.Home);
            LogRatingBattle(Side.Home);
            LogTeam(Side.Away);
            LogRatingBattle(Side.Away);
            LogRatingBattle();

            fixture.PlayingPeriod = PlayingPeriod.FirstHalf;
            PlayHalf(fixture, updateUi);

            fixture.PlayingPeriod = PlayingPeriod.HalfTime;
            HeatMap = new double[Configuration.HeatMapDimensions.Item1, Configuration.HeatMapDimensions.Item2];

            if (PlayerMatch)
            {
                updateUi(HomeTouches / (HomeTouches + AwayTouches), null);
                Thread.Sleep(5000);
            }

            PhasesOfPlay          = 0;
            fixture.PlayingPeriod = PlayingPeriod.SecondHalf;

            var temp = HomeGoal;

            HomeGoal = AwayGoal;
            AwayGoal = temp;

            //	Switching sides at halftime is covered by the ViewModel bound animation.
            //	Non-player matches have to do this here.
            if (!PlayerMatch)
            {
                HomeTeamPlayers.Concat(AwayTeamPlayers).Execute(p => p.Location.Invert());
            }

            TeamFormationAttributes.SecondHalf();

            PlayHalf(fixture, updateUi);

            fixture.PlayingPeriod = PlayingPeriod.FullTime;
        }
Пример #5
0
 private int CountTouchDownsHome(IEnumerable <PlayerProgression> trainerResults)
 {
     return(trainerResults.Count(playerProgression => HomeTeamPlayers.Contains(playerProgression.PlayerId) &&
                                 playerProgression.ProgressionEvent == ProgressionEvent.PlayerMadeTouchdown));
 }