-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstarter-go.py
60 lines (50 loc) · 2.31 KB
/
starter-go.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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)