2012-02-09 3 views
3

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

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

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

    } 
} 

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

+0

Я писал то же самое, т. Е. Вынимал метод makeMove из класса Player. Там могут быть лучшие способы, но сейчас это лучшее, что приходит мне на ум. – taskinoor

1

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

Вы могли бы, например, сделать что-то вроде этого:

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

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