2012-02-09 47 views
3

我在设计象棋游戏时遇到了问题。 共有2位玩家:p1,p2; 我想在这样的awy中实现这个类,以至于同一个玩家不能同时调用两次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 

请帮我设计的类

+0

这是功课? – 2012-02-09 07:31:55

回答

2

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

class ChessEngine 
{ 
    void MovePlayer(Player *player, Move *move) 
    { 

    } 
} 

在这ChessEngine可能以前有过移动的列表,然后检查是否允许玩家移动的更好的东西。

+0

我正在写同样的东西,即从Player类中取出makeMove方法。可能有更好的方法,但现在这是我想到的最好的东西。 – taskinoor 2012-02-09 07:36:01

1

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

你可以例如做这样的事情:

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

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