2014-11-14 80 views
1

我有一個8×8的國際象棋棋盤,我試圖執行八皇后拼圖。在我的遊戲中,我製作了一個功能,用於檢查皇后的移動情況,一旦我的棋盤上按下按鈕,特定皇后可以移動的所有行和列都會關閉,以便兩個皇后不會互相攻擊。我被卡住,但試圖弄清楚如何讓我所有的對角線按鈕關閉,以及在我的代碼。八皇后 - 對角線運動

private JButton[][] Squares = new JButton[8][8]; 
for (int i = 0; i < Squares.length; i++) { 
       for (int j = 0; j < Squares[i].length; j++) { 
        if(Squares[i][j].getModel().isPressed()){ 
        for (int x=0; x<8; x++){ 
         Squares[i][x].setEnabled(false); //turns off column buttons 
         Squares[x][j].setEnabled(false); //turns off row buttons 
         //Squares[i][j+1].setEnabled(false); 
         //Squares[i+1][j-1].setEnabled(false); 


     } 

當女王被放在棋盤上時,爲了禁用所有的對角按鈕,我需要做些什麼?

編輯:我注意到,如果我做Squares[x][x].setEnabled(false);那麼它會給我兩個對角線之一,但是這隻給了對角線一次,並在點擊第二個按鈕後,一切都打破。

+0

你對主對角線上方格的座標有什麼注意?那對角線上方的方格的共同點呢? – 2014-11-14 20:22:43

+0

我真的不確定,無論我嘗試什麼,我都會遇到錯誤,最後我會陷入困境。我知道,如果我嘗試增加一個,我有時可以得到一個對角線,但是因爲每當我嘗試時我都會硬編碼,如果我處於最後一列/行,我經常會遇到錯誤。 – Valrok 2014-11-14 20:26:17

回答

0

您從[i][j]開始,並在兩行上並行地繼續前進(使用循環變量var x)。唯一棘手的部分是如何避免從電路板的邊緣脫落。請注意,與行/列,您的對角線不一定會8個平方

x要做到這一點,使用相同的基本回路

的一種方式,就是 -

if (i+x < Squares.length && j+x < Squares[i].length) 
    Squares[i+x][j+x].setEnabled(false);    
if (i-x >= 0 && j-x >= 0) 
    Squares[i-x][j-x].setEnabled(false);    
if (i-x >= 0 && j+x < Squares[i].length) 
    Squares[i-x][j+x].setEnabled(false);    
if (i+x < Squares.length && j-x >=0) 
    Squares[i+x][j-x].setEnabled(false); 
0

我不知道如果我有你的問題。如果您正在尋找一種方法來選擇所有對角線單元格時,皇后位置,那麼已知這些單元格將出現在|i-j|(即絕對值)。這裏有一個代碼,每當按下Squares[indx1,indx2],就會對角線單元格做一些事情......這有道理嗎?

public static void pressed(int indx1,int indx2){ 
    // Squares[indx1][indx2] is pressed 
    // Assign 1 to diagonal cells 
    for(int i=0;i<Squares.length;i++) 
    for(int j=0;j<Squares.length;j++) 
     if(Math.abs(indx1-i)==Math.abs(indx2-j)) 
      Squares[i][j]=1; 
}