Commit fe59943f authored by Pauline LEYRIT's avatar Pauline LEYRIT
Browse files

ok

parent d5455caa
This diff is collapsed.
# auteur : Pauline
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
......@@ -246,6 +246,8 @@ 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
self.view = QGraphicsView(self.scene, self) # création de la vue contenant le plateau et tout le jeu
self.view.resize(self.p.width()+100, self.p.height()+100) # on adapte la taille de la vue à celle du plateau
......@@ -478,174 +480,6 @@ class Window(QMainWindow):
# qu'il a sur le plateau, donc la position initiale
# if self.dernier_bouton == 'déplacer':
# # voir les commentaires de la fonction changer de position de la classe pièce
# # on reprend cette fonction comme modèle, à laquelle on doit ajouter les caractéristiques liés aux widgets
# # pour leur faire prendre les caractéristiques correspondantes à celles imposées aux pions dans la classe pièces
# i = 6 #coordonnée initiale selon x des éléphants
# if self.joueur == self.rh:
# i = -2 #coordonnée initiale selon x des rhino
#
# #nous en avaons besoin pour connaitre la position initiale de chaque pièce
# #en effet, le but ici est de connaitre le déplacement des pièces éffectuée par le joueur
# # .x() et .y() permettent de savoir de combien s'est déplacée la pièce ( sachant qu'on se déplace d'une case vers la droite ou
# # le bas lorsque le pion a bougé de 65,5 environ) mais ce déplacement est calculé à partir des positions initiales
# # (définies dans le init). Elles donnent donc le déplacement totale par rapport à la position initiale
# # ce qui nous intéresse est plutôt le déplacement entre le coups d'avant et la fin de l'appel de la fonction
#
# # on doit prendre en compte les position initiales pour calculer la position avant le changement de position (x0, y0)
# # qu'on calcule à partir des coordonnées du pion (enregistrées dans self.joueur) et aux quelles ont soustrait leu position initiales
# # ( un éléphant a pour position initale (6, numero) et un rhino (-2, numero) avec numero sa place dans les listes
#
#
# x0, y0 = 65.5*(self.joueur[self.pion_select_num - 1].coords[0] - (i)), (self.joueur[self.pion_select_num - 1].coords[1] - (self.pion_select_num -1) )*65.5
#
# x, y = self.pion_select.x() - x0, self.pion_select.y()- y0 # mouvement effectué par rapport à la dernière case
#
# bool1 = True # définie pour vérifier que la case choisie est vide
# bool2 =True # définie pour vérifier que le pion s'est déplacée dans une case dans laquelle il pourrait se rendre
# # (d'une case horizontalement ou verticalement
# bool3= True # définie pour vérifier que la pièce ne sorte pas du plateau
#
# [a, b] = self.joueur[int(self.pion_select_num - 1)].coords
# # on va maintenant changer les nouvelles coordonnées du point déplacé dans la liste self. joueur
# # (celle qui retient les caractéristiques des pions que l'ont voit sur l'interface)
#
#
# if x>0:
# a += (x//60) # se déplacer vers la droite équivaut à bouger d'environ 60 son pion par rapport à la position précédente
# else:
# a += -(-x // 60)
#
#
# if y>0:
# b += (y//60)
# else:
# b += -(-y // 60) + 1
#
# self.joueur[int(self.pion_select_num - 1)].coords = [a, b] #on enregistre les nouvelles coordonnées
#
# 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) or (k<3 and self.joueur[self.pion_select_num - 1].coords == self.mont[k].coords):
# # 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
# 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)
#
#
# if ((55 < x < 75 or -75 < x < -55) and -10<y <10) or ((55 < y < 75 or -75 < y < -55) and -10< x< 10):
# 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
# self.texte = QGraphicsTextItem("Vous sortez du plateau")
# self.zone_txt.addItem(self.texte)
# self.texte.setPos(0,160)
# boool3 = False
# else :
# bool3 = True # toujourr sur le plateau
# else :
# self.texte = QGraphicsTextItem("Vous ne pouvez pas vous déplacer ici:"'\n'
# "veuillez vous déplacer d'une case, horizontalement"'\n'
# "ou verticalement")
# self.zone_txt.addItem(self.texte)
# self.texte.setPos(0, 170)
# bool2 = False
#
# if not (bool1 and bool2 and bool3):
# self.texte = QGraphicsTextItem("Votre déplacement n'est pas valide: veuillez rejouer")
# self.zone_txt.addItem(self.texte)
# self.texte.setPos(0, 190)
# [a, b] = self.joueur[int(self.pion_select_num - 1)].coords
# # 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
# if x > 0:
# a -= (x // 60)
# else:
# a -= -(-x // 60)
# if y > 0:
# b -= (y // 60)
# else:
# b -= -(-y // 60)
# self.joueur[int(self.pion_select_num - 1)].coords = [a, b]
# self.pion_select.setPos(x0,y0) # le pion retourne à sa place
# 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é
#
# self.joueur_qg[self.pion_select_num - 1].setFlag(QGraphicsItem.ItemIsMovable, enabled=False)
# # le tour est fini, le pion ne peut plus jouer : soit le coup n'était pas valide et le joueur choisis à nouveau
# # une fonction, soit c'est à l'adversaire
#
#
# if self.dernier_bouton == 'entrer':
# # code similaire à celui de la fonction entrer de la classe pièce mais on change la aussi les pioons de place
#
# bool = True # pour vérifier que le pion n'est pas déja entré
# if self.joueur[self.pion_select_num - 1].coords[0] in [0, 1, 2, 3, 4] and \
# self.joueur[self.pion_select_num - 1].coords[1] in [0, 1, 2, 3, 4]:
# #test sur les positions avant que le joueur n'est déplacé sa pièce puisqu'on a pas enregistré les
# # nouvelles position liées à ce déplacement
# self.texte = QGraphicsTextItem("Votre pièce est déjà entré sur le plateau : Rejouez")
# self.zone_txt.addItem(self.texte)
# self.texte.setPos(0, 150)
# bool = False
#
# bool1 = True # pour vérifier que la case n'est pas déjà occupée
# for k in range(len(self.joueur)):
# if (self.joueur[self.pion_select_num - 1] == self.joueur[k].coords and k!= self.pion_select_num - 1) or (self.joueur[self.pion_select_num - 1] == self.prochain[k].coords) or (k<3 and self.joueur[self.pion_select_num - 1] == self.mont[k].coords):
# bool1 = False
# self.texte = QGraphicsTextItem("L'emplacement choisis est déjà pris, entrez dans "'\n'
# "une autre cas ou tentez d'entrer en poussant, ou rejouez")
#
# self.zone_txt.addItem(self.texte)
# self.texte.setPos(0, 160)
#
# # cette fois pas besoin des positions précédentes car on ne rentre qu'à partir de sa position initiale
# x, y = self.pion_select.x(), self.pion_select.y()
#
# if bool and bool1: # on n'enregistre les nouvelles positions que si la pièce n'est pas déjà entré et que la case choisie était vide
# [a, b] = self.joueur[int(self.pion_select_num - 1)].coords
#
# if x>0:
# a += (x//60)
# else:
# a +=-(-x // 60) # -65//60 = 2
#
# if y>0:
# b += (y//60)
# else:
# b += -(-y // 60)
#
# self.joueur[int(self.pion_select_num - 1)].coords = [a,b]
#
# i = self.joueur[self.pion_select_num - 1].coords[0]
# j = self.joueur[self.pion_select_num - 1].coords[1]
#
# #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):
# self.tourne() #on ne tourne que si toutes les conditions pour entrer sont valides
# #celle ci affichera que c'est la fin du tour
#
# else:
# l = 6 # coordonnée initiale selon x des éléphants
# if self.joueur == self.rh:
# l = -2 # coordonnée initiale selon x des rhino
# self.texte = QGraphicsTextItem("une pièce ne peut entrer sur le plateau que sur une case extérieure : Rejouez")
# self.zone_txt.addItem(self.texte)
# self.texte.setPos(0, 170)
# self.pion_select.setPos(0, 0) #le pion retourne à sa position initiale car le coup n'était pas valide, le joueur doir rejouer
# self.joueur[self.pion_select_num-1].coords = [l, self.pion_select_num-1] #on réenregistre sa postion (correspondante à celle
# #qu'il a sur le plateau, donc la position initiale
#
# else: # si la case est déjà prise ou que le pion est déjà entré
# self.pion_select.setPos(0, 0) # le widget reprend sa place sur le plateau, mais il est toujour associé à la bonne positio
# # puisqu'on ne l'a pas changée
# self.joueur_qg[self.pion_select_num - 1].setFlag(QGraphicsItem.ItemIsMovable, enabled=False)
# # fin du coup: le pion ne peut plus bouger
#
if self.dernier_bouton == 'sortir':
#de même, on s'inspire du code de la fonction du même nom définie dans la classe pièce
......@@ -707,7 +541,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:
......@@ -753,6 +587,7 @@ class Window(QMainWindow):
"Vous avez poussé, au tour des {0}".format(self.prochain[0].car()))
self.zone_txt.addItem(self.texte)
self.texte.setPos(0, 150)
self.pousse = True #on vérifie que la poussée s'est bien faite pour entrer en poussant
else: #la force de poussée n'était pas suffisante
self.texte = QGraphicsTextItem(
......@@ -761,8 +596,10 @@ class Window(QMainWindow):
"Rejouez")
self.zone_txt.addItem(self.texte)
self.texte.setPos(0, 150)
self.pousse = False # si entrer en poussant n'a pas fonctionné, cette variable permet de le savoir
# pour en déduire si il faudra remettre la pièce à sa place
#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:
......@@ -807,6 +644,7 @@ class Window(QMainWindow):
"Vous avez poussé, au tour des {0}".format(self.prochain[0].car()))
self.zone_txt.addItem(self.texte)
self.texte.setPos(0, 150)
self.pousse = True
else:
print('vous ne pouvez pas effectuer cette poussée: vous navez pas assez de force de poussée')
self.texte = QGraphicsTextItem(
......@@ -815,8 +653,9 @@ class Window(QMainWindow):
"Rejouez")
self.zone_txt.addItem(self.texte)
self.texte.setPos(0, 150)
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:
......@@ -861,6 +700,7 @@ class Window(QMainWindow):
"Vous avez poussé, au tour des {0}".format(self.prochain[0].car()))
self.zone_txt.addItem(self.texte)
self.texte.setPos(0, 150)
self.pousse = True
else:
print('vous ne pouvez pas effectuer cette poussée: vous navez pas assez de force de poussée')
self.texte = QGraphicsTextItem(
......@@ -869,8 +709,9 @@ class Window(QMainWindow):
"Rejouez")
self.zone_txt.addItem(self.texte)
self.texte.setPos(0, 150)
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:
......@@ -915,14 +756,23 @@ class Window(QMainWindow):
"Vous avez poussé, au tour des {0}".format(self.prochain[0].car()))
self.zone_txt.addItem(self.texte)
self.texte.setPos(0, 150)
self.pousse = True
else:
print('vous ne pouvez pas effectuer cette poussée: vous navez pas assez de force de poussée')
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)
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':
......@@ -974,6 +824,10 @@ class Window(QMainWindow):
#face de la pièce à pousser
self.pousser()
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:
......@@ -983,8 +837,9 @@ class Window(QMainWindow):
"et pousser : Rejouez")
self.zone_txt.addItem(self.texte)
self.texte.setPos(0, 150)
self.pion_select.setpos(0,0)
self.pion_select.setPos(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.dernier_bouton == 'tourner':
......@@ -1098,7 +953,7 @@ class Window(QMainWindow):
'b': 'h',
'd': 'g'}
if self.joueur[self.pion_select_num-1].coords[0] not in [-2, 6]:
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)]
......@@ -1123,6 +978,11 @@ class Window(QMainWindow):
self.pion_select_num, self.joueur[self.pion_select_num-1].orientation))
self.zone_txt.addItem(self.texte)
self.texte.setPos(0, 150)
else:
self.texte = QGraphicsTextItem("vous ne pouvez tourner qu'une pièce entrée sur le plateau")
self.zone_txt.addItem(self.texte)
self.texte.setPos(0, 150)
def entrer(self):
""" semblable aux fonctions déplacer et pousser"""
......
#auteur: Théo
from numpy.random import randint
from numpy.random import choice
from abc import ABCMeta, abstractmethod
......
#auteur : Théo
from abc import ABCMeta, abstractmethod
......
#auteur : Théo
from pieces import Piece, Montagne, Animal, Elephant, Rhinoceros
from joueur import Joueur, Theo, Pauline,IA
......
#auteur: Théo
import unittest
import table_de_jeu as t
import pieces as p
......@@ -95,12 +97,6 @@ class TestAnimal(unittest.TestCase):
self.assertEqual(elephant2.coords, [4,2])
# def test_initialiserPlateau(self):
# for k in range(1, 4):
# self.assertEqual(table_jeu1.initialiserPlateau().table_jeu[2, k].car(),
# 'R') # test: initialiserPlateau place bien les rochers au centre de la table
# self.assertEqual(jeu.orientation(0, 1, 'O'), None) # la case est vide
if __name__ == '__main__':
unittest.main()
\ No newline at end of file
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