Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
5个月前关闭。
我正在使用Java构建国际象棋游戏(可能不会使用任何gui或任何东西,而不仅仅是一个简单的控制台游戏),但是我有ChessBoard类,如下所示:
目前这只是一个非常简单的代码,可以将部件添加到板上,然后打印出任何给定位置的部件,但是我还有一个ChessPiece类,如下所示:
到目前为止,所有这些方法都可以正常工作,但是我想知道让棋子移动是更好的做法(因此,将移动动作放在ChessPiece类中)还是仅仅具有如何在ChessPiece类中移动,然后给出实际的工作效果会更好。将他们转移到ChessBoard类
谢谢
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
5个月前关闭。
我正在使用Java构建国际象棋游戏(可能不会使用任何gui或任何东西,而不仅仅是一个简单的控制台游戏),但是我有ChessBoard类,如下所示:
public class ChessBoard {
private BasePiece[][] board = new BasePiece[8][8];
private int charToInt(char input){
return (int)input - 97;
}
public void setPiece(String colour, String type, char x, int y){
board[charToInt(x)][y-1] = new BasePiece(colour, type);
}
public void setPiece(String piece, char x, int y){
board[charToInt(x)][y-1] = new BasePiece(piece);
}
public String getPiece(char x, int y){
return board[charToInt(x)][y-1].getPiece();
}
}
目前这只是一个非常简单的代码,可以将部件添加到板上,然后打印出任何给定位置的部件,但是我还有一个ChessPiece类,如下所示:
public class ChessPiece {
private String colour;
private String type;
ChessPiece(String colour, String type){
setColour(colour);
setType(type);
}
ChessPiece(String piece){
setColour(piece.toCharArray()[0]);
setType(piece.toCharArray()[1]);
}
private void setColour(String colour){
this.colour = colour.toLowerCase();
}
private void setColour(char colour){
switch (colour) {
case 'w':
setColour("white");
break;
case 'b':
setColour("black");
break;
default:
setColour("invalid colour");
break;
}
}
private void setType(String type){
this.type = type.toLowerCase();
}
private void setType(char type){
switch (type) {
case 'K':
setType("king");
break;
case 'q':
setType("queen");
break;
case 'r':
setType("rook");
break;
case 'b':
setType("bishop");
break;
case 'k':
setType("knight");
break;
case 'p':
setType("pawn");
break;
default:
setType("invalid type");
break;
}
}
public String getColour(){
return colour;
}
public String getType(){
return type;
}
public String getPiece(){
return getColour() + " " + getType();
}
}
到目前为止,所有这些方法都可以正常工作,但是我想知道让棋子移动是更好的做法(因此,将移动动作放在ChessPiece类中)还是仅仅具有如何在ChessPiece类中移动,然后给出实际的工作效果会更好。将他们转移到ChessBoard类
谢谢
最佳答案
正如我在评论中提到的,我认为您的OOP结构可能有点过于简单。我建议您考虑创建:
枚举ChessColor:白色,黑色。最好使用枚举而不是字符串,因为后者容易出错,并且不允许使用方法参数和其他编译时类型检查
抽象类AbstractChessPiece:片段从其延伸的抽象类。它具有ChessColor字段,以及所有组件都需要的任何其他抽象方法。可能实际上不需要这个。
枚举ChessPiece扩展了AbstractChessPiece:也可以对此进行枚举,因为它们将是常量。将包含includine public boolean moveAllowed(ChessSquare square)
的几种方法,如果允许移动此件,则这些方法返回true。
class ChessSquare:它知道自己的具有getter和setter的等级和文件(int字段),并且有一个ChessPiece字段,如果正方形为空,则为null;否则为ChessPiece。
ChessBoard类:拥有ChessSquares网格
ChessPlayer类:代表两个玩家之一。它有一个ChessColor字段,一个List<ChessPiece> capturedPieces
,用于进行移动,提议平局,投降的方法...
ChessGame类:启动所有程序并控制游戏流程的程序。进行此动作的玩家将向游戏对象提议一个动作,该动作将检查有效性,如果有效,则进行该动作并检查该动作的游戏结果,包括捕获,检查,将死,...
07-24 09:17