2013-04-07 65 views
0

製作面板填充表單,我希望角色(用pictureBox表示)移動。當我點擊角色的pictureBox時,我想要突出顯示一個區域,表示該角色可以移動多遠。如何突出顯示面板網格上的特定區域

下面的圖片是我迄今爲止管理的,但這不是我想要的。紅色邊框矩形代表圖片框,而橙色矩形代表突出顯示的區域。每個黑色邊框矩形都是一個面板。

Current Highlighted area for a character with 2 movement

的字符移動到在對角線上面板應該花費2移動,從而如果一個字符具有可用下面的區域應當強調2運動被點擊圖片框時上:

Desired Highlighted area for a character with 2 movement

我明白爲什麼我的代碼突出顯示一個正方形而不是我想要的區域,但我不知道如何解決該問題。任何幫助,將不勝感激;下面是我寫的代碼。

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

隨意提問,如果我沒有足夠的

回答

0

清楚這是我想出瞭解決這一問題的代碼。如果你能看到更簡單/不同的方式來解決這個問題,請隨時發表評論。

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; 
} 
相關問題