Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.22 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. import random
  4.  
  5. class Plateau:
  6.    
  7.    
  8.     def __init__(self):
  9.  
  10.         #on remplit le tableau de cases vides
  11.         self.pions = []
  12.         for i in range(0,30):
  13.             self.pions.append([])
  14.             for j in range(0,30):
  15.                 self.pions[i].append(0)
  16.  
  17.         #on stipule les regles de deplacement pour chaque type de pion sous forme de vecteurs.
  18.  
  19.         #ces vecteurs representeNT les deplacements possibles des proteines dans les 8 directions de l'espace
  20.         liste_vecteur_p = [[0,1],[1,0],[1,1],[0,-1],[-1,0],[-1,-1],[-1,1],[1,-1]]
  21.  
  22.         #les lipides ne peuvent aller qu'en avant ou en arriere.
  23.         liste_vecteur_l = [[1,0],[-1,0]]
  24.  
  25.         #on associe a chaque type une gamme de deplacements (vecteurs)
  26.         self.mouvement_pions = {"P":liste_vecteur_p,"L":liste_vecteur_l,"M":liste_vecteur_p}
  27.  
  28.         #on associe a chaque type une longueur de deplacement
  29.         self.longueur_deplacement_pions = {"P":1,"L":3,"M":3}
  30.  
  31.         #on definit les variables de jeu, commes les score des joueurs et le nombre de metabolite restant
  32.         self.score_joueur = [0,0,0]
  33.  
  34.         self.metabolite_restant = 20
  35.  
  36.  
  37.     #on cree une fonction qui ajoute des pions sur le plateau
  38.     def ajouter_pion(self,x,y,type,taille_estomac=0,proprietaire=0,id=""):
  39.         #dans le stockage en tuples, le premier indice correspond au numero de ligne donc a l'axe des y
  40.         #le deuxieme indice correspond sa position dans la ligne donc a l'axe des x
  41.         if(self.pions[y][x] == 0):
  42.             self.pions[y][x] = {"type":type,"taille_estomac":taille_estomac,"proprietaire":proprietaire,"id":id}
  43.             return True
  44.         else :
  45.             return False
  46.  
  47.  
  48.     #on cree une fonction qui retourne le pion se trouvant dans le tuple de coordonnee
  49.     def retourner_pion(self,coordonnee):
  50.         #pymeta.ecrire_text(45,2,str(coordonnee),5)
  51.         return self.pions[coordonnee[1]][coordonnee[0]]
  52.  
  53.  
  54.     #on cree une fonction capable de retourner les deplacement que le pion se trouvant en position x,y peut effecteur.
  55.     def retourner_deplacements_possibles(self,x,y):
  56.  
  57.         #on recupere les proprietes du pions dans une variable pour une manipulation plus aisee
  58.         pion = self.pions[y][x]
  59.         type_pion = pion["type"]
  60.  
  61.         liste_vecteur = self.mouvement_pions[type_pion]
  62.         deplacement_possible = []
  63.  
  64.  
  65.         for vecteur in liste_vecteur:
  66.             deplacement = [x,y]
  67.             #print deplacement
  68.             compteur_de_case = 0
  69.             nombre_deplacement_max = self.longueur_deplacement_pions[type_pion]
  70.  
  71.             while(True):
  72.                 if  nombre_deplacement_max < compteur_de_case: break;
  73.                 #on effectue un deplacement suivant le vecteur
  74.                 deplacement[0]+=vecteur[0]
  75.                 deplacement[1]+=vecteur[1]
  76.                 #on verifie qu'on ne sort pas des limites du plateau
  77.                 if(deplacement[0] < 0 or deplacement[1] < 0):
  78.                         break;
  79.                 #si on trouve un autre pion sur la route, on stoppe la boucle
  80.  
  81.                 if(self.retourner_pion(deplacement) != 0):
  82.                         #si le pion que l'on deplace est une proteine et l'autre pion un metabolite, on ajoute tout meme le deplacement a la liste puisque les proteines mangent les metabolites.
  83.                         #print self.retourner_pion(deplacement)
  84.                         if self.retourner_pion(deplacement)["type"] == "M" and type_pion == "P":
  85.                                 deplacement_possible.append([deplacement[0],deplacement[1]])
  86.                         break;
  87.                 #finalement, on ajoute le deplacement puisque rien ne l'a bloque
  88.                 deplacement_possible.append([deplacement[0],deplacement[1]])
  89.  
  90.                 #et puis on ajoute 1 au compteur de case
  91.                 compteur_de_case+=1
  92.         return deplacement_possible
  93.  
  94.  
  95.     #cette fonction place un pion d'un type donne de facon aleatoire
  96.     def placer_pion_aleatoirement(self,type,taille_estomac,proprietaire,id):
  97.  
  98.         #on genenere x et y au hasard et on verifie qu'il n'y a pas de pion a x e y.
  99.         while(True):
  100.             x = random.randint(0,29)
  101.             y = random.randint(0,29)
  102.             if self.pions[y][x] == 0:
  103.                 #la case est vide, on ajoute la piece et on stoppe la boucle
  104.                 self.ajouter_pion(x,y,type,taille_estomac,proprietaire,id)
  105.                 break;
  106.  
  107.  
  108.     #place les pions d'un joueur de facon aleatoire
  109.     def placer_pions_joueur_aleatoirement(self,joueur):
  110.         #on place les proteines
  111.         for i in range(1,6):
  112.             self.placer_pion_aleatoirement("P",i,joueur,"P"+str(i)) #rappel : (type de pion,taille_estomac,numero de joueur,id_unique)
  113.         #on place les lipides
  114.         for i in range(1,21):
  115.             self.placer_pion_aleatoirement("L",0,joueur,"L"+str(i))
  116.  
  117.  
  118.     #place les metabolites aleatoirement
  119.     def placer_metabolite_aleatoirement(self):
  120.         for i in range(1,21):
  121.             self.placer_pion_aleatoirement("M",0,0,"M"+str(i)) #rappel : les metabolites n'ont ni d'estomac, ni de proprietaire
  122.  
  123.  
  124.  
  125.     #cette fonction deplace un pion d'un endroit a un autre, si il s'agit d'une proteine et qu'elle atterit sur un metabolite,
  126.     def deplacer_pion(self,x,y,nouveau_x,nouveau_y):
  127.  
  128.             #on copie le pion a deplacer dans une variable temporaire
  129.             pion_a_deplacer = self.pions[y][x].copy()
  130.  
  131.             #on vide son ancienne position
  132.             self.pions[y][x] = 0
  133.  
  134.             #si le pion a deplacer est une proteine et la case cible contient un metabolite, alors on modifie les scores du joueur a qui appartient le pion et on actualise le nombre de metabolite restant
  135.             if self.pions[nouveau_y][nouveau_x] != 0:
  136.                 if pion_a_deplacer["type"] == "P" and self.pions[nouveau_y][nouveau_x]["type"] == "M":
  137.                     self.score_joueur[pion_a_deplacer["proprietaire"]] += 1
  138.                     self.metabolite_restant += -1
  139.  
  140.             #et pour finir, on transfert le pion a deplacer dans la case
  141.             self.pions[nouveau_y][nouveau_x] = pion_a_deplacer
  142.  
  143.     #verifie que le deplacement d'un pion d'une position à un autre est possible. Renvoie True si le deplacement est possible
  144.     def verifier_deplacement(self,depart_x,depart_y,arrivee_x,arrivee_y):
  145.  
  146.         #le depart et l'arrivee sont donnes sous forme de tuple de la forme [x,y]
  147.         deplacements_possibles = self.retourner_deplacements_possibles(depart_x,depart_y)
  148.  
  149.         #on considere le deplacement comme invalide au depart
  150.         deplacement_valide = False
  151.  
  152.         #si un des i correspond a un des deplacement possible, la variable deplacement_possible est changee en True
  153.         for i in deplacements_possibles:
  154.             if i == [arrivee_x,arrivee_y]:
  155.                 deplacement_valide = True
  156.  
  157.         return deplacement_valide
  158.  
  159.     #verifie si le pion est deplacable ou pas. Renvoie True si le deplacement est possible
  160.     def verifier_si_pion_deplacable(self,pion_x,pion_y):
  161.         return True
  162.  
  163. def fin_de_partie(type,taille_estomac):
  164.     if retourner_deplacements_possibles(x,y)==0:
  165.         print "fin de la partie"
  166.         return sum["taille_estomac","proprietaire"]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement