TestCoord[] TestEnterShip(int ShipType, int Direction, int X, int Y) { TestCoord[] ResultCoord = new TestCoord[ShipType]; if (TestEnterDeck(X, Y)) { switch (Direction) { case 0: ResultCoord = TestEnterShipDirect(ShipType, 1, 0, X, Y); if (ResultCoord == null) { ResultCoord = TestEnterShipDirect(ShipType, -1, 0, X, Y); } break; case 1: ResultCoord = TestEnterShipDirect(ShipType, 0, 1, X, Y); if (ResultCoord == null) { ResultCoord = TestEnterShipDirect(ShipType, 0, -1, X, Y); } break; } return(ResultCoord); } return(null); }
/// <summary> /// Проверяю установку палуб в определенном напровлении. /// </summary> /// <param name="ShipType"> Тип корабля и количество палуб. </param> /// <param name="XDir"> Смещение по осям проверки. </param> /// <param name="YDir"> Смещение по осям проверки. </param> /// <param name="X"> Начальная точка установки корабля. </param> /// <param name="Y"> Начальная точка установки корабля. </param> /// <returns> Возможно ли поставить в этом месте. </returns> private TestCoord[] TestEnterShipDirection(int ShipType, int XDir, int YDir, int X, int Y) { // Массив для результатов. TestCoord[] ResultCoord = new TestCoord[ShipType]; // Дважение в указанную сторону. for (var i = 0; i < ShipType; i++) { // Проверяю можно ли поставить палубу в указанном слоте. if (TestEnterDeck(X, Y)) { // Записываю значения в результат. ResultCoord[i].X = X; ResultCoord[i].Y = Y; } else { // Щстанавливаю проверку и возвращаю null. return(null); } // Смещаю проверку в указанном направлении. X += XDir; Y += YDir; } return(ResultCoord); }
TestCoord[] TestEnterShipDirect(int ShipType, int XD, int YD, int X, int Y) { TestCoord[] ResultCoord = new TestCoord[ShipType]; for (int P = 0; P < ShipType; P++) { if (TestEnterDeck(X, Y)) { ResultCoord[P].X = X; ResultCoord[P].Y = Y; } else { return(null); } X += XD; Y += YD; } return(ResultCoord); }
/// <summary> /// Сообщаем какой корабль мы хотим поставить в указанном месте, /// система вернет список кораблей либо null если не нашла места. /// </summary> /// <param name="ShipType"> Тип корабля и количество палуб. </param> /// <param name="Direction"> Напровление ( 0 вертикально, 1 горизонтально). </param> /// <param name="X"> Начальная точка установки корабля. </param> /// <param name="Y"> Начальная точка установки корабля. </param> /// <returns> Кординаты для установки корабля. </returns> private TestCoord[] TestEnterShip(int ShipType, int Direction, int X, int Y) { // Массив для результатов. TestCoord[] ResultCoord = new TestCoord[ShipType]; // Проверяю можно ли поставить палубу в указанном слоте. if (TestEnterDeck(X, Y)) { // Выбор напровления. switch (Direction) { case 0: // Попытка установить палубу в положительном напровлении по оси Х. ResultCoord = TestEnterShipDirection(ShipType, 0, 1, X, Y); // Если не вышло побую в отрицательном. if (ResultCoord == null) { ResultCoord = TestEnterShipDirection(ShipType, 0, -1, X, Y); } break; case 1: // Попытка установить палубу в положительном напровлении по оси Y. ResultCoord = TestEnterShipDirection(ShipType, 1, 0, X, Y); // Если не вышло побую в отрицательном. if (ResultCoord == null) { ResultCoord = TestEnterShipDirection(ShipType, -1, 0, X, Y); } break; } // Возвращаю кординаты для установки корабля. return(ResultCoord); } // Если не удалось расчитать место под корабль опираясь на указанную точку возвращаю null. return(null); }