c# Как определить возможные шаги в массиве (2dim)? - PullRequest
0 голосов
/ 30 апреля 2020

// Создать метод: void MogelijkePaardenSprongen (int [,] schaakbord, Posit ie posit ie) Этот метод определяет возможные позиции, в которых лошадь может прыгать (значение 2). Конечно, вы делаете это умным способом (с L OOP). Обратите внимание, что не всегда есть 8 возможностей! Положение параметра указывает, где находится лошадь. Проверьте методы (вызовите метод Start, как показано на рисунке ниже?

enter image description here

// это код, который я получил до сих пор,

   static void Main(string[] args)
        {
            Program myProgram = new Program();
            myProgram.Start();
            Console.ReadKey();

        }
        void Start()
        {

            int [,] schaakbord = new int [8, 8];
            InitSchaakbord(schaakbord);
            ToonSchaakBord(schaakbord);


        }
        void InitSchaakbord(int[,] schaakbord)
        {
            int leeg = 0;
            int bezet = 1;
            int mogelijkbezet = 2;
            for (int i=0; i<schaakbord.GetLength(0); i++)
            {
                for (int j=0; j<schaakbord.GetLength(1); j++)
                {
                    schaakbord[i, j] = leeg;
                }  
            }

        }
        void ToonSchaakBord(int[,] schaakbord)
        {Positie positie = new Positie();
            for (int i = 0; i < schaakbord.GetLength(0); i++)
            {Plaatspaard(schaakbord); 
                for (int j = 0; j < schaakbord.GetLength(1); j++)
                {
                    if (schaakbord[i, j] == 0)
                    {
                        Console.Write(".");
                    }
                    else if (schaakbord[i, j] == 1) 
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.Write("*");
                        Console.ResetColor();  
                    }
                    else if (schaakbord[i, j]==2)
                    {
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.Write("*");
                        Console.ResetColor();     
                    }
                    Console.Write(" ");
                }
                Console.WriteLine(); 
               MogelijkePaardenSprongen(schaakbord, positie);
            }

        }
        Positie Plaatspaard(int [,] schaakbord)
        {Positie x = new Positie();
            Random rnd = new Random();
            x.waarde1 = rnd.Next(1, 8);
            x.waarde2 = rnd.Next(1, 8);

            for (int i = 0; i<schaakbord.GetLength(0);i++ )
            {
                for (int j=0; j<schaakbord.GetLength(1); j++)
                {
                    if (x.waarde1 == i && x.waarde2 == j)
                        schaakbord[i, j] = 1;


                }

            }
            return x;

        }
        class Positie
        {

            public int waarde1;
            public int waarde2;

        }
        void MogelijkePaardenSprongen(int[,] schaakbord, Positie positie)
        {
            for (int i =0; i<schaakbord.GetLength(0); i++)
            {
                for (int j=0; j<schaakbord.GetLength(1); j++)
                {
                    /// possible horsesteps?
                    /// call from void start method
                    if (schaakbord[i, j] == 0)
                    {



                    }
                }
            }

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Обратите внимание, что на самом деле подножка означает, что сумма расстояний
между этой точкой и лошадью должна быть точно равна 3.

Пример:

var distanceX = abs(Horse.Position.X - i);
var distanceY = abs(Horse.Position.Y - j);
bool isHorseStep = distanceX + distanceY  == 3;

Таким образом, вы можете использовать это предположение в вашем коде, чтобы проверить, если это шаг лошади или нет.

Вот некоторый быстро написанный код для вашего метода.
Я не проверял его, но я думаю, вы поймете и при необходимости выполните корректировку:

        void MogelijkePaardenSprongen(int[,] schaakbord, Positie positie)
        {
            for (int i =0; i<schaakbord.GetLength(0); i++)
            {
                for (int j=0; j<schaakbord.GetLength(1); j++)
                {
                    /// possible horsesteps?
                    /// call from void start method
                    if (schaakbord[i, j] == 0)
                    {
                        var deltaX = waarde1 - i;
                        var deltaY = waarde2 - j;
                        if (deltaX < -2 || deltaX > 2 
                             || deltaY < -2 || deltaY > 2 )
                        {
                            // TODO: Write logic here for out of bounds.
                        }
                        else
                        {
                             if (abs(deltaX) + abs(deltaY) == 3)
                             {
                                  // TODO: Horse Step. Write your logic here.
                             }
                        }
                    }
                }
            }
        }

PS Также для deltaY вам может понадобиться изменить номер на противоположное и использовать что-то вроде deltaY = j - waarde2, поскольку ось Y в массиве противоположна.

0 голосов
/ 30 апреля 2020

Потому что его назначение я не хочу дать вам полное решение. Пожалуйста, не стесняйтесь комментировать, если вам нужна дополнительная помощь.

Я предлагаю создать объект

class MoveOffset
{
    public int OffsetX { get; set; }
    public int OffsetY { get; set; }
}

, а затем создать коллекцию из них с возможными ходами

var moves = new List<MoveOffset>()
{
    new MoveOffset(){OffsetX = -1, OffsetY = -2},
    new MoveOffset(){OffsetX = -2, OffsetY = -1},
    new MoveOffset(){OffsetX = 1, OffsetY = -2},
    new MoveOffset(){OffsetX = -2, OffsetY = 1}, 

    new MoveOffset(){OffsetX = -1, OffsetY = 2},
    new MoveOffset(){OffsetX = 2, OffsetY = -1},
    new MoveOffset(){OffsetX = 1, OffsetY = 2},
    new MoveOffset(){OffsetX = 2, OffsetY = 1},
};

затем циклически проходите сбор и проверяйте условия, если это возможно, чтобы переместиться туда из местоположения "лошади".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...