Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
 /// <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);
 }
Ejemplo n.º 3
0
    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);
    }
Ejemplo n.º 4
0
    /// <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);
    }