2013-12-20 104 views
0

編輯:解決,感謝MGorgon。與Java中的多個按鈕遊戲

我正在創建一個簡單的遊戲,(目前)允許您在鼠標點擊的同時,在當前位置的每個方向上移動點1步。但是,這隻適用於板子是方形的(您可以選擇板子的大小)。 董事會由圖像和2D陣列按鈕代表,以跟蹤'1'是點的位置和'0'是一個自由空間的位置。 actionlistener中的Pos1和Pos2打印出被點擊的按鈕的位置。 所以,當遊戲板是方形的時候,這個效果很好,但是當我將板改成長方形時,我得到了不正確的pos1和pos2值,我正在用它來移動這個點。

//creates the array and sets dot start position. 
    for(int i=0;i<xAxis;i++) 
    { 
     for(int j=0;j<yAxis;j++) 
     {   
      board[i][j]=0; 
     }    
    } 
    board[(xAxis/2)][(yAxis/2)]=1; 

//Creates buttons and adds actionslistener and images to the buttons. 
    for(int i=0;i<xAxis;i++) 
    {     
     for(int j=0;j<yAxis;j++) 
     { 
      buttons[i][j] = new JButton(); 
      buttons[i][j].setIcon(circleIMG); 
      buttons[i][j].setBorderPainted(false); 
      buttons[i][j].addActionListener(GBC); 
      buttons[i][j].setPreferredSize(new Dimension(52,52)); 
      buttons[i][j].setRolloverIcon(circleDotIMG); 
      buttons[i][j].setRolloverEnabled(true); 

      GameBoardPanel.add(buttons[i][j]); 
     }  
    } 

    buttons[(xAxis/2)][(yAxis/2)].setIcon(circleDotIMG); 

//implements the actionlistener 
    public class GridButtonClick implements ActionListener 
    { 
    //int xControl=0;  
    int pos1=0; 
    int pos2=0; 
    boolean Move = false; 

    public void actionPerformed(ActionEvent e) 
    { 
     int posx=FindXpos(board); 
     int posy=FindYpos(board);   

     for(int i=0;i<xAxis;i++) 
     { 
      for(int j=0;j<yAxis;j++) 
      { 
       if(buttons[i][j] == e.getSource()) 
       {      
        pos1=i; 
        pos2=j; 
        //System.out.println("posx: "+posx); 
        //System.out.println("posy: "+posy); 
        System.out.println("pos1: "+pos1); 
        System.out.println("pos2: "+pos2); 
        System.out.println("\n"); 


         if((pos1 == posx+1 && pos2 == posy+1) || (pos1 == posx-1 && pos2 == posy-1)) 
          Move=true;                
         if((pos1 == posx+1 && pos2 == posy-1) || (pos1 == posx-1 && pos2 == posy+1)) 
          Move=true;          
         if((pos1 == posx+1 && pos2 == posy) || (pos1 == posx-1 && pos2 == posy)) 
          Move=true;         
         if((pos2 == posy+1 && pos1 == posx) || (pos2 == posy-1 && pos1 == posx)) 
          Move=true;      



        if(Move) 
        { 
         if(yAxis>xAxis) 
         buttons[(xAxis/2)][(yAxis/2)-1].setIcon(circleIMG); 

         else if((xAxis>yAxis) || (xAxis==yAxis)) 
         buttons[(xAxis/2)][(yAxis/2)].setIcon(circleIMG); 


         RemovePreviousMark(board); 
         board[i][j] = 1; 
         buttons[i][j].setIcon(circleDotIMG); 
         System.out.println("Button press: "+"["+i+"]"+"["+j+"]"); 
         //System.out.println("x: "+i+" "+"y "+j); 
         Move=false; 
        } 
       } 
      } 
     } 
    }  
} 
+0

您是否試過'pos1 = j; POS2 = I;'?可能是按鈕[i] [j]代表pos [y] [x]。 – MGorgon

+0

更改pos1 = j; POS2 = I;只是破了它,但也許我必須在代碼中更改更多的東西才能工作。關於按鈕[i] [j]代表pos [y] [x]的部分可能會修復一些內容,我會試試看。 – sdfg

回答

1

這似乎很複雜。

我不確定你是否已經列出了代碼,但如果你不是,你應該記住currX和currY字段中的當前位置。然後移動所有需要做的就是清空當前位置,適當更改變量,然後設置新位置。

使你的按鈕對象成爲你自己的按鈕子類,並在按鈕內存儲x,y座標。然後您立即知道按鈕點擊的座標,而無需掃描陣列。

+0

這就是我正在做的,但是當高度和寬度不相等時,我會從pos1和pos2中獲得奇怪的值。不過,我會研究子類thingy,這可能會清除一些東西。 – sdfg