Advertisement
Guest User

projetS2.py

a guest
Feb 19th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 13.96 KB | None | 0 0
  1. import pygame, sys # On import pygame
  2. from pygame.locals import * # On import pygame
  3. pygame.init()# Initialisation de pygame
  4. mainClock = pygame.time.Clock()
  5. maSurface1 = pygame.display.set_mode((850,600))
  6. maSurface2 = pygame.display.set_mode((800,650))  ##l'élément en noir
  7. maSurface2.set_alpha(128)
  8. WHITE = (255,255,255)
  9. RED= (255,116,115)
  10. RED1=(241,107,111)
  11. BLUE=(71,184,224)
  12. YELLOW=(255,201,82)
  13. NOIR=(0,0,0)
  14. BLEUVERT = (0,152,128)
  15. BLEUFOND = (1,111,254)
  16. BLEUTROU = (23,95,188)
  17. NOIR = (0,0,0)
  18. BLANC = (173,173,173,0.5)
  19. GRIS = (87,87,87)
  20. GRISC = (196,196,196)
  21. BLEU = (53,122,183)
  22.  
  23. TAILLE = 10
  24. LISTE = ['gauche','bas_gauche','bas','bas_droite','droite','haut_gauche','haut_droite','haut']
  25. LISTE1 = ['droite','haut_droite','haut','haut_gauche','gauche','bas_gauche','bas','bas_droite']
  26. CONTIENT = [None]
  27.  
  28. class case:
  29.     def __init__(self, check, joueur, position, partie_haut_plateau):
  30.         self.__check = check
  31.         self.__joueur = joueur
  32.         self.__pion = self.calcul_pion(self.__joueur)
  33.         self.__position = position
  34.         self.__couleur = self.calcul_couleur(self.__joueur)
  35.         self.__haut = None
  36.         self.__haut_droite = None
  37.         self.__haut_gauche = None
  38.         self.__droite = None
  39.         self.__gauche = None
  40.         self.__bas_gauche = None
  41.         self.__bas = None
  42.         self.__bas_droite = None
  43.         self.__partie_haut_plateau = partie_haut_plateau
  44.        
  45.     def calcul_neighbour(self,plateau, colonne, ligne):
  46.         if colonne >0:
  47.             plateau[ligne][colonne].set_gauche(plateau[ligne][colonne-1])
  48.         if colonne<len(plateau)-1:
  49.             plateau[ligne][colonne].set_droite(plateau[ligne][colonne+1])
  50.         if ligne>0:
  51.             plateau[ligne][colonne].set_haut(plateau[ligne-1][colonne])
  52.         if ligne<len(plateau)-1:
  53.             plateau[ligne][colonne].set_bas(plateau[ligne+1][colonne])
  54.            
  55.         if ligne < len(plateau)-1 and colonne<len(plateau)-1:
  56.             plateau[ligne][colonne].set_bas_droite(plateau[ligne+1][colonne+1])
  57.         if ligne > 0 and colonne > 0:
  58.             plateau[ligne][colonne].set_haut_gauche(plateau[ligne-1][colonne-1])
  59.         if ligne <len(plateau)-1 and colonne<len(plateau)-1:
  60.             plateau[ligne][colonne].set_haut_droite(plateau[ligne-1][colonne+1])
  61.         if colonne>0 and ligne<len(plateau)-1:
  62.             plateau[ligne][colonne].set_bas_gauche(plateau[ligne+1][colonne-1])
  63.        
  64.              
  65.        
  66.     def set_haut_droite(self, value):
  67.         self.__haut_droite = value
  68.        
  69.     def set_haut_gauche(self, value):
  70.         self.__haut_gauche = value
  71.        
  72.     def set_bas(self, value):
  73.         self.__bas = value
  74.        
  75.     def set_bas_gauche(self, value):
  76.         self.__bas_gauche = value
  77.        
  78.     def set_bas_droite(self, value):
  79.         self.__bas_droite = value
  80.        
  81.     def set_droite(self, value):
  82.         self.__droite = value
  83.        
  84.     def set_gauche(self, value):
  85.         self.__gauche = value
  86.        
  87.     def set_haut(self, value):
  88.         self.__haut = value
  89.        
  90.     def get_haut_droite(self):
  91.         return self.__haut_droite
  92.  
  93.    
  94.        
  95.     def get_haut_gauche(self):
  96.         return self.__haut_gauche
  97.        
  98.     def get_bas(self):
  99.         return self.__bas
  100.        
  101.     def get_bas_gauche(self):
  102.         return self.__bas_gauche
  103.        
  104.     def get_bas_droite(self):
  105.         return self.__bas_droite
  106.        
  107.     def get_droite(self):
  108.         return self.__droite
  109.        
  110.     def get_gauche(self):
  111.         return self.__gauche
  112.        
  113.     def get_haut(self):
  114.         return self.__haut
  115.    
  116.     def get_partie_haut_plateau(self):
  117.         return self.__partie_haut_plateau
  118.    
  119.     def get_couleur(self):
  120.         return self.__couleur
  121.  
  122.     def get_position(self):
  123.         return self.__position
  124.  
  125.     def get_check(self):
  126.         return self.__check
  127.  
  128.     def get_joueur(self):
  129.         return self.__joueur
  130.  
  131.  
  132.  
  133.    
  134.    
  135.     def calcul_pion(self, joueur):
  136.       pion = ["X","O",".","-","-"]
  137.       player = ["joueur1", "joueur2", "vide", "cage_joueur1", "cage_joueur2"]
  138.       return pion[player.index(self.__joueur)]
  139.    
  140.     def calcul_couleur(self, joueur):
  141.       couleur = [RED,BLEU,BLANC,BLEUVERT,BLEUVERT]
  142.       player = ["joueur1", "joueur2", "vide", "cage_joueur1", "cage_joueur2"]
  143.       return couleur[player.index(self.__joueur)]
  144.     def change_couleur(self, couleur):
  145.       self.__couleur = couleur
  146.     def return_carcat(self, cell, voisin):
  147.         dep = ['gauche','bas_gauche','bas','bas_droite','droite','haut_droite','haut','haut_gauche']
  148.         dep1 = [cell.__gauche,cell.__bas_gauche,cell.__bas,cell.__bas_droite,cell.__droite,cell.__haut_droite,cell.__haut,cell.__haut_gauche]
  149.         return dep1[dep.index(voisin)]
  150.     def deplacements_multiples(self, cell, liste, voisin, joueur_a_check):
  151.         global CONTIENT
  152.         cage = ["cage_joueur1","cage_joueur2"]
  153.         est_un_joueur = ["joueur1","joueur2"]
  154.         cell = self.return_carcat(cell, voisin)
  155.         case_voisin = cell
  156.         while cell != None and cell.__joueur==joueur_a_check.__joueur and cell.__joueur not in cage:
  157.               cell = self.return_carcat(cell, voisin)
  158.               if cell !=None and cell.__joueur not in est_un_joueur and cell.__joueur!="cage_"+case_voisin.__joueur and cell not in liste:
  159.                   liste.append(cell)
  160.              
  161.               return liste
  162.         return liste
  163.     def calcul_test (self, liste, case):
  164.         a=0
  165.         for i in liste:
  166.             if i == case:
  167.                 a+=1
  168.         return a
  169.    
  170.     def recursif_saut_multiple(self,cell,liste, joueur_a_check):
  171.         global CONTIENT
  172.        
  173.         for case in cell:
  174.             for i in LISTE:              
  175.               liste = self.deplacements_multiples(case, liste, i,joueur_a_check)
  176.         if cell==liste:
  177.             return liste
  178.         else:
  179.             cell = liste[:]
  180.             return self.recursif_saut_multiple(cell,liste, joueur_a_check)  
  181.  
  182.  
  183.    
  184.     def calcul_deplacements(self, cell):
  185.       voisin = ['gauche','bas','droite','haut']
  186.       liste = []
  187.       cell1 = cell
  188.       check_fct_joueur = None
  189.       if cell.__joueur=="joueur1":
  190.           check_fct_joueur = True
  191.       elif cell.__joueur == "joueur2":
  192.           check_fct_joueur = False
  193.       for neighbour in voisin:
  194.           cell_neighbour = self.return_carcat(cell, neighbour)
  195.           while cell_neighbour != None and cell_neighbour.__joueur=="vide" and cell.__partie_haut_plateau==check_fct_joueur and cell_neighbour.__partie_haut_plateau==check_fct_joueur :
  196.                 liste.append(cell_neighbour)
  197.                 cell = cell_neighbour
  198.                 cell_neighbour = self.return_carcat(cell, neighbour)
  199.           cell = cell1  
  200.       vide = []
  201.       liste1 = self.recursif_saut_multiple([cell],vide, cell)
  202.       liste = liste+liste1
  203.       return liste
  204.      
  205. class plateau:
  206.     def __init__(self):
  207.         self.liste_case = []
  208.     def creer_plateau(self):
  209.       queljoueur = [[1,2],[TAILLE-2, TAILLE-3]]
  210.       for ligne in range(TAILLE):
  211.         joueur = "vide"
  212.         if ligne in queljoueur[0] :
  213.             joueur = "joueur1"
  214.         elif ligne in queljoueur[1]:
  215.           joueur = "joueur2"
  216.         self.liste_case.append([])
  217.         self.ajout_case(joueur,ligne)
  218.       self.neighbour()
  219.       self.deplacer()
  220.      
  221.     def ajout_case(self,joueur,ligne):
  222.         for colonne in range(TAILLE):
  223.           partie_haut_plateau = False
  224.           if ligne<TAILLE//2:
  225.               partie_haut_plateau = True
  226.           if (colonne==TAILLE/2 or colonne == TAILLE/2-1) and (ligne==0):
  227.             self.liste_case[ligne].append(case(False,"cage_joueur1",(ligne,colonne),partie_haut_plateau))
  228.           elif (colonne==TAILLE/2 or colonne == TAILLE/2-1) and (ligne==TAILLE-1):
  229.             self.liste_case[ligne].append(case(False,"cage_joueur2",(ligne,colonne),partie_haut_plateau))
  230.           elif ((colonne%2==1 and ligne %2==1) or (colonne%2==0 and ligne %2==0)):
  231.             self.liste_case[ligne].append(case(False,"vide",(ligne,colonne),partie_haut_plateau))
  232.           else:
  233.             self.liste_case[ligne].append(case(False,joueur,(ligne,colonne),partie_haut_plateau))
  234.  
  235.  
  236.  
  237.  
  238.          
  239.     def affichage(self):
  240.       liste = ""
  241.       for ligne in self.liste_case:
  242.         liste+="\n"
  243.         for case in ligne:
  244.             liste+=""
  245.             pos=""
  246.             #for i in case.deplacement:
  247.             if case.get_gauche()!=None:
  248.                 pos = str(case.get_gauche().get_position())
  249.             liste+=" "+pos+" "#+str(case.position[0])+str(case.position[1])+
  250.       print(liste)
  251.  
  252.  
  253.  
  254.      
  255.      
  256.     def deplacer(self):
  257.       for ligne in self.liste_case:
  258.         for case in ligne:
  259.           case.deplacement = case.calcul_deplacements(case)
  260.     def neighbour(self):
  261.         for i in range(len(self.liste_case)):
  262.             for j in range(len(self.liste_case[i])):
  263.                 self.liste_case[i][j].calcul_neighbour(self.liste_case,i,j)
  264.     def change_case(self,check,coord, joueur):
  265.         ligne = coord[0]
  266.         colonne = coord[1]
  267.         haut_plateau = self.liste_case[ligne][colonne].get_partie_haut_plateau()
  268.         self.liste_case[ligne][colonne] = case(check,joueur,(ligne,colonne), haut_plateau)
  269.         self.neighbour()
  270.         self.deplacer()
  271.     def win (self, case, joueur):
  272.         cage = [TAILLE//2,TAILLE//2-1]
  273.        
  274.         print(cage)
  275.         print(case.get_position())
  276.         print(joueur.get_joueur())
  277.         if (joueur.get_joueur() == "joueur2" and case.get_position()[1] in cage and case.get_position()[0] ==0) or (case.get_joueur() == "joueur1" and case.get_position()[1] in cage and case.get_position()[0] == TAILLE-1):
  278.             print("ok")
  279.             return True
  280.        
  281.         return False
  282.    
  283.            
  284.     def graphplateau(self):
  285.         pygame.draw.rect(maSurface1,GRIS,(100,100,TAILLE*56.3,TAILLE*56.3))
  286.         posy=135
  287.         posx=135
  288.         deplacements = []
  289.         for ligne in self.liste_case:
  290.             for col in ligne:
  291.                 if col.get_check()==True:
  292.                     deplacements = col.deplacement
  293.         a = 0
  294.         for ligne in self.liste_case:
  295.             a+=1
  296.             for case in ligne:
  297.                 if a<=TAILLE/2:
  298.                     if case.get_joueur()=="vide":
  299.                         case.change_couleur(YELLOW)
  300.                     color = YELLOW
  301.                 else:
  302.                     color = BLANC
  303.                 if case.get_joueur() != "cage_joueur1" and case.get_joueur() !="cage_joueur2":
  304.                     pygame.draw.rect(maSurface1,BLANC,(posx-25,posy-25,50,50))
  305.                 else:
  306.                     pygame.draw.rect(maSurface1,BLEUVERT,(posx-25,posy-25,50,50))
  307.                 if (case.get_joueur()!="cage_joueur1" and case.get_joueur() !="cage_joueur2"):      
  308.                     if case in deplacements:
  309.                         pygame.draw.circle(maSurface2,WHITE,(posx,posy),17,0)
  310.                         pygame.draw.rect(maSurface1,WHITE,(posx-25,posy-25,50,50))
  311.                     else:
  312.                         pygame.draw.rect(maSurface1,color,(posx-25,posy-25,50,50))
  313.                 if case not in deplacements:
  314.                     pygame.draw.circle(maSurface2,case.get_couleur(),(posx,posy),17,0)
  315.                 else:
  316.                     pygame.draw.rect(maSurface1,WHITE,(posx-25,posy-25,50,50))
  317.                 posx+=55
  318.             posy+=55
  319.             posx=135
  320.         pygame.display.update()
  321.     def check_case_joueur(self, ligne, colonne):
  322.         return self.liste_case[ligne][colonne].get_joueur()
  323.     def check_case(self, ligne, colonne):
  324.         return self.liste_case[ligne][colonne]  
  325.  
  326.    
  327. conteneur = plateau()
  328. conteneur.creer_plateau()
  329. conteneur.affichage()
  330.  
  331.  
  332. #conteneur.graphplateau()
  333.  
  334. suite = False
  335. check = False
  336. inProgress =True
  337. joueur="joueur1"
  338. victoire = ""
  339. while inProgress:
  340.     for event in pygame.event.get():
  341.         if event.type == QUIT:
  342.             inProgress = False
  343.         if event.type == MOUSEBUTTONDOWN and suite:
  344.             X,Y = event.pos
  345.             for ligne in range(TAILLE):
  346.                 for colonne in range(TAILLE):        
  347.                     if (110+ligne*55) < X < (110+(ligne+1)*55) and (110+colonne*55) < Y < (110+(colonne+1)*55):
  348.                         ici = conteneur.check_case(colonne,ligne)
  349.                         if ici.get_position() == case_actuelle.get_position():
  350.                             check = False
  351.                             conteneur.change_case(check,case_actuelle.get_position(),case_actuelle.get_joueur())                    
  352.                         elif ici in case_actuelle.deplacement:
  353.                            
  354.                             conteneur.change_case(False,ici.get_position(), case_actuelle.get_joueur())
  355.                             conteneur.change_case(False,case_actuelle.get_position(), "vide")
  356.                             if joueur=="joueur1":
  357.                                 joueur = "joueur2"
  358.                             else:
  359.                                 joueur = "joueur1"
  360.                             if conteneur.win(ici,case_actuelle):
  361.                                 inProgress = False
  362.                                 victoire = case_actuelle.joueur
  363.                         else:          
  364.                             check = False
  365.                             conteneur.change_case(check,case_actuelle.get_position(),case_actuelle.get_joueur())
  366.                         suite = False    
  367.        
  368.         if event.type == MOUSEBUTTONDOWN and inProgress:
  369.             X,Y = event.pos      
  370.             print(X,Y)              
  371.             for ligne in range(TAILLE):
  372.                 for colonne in range(TAILLE):                  
  373.                     if conteneur.check_case_joueur(colonne,ligne) not in ["vide","cage",joueur]:  
  374.                         if (110+ligne*55) < X < (110+(ligne+1)*55) and (110+colonne*55) < Y < (110+(colonne+1)*55) :
  375.                             case_actuelle = conteneur.check_case(colonne,ligne)
  376.                             suite = True
  377.                             check  = True
  378.                             conteneur.change_case(check,case_actuelle.get_position(),case_actuelle.get_joueur())      
  379.         conteneur.graphplateau()
  380.        
  381.     pygame.display.update()
  382. print("BRAVOOOOOOOOOOOOO   ",victoire)    
  383. pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement