Пример #1
0
 public BoardService(
     IBoardPositionConverter boardPositionConverter,
     IPositionValidator positionValidator)
 {
     this.boards = new List <Board>();
     this.boardPositionConverter = boardPositionConverter;
     this.positionValidator      = positionValidator;
 }
Пример #2
0
 public PositionService(
     IUOW UOW,
     ICurrentContext CurrentContext,
     IPositionValidator PositionValidator,
     ILogging Logging
     )
 {
     this.UOW               = UOW;
     this.Logging           = Logging;
     this.CurrentContext    = CurrentContext;
     this.PositionValidator = PositionValidator;
 }
Пример #3
0
        public Position Execute(Position currentPosition, IPositionValidator positionValidator)
        {
            if (currentPosition == null)
            {
                return(currentPosition);
            }

            return(new Position(currentPosition)
            {
                Facing = RightTurns[currentPosition.Facing]
            });
        }
Пример #4
0
        public Position Execute(Position currentPosition, IPositionValidator positionValidator)
        {
            if (currentPosition == null)
            {
                Console.Out.WriteLine($"Output: {ErrorMessages.NotPlaced}");
            }
            else
            {
                Console.Out.WriteLine($"Output: {currentPosition.ToString()}");
            }

            return(currentPosition);
        }
Пример #5
0
        public Position Execute(Position currentPosition, IPositionValidator positionValidator)
        {
            if (currentPosition == null)
            {
                return(currentPosition);
            }

            Position newPosition = new Position(currentPosition);

            newPosition.X = currentPosition.X + XCoordChanges[currentPosition.Facing];
            newPosition.Y = currentPosition.Y + YCoordChanges[currentPosition.Facing];

            if (!positionValidator.Validate(newPosition))
            {
                return(currentPosition);
            }

            return(newPosition);
        }
Пример #6
0
        public Position Execute(Position currentPosition, IPositionValidator positionValidator)
        {
            try
            {
                Position newPosition = new Position
                {
                    Facing = GetDirectionParameter(),
                    X      = GetXParameter(),
                    Y      = GetYParameter()
                };

                if (!positionValidator.Validate(newPosition))
                {
                    return(currentPosition);
                }
                return(newPosition);
            }
            catch
            {
                return(currentPosition);
            }
        }
Пример #7
0
    //int lastUsedPos;
    //Replaced by GetRandomPosition
    //public Transform GetRandomMapItemGenPos()
    //{
    //	int randIndex = UnityEngine.Random.Range(0, mapItemGenPos.Count);
    //	if(randIndex == lastUsedPos)
    //	{
    //		//Debug.Log("Select another pos");
    //		randIndex = randIndex++ % mapItemGenPos.Count;
    //	}
    //	lastUsedPos = randIndex;
    //	return mapItemGenPos[randIndex];
    //}

    /// <summary>
    /// Finds random position on map and returns it if the pCondition is met
    /// </summary>
    public Vector2?GetRandomPosition(IPositionValidator pCondition = null, int pIteration = 0)
    {
        if (pCondition == null)
        {
            pCondition = this;
        }

        if (DebugData.TestGenerateItems)
        {
            return(debug_GetRandomPosition());
        }

        Vector2 topLeft  = TopLeftCorner.position;
        Vector2 botRight = BotRightCorner.position;

        Vector2 randomPos = new Vector2(Random.Range(topLeft.x, botRight.x), Random.Range(topLeft.y, botRight.y));

        Utils.DebugDrawCross(randomPos, Color.red, 1);

        if (pCondition.IsPositionValid(randomPos))
        {
            return(randomPos);
        }

        const int max_iterations = 20;

        if (pIteration > max_iterations)
        {
            //not error - this means that there are probably too much items on map already
            // => no need to generate more
            Debug.Log("Couldnt find good position to generate item");
            return(null);
        }

        return(GetRandomPosition(pCondition, pIteration + 1));
    }
