Commit 3495c5e0 authored by Théo BOUTEMY's avatar Théo BOUTEMY
Browse files

commentaires

parent ac3cda4f
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 : '))
......
This diff is collapsed.
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
Lorgeur et longueur du plateau, normalement tout les deux égaux à 5
xmax=ymax car le plateau est carré
xmax, ymax: int
Largeur et longueur du plateau, normalement tout les deux égaux à 5
xmax=ymax car le plateau est carré
nb_mmontagne: 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 true si une montagne sort
self.partie_finie=False # permet de savoir si la partie est finie ou non. Il devient True si une montagne sort
f = open("historique des parties.txt", mode="w") #on l'ouvre en 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 mode 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 rochers 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 montagnes un à un, en colonne, 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':
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment