我在网上遇到过这样的OOP设计(简短版):
public abstract class ChessPieceBase {
abstract boolean canBeChecked();
abstract boolean isSupportCastle();
}
public class King extends ChessPieceBase { ... }
public class Queen extends ChessPieceBase { ... }
public class Position { // represents chess positions in compact form
ArrayList<ChessPieceBase> black;
ArrayList<ChessPieceBase> white;
}
public class ChessPieceTurn { };
public abstract class PlayerBase {
public abstract ChessPieceTurn getTurn(Position p);
}
class ComputerPlayer extends PlayerBase {
public ChessPieceTurn getTurn(Position p) { return null; }
}
public class HumanPlayer extends PlayerBase {
public ChessPieceTurn getTurn(Position p) { return null; }
}
public class GameManager {
void processTurn(PlayerBase player) { };
boolean acceptTurn(ChessPieceTurn turn) { return true; };
Position currentPosition;
}
我很难理解设计,不知道我是不是不理解OOP或理解国际象棋:(。从上到下:
ChessPieceBase是所有作品的抽象基类,国王,王后,白嘴鸦,主教,骑士和典当,对吧?所以我看到King和Queen扩展了ChessPieceBase。
根据评论,位置应记录黑白碎片的全球当前位置。它是作为ChessPieceBase的arraylist实现的,但是ChessPieceBase不包含任何位置信息成员,那么位置信息存储在哪里?
什么是ChessPieceTurn?如果它是'轮到你了',那么为什么玩家类中的getTurn()func需要'Position p'参数并返回null?
GameManager类。 'currentPosition'记录了游戏的全局状态,'acceptTurn()'似乎没有做任何事情,'processTurn()'从玩家转过来并像裁判一样处理。希望我理解最后一个正确的。
如果可能,有人可以编写一个小的main()函数来展示它是如何工作的吗?这时我只是困惑。
欢迎您了解如何看待国际象棋比赛的类别,
谢谢,