Пример #8
0
        public static void Main()
        {
            #region [on] 0. Instance
            var battlefield = new Battlefield(10, 10);
            positionParser    = new PositionParser();
            positionValidator = new PositionValidator();
            randomManager     = new RandomManager();
            shipManager       = new ShipManager();
            shootManager      = new ShootManager();
            placeManager      = new PlaceManager();
            var battleBgm = new WindowsMediaPlayer();
            var winnerBgm = new WindowsMediaPlayer();

            #endregion


            #region [off] 1. Welcome Screen
            //GraphicManager.WelcomeScreen();
            #endregion


            #region [on] 1.1. BGM

            SoundEffects.BattleBgmPlayer(battleBgm);

            #endregion


            #region [on] 2. Ships Topf

            // instance two players
            var player = new Player();
            player.Positions = new List <Position>();
            player.Hits      = new List <Hit>();
            player.Ships     = new List <Ship>();

            var computer = new Player();
            computer.Positions = new List <Position>();
            computer.Hits      = new List <Hit>();
            computer.Ships     = new List <Ship>();

            #endregion


            #region [on] 3. Place PlayerShips and ComputerShips

            // create player Ships
            player.Ships = InitializeShips();
            // place player ships
            // [!!]  placeManager.PlacePlayerShips(player.Ships, positionParser, positionValidator, shipManager,battlefield);
            placeManager.PlaceComputerShips(player.Ships, randomManager, shipManager, positionValidator, battlefield);

            // create ships for pc
            computer.Ships = InitializeShips();
            // place pc ships
            placeManager.PlaceComputerShips(computer.Ships, randomManager, shipManager, positionValidator, battlefield);

            // Add positions into Instances
            foreach (var playerShip in player.Ships)
            {
                player.Positions.AddRange(playerShip.Positions);
            }
            var allPlayerShipsPositions = player.Positions;

            foreach (var computerShip in computer.Ships)
            {
                computer.Positions.AddRange(computerShip.Positions);
            }
            var allComputerShipsPositions = computer.Positions;

            #endregion


            #region + [on] display pcShips for Testing
            Console.Clear();
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("        God Mode");
            Console.WriteLine("        PC Ships:");
            Console.WriteLine();
            Console.WriteLine(GraphicManager.DisplayBattlefield(battlefield.ColumnSize, battlefield.RowSize, computer.Ships).PadRight(20));
            Console.ReadKey();
            SoundEffects.SetShipSoundPlayer();
            #endregion


            #region  + [off] display Win view for Testing

            //battleBgm.close();
            //EndGameManager.WhoWin(player, computer, winnerBgm, shootManager);
            //EndGameManager.RestartGame(winnerBgm);

            #endregion


            #region [on] 4. Game begin view

            GraphicManager.GameStartView(player, computer, battlefield);

            #endregion


            #region [on] 5. Player || PC shots
            do     // End the Game
            {
                do // Player == * ==> PC
                {
                    var iShootPosition = ShootManager.PlayerShoot(player, computer, battlefield, positionParser, positionValidator);

                    if (allComputerShipsPositions.Contains(iShootPosition)) // Hit Ship
                    {
                        computer.Hits.Add(new Hit(HitType.Ship, iShootPosition));
                        shootManager.HitShip(player, computer, iShootPosition, computer.Ships, battlefield);
                    }
                    else // Hit Water
                    {
                        computer.Hits.Add(new Hit(HitType.Water, iShootPosition));
                        shootManager.HitWater(player, computer, iShootPosition, battlefield, positionParser);
                    }

                    // Is all Player Ships Sunken
                    if (shootManager.IsAllShipsSunken(computer.Ships))
                    {
                        break;
                    }
                } while (computer.Hits.Last().HitType == HitType.Ship); // one more time shoot


                do // PC == * ==> Player
                {
                    // if All player ships have Sunked skip all those code
                    if (shootManager.IsAllShipsSunken(computer.Ships))
                    {
                        break;
                    }

                    var pcShootPosition = ShootManager.ComputerShoot(player, computer, battlefield, randomManager, positionParser);

                    if (allPlayerShipsPositions.Contains(pcShootPosition)) // Hit Ship
                    {
                        player.Hits.Add(new Hit(HitType.Ship, pcShootPosition));
                        shootManager.HitShip(player, computer, pcShootPosition, player.Ships, battlefield);
                    }
                    else //Hit Water
                    {
                        player.Hits.Add(new Hit(HitType.Water, pcShootPosition));
                        shootManager.HitWater(player, computer, pcShootPosition, battlefield, positionParser);
                    }

                    // Check if all Player Ship Sunken
                    if (shootManager.IsAllShipsSunken(player.Ships))
                    {
                        break;
                    }
                } while (player.Hits.Last().HitType == HitType.Ship);                                                                 // one more time shoot
            } while (shootManager.IsAllShipsSunken(computer.Ships) == false && shootManager.IsAllShipsSunken(player.Ships) == false); // End the game

            #endregion


            #region [on] 6. Game End View

            battleBgm.close();
            EndGameManager.WhoWin(player, computer, winnerBgm, shootManager);
            EndGameManager.RestartGame(winnerBgm);

            #endregion
        }
Пример #9
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 /// <param name="random">Random generator for new step creation.</param>
 /// <param name="validator"> Psotion validator.</param>
 /// <param name="calculations"> Game math.</param>
 public HerbivoreManager(IRandom random, IPositionValidator validator, ICalculations calculations)
 {
     _random       = random;
     _validator    = validator;
     _calculations = calculations;
 }
Пример #10
0
        public static Position PlayerShoot(Player player, Player computer, Battlefield battlefield, IPositionParser positionParser, IPositionValidator positionValidator)
        {
            GraphicManager.DisplayBattleView(player, computer, battlefield);

            // isShootOk
            Position iShootPosition;

            do
            {
                Console.WriteLine("                                               \" I Shoot \" ");
                Console.WriteLine();
                Console.Write("                                                POSITION >");

                //convert to "Position"
                iShootPosition = positionParser.Parse(Console.ReadLine());
            } while (positionValidator.IsShootOk(iShootPosition, battlefield.ColumnSize, battlefield.RowSize, computer) == false);
            return(iShootPosition);
        }
Пример #11
0
 public RobotService(IBoardService boardService,
                     IPositionValidator positionValidator)
 {
     this.boardService      = boardService;
     this.positionValidator = positionValidator;
 }
Пример #12
0
 public void RemovePositionValidator(IPositionValidator validator)
 {
     _positionValidators.Remove(validator);
 }
Пример #13
0
        private static List <Position> ValidatePlayerPositions(List <Ship> playerShips, IPositionParser positionParser, IPositionValidator positionValidator, IShipManager shipManager, List <Position> shipPositions, Ship ship, Battlefield battlefield)
        {
            Position  position;
            Direction direction;

            for (int i = 0; i < shipPositions.Count; i++)
            {
                while (positionValidator.IsValidPosition(shipPositions[i], battlefield.ColumnSize, battlefield.RowSize, playerShips) == false)
                {
                    Console.WriteLine();
                    do
                    {
                        Console.Write(" Position is not validated, try again >");
                        position = positionParser.Parse(Console.ReadLine());
                    } while (position == null);

                    do
                    {
                        direction = PlaceManager.GetDirection();
                    } while (direction == Direction.None);

                    shipPositions = shipManager.WholeShipPositions(position, ship.Size, direction);

                    i = -1;
                    break;
                }
            }
            return(shipPositions);
        }
Пример #14
0
        public void PlaceComputerShips(List <Ship> computerShips, IRandomManager randomManager, IShipManager shipManager, IPositionValidator positionValidator, Battlefield battlefield)
        {
            foreach (var ship in computerShips)
            {
                var randomPosition  = randomManager.RandomPosition(battlefield.ColumnSize, battlefield.RowSize);
                var randomDirection = randomManager.RandomDirection();
                var shipPositions   = shipManager.WholeShipPositions(randomPosition, ship.Size, randomDirection);

                for (int i = 0; i < shipPositions.Count; i++)
                {
                    while (positionValidator.IsValidPosition(shipPositions[i], battlefield.ColumnSize, battlefield.RowSize, computerShips) == false)
                    {
                        randomPosition  = randomManager.RandomPosition(battlefield.ColumnSize, battlefield.RowSize);
                        randomDirection = randomManager.RandomDirection();
                        shipPositions   = shipManager.WholeShipPositions(randomPosition, ship.Size, randomDirection);
                        i = -1;
                        break;
                    }
                }

                ship.Positions.AddRange(shipPositions);
            }
        }
Пример #15
0
        public void PlacePlayerShips(List <Ship> playerShips, IPositionParser positionParser, IPositionValidator positionValidator, IShipManager shipManager, Battlefield battlefield)
        {
            foreach (var ship in playerShips)
            {
                Console.Clear();
                Console.WriteLine();
                //display battle field
                Console.WriteLine(GraphicManager.DisplayBattlefield(battlefield.ColumnSize, battlefield.RowSize, playerShips));
                //display place table
                Console.WriteLine(GraphicManager.DisplayPlaceTable(playerShips, ship.ShipType));

                //get the StartPosition
                Position position;
                do
                {
                    Console.Write(" Enter position for {0} > ", ship.ShipType);
                    position = positionParser.Parse(Console.ReadLine());
                } while (position == null);

                //get the direction
                Direction direction;
                do
                {
                    direction = GetDirection();
                } while (direction == Direction.None);

                //get whole ship positions
                var shipPositions = shipManager.WholeShipPositions(position, ship.Size, direction);

                //validate player position
                shipPositions = ValidatePlayerPositions(playerShips, positionParser, positionValidator, shipManager, shipPositions, ship, battlefield);

                ship.Positions.AddRange(shipPositions);
                SoundEffects.SetShipSoundPlayer();
            }
        }
Пример #16
0
 public void AddPositionValidator(IPositionValidator validator)
 {
     _positionValidators.Add(validator);
 }
Пример #17
0
 public Robot(ICommandParser commandParser, IPositionValidator positionValidator)
 {
     _commandParser     = commandParser;
     _positionValidator = positionValidator;
     _position          = null;
 }
Пример #18
0
 public Position Execute(Position currentPosition, IPositionValidator positionValidator)
 {
     return(currentPosition);
 }
Пример #19
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 /// <param name="random">Random generator for initial position creating.</param>
 /// <param name="validator">Position validator</param>
 public AnimalFactory(IRandom random, IPositionValidator validator)
 {
     _random    = random;
     _validator = validator;
 }