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)