簡體   English   中英

c# 如何確定(2dim 數組)中可能的馬步數?

[英]c# How to determine possible horsesteps in a(2dim array)?

//創建一個方法: void MogelijkePaardenSprongen(int[,] schaakbord, Positie positie) 這個方法確定馬可以跳躍的可能位置(值 2)。 當然,您可以以一種聰明的方式(使用 LOOP)來執行此操作。 請注意,並非總是有 8 種可能性。 參數position表示馬的位置? 測試方法(從 Start 方法調用,如下圖所示?

在此處輸入圖像描述

// 這是我目前得到的代碼,

   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)
                    {



                    }
                }
            }

因為它的任務我不想給你直接的完整解決方案。 如果您需要更多幫助,請隨時發表評論。

我的建議是創建 object

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},
};

然后循環收集並檢查條件是否可以從“馬”位置移動到那里。

請注意,馬步實際上意味着距離的總和
在那一點和馬之間應該正好是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 軸在數組中是相反的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM