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
3495c5e0
Commit
3495c5e0
authored
Jun 02, 2021
by
Théo BOUTEMY
Browse files
commentaires
parent
ac3cda4f
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
joueur.py
View file @
3495c5e0
import
numpy
as
np
from
numpy.random
import
randint
from
numpy.random
import
choice
import
sys
from
abc
import
ABCMeta
,
abstractmethod
from
pieces
import
Piece
,
Montagne
,
Animal
,
Elephant
,
Rhinoceros
...
...
@@ -83,7 +84,7 @@ class Joueur(metaclass = ABCMeta):
elif
coup
==
'entrer en poussant'
:
self
.
pieces_du_joueur
()[
n
].
tour_effectué
=
False
if
self
.
nom
==
'IA'
:
i
,
j
=
randint
(
-
1
,
6
),
randint
(
-
1
,
6
)
i
,
j
=
choice
([
-
1
,
5
]),
choice
([
-
1
,
5
]
)
ori
=
self
.
ori_possible
[
randint
(
0
,
4
)]
else
:
i
=
int
(
input
(
'entrer la nouvelle abscisse : '
))
...
...
pieces.py
View file @
3495c5e0
This diff is collapsed.
Click to expand it.
table_de_jeu.py
View file @
3495c5e0
import
numpy
as
np
from
numpy.random
import
randint
import
sys
from
abc
import
ABC
,
abstractmethod
from
pieces
import
Piece
,
Montagne
,
Animal
,
Elephant
,
Rhinoceros
from
joueur
import
Joueur
,
Theo
,
Pauline
,
IA
class
Plateau
(
list
):
num_partie
=
0
#variable de classe permettant de compter le nombre de plateaux générés et donc le nombre de parties jouées
"""
Ce module contient la définition de la classe principale servant à gérer le jeu
"""
"""classe décrivant le tableau de jeu, on commencera par l'initer
avec de grandes dimensions, puis il faudra le réduire à 25 cases """
class
Plateau
(
list
):
"""
Classe gérant le déroulement du jeu.
Classe décrivant le tableau de jeu, qui est une liste contentant les différentes pièces
"""
def
__init__
(
self
,
xmax
=
5
,
ymax
=
5
,
nb_montagne
=
3
,
joueur1
=
Theo
,
joueur2
=
Pauline
):
"""
On crée un tableau de jeu aux dimensions désirées, avec un nombre de montagne choisie sur le plateau
On crée un tableau de jeu aux dimensions désirées, avec un nombre de montagne choisi.
Les règles de Siam imposent que xmax et ymax soient égaux à 5
Paramètres
Paramètres
----------
xmax, ymax: int
Lo
rgeur et longueur du plateau, normalement tout les deux égaux à 5
xmax=ymax car le plateau est carré
xmax, ymax: int
La
rgeur et longueur du plateau, normalement tout les deux égaux à 5
xmax=ymax car le plateau est carré
nb_
m
montagne: int
nomalement initié à 3 montagnes sur le plateau en début de jeu
nb_montagne: int
nomalement initié à 3 montagnes sur le plateau en début de jeu
table_jeu: np.array
taille [xmax,ymax]
elephants et rhinocéros : Joueurs
joueur1, joueur2: joueurs importés de 'joueur'
Joueurs disponibles: 'Theo' qui doit jouer les Elephants,'Pauline' qui doit jouer les Rhinoceros,
'IA' qui doit jouer les Rhinoceros
Par ailleurs,
self.ele, self.mont et self.rhino sont des listes qui stockeront l'état des pièces avant de les afficher
sur le plateau de jeu avec la méthode unTour
"""
...
...
@@ -39,25 +45,19 @@ class Plateau(list):
self
.
rhino
=
[]
self
.
joueur1
=
joueur1
self
.
joueur2
=
joueur2
self
.
partie_finie
=
False
#
devient t
rue si une montagne sort
self
.
partie_finie
=
False
#
permet de savoir si la partie est finie ou non. Il devient T
rue si une montagne sort
f
=
open
(
"historique des parties.txt"
,
mode
=
"w"
)
#on
l'
ouvre e
n
write pour écraser la partie d'avant
f
.
write
(
'NOUVELLE PARTIE
\n
'
)
f
=
open
(
"historique des parties.txt"
,
mode
=
"w"
)
#on ouvre
le fichier de sauvegarde en mod
e write pour écraser la partie d'avant
f
.
write
(
'NOUVELLE PARTIE
\n
\n
'
)
f
.
close
()
Plateau
.
num_partie
+=
1
def
__str__
(
self
):
"""
Affiche le plateau de jeu en mode texte suivant les caractères définis
dans les sous classes de ''
Animal
''.
dans les sous classes de ''
Piece
''.
Paramètres
----------
...
...
@@ -66,20 +66,20 @@ class Plateau(list):
Renvoie
-------
s: string
La chaîne de caractères qui sera affichée via ''print''
La chaîne de caractères qui sera affichée via ''print''
, représentant le plateau de jeu
"""
pos
=
{}
for
piece
in
self
:
pos
[
piece
.
coords
[
0
],
piece
.
coords
[
1
]]
=
(
piece
.
nom
+
piece
.
orientation
)
pos
[
piece
.
coords
[
0
],
piece
.
coords
[
1
]]
=
(
piece
.
nom
+
piece
.
orientation
)
#une piece est représentée par son nom et son orientation
s
=
""
for
j
in
range
(
self
.
ymax
):
for
i
in
range
(
-
2
,
7
):
if
(
i
,
j
)
in
pos
:
s
+=
pos
[(
i
,
j
)]
+
' '
else
:
s
+=
"
0
"
s
+=
"
.
"
#les cases vides sont représentées par des points
s
+=
"
\n
"
return
s
...
...
@@ -89,39 +89,42 @@ class Plateau(list):
def
initialiserPlateau
(
self
):
"""
initialisation du plateau : toutes les cases sont vides sauf 3 au centre, où se trouvent les montagnes.
On crée également les 5 Elephants et les 5 Rhinoceros que l'on disposera à l'extérieur du plateau, dans leurs
positions et orientations initiales
Paramètres
----------
Aucun
Renvoie
-------
s: string
La chaîne de caractères qui sera affichée via ''print''
Comme dit précédemment, on crée ces Pieces dans les listes self.ele, self.rhino et self.mont, puis on les
affichera sur le plateau avec la méthode 'unTour'
"""
#on initialise dans les listes pas dans le plateau
# self.plateau = np.zeros([self.xmax, self.ymax], dtype=Piece)
midx
,
midy
=
self
.
xmax
//
2
,
self
.
ymax
//
2
# indices de la case correspondant au centre du plateau
for
k
in
range
(
self
.
nb_montagne
):
# place les
rocher
s un à un, en
rangé
e, au milieu du plateau
self
.
mont
.
append
(
Montagne
(
midx
,
midy
+
k
-
self
.
nb_montagne
//
2
,
'0 '
,
self
))
for
k
in
range
(
self
.
nb_montagne
):
# place les
montagne
s un à un, en
colonn
e, au milieu du plateau
self
.
mont
.
append
(
Montagne
(
midx
,
midy
+
k
-
self
.
nb_montagne
//
2
,
'0 '
,
self
))
#la montagne n'a pas d'orientation particulière
for
k
in
range
(
5
):
self
.
ele
.
append
(
Elephant
(
6
,
k
,
'g'
,
self
))
#on crée les 5 elephants que l'on oriente vers la gauche et que l'on
#place à droite du plateau
self
.
rhino
.
append
(
Rhinoceros
(
-
2
,
k
,
'd'
,
self
))
#on crée les 5 rhinoceros que l'on oriente vers la droite et que l'on
# place à gauche du plateau
self
.
ele
.
append
(
Elephant
(
6
,
k
,
'g'
,
self
))
self
.
rhino
.
append
(
Rhinoceros
(
-
2
,
k
,
'd'
,
self
))
def
unTour
(
self
):
"""
Permet de mettre à jour les pieces sur le plateau
On commence par supprimer toutes les pièces du plateau, avant de remettre les pièces à jour, qui se trouvent
dans les listes self.ele, sekf.rhino et self. mont"""
def
unTour
(
self
):
#permet de mettre à jour les pieeces sur le plateau
for
i
in
(
self
):
# on efface tout le plateau
( sinon redondance)
pour mettre à jour
for
i
in
(
self
):
# on efface tout le plateau pour mettre à jour
del
(
i
)
for
i
in
(
self
.
mont
):
# remet les pions a leur place en conction de leur coords
for
i
in
(
self
.
mont
):
self
.
append
(
i
)
for
i
in
(
self
.
ele
):
self
.
append
(
i
)
...
...
@@ -129,11 +132,15 @@ class Plateau(list):
self
.
append
(
i
)
def
vainqueur
(
self
):
"""
Méthode permettant de savoir s'il y a un vainqueur ou non
"""
bool
=
False
for
m
in
self
.
mont
:
if
m
.
coords
[
0
]
==-
1
:
#la montagne est sortie du plateau
while
bool
==
False
:
#tant qu'on n'a pas trouvé le vainqueur
if
m
.
coords
[
0
]
==-
1
:
#la montagne est sortie du plateau
, à gauche
while
bool
==
False
:
#
tant qu'on n'a pas trouvé le vainqueur
for
i
in
range
(
1
,
5
):
for
piece
in
self
:
if
piece
.
coords
[
0
]
==
m
.
coords
[
0
]
+
i
and
piece
.
coords
[
1
]
==
m
.
coords
[
1
]
and
piece
.
orientation
==
'g'
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment