2

我創建一個小遊戲就像遊戲黑白棋/奧賽羅我已成功地創建了一個2×3板與按鈕改變它。檢查按鈕的顏色,並使用2D陣列

的按鈕改變顏色的人你點擊它們,但我有麻煩來檢測是否有白色黑色顏色2之間,如果是更改白色變成黑色。我希望這是有意義的。這些按鈕位於二維數組中。任何建議,可以幫助我這樣做將不勝感激。

的圖像:

enter image description here 這裏是我的代碼:

![namespace reversitest 
{ 
    public partial class Form1 : Form 
    { 

     private Button\[,\] squares; 
     public Form1() 
     { 
      InitializeComponent(); 

      squares = new Button\[3, 2\]; 
      squares = new Button\[,\] {{button1, button2, button3}, 
       {button4, button5, button6,}}; 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      foreach (Button sqrr in squares) 
      { 
       sqrr.Click += new System.EventHandler(this.DrawCharacter); 
      } 
     } 
     int _turn = 0; 
     private void DrawCharacter(object sender, EventArgs e) 
     { 
      Button sqrr = (Button)sender; 
      int col = 0; 

      if (sqrr.BackColor.Equals(Color.Black) || sqrr.BackColor.Equals(Color.White)) 
      { 
       MessageBox.Show("Move Not Allowed!"); 
      } 
      else 
      { 
       for (int i = 0; i < squares.GetLongLength(1); ++i) 
       { 

        // check othere squares and change color 
        if (i < 2) 
        { 
         for (int f = 0; f < 3; ++f) 
         { 
          var ss = squares\[i, f\]; 
          if (ss.BackColor.Equals(Color.Black)) 
          { 

           MessageBox.Show("we have a black"); 

           //ss = squares\[i, f+1\]; 
           ss.BackColor = Color.Black; 

          } 
          else 
          { 
           MessageBox.Show("no black"); 
          } 
         } 

        } 

         if (_turn == 0) 
         { 
          _turn = 1; 
          sqrr.BackColor = Color.Black; 


         } 
         else 
         { 
          _turn = 0; 
          sqrr.BackColor = Color.White; 


         } 

       } 


      } 


     } 
    } 
} 
+0

那是董事會規模將是固定的(2×3),或有什麼不同? –

+0

@NewDeveloper它會成長爲一個8×8 – Tacit

回答

2

的名字與數組索引你的按鈕。它會幫助你找到按鈕。根據您
例如圖片Button1的名字將被btn_1_1。

內。然後你按一下按鈕事件首先得到該按鈕的名稱,然後確定位置的按鈕。

 Button b = sender as Button; 
     string[] btnData = b.Name.Split('_'); 
     int x = int.Parse(btnData[1]); 
     int y = int.Parse(btnData[2]); 

     //check for possible combinations 
     int top = y - 2; 
     int botton = y + 2; 

     int left = x - 2; 
     int right = x + 2; 

     if (top >= 0 && squares[top, y].Background == Color.Black) 
     { 
      squares[top+1, y].Background = Color.Black; 
     } 
     ... 
     ... 

繼續這樣。如果您需要更多詳細信息,請隨時詢問。

+0

將我需要更換與此代碼的單擊事件我的代碼? p.s我真的很感謝你的回答 – Tacit

+0

是的。我沒有檢查,但這應該工作。 –

+0

if語句似乎有許多錯誤主要與.Background它應該是.BackColor(正方形[top + 1,y] .BackColor == Color.Black;似乎給我一個問題,它說:「只有分配,呼叫,增量,減量和新的對象表達式可以用作語句「) – Tacit

0

你需要它是優雅?一種暴力方法:你可以檢查8個不同方向上的棋子,它們可以對齊。例如,你從一個黑色的片斷開始。在一個方向檢查下一塊。如果它是白色的,繼續前進並記下白色的位置,以便稍後將其更改爲黑色。當你最終擊中一塊黑色的棋子時,將所有存儲的位置改爲黑色,然後轉到下一個方向並重復該過程,直到完成所有8個方向。

+0

它會成長爲一個8×8 – Tacit

1

最終答案

//check for possible combinations 
      int top = x - 2; 
      int botton = x + 2; 

      int left = y - 2; 
      int right = y + 2; 

      if (top >= 0 && squares[top, y].BackColor == Color.Black) 
      { 
       squares[top + 1, y].BackColor = Color.Black; 
      } 
      else if (left >= 0 && squares[x, left].BackColor == Color.Black) 
      { 
       squares[x, left + 1].BackColor = Color.Black; 
      } 

      else if (left >= 0 && squares[x, left].BackColor == Color.Black) 
      { 
       squares[x, left + 1].BackColor = Color.Black; 
      } 

將延長一個8×8板以後