Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Théo BOUTEMY
siam
Commits
fe59943f
Commit
fe59943f
authored
Jun 04, 2021
by
Pauline LEYRIT
Browse files
ok
parent
d5455caa
Changes
6
Show whitespace changes
Inline
Side-by-side
appli1.py
View file @
fe59943f
# auteur : Pauline
from
PyQt5.QtWidgets
import
*
from
PyQt5.QtGui
import
*
...
...
@@ -45,12 +45,8 @@ class Window(QMainWindow):
button_joueur1
.
setGeometry
(
720
,
0
,
100
,
50
)
# défini sa position et sa taille
button_joueur1
.
clicked
.
connect
(
self
.
joueur1
)
# lie l'action de cliquer sur le bouton à l'appel de la fonction citée
button_joueur2
=
QPushButton
(
"joueur2"
,
self
)
button_joueur2
.
setGeometry
(
720
,
70
,
100
,
50
)
button_joueur2
.
clicked
.
connect
(
self
.
joueur2
)
button_IA
=
QPushButton
(
"IA"
,
self
)
button_IA
.
setGeometry
(
720
,
14
0
,
100
,
50
)
button_IA
.
setGeometry
(
720
,
7
0
,
100
,
50
)
button_IA
.
clicked
.
connect
(
self
.
IA
)
#on définit les boutons liés aux fonctions
...
...
@@ -252,6 +248,9 @@ class Window(QMainWindow):
self
.
prochain
=
self
.
rh
# liste des pions définis dans la classe pièce, du prohain joueur (l'autre)
self
.
dernier_bouton
=
''
# permet de cconnaitre sur quel bouton le joueur a cliqué en dernier
self
.
mont_sorti
=
self
.
mont
[
0
]
# permet de reconnaitre la fin du jeux : on connaitra quelle montagne est sorti, et donc sa position
self
.
pousse
=
False
# à l'appel de pousser(), nous permet de savoir si entrer en poussant a bien eu lieu
# si ce n'est pas le cas, on remt la pièce à sa place initiale
#pour l'ia:
self
.
qui
=
'humain'
self
.
coup_possible
=
[
"déplacer"
,
"tourner"
,
"entrer"
,
"sortir"
,
"pousser"
,
"entrer en poussant"
,
]
...
...
@@ -301,20 +300,7 @@ class Window(QMainWindow):
"fonction que vous voulez lui appliquer"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
0
)
def
joueur2
(
self
):
"""
de la même façon, mais pour le cas ou le joueur joue les rhinocéros
"""
self
.
zone_txt
.
clear
()
self
.
joueur_qg
=
self
.
liste_rh_qg
self
.
joueur
=
self
.
rh
self
.
prochain
=
self
.
ele
self
.
qui
=
'humain'
self
.
texte
=
QGraphicsTextItem
(
"c'est au tour du joueur 2: les rhinocéros"
'
\n
'
"Choisissez un de vos pions avant de choisir la"
'
\n
'
"fonction que vous voulez lui appliquer"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
0
)
def
IA
(
self
):
"""
...
...
@@ -333,8 +319,8 @@ class Window(QMainWindow):
self
.
texte
.
setPos
(
0
,
0
)
self
.
a_toune
=
False
#à l'appel d'une fonction, la pièce n'a pas encore tourné
self
.
coup
=
self
.
coup_possible
[
randint
(
0
,
4
)]
print
(
self
.
coup
)
self
.
coup
=
self
.
coup_possible
[
randint
(
0
,
6
)]
self
.
dernier_bouton
=
str
(
self
.
coup
)
self
.
ok
()
...
...
@@ -352,7 +338,7 @@ class Window(QMainWindow):
if
self
.
dernier_bouton
==
'déplacer'
:
if
self
.
qui
==
'ia'
:
print
(
'ia déplace'
)
self
.
pion_select_num
=
randint
(
1
,
6
)
self
.
pion_select
=
self
.
joueur_qg
[
self
.
pion_select_num
-
1
]
abs0
,
ord0
=
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
#anciennes coords avant de se déplace
...
...
@@ -379,7 +365,7 @@ class Window(QMainWindow):
x0
,
y0
=
65.5
*
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
0
]
-
(
l
)),
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
1
]
-
(
self
.
pion_select_num
-
1
)
)
*
65.5
if
self
.
qui
==
'humain'
:
x
,
y
=
self
.
pion_select
.
x
()
-
x0
,
self
.
pion_select
.
y
()
-
y0
# mouvement effectué par rapport à la dernière case
print
(
x
,
y
,
'xy'
)
else
:
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
=
[
self
.
abs
,
self
.
ord
]
x1
,
y1
=
65.5
*
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
0
]
-
(
l
)),
(
...
...
@@ -416,7 +402,7 @@ class Window(QMainWindow):
else
:
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
=
[
self
.
abs
,
self
.
ord
]
print
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
)
for
k
in
range
(
len
(
self
.
joueur
)):
if
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
==
self
.
joueur
[
k
].
coords
and
k
!=
self
.
pion_select_num
-
1
)
or
\
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
==
self
.
prochain
[
k
].
coords
)
\
...
...
@@ -424,6 +410,8 @@ class Window(QMainWindow):
# on vérifie que la nouvelle position ne soit pas occupée par un autre de nos pions, un des pions
# du joueur adverse, ou par une montagne
bool1
=
False
if
self
.
qui
==
'humain'
:
#on souhaite afficher les commentaires uniquement pour l'humain, puisque
#l'ia fait de nombreux essais avant d'arriver à un coup valide
self
.
texte
=
QGraphicsTextItem
(
"Vous ne pouvez pas vous déplacer sur une case déjà occupée"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
150
)
...
...
@@ -433,6 +421,7 @@ class Window(QMainWindow):
bool2
=
True
# deplacement autorisé
if
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
0
]
in
[
-
2
,
-
1
,
5
,
6
]
or
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
1
]
in
[
-
1
,
5
]:
# le joueur a placé sa pièce hors du plateau
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"Vous êtes hors du plateau"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
160
)
...
...
@@ -440,6 +429,7 @@ class Window(QMainWindow):
else
:
bool3
=
True
# toujour sur le plateau
else
:
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"Vous ne pouvez pas vous déplacer ici:"'
\n
'
"veuillez vous déplacer d'une case, horizontalement"'
\n
'
"ou verticalement"
)
...
...
@@ -447,12 +437,12 @@ class Window(QMainWindow):
self
.
texte
.
setPos
(
0
,
170
)
bool2
=
False
print
(
bool1
,
bool2
,
bool3
,
'bool'
)
if
not
(
bool1
and
bool2
and
bool3
):
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"Votre déplacement n'est pas valide: veuillez rejouer"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
230
)
if
self
.
qui
==
'humain'
:
# le coup n'était pas valide : le pion reprends sa place (quil avait juste avant le coup)
# on doit réenregistrer les anciennes coordonnées dans la liste self.joueur et changer la position du widget sur le plateau
...
...
@@ -462,18 +452,18 @@ class Window(QMainWindow):
else
:
self
.
joueur
[
int
(
self
.
pion_select_num
-
1
)].
coords
=
[
abs0
,
ord0
]
print
(
self
.
joueur
[
int
(
self
.
pion_select_num
-
1
)].
coords
,
self
.
joueur
[
int
(
self
.
pion_select_num
-
1
)].
car
())
self
.
pion_select
.
setPos
(
x0
,
y0
)
# le pion retourne à sa place
if
self
.
qui
==
'ia'
:
print
(
'pas de déplacement'
)
self
.
IA
()
#le tour n'a pas marché, l'ia doit rejouer
#
if self.qui == 'ia':
#
#
self.IA() #le tour n'a pas marché, l'ia doit rejouer
else
:
self
.
tourne
()
# si le changement de position était valide, le joueur peut aussi tourner son pion
# la fonction tourne indiquera que le tour est terminé
if
self
.
a_toune
==
True
:
if
self
.
qui
==
'ia'
:
self
.
joueur1
()
#
if self.a_toune == True:
#
if self.qui == 'ia':
#
self.joueur1()
self
.
joueur_qg
[
self
.
pion_select_num
-
1
].
setFlag
(
QGraphicsItem
.
ItemIsMovable
,
enabled
=
False
)
...
...
@@ -488,7 +478,6 @@ class Window(QMainWindow):
# code similaire à celui de la fonction entrer de la classe pièce mais on change la aussi les pioons de place
if
self
.
qui
==
'ia'
:
print
(
'ia entre'
)
self
.
pion_select_num
=
randint
(
1
,
6
)
self
.
pion_select
=
self
.
joueur_qg
[
self
.
pion_select_num
-
1
]
...
...
@@ -502,10 +491,10 @@ class Window(QMainWindow):
#on intègre les nouvelles coordonnées:
x0
,
y0
=
65.5
*
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
0
]
-
(
l
)),
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
1
]
-
(
self
.
pion_select_num
-
1
))
*
65.5
[
a0
,
b0
]
=
self
.
joueur
[
int
(
self
.
pion_select_num
-
1
)].
coords
# coordonnées avant d'avoir joué
if
self
.
qui
==
'humain'
:
x
,
y
=
self
.
pion_select
.
x
()
-
x0
,
self
.
pion_select
.
y
()
-
y0
[
a0
,
b0
]
=
self
.
joueur
[
int
(
self
.
pion_select_num
-
1
)].
coords
[
a
,
b
]
=
self
.
joueur
[
int
(
self
.
pion_select_num
-
1
)].
coords
if
x
>
0
:
...
...
@@ -520,7 +509,6 @@ class Window(QMainWindow):
self
.
joueur
[
int
(
self
.
pion_select_num
-
1
)].
coords
=
[
a
,
b
]
else
:
print
(
self
.
abs
,
self
.
ord
,
"abs ord"
)
self
.
joueur
[
int
(
self
.
pion_select_num
-
1
)].
coords
=
[
self
.
abs
,
self
.
ord
]
i
=
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
0
]
...
...
@@ -532,30 +520,30 @@ class Window(QMainWindow):
if
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
==
self
.
joueur
[
k
].
coords
and
k
!=
self
.
pion_select_num
-
1
)
\
or
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
==
self
.
prochain
[
k
].
coords
)
or
\
(
k
<
3
and
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
==
self
.
mont
[
k
].
coords
):
print
(
'deja prise'
)
bool1
=
False
bool2
=
False
#on va vérifier que le joueur entre sur une case du bord du plateau
if
((
i
==
0
or
i
==
4
)
and
-
1
<
j
<
5
)
or
((
j
==
4
or
j
==
0
)
and
-
1
<
i
<
5
):
print
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
car
(),
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
)
bool2
=
True
if
bool
and
bool1
and
bool2
:
#toutes les conditions sont vérifiées pour pouvoir entrer
self
.
tourne
()
#on ne tourne que si toutes les conditions pour entrer sont valides
#celle ci affichera que c'est la fin du tour
print
(
self
.
a_toune
,
'toune'
)
if
self
.
a_toune
==
True
:
#vérifie que la pièce a tourné une fois
if
self
.
qui
==
'ia'
:
l
=
-
2
#car l'ia joue les rhinos
x1
,
y1
=
65.5
*
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
0
]
-
(
l
)),
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
1
]
-
(
self
.
pion_select_num
-
1
)
)
*
65.5
print
(
x1
,
y1
,
'x1'
)
self
.
pion_select
.
setPos
(
x1
,
y1
)
#le tour marche, donc on peut bouger la pièce
print
(
'piece entrée'
)
self
.
joueur1
()
#l'ia a joué, au tour du joueur 1
else
:
# mouvement non valide
#self.joueur1() #l'ia a joué, au tour du joueur 1
else
:
# mouvement non valide
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"une pièce ne peut entrer sur le plateau que sur une case extérieure,"
"si elle est déjà sur le plateau ou si la case est déjà prise : Rejouez"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
...
...
@@ -564,10 +552,9 @@ class Window(QMainWindow):
self
.
pion_select
.
setPos
(
x0
,
y0
)
#le pion retourne à sa position précéddente car le coup n'était pas valide, le joueur doir rejouer
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
=
[
a0
,
b0
]
#on réenregistre sa postion (correspondante à celle
print
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
)
#qu'il a sur le plateau, donc la position initiale
if
self
.
qui
==
'ia'
:
self
.
IA
()
# le tour n'a pas marché, l'ia doit rejouer
print
(
'je rejoue dans le premier cas'
)
# if self.qui == 'ia':
# self.IA() # le tour n'a pas marché, l'ia doit rejouer
...
...
@@ -579,7 +566,7 @@ class Window(QMainWindow):
l
=
-
2
if
self
.
qui
==
'ia'
:
print
(
'ia entre'
)
self
.
pion_select_num
=
randint
(
0
,
5
)
+
1
self
.
pion_select
=
self
.
joueur_qg
[
self
.
pion_select_num
-
1
]
...
...
@@ -589,20 +576,23 @@ class Window(QMainWindow):
# fonction (comme entrer en poussant dans le cas de pièces)
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
=
[
l
,
self
.
pion_select_num
-
1
]
#coordonnées initiales de la pièce
self
.
pion_select
.
setPos
(
0
,
0
)
#remet le widget à sa position initiale
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"Votre pièce est bien sortie du plateau, au tour des {0}"
.
format
(
self
.
prochain
[
0
].
car
()))
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
150
)
if
self
.
qui
==
'ia'
:
self
.
joueur1
()
#
if self.qui == 'ia':
#
self.joueur1()
else
:
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"vous ne pouvez sortir su plateau que si votre pion est sur une case extérieur, rejouez"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
150
)
if
self
.
qui
==
'ia'
:
self
.
IA
()
#le tour n'a pas marché, l'ia doit rejouer
#
if self.qui == 'ia':
#
self.IA() #le tour n'a pas marché, l'ia doit rejouer
if
self
.
dernier_bouton
==
'pousser'
:
...
...
@@ -611,7 +601,7 @@ class Window(QMainWindow):
#lorsqu'elles changent de coordonnées
if
self
.
qui
==
'ia'
:
print
(
'ia entre'
)
self
.
pion_select_num
=
randint
(
0
,
5
)
+
1
self
.
pion_select
=
self
.
joueur_qg
[
self
.
pion_select_num
-
1
]
...
...
@@ -649,7 +639,7 @@ class Window(QMainWindow):
if
piece
.
coords
[
0
]
==
i
:
V
.
append
(
piece
)
# de même pour la colonne
#on fait maintenant les mêmes cas (selon l'oorientation) que dans la fonction pousser de la classe pièce
if
orientation
==
'g'
:
if
orientation
==
'g'
and
i
in
[
0
,
1
,
2
,
3
,
4
]
and
j
in
[
0
,
1
,
2
,
3
,
4
]
:
piece_gauche
=
self
.
joueur
[
self
.
pion_select_num
-
1
]
for
k
in
range
(
len
(
H
)):
# pour etre sur de ne pas louper une piece qui serait à gauche
for
piece
in
H
:
...
...
@@ -691,26 +681,30 @@ class Window(QMainWindow):
if
piece
.
coords
[
0
]
<
0
:
#une montagne est sortie du plateau : le jeu est terminé
self
.
mont_sorti
=
piece
#on enregistre quelle montagne est sorti (pour connaitre sa position)
self
.
vainqueur
()
#on appelle la fonction qui nous indiquera le gagnant
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"Vous avez poussé, au tour des {0}"
.
format
(
self
.
prochain
[
0
].
car
()))
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
150
)
if
self
.
qui
==
'ia'
:
self
.
joueur1
()
# if self.qui == 'ia':
# self.joueur1()
self
.
pousse
=
True
else
:
#la force de poussée n'était pas suffisante
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"vous ne pouvez pas effectuer cette poussée:"'
\n
'
" vous navez pas assez de force de poussée"'
\n
'
"Rejouez"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
150
)
if
self
.
qui
==
'ia'
:
self
.
IA
()
# if self.qui == 'ia':
# self.IA()
self
.
pousse
=
False
#on réitère pour les trois autres orientations
if
orientation
==
'd'
:
if
orientation
==
'd'
and
i
in
[
0
,
1
,
2
,
3
,
4
]
and
j
in
[
0
,
1
,
2
,
3
,
4
]
:
piece_droite
=
self
.
joueur
[
self
.
pion_select_num
-
1
]
for
k
in
range
(
len
(
H
)):
for
piece
in
H
:
...
...
@@ -751,24 +745,27 @@ class Window(QMainWindow):
if
piece
.
coords
[
0
]
>
4
:
self
.
mont_sorti
=
piece
self
.
vainqueur
()
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"Vous avez poussé, au tour des {0}"
.
format
(
self
.
prochain
[
0
].
car
()))
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
150
)
if
self
.
qui
==
'ia'
:
self
.
joueur1
()
# if self.qui == 'ia':
# self.joueur1()
self
.
pousse
=
True
else
:
print
(
'vous ne pouvez pas effectuer cette poussée: vous navez pas assez de force de poussée'
)
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"vous ne pouvez pas effectuer cette poussée:"'
\n
'
" vous navez pas assez de force de poussée"'
\n
'
"Rejouez"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
150
)
if
self
.
qui
==
'ia'
:
self
.
IA
()
# if self.qui == 'ia':
# self.IA()
self
.
pousse
=
False
if
orientation
==
'h'
:
if
orientation
==
'h'
and
i
in
[
0
,
1
,
2
,
3
,
4
]
and
j
in
[
0
,
1
,
2
,
3
,
4
]
:
piece_haut
=
self
.
joueur
[
self
.
pion_select_num
-
1
]
for
k
in
range
(
len
(
V
)):
for
piece
in
V
:
...
...
@@ -809,24 +806,27 @@ class Window(QMainWindow):
if
piece
.
coords
[
1
]
<
0
:
self
.
mont_sorti
=
piece
self
.
vainqueur
()
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"Vous avez poussé, au tour des {0}"
.
format
(
self
.
prochain
[
0
].
car
()))
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
150
)
if
self
.
qui
==
'ia'
:
self
.
joueur1
()
# if self.qui == 'ia':
# self.joueur1()
self
.
pousse
=
True
else
:
print
(
'vous ne pouvez pas effectuer cette poussée: vous navez pas assez de force de poussée'
)
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"vous ne pouvez pas effectuer cette poussée:"'
\n
'
" vous navez pas assez de force de poussée"'
\n
'
"Rejouez"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
150
)
if
self
.
qui
==
'ia'
:
self
.
IA
()
# if self.qui == 'ia':
# self.IA()
self
.
pousse
=
False
if
orientation
==
'b'
:
if
orientation
==
'b'
and
i
in
[
0
,
1
,
2
,
3
,
4
]
and
j
in
[
0
,
1
,
2
,
3
,
4
]
:
piece_haut
=
self
.
joueur
[
self
.
pion_select_num
-
1
]
for
k
in
range
(
len
(
V
)):
for
piece
in
V
:
...
...
@@ -867,22 +867,33 @@ class Window(QMainWindow):
if
piece
.
coords
[
1
]
>
4
:
self
.
mont_sorti
=
piece
self
.
vainqueur
()
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"Vous avez poussé, au tour des {0}"
.
format
(
self
.
prochain
[
0
].
car
()))
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
150
)
if
self
.
qui
==
'ia'
:
self
.
joueur1
# if self.qui == 'ia':
# self.joueur1()
self
.
pousse
=
True
else
:
print
(
'vous ne pouvez pas effectuer cette poussée: vous navez pas assez de force de poussée'
)
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"vous ne pouvez pas effectuer cette poussée:"'
\n
'
" vous navez pas assez de force de poussée"'
\n
'
"Rejouez"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
150
)
if
self
.
qui
==
'ia'
:
self
.
IA
()
# if self.qui == 'ia':
# self.IA()
self
.
pousse
=
False
else
:
self
.
texte
=
QGraphicsTextItem
(
"vous devez être sur le plateau pour pousser"'
\n
'
"Rejouez"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
150
)
self
.
pousse
=
False
if
self
.
dernier_bouton
==
'entrer en poussant'
:
...
...
@@ -891,10 +902,11 @@ class Window(QMainWindow):
l
=
-
2
if
self
.
qui
==
'ia'
:
print
(
'ia déplace'
)
self
.
pion_select_num
=
randint
(
1
,
6
)
self
.
pion_select
=
self
.
joueur_qg
[
self
.
pion_select_num
-
1
]
abs0
,
ord0
=
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
#anciennes coords avant de se déplace
abs0
,
ord0
=
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
# anciennes coords avant de se déplacer, piur l'ia
x0
,
y0
=
65.5
*
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
0
]
-
(
l
)),
(
...
...
@@ -902,6 +914,14 @@ class Window(QMainWindow):
self
.
tourne
()
#possibilité de tourner pour se placer face à la pièce que l'on veut pousser
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"cliquez sur ok pour pousser"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
180
)
if
self
.
qui
==
'humain'
:
x
,
y
=
self
.
pion_select
.
x
()
-
x0
,
self
.
pion_select
.
y
()
-
y0
# mouvement par rapport à la dernière case
#
...
...
@@ -922,12 +942,6 @@ class Window(QMainWindow):
else
:
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
=
[
self
.
abs
,
self
.
ord
]
self
.
tourne
()
#possibilité de tourner pour se placer face à la pièce que l'on veut pousser
self
.
texte
=
QGraphicsTextItem
(
"cliquez sur ok pour pousser"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
180
)
i
,
j
=
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
...
...
@@ -936,27 +950,34 @@ class Window(QMainWindow):
#face de la pièce à pousser
self
.
pousser
()
if
self
.
qui
==
'ia'
:
self
.
joueur1
()
if
self
.
pousse
==
False
:
self
.
pion_select
.
setPos
(
0
,
0
)
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
=
[
l
,
self
.
pion_select_num
-
1
]
else
:
# if self.qui == 'ia':
# self.IA()
# else:
# if self.qui == 'ia':
# self.joueur1()
else
:
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"pour rentrer en poussant, vous devez mettre la piece sur une"'
\n
'
" case extérieure au plateau, la mettre dans la bonne orientation"'
\n
'
"et pousser : Rejouez"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
150
)
self
.
pion_select
.
set
p
os
(
0
,
0
)
self
.
pion_select
.
set
P
os
(
0
,
0
)
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
=
[
l
,
self
.
pion_select_num
-
1
]
self
.
joueur_qg
[
self
.
pion_select_num
-
1
].
setFlag
(
QGraphicsItem
.
ItemIsMovable
,
enabled
=
False
)
if
self
.
qui
==
'ia'
:
self
.
joueur1
()
#
if self.qui == 'ia':
#
self.joueur1()
if
self
.
dernier_bouton
==
'tourner'
:
if
self
.
qui
==
'ia'
:
self
.
tourne
()
print
(
'tourne'
)
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"Vous avez tourné votre pièce, au tour des {0}"
.
format
(
self
.
prochain
[
0
].
car
()))
self
.
zone_txt
.
addItem
(
self
.
texte
)
...
...
@@ -984,6 +1005,7 @@ class Window(QMainWindow):
self
.
pion_select
=
self
.
liste_rh_qg
[
i
]
self
.
pion_select_num
=
i
+
1
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"Vous avez choisis de déplacer votre pion {0}{1}."
'
\n
'
"Vous pouvez maintenant déplacer votre pièce"
'
\n
'
"Vous pouvez la décaler d'une case horizontalement ou"
'
\n
'
...
...
@@ -1006,7 +1028,7 @@ class Window(QMainWindow):
if
self
.
liste_rh_qg
[
i
].
isSelected
():
self
.
pion_select
=
self
.
liste_rh_qg
[
i
]
self
.
pion_select_num
=
i
+
1
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"Vous avez choisis de pousser avec votre pion"'
\n
'
"{0}{1} orienté selon {2}."
'
\n
'
"Vous pouvez maintenant pousser devant vous. "
'
\n
'
...
...
@@ -1024,27 +1046,25 @@ class Window(QMainWindow):
une boite de dialogue apparait pour que le joueur entre l'orientation dans laquelle il veut être
C'est aussi la seule fonction hors ok() qui sera utilisée par l'ia"""
self
.
dernier_bouton
=
'tourner'
go
=
True
#on n'efface pas l'écran zone_txt cette fois ci car la fonction est appeléedans la méthode "ok"
#( pour déplacer, entrer et entrer en poussant) donc on veut garder le texte avec les instructions
if
self
.
qui
==
'humain'
:
for
i
in
range
(
5
):
#self.dernier_bouton = 'tourner'
if
self
.
liste_el_qg
[
i
].
isSelected
():
self
.
pion_select
=
self
.
liste_el_qg
[
i
]
self
.
pion_select_num
=
i
+
1
print
(
"l'elephant {}+1"
.
format
(
i
))
if
self
.
liste_rh_qg
[
i
].
isSelected
():
print
(
"le rhino {}+1"
.
format
(
i
))
self
.
pion_select
=
self
.
liste_rh_qg
[
i
]
self
.
pion_select_num
=
i
+
1
self
.
showDialog
()
#affiche la bo^te de dialogue qui demande au joueur dans quelle direction il veut être
print
(
self
.
txt
)
else
:
print
(
'ah dacc'
,
self
.
joueur
[
self
.
pion_select_num
-
1
].
car
())
print
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
car
(),
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
,
'debut'
)
# dictionnaires associant la direction du pion, à la position de la tête
# les positions sont différentes pour les éléphants et les rhinocéros car encore une fois,
# on bouge le widget par rapport à sa position initiale sur le corps de l'animal
...
...
@@ -1071,19 +1091,18 @@ class Window(QMainWindow):
'g'
:
'd'
,
'b'
:
'h'
,
'd'
:
'g'
}
print
(
self
.
coup
,
'coup'
)
print
(
self
.
coup
,
self
.
qui
)
if
self
.
qui
==
'ia'
:
if
self
.
coup
==
'tourner'
:
# si c'est un autre coup qui appele tourner, on connait déjà le pion
self
.
pion_select_num
=
randint
(
1
,
6
)
self
.
pion_select
=
self
.
joueur_qg
[
self
.
pion_select_num
-
1
]
print
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
)
if
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
0
]
==
-
2
):
go
=
False
print
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
car
(),
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
,
'pk ca change'
)
if
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
0
]
in
[
-
1
,
0
,
1
,
2
,
3
,
4
,
5
]
and
\
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
1
]
in
[
-
1
,
0
,
1
,
2
,
3
,
4
,
5
]:
if
self
.
joueur
[
self
.
pion_select_num
-
1
].
coords
[
0
]
not
in
[
-
2
,
6
]
and
go
==
True
:
#le pion est sur le plateau ou devant (pour entrer en poussant)
# pour l'ia on a pas changé de position avec self.abs, self.ord donc on prend les bonnes coords
if
self
.
txt
==
'droite'
:
# on change l'orientation de la pièce dans la liste joueur
self
.
joueur
[
self
.
pion_select_num
-
1
].
orientation
=
tourner_droite
[
str
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
orientation
)]
...
...
@@ -1104,7 +1123,7 @@ class Window(QMainWindow):
self
.
liste_el_ori_qg
[
self
.
pion_select_num
-
1
].
setPos
(
xe
,
ye
)
if
self
.
joueur
==
self
.
rh
:
self
.
liste_rh_ori_qg
[
self
.
pion_select_num
-
1
].
setPos
(
xr
,
yr
)
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"vous avez choisis de changer l'orientation de votre pion"'
\n
'
"{0}{1}, maintenant orienté vers {2}. Cliquez sur ok pour"'
\n
'" valider votre coup"
.
format
(
self
.
joueur
[
self
.
pion_select_num
-
1
].
car
(),
...
...
@@ -1121,17 +1140,13 @@ class Window(QMainWindow):
# self.joueur1()
else
:
self
.
a_tourne
=
False
if
self
.
qui
==
'ia'
:
print
(
'tourne dans ta case'
)
self
.
IA
()
# le tour n'a pas marché, l'ia doit rejouer
# 0 # le tour n'a pas marché, l'ia doit rejouer
if
self
.
qui
==
'humain'
:
self
.
texte
=
QGraphicsTextItem
(
"Vous ne pouvez tourner que si vous êtes déjà sur le plateau"
)
self
.
zone_txt
.
addItem
(
self
.
texte
)
self
.
texte
.
setPos
(
0
,
200
)
#dictionnaires associant la direction du pion, à la position de la tête
# les positions sont différentes pour les éléphants et les rhinocéros car encore une fois,
#on bouge le widget par rapport à sa position initiale sur le corps de l'animal
def
entrer
(
self
):
""" semblable aux fonctions déplacer et pousser"""
...
...
@@ -1143,14 +1158,14 @@ class Window(QMainWindow):
self
.
liste_el_qg
[
i
].
setFlag
(
QGraphicsItem
.
ItemIsMovable
)