限制类的调用方法

时间:2012-02-09 07:27:36

标签: design-patterns

我在设计国际象棋游戏时遇到了一个问题。 有2个玩家:p1,p2; 我想在这样的类中实现类,即同一个玩家不能同时调用makeMove两次。

参见示例。

class Move {};
class Player {
    void makeMove(Move *m) {

    }
};

//情况1:

Player p1;
p1.makeMove(new move());
p1.makeMove(new move());   // it should give error

//情况2:

Player p1;
p1.makeMove(new move());
Player p2;
p2.makeMove(new move());

p1.makeMove(new move());   // it os ok

请帮我设计课程

2 个答案:

答案 0 :(得分:2)

首先,我不认为Player类应该对此负责。用

之类的东西会更好
class ChessEngine
{
   void MovePlayer(Player *player, Move *move)
   {

   }
}

其中ChessEngine可以包含先前移动的列表,然后检查是否允许玩家移动。

答案 1 :(得分:1)

我想有一个名为GameOfChess的类或类似的东西,它应该知道哪个玩家有下一回合。为什么不在这个班级的帮助下同步玩家的动作?

你可以这样做:

void makeMove(Move *m) {
    if (game.isItMyTurn(this)) {

        // Do the move
        game.move(m);
    }    
    // else ignore moves or throw an exception
}