2012-02-09 6 views
3

チェスゲームをデザインする際に問題が発生しました。 2人のプレーヤーがあります:p1、p2; 同じプレーヤーがmakeMoveを同時に2回呼び出すことはできないので、クラスを実装したいと思います。クラスの呼び出しメソッドを制限する

例を参照してください。

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クラスがそれに責任を負うべきだと思う。それはChessEngineが前の動きのリストを持って、その後、プレイヤーが移動することができるかどうかを確認することがあった

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

    } 
} 

のようなものとの方が良いだろう。

+0

私は同じことを書いていました。つまり、makeMoveメソッドをPlayerクラスから外しています。より良い方法があるかもしれませんが、今はこれが私の心に来ている最高のものです。 – taskinoor

1

GameOfChessという名前のクラスがあると思いますが、これはPlayerが次のターンを知っている必要があります。なぜ、このクラスの助けを借りてプレイヤーの動きを同期させないのですか?

あなたは、インスタンスのためにそれこのような何か行うことができます:この宿題は

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

     // Do the move 
     game.move(m); 
    }  
    // else ignore moves or throw an exception 
} 
関連する問題