国际象棋游戏的OOP?

时间:2012-09-16 08:44:49

标签: oop design-patterns

我在网上遇到过这样的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或理解国际象棋:(。从上到下:

  1. ChessPieceBase是所有作品的抽象基类,国王,王后,白嘴鸦,主教,骑士和典当,对吧?所以我看到King和Queen扩展了ChessPieceBase。

  2. 根据评论,位置应记录黑白碎片的全球当前位置。它是作为ChessPieceBase的arraylist实现的,但是ChessPieceBase不包含任何位置信息成员,那么位置信息存储在哪里?

  3. 什么是ChessPieceTurn?如果它是'轮到你了',那么为什么玩家类中的getTurn()func需要'Position p'参数并返回null?

  4. GameManager类。 'currentPosition'记录了游戏的全局状态,'acceptTurn()'似乎没有做任何事情,'processTurn()'从玩家转过来并像裁判一样处理。希望我理解最后一个正确的。

  5. 如果可能,有人可以编写一个小的main()函数来展示它是如何工作的吗?这时我只是困惑。

    欢迎您了解如何看待国际象棋比赛的类别,

    谢谢,

0 个答案:

没有答案