-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
112 lines (85 loc) · 3.21 KB
/
main.py
File metadata and controls
112 lines (85 loc) · 3.21 KB
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
"""Quoridor - module main"""
# pylint: disable=no-member
import argparse
import re
import time
import turtle
import api
from quoridor import Quoridor
from quoridorx import QuoridorX
def analyser_commande():
"""Traite les options passées en ligne de commande."""
parser = argparse.ArgumentParser(description="Jeu Quoridor")
parser.add_argument("-l", "--lister", action="store_true",
help="Lister les identifiants des 20 dernières parties")
parser.add_argument("-a", dest="mode_auto", action="store_true",
help="Jouer contre le serveur en mode automatique")
parser.add_argument("-x", dest="mode_graphique", action="store_true",
help="Jouer contre le serveur avec affichage graphique")
parser.add_argument("idul", help="IDUL du joueur") # , nargs='?', default="phcas16")
return parser.parse_args()
def jouer_coup(args, q, id_partie):
"""Boucle de saisie."""
if args.mode_auto:
return api.jouer_coup(id_partie, q.type_coup.upper(), q.pos_coup)
capture = None
titre = "C'est votre tour!"
question = "Entrez votre prochain coup sous la forme (D|MH|MV) x y :"
while not capture:
if args.mode_graphique:
entree = turtle.textinput(titre, question)
if entree is None: # bouton Cancel ou X
turtle.mainloop() # pause sur damier
raise RuntimeError("Fenêtre fermée par le joueur")
else:
print(question, end=" ")
entree = input()
capture = re.search(r'^(D|MH|MV)\s+(\d)\s+(\d)$', entree.strip(), re.IGNORECASE)
if capture:
entrees = capture.groups()
try:
return api.jouer_coup(id_partie, entrees[0].upper(),
(int(entrees[1]), int(entrees[2])))
# except StopIteration as gagnant:
# gagnant = str(gagnant)
except RuntimeError as message:
titre = str(message)
capture = None
if not args.mode_graphique:
print(titre)
else:
titre = "Erreur de syntaxe, veuillez réessayer."
if not args.mode_graphique:
print(titre)
def main():
"""Boucle principale."""
args = analyser_commande()
if args.lister:
for partie in api.lister_parties(args.idul):
print(partie["id"])
return
id_partie, partie = api.débuter_partie(args.idul)
gagnant = False
q = None
while not gagnant:
if args.mode_graphique:
q = QuoridorX(partie["joueurs"], partie["murs"])
else:
q = Quoridor(partie["joueurs"], partie["murs"])
gagnant = q.partie_terminée()
if gagnant:
break
if args.mode_auto:
time.sleep(0.25)
q.jouer_coup(1)
if args.mode_graphique:
q.afficher()
else:
print("", q, sep="\n")
partie = jouer_coup(args, q, id_partie)
if args.mode_graphique:
turtle.mainloop() # pause sur damier
else:
print("", q, "", f'{gagnant} a gagné la partie!', "", sep="\n")
if __name__ == "__main__":
main()