Предельный метод вызова класса - PullRequest
3 голосов
/ 09 февраля 2012

Я столкнулся с проблемой при разработке игры в шахматы. Есть 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 ]

2 голосов
/ 09 февраля 2012

Прежде всего, я не думаю, что за это должен отвечать класс Player. Было бы лучше с чем-то вроде

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

   }
}

В котором ChessEngine может иметь список предыдущих ходов, а затем проверить, разрешено ли игроку двигаться.

1 голос
/ 09 февраля 2012

Я полагаю, что существует класс с именем GameOfChess или что-то вроде этого, который должен знать, у какого игрока будет следующий ход.Почему бы вам не синхронизировать ходы игрока с помощью этого класса?

Например, вы можете сделать это примерно так:

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

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