69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
import time
|
|
import Goban
|
|
from random import choice
|
|
|
|
|
|
def randomMove(b):
|
|
"""Renvoie un mouvement au hasard sur la liste des mouvements possibles. Pour avoir un choix au hasard, il faut
|
|
construire explicitement tous les mouvements. Or, generate_legal_moves() peut nous donner un itérateur (quand on
|
|
l'utilise avec pychess)."""
|
|
return choice(list(b.generate_legal_moves()))
|
|
|
|
|
|
def deroulementRandom(b):
|
|
"""Déroulement d'une partie de go au hasard des coups possibles. Cela va donner presque exclusivement
|
|
des parties très longues et sans gagnant. Cela illustre cependant comment on peut jouer avec la librairie
|
|
très simplement."""
|
|
print("----------")
|
|
b.prettyPrint()
|
|
if b.is_game_over():
|
|
print("Resultat : ", b.result())
|
|
return
|
|
b.push(randomMove(b))
|
|
deroulementRandom(b)
|
|
b.pop()
|
|
|
|
|
|
board = Goban.Board()
|
|
deroulementRandom(board)
|
|
|
|
""" Exemple de déroulement random avec weak_legal_moves()"""
|
|
|
|
|
|
def weakRandomMove(b):
|
|
"""Renvoie un mouvement au hasard sur la liste des mouvements possibles mais attention, dans ce cas
|
|
weak_legal_moves() peut renvoyer des coups qui entrainent des super ko. Si on prend un coup au hasard
|
|
il y a donc un risque qu'il ne soit pas légal. Du coup, il faudra surveiller si push() nous renvoie
|
|
bien True et sinon, défaire immédiatement le coup par un pop() et essayer un autre coup.
|
|
"""
|
|
return choice(b.weak_legal_moves())
|
|
|
|
|
|
def weakDeroulementRandom(b):
|
|
"""Déroulement d'une partie de go au hasard des coups possibles. Cela va donner presque exclusivement
|
|
des parties très longues. Cela illustre cependant comment on peut jouer avec la librairie
|
|
très simplement en utilisant les coups weak_legal_moves().
|
|
|
|
Ce petit exemple montre comment utiliser weak_legal_moves() plutot que legal_moves(). Vous y gagnerez en efficacité.
|
|
"""
|
|
|
|
print("----------")
|
|
b.prettyPrint()
|
|
if b.is_game_over():
|
|
print("Resultat : ", b.result())
|
|
return
|
|
|
|
while True:
|
|
# push peut nous renvoyer faux si le coup demandé n'est pas valide à cause d'un superKo. Dans ce cas il faut
|
|
# faire un pop() avant de retenter un nouveau coup
|
|
valid = b.push(weakRandomMove(b))
|
|
if valid:
|
|
break
|
|
b.pop()
|
|
weakDeroulementRandom(b)
|
|
b.pop()
|
|
|
|
|
|
board = Goban.Board()
|
|
deroulementRandom(board)
|