2011-08-29 4 views
2

Comment cette méthode takeTurn peut-elle être imbriquée avec un playOrder pour obtenir les combinaisons joueur/tour suivantes?Comment implémenter takeTurn avec un playOrder rotatif?

{ 
... 
for(int i=0;i<NUM_PLAYERS;i++) 
{ 
players[i].takeTurn(); 

} ....

playOrder 

2Players
turn1 Joueur1 Player2 Joueur1 player2 Turn2 Player2 Joueur1 Player2 Joueur1

3Players turn1 Joueur1 Player2 Player3 player1 Turn2 Player2 Player3 Joueur1 joueur2 turn3 Joueur3 Joueur1 Joueur2 joueur3

4Players turn1 Joueur1 Player2 Player3 Player4 Turn2 Player2 Player3 Player4 player1 turn3 Player3 Player4 Joueur1 player2 turn4 Player4 Joueur1 Player2 player3

Répondre

1
for(int i=0;i<NUM_PLAYERS;i++) { 
    for(int playOrder = 0; playOrder < 4; playOrder++) { 
    players[(i + playOrder) % NUM_PLAYERS].takeTurn(); 
    } 
} 

.. ou peut-être

for(int i=0;i<NUM_PLAYERS;i++) { 
    players[(i + turnNumber) % NUM_PLAYERS].takeTurn(); 
} 
0

vous pouvez prendre une file d'attente en C++ qui est une file d'attente où vous pouvez pousser et sauter des deux extrémités,

dequeue<int> turns; 

puis poussez votre séquence pour quatre joueurs

for(int i=0; i<4; ++i) 
    turns.push_back(i%NUM_PLAYERS + 1); 

while(take_turns()) 
{ 
    print("Turn\n"); 
    print_dequeue(); 
    turns.push_back(turns.front()); 
    turns.pop_front(); 
} 
0

Si vous voulez être vous vraiment lisse pouvez utiliser une liste Java (travaux ArrayList) pour le faire très facilement

(En supposant que votre classe est appelé joueur, et vous avez tout enregistré dans une liste appelée joueurs)

while(continueTurns()) { 

    for(Player p : players) { 
     p.takeTurn(); 
    } 

    players.add(players.remove(0)); 

}