public static Position InputShipPosition(TypeOfShips deckCount, out Direction shipDirection, ConsoleColor color = ConsoleColor.Yellow) { int direction; bool isRigthDirection; Console.ForegroundColor = color; do { ClearBottom(0, 47, 7); Console.SetCursorPosition(0, 0); Console.WriteLine("DIRECTION:"); for (Direction i = Direction.Up; i <= Direction.Left; i++) { Console.WriteLine("{0} - {1}", i, ((int)i)); } Console.Write("Please, input direction for {0} ship:", deckCount); isRigthDirection = int.TryParse(Console.ReadLine(), out direction); shipDirection = (Direction)direction; } while (!isRigthDirection || shipDirection < Direction.Up || shipDirection > Direction.Left); return(AreRigthCoords(SHIP_POSITION_MESSAGE, 6)); }
public void SetOneShip(Direction currentDirection) { TypeOfShips deckCount = 0; if (_playerMapManualInput.CountAliveShips == 0) { deckCount = TypeOfShips.FourDecker; } else { if (_playerMapManualInput.CountAliveShips == 1 || _playerMapManualInput.CountAliveShips == COUNT_THREE_DECK_SHIP) { deckCount = TypeOfShips.ThreeDecker; } else { if (_playerMapManualInput.CountAliveShips >= COUNT_TWO_DECK_SHIP && _playerMapManualInput.CountAliveShips < (COUNT_ALL_SHIPS - COUNT_ONE_DECK_SHIP)) { deckCount = TypeOfShips.TwoDecker; } else { if (_playerMapManualInput.CountAliveShips >= (COUNT_ALL_SHIPS - COUNT_ONE_DECK_SHIP) && _playerMapManualInput.CountAliveShips < COUNT_ALL_SHIPS) { deckCount = TypeOfShips.OneDecker; } } } } _playerMapManualInput.BuildOneTypeOfShips(deckCount, _startShipPosition, currentDirection); }
private void GetPlayerMap() { PlayerSea playerMapManualInput = null; switch (_introducedMethod) { case MethodShipsBuild.AutoRandom: _playerMap = new Sea(10); _playerMap.BuildAllTypeOfShips(); break; case MethodShipsBuild.Manual: playerMapManualInput = new PlayerSea(10); bool isPossibleSetting; int shipCount = 1; TypeOfShips deckCount = TypeOfShips.FourDecker; Console.Clear(); for (int i = 0; i < RandomCoords.COUNT_OF_SHIPS_TYPE; i++) { for (int j = 0; j < shipCount; j++) { UserInterface.PrintManualInputShips(playerMapManualInput); Console.SetCursorPosition(0, 0); Direction shipDirection; Position shipPosition = UserInterface.InputShipPosition(deckCount, out shipDirection); isPossibleSetting = playerMapManualInput.BuildOneTypeOfShips(deckCount, shipPosition, shipDirection); if (!isPossibleSetting) { UserInterface.ClearBottom(0, 45, 7); UserInterface.ShowMessage(Constants.IMPOSSIBLE_SETTING, 0, 0); System.Threading.Thread.Sleep(3000); j--; continue; } UserInterface.PrintManualInputShips(playerMapManualInput); } deckCount--; shipCount++; } break; default: break; } if (_playerMap == null) { _playerMap = playerMapManualInput; } }
public bool BuildOneTypeOfShips(TypeOfShips deckCount, Position startShipPosition, Direction shipDirection) { bool isPossibleSetteing = true; _targetCoordY = startShipPosition.OY; _targetCoordX = startShipPosition.OX; for (TypeOfShips i = TypeOfShips.OneDecker; i <= deckCount; i++) { isPossibleSetteing = HasCollide(); if (!isPossibleSetteing) { break; } switch (shipDirection) { case Direction.Up: _targetCoordY--; break; case Direction.Right: _targetCoordX++; break; case Direction.Down: _targetCoordY++; break; case Direction.Left: _targetCoordX--; break; default: break; } } if (isPossibleSetteing) { _targetCoordY = startShipPosition.OY; _targetCoordX = startShipPosition.OX; SetShips(deckCount, shipDirection); } return(isPossibleSetteing);///если false - возвращаем переменную и выводим пользователю сообщение что нужна новая позиция корабля }