簡體   English   中英

如何在面板網格上突出顯示特定區域

[英]How to highlight a specific area on a grid of panels

制作一個面板填充的表格,讓我想要一個字符(由pictureBox表示)繼續移動。 當我單擊角色的圖片框時,我希望突出顯示一個區域,以表示該角色可以移動多遠。

下面的圖片是我到目前為止所管理的,但這並不是我想要的。 紅色邊框代表pictureBox,而橙色矩形代表突出顯示的區域。 每個黑色邊框都是一個面板。

具有2個動作的角色的當前突出顯示區域

角色移動到對角線上的一個面板應該花費2個動作,因此,如果一個角色有2個動作可用,則單擊pictureBox時應突出顯示下面的區域:

兩次移動的角色所需的突出顯示區域

我了解為什么我的代碼會突出顯示一個正方形而不是我想要的區域,但是我不確定如何修復它。 任何幫助,將不勝感激; 下面是我編寫的代碼。

        foreach (Panel pan in grid)
        {
            if (pan.Left <= (selectedCharacter.PictureBox.Left + (selectedCharacter.Movement * 80)) 
                && pan.Left >= (selectedCharacter.PictureBox.Left - (selectedCharacter.Movement * 80)))
            {
                if (pan.Top <= (selectedCharacter.PictureBox.Top + (selectedCharacter.Movement * 100)) 
                    && pan.Top >= (selectedCharacter.PictureBox.Top - (selectedCharacter.Movement * 100)))
                {
                        pan.BackColor = selectedCharacter.PlayerHighlight;
                }
            }
        }

如果我不夠清楚,請隨時提問

這是我想出的解決此問題的代碼。 如果您看到解決此問題的簡便/不同方法,請隨時發表評論。

Panel[] highlightedMovement = new Panel[1]; //creates an array of panels to be highlighted
highlightedMovement[0] = characterBeingHighlighted.CurrentPanel; //adds the panel the character is currently on to the array

int z = 1;

//highlights panels adjecent to those already highlighted for as many iterations as the character's movement stat
for (int i = 0; i < characterBeingHighlighted.Movement; i++)
{
    foreach (Panel highlightPanel in highlightedMovement)
    {
        //goes through all panels on the grid and adds them to the array if they are adjacent to any already in the array.
        foreach (Panel gridPanel in grid)
        {
            //checks if the panel is adjacent to any already in the array
            if ((gridPanel.Top == (highlightPanel.Top + 100) && gridPanel.Left == highlightPanel.Left) ||
                (gridPanel.Top == (highlightPanel.Top - 100) && gridPanel.Left == highlightPanel.Left) ||
                (gridPanel.Left == (highlightPanel.Left + 80) && gridPanel.Top == highlightPanel.Top) ||
                (gridPanel.Left == (highlightPanel.Left - 80) && gridPanel.Top == highlightPanel.Top))
            {
                //adds it to the array but only if it isn't already in the array
                if (!highlightedMovement.Contains(gridPanel))
                {
                    Array.Resize(ref highlightedMovement, highlightedMovement.Length + 1);
                    highlightedMovement[z] = gridPanel;
                    z++;
                }
            }
        }
    }
}

//highlights all the panels in the array
foreach (Panel panel in highlightedMovement)
{
    panel.BackColor = characterBeingHighlighted.PlayerHighlight;
}

暫無
暫無

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

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