[英]How to highlight a specific area on a grid of panels
制作一個面板填充的表格,讓我想要一個字符(由pictureBox表示)繼續移動。 當我單擊角色的圖片框時,我希望突出顯示一個區域,以表示該角色可以移動多遠。
下面的圖片是我到目前為止所管理的,但這並不是我想要的。 紅色邊框代表pictureBox,而橙色矩形代表突出顯示的區域。 每個黑色邊框都是一個面板。
角色移動到對角線上的一個面板應該花費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.