Beispiel #1
0
 public void DeletePlayer(string playerId, IGameUpdatesHandler handler)
 {
     if (!_players.ContainsKey(playerId))
     {
         return;
     }
     //_players.Remove(playerId);
     --_numberOfAlivePlayers;
 }
Beispiel #2
0
        public void UpdatePlayer(string playerId, MoveModel move, IGameUpdatesHandler handler)
        {
            if (!_players.ContainsKey(playerId))
            {
                return;
            }
            var player = _players[playerId];

            PerformMovement(player, playerId, move, handler);

            if (!playerId.Equals("AI"))
            {
                UpdateRound(playerId, handler);
            }
        }
Beispiel #3
0
 private void PerformMovement(PlayerModel player, string playerId,
                              MoveModel move, IGameUpdatesHandler handler)
 {
     player.Move(move);
     ++_movesCount;
     if (!_world.IsMovementOutOfTrack(player.GetLastMovement()))
     {
         handler?.OnShowMovements(playerId, _world.CalculateScope(player));
         CheckWayPointsIntersections(player, playerId, handler);
     }
     else
     {
         handler?.OnShowMovements(playerId, new List <bool>(new bool[9]));
         handler?.OnCarCrash(playerId);
         _players[playerId].IsAlive = false;
         DeletePlayer(playerId, handler);
     }
 }
Beispiel #4
0
        // Конец раунда - это момент, когда все игроки уже походили и нужно им дать возможность снова походить
        private void UpdateRound(string playerId, IGameUpdatesHandler handler)
        {
            if (_isSinglePlayer)
            {
                AIMovement(handler);
            }

            // Если все игроки вылетели с поля
            if (_numberOfAlivePlayers == 0)
            {
                handler?.OnEndOfGame(playerId, false);
            }

            if (_movesCount < _numberOfAlivePlayers)
            {
                return;
            }
            handler?.OnUpdateRound(playerId);
            _movesCount = 0;
            ++RoundNumber;
        }
Beispiel #5
0
        private void CheckWayPointsIntersections(PlayerModel player, string playerId, IGameUpdatesHandler handler)
        {
            var intersectedWayPoint = _world.FindIntersectedWayPoints(player.GetLastMovement());

            foreach (var pointNumber in intersectedWayPoint)
            {
                if (pointNumber == player.LastWayPoint + 1)
                {
                    player.LastWayPoint = pointNumber;
                }
            }
            // Конец игры == игрок пересек последний вэйпоинт
            if (player.LastWayPoint == _world.WayPointsCount() - 1)
            {
                _players[playerId].IsWinner = true;
                handler?.OnEndOfGame(playerId, true);
            }
        }
Beispiel #6
0
 private void AIMovement(IGameUpdatesHandler handler)
 {
     UpdatePlayer("AI", _aiStrategy.GetNextStep(), handler);
 }