以下是Java实现中国象棋的源代码示例:
public class Chess { private Piece[][] board; public Chess() { // 初始化棋盘 board = new Piece[10][9]; board[0][0] = new Piece(PieceType.ROOK, Color.RED); board[0][1] = new Piece(PieceType.KNIGHT, Color.RED); board[0][2] = new Piece(PieceType.ELEPHANT, Color.RED); board[0][3] = new Piece(PieceType.ADVISOR, Color.RED); board[0][4] = new Piece(PieceType.GENERAL, Color.RED); board[0][5] = new Piece(PieceType.ADVISOR, Color.RED); board[0][6] = new Piece(PieceType.ELEPHANT, Color.RED); board[0][7] = new Piece(PieceType.KNIGHT, Color.RED); board[0][8] = new Piece(PieceType.ROOK, Color.RED); board[2][1] = new Piece(PieceType.CANNON, Color.RED); board[2][7] = new Piece(PieceType.CANNON, Color.RED); board[3][0] = new Piece(PieceType.PAWN, Color.RED); board[3][2] = new Piece(PieceType.PAWN, Color.RED); board[3][4] = new Piece(PieceType.PAWN, Color.RED); board[3][6] = new Piece(PieceType.PAWN, Color.RED); board[3][8] = new Piece(PieceType.PAWN, Color.RED); board[9][0] = new Piece(PieceType.ROOK, Color.BLACK); board[9][1] = new Piece(PieceType.KNIGHT, Color.BLACK); board[9][2] = new Piece(PieceType.ELEPHANT, Color.BLACK); board[9][3] = new Piece(PieceType.ADVISOR, Color.BLACK); board[9][4] = new Piece(PieceType.GENERAL, Color.BLACK); board[9][5] = new Piece(PieceType.ADVISOR, Color.BLACK); board[9][6] = new Piece(PieceType.ELEPHANT, Color.BLACK); board[9][7] = new Piece(PieceType.KNIGHT, Color.BLACK); board[9][8] = new Piece(PieceType.ROOK, Color.BLACK); board[7][1] = new Piece(PieceType.CANNON, Color.BLACK); board[7][7] = new Piece(PieceType.CANNON, Color.BLACK); board[6][0] = new Piece(PieceType.PAWN, Color.BLACK); board[6][2] = new Piece(PieceType.PAWN, Color.BLACK); board[6][4] = new Piece(PieceType.PAWN, Color.BLACK); board[6][6] = new Piece(PieceType.PAWN, Color.BLACK); board[6][8] = new Piece(PieceType.PAWN, Color.BLACK); } public Piece getPiece(int x, int y) { return board[x][y]; } public void movePiece(int fromX, int fromY, int toX, int toY) { Piece piece = board[fromX][fromY]; if (piece == null) { throw new IllegalArgumentException("Invalid move: no pieceat (" + fromX + ", " + fromY + ")"); } if (!piece.canMove(toX, toY)) { throw new IllegalArgumentException("Invalid move: piece cannot move to (" + toX + ", " + toY + ")"); } board[toX][toY] = piece; board[fromX][fromY] = null; } public static void main(String[] args) { Chess chess = new Chess(); // 以下是一个样例,将红方车从位置(0, 0)移动到位置(5, 0) System.out.println("Before move:"); System.out.println(chess.getPiece(0, 0)); System.out.println(chess.getPiece(5, 0)); chess.movePiece(0, 0, 5, 0); System.out.println("After move:"); System.out.println(chess.getPiece(0, 0)); System.out.println(chess.getPiece(5, 0)); } } class Piece { private PieceType type; private Color color;
public Piece(PieceType type, Color color) { this.type = type; this.color = color; } public PieceType getType() { return type; } public Color getColor() { return color; } public boolean canMove(int toX, int toY) { // 判断该棋子是否能够移动到目标位置 // 具体的判断规则可以根据中国象棋规则自行实现 return true; } @Override public String toString() { return type.toString() + "(" + color.toString() + ")"; } } enum PieceType { ROOK, KNIGHT, ELEPHANT, ADVISOR, GENERAL, CANNON, PAWN } enum Color { RED, BLACK }
该示例中定义了一个`Chess`类来表示中国象棋棋盘,每个棋子使用`Piece`类来表示。`PieceType`和`Color`枚举类型分别表示棋子的类型和颜色。`Piece`类中实现了`canMove`方法来判断该棋子是否能够移动到目标位置。在`Chess`类中实现了`getPiece`和`movePiece`方法来获取和移动棋子。在`main`方法中展示了一个样例,将红方车从位置(0, 0)移动到位置(5, 0)。需要注意的是,该示例并没有实现完整的中国象棋规则,需要根据实际需求自行补充完善。
评论