Se si desidera ruotare il i giocatori utilizzano un ciclo deque
:
from collections import deque
d = deque([0,1,2,3,4,5,6,7,8])
d.rotate(len(d)//2 + 1)
print(d)
deque([4, 5, 6, 7, 8, 0, 1, 2, 3])
Se si voleva tenere traccia di ogni giocatore si può solo continuare a rotazione:
from collections import deque
d = deque([0,1,2,3,4,5,6,7,8])
print(d)
next_p = d[0]
print(next_p)
d.rotate()
print(d)
next_p = d[0]
print(next_p)
uscita:
deque([0, 1, 2, 3, 4, 5, 6, 7, 8])
0
deque([8, 0, 1, 2, 3, 4, 5, 6, 7])
8
È possibile spostare la logica all'interno di una funzione get_next_player
, basta fare self.players un deque, questo verrà riavviato automaticamente dopo che tutti i giocatori hanno avuto un andare a partire da un giocatore diverso ogni giro:
def get_next_player(self):
if self.players[0] is None:
self.players.popleft()
self.players.rotate(-1)
self.players.appendleft(None)
else:
n_p = self.players[0]
self.players.rotate()
return n_p
la funzione si occupa delle rotazioni, è possibile vedere il l ogic below:
# sim round
In [25]: print([get_next_player() for _ in range(10)])
[1, 0, 8, 7, 6, 5, 4, 3, 2, 1]
In [26]: players
# now next player starts
Out[26]: deque([None, 1, 2, 3, 4, 5, 6, 7, 8, 0])
# sim round
In [27]: print([get_next_player() for _ in range(10)])
[2, 1, 0, 8, 7, 6, 5, 4, 3, 2]
In [28]: players
Out[28]: deque([None, 2, 3, 4, 5, 6, 7, 8, 0, 1])
# next player starts
In [29]: print([get_next_player() for _ in range(10)])
[3, 2, 1, 0, 8, 7, 6, 5, 4, 3]
In [30]: players
Out[30]: deque([None, 3, 4, 5, 6, 7, 8, 0, 1, 2])
Quali problemi/errori si stanno verificando con il codice pubblicato? – moveaway00