我在设计国际象棋游戏时遇到了一个问题。 有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
请帮我设计课程
答案 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
}