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); }
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); }
public Game() { Player = new RealPlayer(); Computer = new ComputerPlayer(); CurrentStage = Stage.PREGAME; }