Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在开发国际象棋程序(Java)时使用类中的另一个类_Java - Fatal编程技术网

在开发国际象棋程序(Java)时使用类中的另一个类

在开发国际象棋程序(Java)时使用类中的另一个类,java,Java,我目前正在编写一个国际象棋程序,在棋盘类中使用Piece类时遇到了一个问题 因此,我的基本想法如下: 我创建了一个包含x、y坐标、颜色和空状态的Piece类。然后,我创建了一个Board类,它将生成一个2D工件数组,以生成类似棋盘的结构 举个例子,我想做一些 Board board = new Board(); // This will generate a 2D array of Piece class. Rook r1 = new Rook(0, 0, BLACK, false); //su

我目前正在编写一个国际象棋程序,在棋盘类中使用Piece类时遇到了一个问题

因此,我的基本想法如下:

我创建了一个包含x、y坐标、颜色和空状态的Piece类。然后,我创建了一个Board类,它将生成一个2D工件数组,以生成类似棋盘的结构

举个例子,我想做一些

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;

    }
}

我建议你把逻辑分开,为一个片段指定一个有效的位置。保持piece类仅用于类型,并使用Strategy pattern(策略模式)实现不同片段的移动。

我建议您将逻辑与片段的有效位置分开。仅为类型保留piece类,并使用策略模式为不同的piece实现移动。

您不会实例化
piece
;相反,您将实例化它的具体后代,如
Rook
Pawn
Knight
King
Queen
。您不会实例化
片段
;相反,您将实例化它的具体后代,如
骑士
国王
女王
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;
    }

}