2011-04-29 145 views
1

我正在努力完成我的任務。這是一個國際象棋設計(人工智能,GUI不需要),我有一個班級。該類有兩個變量:顏色和名稱。到目前爲止,我在這堂課中有一個像這樣的「移動方法」。 `java中的棋盤和棋子設計

public void move(Piece piece,int x,int y) 
    { 
int a=0; 
int b=0; 

    for(int i=0;i<Board.grid.length;i++) { 
    for(int r=0;r<Board.grid[i].length;r++) { 
    if(Board.grid[i][r]==piece) 
    a=i; 
    b=r; 
    if(Board.getisnull(x, y)){ 
    Board.grid[a][b]=null; 
    Board.grid[x][y]=piece; 
    } 
    } 
} 
Board.grid[u][t]=null; 
} 
` 

在這段代碼中,我想找到一個指數,這是一塊我想移動的舊索引,然後移動然後設置其舊索引爲空,但是這是行不通的。我可以在屏幕上看到名稱,但不是顏色。另外,舊索引未設置爲空。怎麼做?我開始考慮使用對象(片)數組,但是如何?

+0

u和t在哪裏定義? – Thomas 2011-04-29 15:21:42

+0

抱歉..沒有你和t.they是a和b ..我修正了它 – Cole 2011-04-29 15:23:52

回答

2

只是一個小的提示:

//找到一塊等於名稱和顏色我們piece.so 如果(Board.grid [I] [Y] .equals(名稱)||件的.color.equals(color))

由於檢查「等於名稱或等同的顏色」,所以不能放在一起。我想你想將其更改爲:if(Board.grid[i][y].equals(name) && Piece.color.equals(color))

Piece.setColor(彩色); //設置這一塊的顏色

咦?你在做什麼?不是Piece一直保持它的顏色?

如果(Board.getisnull(X,Y)==真)

你在你的循環重新定義Ÿ這樣y是不是你傳遞給該方法的參數。

基本上,我會重新定義方法(保持爲儘可能接近OP越好,注意,OOP明智的有可能是更好的設計,繼承片等):

//Board.grid[][] should be a 'Piece[8][8]'; 


//edit: rename parameters for clarity 
public void move(Piece piece,int targetX,int targetY) 
{ 
    if(Board.getisnull(targetX, targetY))//method in other class checks the indexes if null 
    { 
    //remove the piece from the field/index 
    Board.grid[piece.x][piece.y]=null; 

    //add the piece to the target field and update its position 
    piece.x = targetX; 
    piece.y = targetY; 
    Board.grid[targetX][targetY]=piece; 

    } 
    else 
    { 
    //handle that case, e.g. by throwing an exeption 
    } 
} 

現在你'd得到想要移動的部分(知道其索引),計算目標位置並致電move(piece, targetX, targetY);

+0

但是這個代碼片斷的舊索引(移動之前的位置)沒有設置爲null ..?x,y是想要的索引被移動。 – Cole 2011-04-29 15:42:33

+0

此行將舊索引設置爲null:'Board.grid [piece.x] [piece.y] = null;'請注意,piece.x和piece.y是片斷當前的索引,它隨後發生變化。 – Thomas 2011-04-29 15:45:24

+0

所以你說第一個刪除的作品,然後添加一個新的一塊與刪除的一個,到x,y的位置.. – Cole 2011-04-29 16:11:24