1
我目前正在編寫一個國際象棋程序,並且在Board類中使用Piece類時遇到問題。在開發國際象棋程序時使用另一個班級(Java)
所以,我的基本思路如下:
我創建了一個包含X片類,y座標,顏色和空的狀態。然後,我創建了一個Board類,它將生成一個2D Piece數組來生成棋盤狀結構。
因此,舉例來說,我想這樣做
Board board = new Board(); // This will generate a 2D array of Piece class.
Rook r1 = new Rook(0, 0, BLACK, false); //subclass of Piece
board.movePiece(r1, 1, 1); // moves r1 to 1,1
但是,我有是問題,
public class Board {
private static final int NUM_OF_ROWS = 8;
private static final int NUM_OF_COLS = 8;
private static final Piece[][] board = generateBoard();
private static Piece[][] generateBoard() {
Piece[][] board = new Piece[NUM_OF_ROWS][NUM_OF_COLS];
for(int i = 0; i < NUM_OF_ROWS; i++) {
for(int j = 0; j < NUM_OF_COLS; j++) {
board[i][j] = new Piece(i, j, null, true);
}
}
return board;
}
}
如果我這樣做是爲了自動生成2D-件 - 陣列,每當我實例化一個新的董事會,它給了我一個錯誤,我不能實例化新的Piece();因爲它是一個抽象類。如果我擴展Piece類,它會變得更加複雜,並且實際上並不明智地讓董事會擴展一塊。
我該如何解決這種設計明智和代碼明智?我現在缺少什麼東西?我也將下面的代碼放在Piece類中。
public abstract class Piece {
int x, y;
Players color;
boolean isEmpty;
Piece(int x, int y, Players color, boolean isEmpty){
this.x = x;
this.y = y;
this.color = color;
this.isEmpty= isEmpty;
}
public abstract boolean isValidLocation(Tile[][] board, int fromX, int fromY, int toX, int toY);
Players getColor() {
return color;
}
}
你不會實例化'Piece';你會實例化它的具體的後代,比如「Rook」,「Pawn」,「Knight」,「King」或「Queen」。 –