Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame, sys # On import pygame
- from pygame.locals import * # On import pygame
- pygame.init()# Initialisation de pygame
- mainClock = pygame.time.Clock()
- maSurface1 = pygame.display.set_mode((850,600))
- maSurface2 = pygame.display.set_mode((800,650)) ##l'élément en noir
- maSurface2.set_alpha(128)
- WHITE = (255,255,255)
- RED= (255,116,115)
- RED1=(241,107,111)
- BLUE=(71,184,224)
- YELLOW=(255,201,82)
- NOIR=(0,0,0)
- BLEUVERT = (0,152,128)
- BLEUFOND = (1,111,254)
- BLEUTROU = (23,95,188)
- NOIR = (0,0,0)
- BLANC = (173,173,173,0.5)
- GRIS = (87,87,87)
- GRISC = (196,196,196)
- BLEU = (53,122,183)
- TAILLE = 10
- LISTE = ['gauche','bas_gauche','bas','bas_droite','droite','haut_gauche','haut_droite','haut']
- LISTE1 = ['droite','haut_droite','haut','haut_gauche','gauche','bas_gauche','bas','bas_droite']
- CONTIENT = [None]
- class case:
- def __init__(self, check, joueur, position, partie_haut_plateau):
- self.__check = check
- self.__joueur = joueur
- self.__pion = self.calcul_pion(self.__joueur)
- self.__position = position
- self.__couleur = self.calcul_couleur(self.__joueur)
- self.__haut = None
- self.__haut_droite = None
- self.__haut_gauche = None
- self.__droite = None
- self.__gauche = None
- self.__bas_gauche = None
- self.__bas = None
- self.__bas_droite = None
- self.__partie_haut_plateau = partie_haut_plateau
- def calcul_neighbour(self,plateau, colonne, ligne):
- if colonne >0:
- plateau[ligne][colonne].set_gauche(plateau[ligne][colonne-1])
- if colonne<len(plateau)-1:
- plateau[ligne][colonne].set_droite(plateau[ligne][colonne+1])
- if ligne>0:
- plateau[ligne][colonne].set_haut(plateau[ligne-1][colonne])
- if ligne<len(plateau)-1:
- plateau[ligne][colonne].set_bas(plateau[ligne+1][colonne])
- if ligne < len(plateau)-1 and colonne<len(plateau)-1:
- plateau[ligne][colonne].set_bas_droite(plateau[ligne+1][colonne+1])
- if ligne > 0 and colonne > 0:
- plateau[ligne][colonne].set_haut_gauche(plateau[ligne-1][colonne-1])
- if ligne <len(plateau)-1 and colonne<len(plateau)-1:
- plateau[ligne][colonne].set_haut_droite(plateau[ligne-1][colonne+1])
- if colonne>0 and ligne<len(plateau)-1:
- plateau[ligne][colonne].set_bas_gauche(plateau[ligne+1][colonne-1])
- def set_haut_droite(self, value):
- self.__haut_droite = value
- def set_haut_gauche(self, value):
- self.__haut_gauche = value
- def set_bas(self, value):
- self.__bas = value
- def set_bas_gauche(self, value):
- self.__bas_gauche = value
- def set_bas_droite(self, value):
- self.__bas_droite = value
- def set_droite(self, value):
- self.__droite = value
- def set_gauche(self, value):
- self.__gauche = value
- def set_haut(self, value):
- self.__haut = value
- def get_haut_droite(self):
- return self.__haut_droite
- def get_haut_gauche(self):
- return self.__haut_gauche
- def get_bas(self):
- return self.__bas
- def get_bas_gauche(self):
- return self.__bas_gauche
- def get_bas_droite(self):
- return self.__bas_droite
- def get_droite(self):
- return self.__droite
- def get_gauche(self):
- return self.__gauche
- def get_haut(self):
- return self.__haut
- def get_partie_haut_plateau(self):
- return self.__partie_haut_plateau
- def get_couleur(self):
- return self.__couleur
- def get_position(self):
- return self.__position
- def get_check(self):
- return self.__check
- def get_joueur(self):
- return self.__joueur
- def calcul_pion(self, joueur):
- pion = ["X","O",".","-","-"]
- player = ["joueur1", "joueur2", "vide", "cage_joueur1", "cage_joueur2"]
- return pion[player.index(self.__joueur)]
- def calcul_couleur(self, joueur):
- couleur = [RED,BLEU,BLANC,BLEUVERT,BLEUVERT]
- player = ["joueur1", "joueur2", "vide", "cage_joueur1", "cage_joueur2"]
- return couleur[player.index(self.__joueur)]
- def change_couleur(self, couleur):
- self.__couleur = couleur
- def return_carcat(self, cell, voisin):
- dep = ['gauche','bas_gauche','bas','bas_droite','droite','haut_droite','haut','haut_gauche']
- dep1 = [cell.__gauche,cell.__bas_gauche,cell.__bas,cell.__bas_droite,cell.__droite,cell.__haut_droite,cell.__haut,cell.__haut_gauche]
- return dep1[dep.index(voisin)]
- def deplacements_multiples(self, cell, liste, voisin, joueur_a_check):
- global CONTIENT
- cage = ["cage_joueur1","cage_joueur2"]
- est_un_joueur = ["joueur1","joueur2"]
- cell = self.return_carcat(cell, voisin)
- case_voisin = cell
- while cell != None and cell.__joueur==joueur_a_check.__joueur and cell.__joueur not in cage:
- cell = self.return_carcat(cell, voisin)
- if cell !=None and cell.__joueur not in est_un_joueur and cell.__joueur!="cage_"+case_voisin.__joueur and cell not in liste:
- liste.append(cell)
- return liste
- return liste
- def calcul_test (self, liste, case):
- a=0
- for i in liste:
- if i == case:
- a+=1
- return a
- def recursif_saut_multiple(self,cell,liste, joueur_a_check):
- global CONTIENT
- for case in cell:
- for i in LISTE:
- liste = self.deplacements_multiples(case, liste, i,joueur_a_check)
- if cell==liste:
- return liste
- else:
- cell = liste[:]
- return self.recursif_saut_multiple(cell,liste, joueur_a_check)
- def calcul_deplacements(self, cell):
- voisin = ['gauche','bas','droite','haut']
- liste = []
- cell1 = cell
- check_fct_joueur = None
- if cell.__joueur=="joueur1":
- check_fct_joueur = True
- elif cell.__joueur == "joueur2":
- check_fct_joueur = False
- for neighbour in voisin:
- cell_neighbour = self.return_carcat(cell, neighbour)
- 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 :
- liste.append(cell_neighbour)
- cell = cell_neighbour
- cell_neighbour = self.return_carcat(cell, neighbour)
- cell = cell1
- vide = []
- liste1 = self.recursif_saut_multiple([cell],vide, cell)
- liste = liste+liste1
- return liste
- class plateau:
- def __init__(self):
- self.liste_case = []
- def creer_plateau(self):
- queljoueur = [[1,2],[TAILLE-2, TAILLE-3]]
- for ligne in range(TAILLE):
- joueur = "vide"
- if ligne in queljoueur[0] :
- joueur = "joueur1"
- elif ligne in queljoueur[1]:
- joueur = "joueur2"
- self.liste_case.append([])
- self.ajout_case(joueur,ligne)
- self.neighbour()
- self.deplacer()
- def ajout_case(self,joueur,ligne):
- for colonne in range(TAILLE):
- partie_haut_plateau = False
- if ligne<TAILLE//2:
- partie_haut_plateau = True
- if (colonne==TAILLE/2 or colonne == TAILLE/2-1) and (ligne==0):
- self.liste_case[ligne].append(case(False,"cage_joueur1",(ligne,colonne),partie_haut_plateau))
- elif (colonne==TAILLE/2 or colonne == TAILLE/2-1) and (ligne==TAILLE-1):
- self.liste_case[ligne].append(case(False,"cage_joueur2",(ligne,colonne),partie_haut_plateau))
- elif ((colonne%2==1 and ligne %2==1) or (colonne%2==0 and ligne %2==0)):
- self.liste_case[ligne].append(case(False,"vide",(ligne,colonne),partie_haut_plateau))
- else:
- self.liste_case[ligne].append(case(False,joueur,(ligne,colonne),partie_haut_plateau))
- def affichage(self):
- liste = ""
- for ligne in self.liste_case:
- liste+="\n"
- for case in ligne:
- liste+=""
- pos=""
- #for i in case.deplacement:
- if case.get_gauche()!=None:
- pos = str(case.get_gauche().get_position())
- liste+=" "+pos+" "#+str(case.position[0])+str(case.position[1])+
- print(liste)
- def deplacer(self):
- for ligne in self.liste_case:
- for case in ligne:
- case.deplacement = case.calcul_deplacements(case)
- def neighbour(self):
- for i in range(len(self.liste_case)):
- for j in range(len(self.liste_case[i])):
- self.liste_case[i][j].calcul_neighbour(self.liste_case,i,j)
- def change_case(self,check,coord, joueur):
- ligne = coord[0]
- colonne = coord[1]
- haut_plateau = self.liste_case[ligne][colonne].get_partie_haut_plateau()
- self.liste_case[ligne][colonne] = case(check,joueur,(ligne,colonne), haut_plateau)
- self.neighbour()
- self.deplacer()
- def win (self, case, joueur):
- cage = [TAILLE//2,TAILLE//2-1]
- print(cage)
- print(case.get_position())
- print(joueur.get_joueur())
- 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):
- print("ok")
- return True
- return False
- def graphplateau(self):
- pygame.draw.rect(maSurface1,GRIS,(100,100,TAILLE*56.3,TAILLE*56.3))
- posy=135
- posx=135
- deplacements = []
- for ligne in self.liste_case:
- for col in ligne:
- if col.get_check()==True:
- deplacements = col.deplacement
- a = 0
- for ligne in self.liste_case:
- a+=1
- for case in ligne:
- if a<=TAILLE/2:
- if case.get_joueur()=="vide":
- case.change_couleur(YELLOW)
- color = YELLOW
- else:
- color = BLANC
- if case.get_joueur() != "cage_joueur1" and case.get_joueur() !="cage_joueur2":
- pygame.draw.rect(maSurface1,BLANC,(posx-25,posy-25,50,50))
- else:
- pygame.draw.rect(maSurface1,BLEUVERT,(posx-25,posy-25,50,50))
- if (case.get_joueur()!="cage_joueur1" and case.get_joueur() !="cage_joueur2"):
- if case in deplacements:
- pygame.draw.circle(maSurface2,WHITE,(posx,posy),17,0)
- pygame.draw.rect(maSurface1,WHITE,(posx-25,posy-25,50,50))
- else:
- pygame.draw.rect(maSurface1,color,(posx-25,posy-25,50,50))
- if case not in deplacements:
- pygame.draw.circle(maSurface2,case.get_couleur(),(posx,posy),17,0)
- else:
- pygame.draw.rect(maSurface1,WHITE,(posx-25,posy-25,50,50))
- posx+=55
- posy+=55
- posx=135
- pygame.display.update()
- def check_case_joueur(self, ligne, colonne):
- return self.liste_case[ligne][colonne].get_joueur()
- def check_case(self, ligne, colonne):
- return self.liste_case[ligne][colonne]
- conteneur = plateau()
- conteneur.creer_plateau()
- conteneur.affichage()
- #conteneur.graphplateau()
- suite = False
- check = False
- inProgress =True
- joueur="joueur1"
- victoire = ""
- while inProgress:
- for event in pygame.event.get():
- if event.type == QUIT:
- inProgress = False
- if event.type == MOUSEBUTTONDOWN and suite:
- X,Y = event.pos
- for ligne in range(TAILLE):
- for colonne in range(TAILLE):
- if (110+ligne*55) < X < (110+(ligne+1)*55) and (110+colonne*55) < Y < (110+(colonne+1)*55):
- ici = conteneur.check_case(colonne,ligne)
- if ici.get_position() == case_actuelle.get_position():
- check = False
- conteneur.change_case(check,case_actuelle.get_position(),case_actuelle.get_joueur())
- elif ici in case_actuelle.deplacement:
- conteneur.change_case(False,ici.get_position(), case_actuelle.get_joueur())
- conteneur.change_case(False,case_actuelle.get_position(), "vide")
- if joueur=="joueur1":
- joueur = "joueur2"
- else:
- joueur = "joueur1"
- if conteneur.win(ici,case_actuelle):
- inProgress = False
- victoire = case_actuelle.joueur
- else:
- check = False
- conteneur.change_case(check,case_actuelle.get_position(),case_actuelle.get_joueur())
- suite = False
- if event.type == MOUSEBUTTONDOWN and inProgress:
- X,Y = event.pos
- print(X,Y)
- for ligne in range(TAILLE):
- for colonne in range(TAILLE):
- if conteneur.check_case_joueur(colonne,ligne) not in ["vide","cage",joueur]:
- if (110+ligne*55) < X < (110+(ligne+1)*55) and (110+colonne*55) < Y < (110+(colonne+1)*55) :
- case_actuelle = conteneur.check_case(colonne,ligne)
- suite = True
- check = True
- conteneur.change_case(check,case_actuelle.get_position(),case_actuelle.get_joueur())
- conteneur.graphplateau()
- pygame.display.update()
- print("BRAVOOOOOOOOOOOOO ",victoire)
- pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement