Exemplo n.º 1
0
        public bool Shoot(RealPlayer source, ComputerPlayer target, int x, int y) //игрок стреляет в компьютер
        {
            if (x >= 0 && y >= 0)
            {
                if (target.Board[x, y].CellType == CellType.SHIP_PART_OK)                 //проверка клетки по координатам смотрим на доску и обращаемся к переменной клетки
                {
                    target.Board[x, y].ShipPart.Destroyed = true;                         //часть корабля уничтожена
                    target.Board[x, y].CellType           = CellType.SHIP_PART_DESTROYED;
                    Player.EnemyBoard[x, y].CellType      = CellType.SHIP_PART_DESTROYED; //попали в корабль, получаем ссылку на корабль
                    Ship targetShip = target.Board[x, y].ShipPart.ParentShip;             //вызываем из шип дестроед передаем таргет шип
                    if (IsShipDestroyed(targetShip))
                    {
                        MarkCellsAsHit(target.Board, targetShip); //помечаем клетки вокруг корабля
                        MarkCellsAsHit(Player.EnemyBoard, targetShip);
                    }
                    --target.ShipPartsNumber; //уменьшаем корабли противника

                    source.EnemyBoard[x, y].ShipPart = target.Board[x, y].ShipPart;
                    source.EnemyBoard[x, y].CellType = CellType.SHIP_PART_DESTROYED;
                    if (IsComputerLost() || IsPlayerLost()) //проверка на проигрыш
                    {
                        currentTurn = Turn.NONE;
                        EndGame();
                    }
                    return(true);
                }
                else if (target.Board[x, y].CellType == CellType.EMPTY)
                {
                    target.Board[x, y].CellType = CellType.MISSED_HIT;

                    source.EnemyBoard[x, y].CellType = CellType.MISSED_HIT;

                    NextTurn(); //передача хода следующему игроку
                    return(false);
                }

                //else if (target.Board[x, y].CellType == CellType.MISSED_HIT
                //    || target.Board[x, y].CellType == CellType.SHIP_PART_DESTROYED)
                //{
                //}
            }
            return(false);
        }
Exemplo n.º 2
0
        public bool Shoot(ComputerPlayer source, RealPlayer target)
        {
            Point targetPoint = source.Shoot(); //точка, в которую будем стрелять
            int   x           = targetPoint.X;
            int   y           = targetPoint.Y;

            if (target.Board[x, y].CellType == CellType.SHIP_PART_OK)
            {
                target.Board[x, y].ShipPart.Destroyed = true;
                target.Board[x, y].CellType           = CellType.SHIP_PART_DESTROYED;

                --target.ShipPartsNumber;

                Ship targetShip = target.Board[x, y].ShipPart.ParentShip;
                if (IsShipDestroyed(targetShip))                                          //удаляем ненужные точки
                {
                    List <Point> markedPoints = MarkCellsAsHit(target.Board, targetShip); //список точек вокруг корабля

                    for (int i = 0; i < markedPoints.Count; i++)
                    {
                        Computer.AvailablePointForShooting.Remove(markedPoints[i]);
                    }
                }
                Shoot(Computer, Player); //если попали, то еще раз вызываем метод


                if (IsComputerLost() || IsPlayerLost())
                {
                    currentTurn = Turn.NONE;
                    EndGame();
                }
                return(true);
            }
            else if (target.Board[x, y].CellType == CellType.EMPTY)
            {
                target.Board[x, y].CellType = CellType.MISSED_HIT;
                NextTurn();
                return(false);
            }
            return(false);
        }
Exemplo n.º 3
0
 public Game()
 {
     Player       = new RealPlayer();
     Computer     = new ComputerPlayer();
     CurrentStage = Stage.PREGAME;
 }