Skip to content
Snippets Groups Projects

code non fini du jeu hexagonal.

Open Guiguen Camille requested to merge e20220006818-main-patch-15020 into main
1 file
+ 269
0
Compare changes
  • Side-by-side
  • Inline
codehexagonal.py 0 → 100644
+ 269
0
import pygame
import time
from pygame.locals import *
import random
import math
blackcolor = (42,48,51)
whitecolor = (255,255,255)
bleu=(0,0,255)
rouge=(255,0,0)
vert=(0,255,0)
res =(800,700)
i = 0
#nuancier marron/beige
beige = (232,220,202)
rosee = (255,228,196)
bois = (222,184,135)
terre = (160,82,45)
orangee = (244,164,96)
marron= (179,139,109)
marronfonce = (79,42,9)
rougefonce = (165,42,42)
bordeau = (128,0,0)
autre = (138, 90, 68)
listecouleur = [beige,rosee, bois, terre, orangee, marron , autre, rougefonce, bordeau,whitecolor,blackcolor]
#affichge de la page pygame
pygame.init()
screen = pygame.display.set_mode(res, pygame.RESIZABLE)
pygame.display.set_caption('projet 2048')
screen.fill(beige) #couleur de fond
#titre
type_texte1 = pygame.font.SysFont("ubuntu", 75, True) #(police , taille, gras, italique) les 2 derniers sont optionnels
titre = type_texte1.render("2048 Hexagone", True, marronfonce) #(texte, pixelisation, couleur )
screen.blit(titre, [150,50]) #met le texte sur notre surface (objet, position [x,y])
#sur titre
type_texte = pygame.font.SysFont("ubuntu", 20, True, True)
titre = type_texte.render("Le jeu", True, marronfonce)
screen.blit(titre, [330,30])
pygame.display.flip() #rafraichir page (indispensable)
#dictionaire contenant les attributs des differentes cases de l'interface
plateau = {"nom": "plateau", "couleur": marron, "valeur": None, "taille":(250,200,325,325), "posTxt": (0,0)}
A1 = {"nom": "A1", "couleur": marronfonce, "valeur": None, "colonne":1 ,"ligne": 1, "taille": (125, 75,75,75), "posTxt": (280,215), "posTxtbis": (257,215)}
B1 = {"nom": "B1", "couleur": marronfonce, "valeur": None, "colonne":2 ,"ligne": 1, "taille": (175, 75,75,75), "posTxt": (280,295), "posTxtbis": (257,295)}
C1 = {"nom": "C1", "couleur": marronfonce, "valeur": None, "colonne":3 ,"ligne": 1, "taille": (225, 75,75,75), "posTxt": (280,375), "posTxtbis": (257,375)}
A2 = {"nom": "A2", "couleur": marronfonce, "valeur": None, "colonne":1 ,"ligne": 2, "taille": (100, 112,75,75), "posTxt": (280,455), "posTxtbis": (257,455)}
B2 = {"nom": "B2", "couleur": marronfonce, "valeur": None, "colonne":2 ,"ligne": 2, "taille": (150, 112,75,75), "posTxt": (360,215), "posTxtbis": (337,215)}
C2 = {"nom": "C2", "couleur": marronfonce, "valeur": None, "colonne":3 ,"ligne": 2, "taille": (200, 112,75,75), "posTxt": (360,295), "posTxtbis": (337,295)}
D2 = {"nom": "D2", "couleur": marronfonce, "valeur": None, "colonne":4 ,"ligne": 2, "taille": (250, 112,75,75), "posTxt": (360,375), "posTxtbis": (337,375)}
A3 = {"nom": "A3", "couleur": marronfonce, "valeur": None, "colonne":1 ,"ligne": 3, "taille": (75, 149,75,75), "posTxt": (360,455), "posTxtbis": (337,455)}
B3 = {"nom": "B3", "couleur": marronfonce, "valeur": None, "colonne":2 ,"ligne": 3, "taille": (125, 149,75,75), "posTxt": (440,215), "posTxtbis": (417,215)}
C3 = {"nom": "C3", "couleur": marronfonce, "valeur": None, "colonne":3 ,"ligne": 3, "taille": (175, 149,75,75), "posTxt": (440,295), "posTxtbis": (417,295)}
D3 = {"nom": "D3", "couleur": marronfonce, "valeur": None, "colonne":4 ,"ligne": 3, "taille": (225, 149,75,75), "posTxt": (440,375), "posTxtbis": (417,375)}
E3 = {"nom": "E3", "couleur": marronfonce, "valeur": None, "colonne":5 ,"ligne": 3, "taille": (275, 149,75,75), "posTxt": (440,455), "posTxtbis": (417,455)}
A4 = {"nom": "A4", "couleur": marronfonce, "valeur": None, "colonne":1 ,"ligne": 4, "taille": (100,186,75,75), "posTxt": (520,215), "posTxtbis": (497,215)}
B4 = {"nom": "B4", "couleur": marronfonce, "valeur": None, "colonne":2 ,"ligne": 4, "taille": (150,186,75,75), "posTxt": (520,295), "posTxtbis": (497,295)}
C4 = {"nom": "C4", "couleur": marronfonce, "valeur": None, "colonne":3 ,"ligne": 4, "taille": (200,186,75,75), "posTxt": (520,375), "posTxtbis": (497,375)}
D4 = {"nom": "D4", "couleur": marronfonce, "valeur": None, "colonne":3 ,"ligne": 4, "taille": (250,186,75,75), "posTxt": (520,455), "posTxtbis": (497,455)}
A5 = {"nom": "A5", "couleur": marronfonce, "valeur": None, "colonne":1 ,"ligne": 5, "taille": (125,223,75,75), "posTxt": (280,215), "posTxtbis": (257,215)}
B5 = {"nom": "B5", "couleur": marronfonce, "valeur": None, "colonne":2 ,"ligne": 5, "taille": (175,223,75,75), "posTxt": (280,215), "posTxtbis": (257,215)}
C5 = {"nom": "C5", "couleur": marronfonce, "valeur": None, "colonne":3 ,"ligne": 5, "taille": (225,223,75,75), "posTxt": (280,215), "posTxtbis": (257,215)}
NewGame = {"nom": "NewGame", "couleur": marron, "taille": (600,75,150,40), "posTxt": (633,82)}
SCORE = {"nom": "SCORE", "couleur": marron, "taille": (650,265,125,75), "posTxt": (650,265)}
RECORD = {"nom": "RECORD", "couleur": marron, "taille": (650,365,125,75), "posTxt": (650,365)}
LANGUAGE = {"nom": "Language", "couleur": marron, "taille": (50,480,150,40), "posTxt": (90,488)}
PLAYER1 = {"nom": "PLAYER1", "couleur": marron, "taille": (50,100,150,40), "posTxt":(50,100)}
PLAYER2 = {"nom": "PLAYER2", "couleur": marron, "taille": (50,150,150,40), "posTxt": (50,150)}
#listes utilisées dans dessin()
liste_cases=[plateau,A1,B1,C1,A2,B2,C2,D2,A3,B3,C3,D3,E3,A4,B4,C4,D4,A5,B5,C5]
liste_cases_spe= [NewGame,SCORE,RECORD,LANGUAGE,PLAYER1,PLAYER2]
matrice =[
[A1,B1,C1],
[A2,B2,C2,D2],
[A3,B3,C3,D3,E3],
[A4,B4,C4,D4],
[A5,B5,C5]
]
#dessin de l'interface
def dessin():
for case in liste_cases: #affiche les cases du plateau
pygame.draw.polygon(screen, case["couleur"], pygame.polygon(case["taille"]),0,3)
for case in liste_cases_spe: #affiche les cases special avec leur texte
pygame.draw.polygon(screen, case["couleur"], pygame.polygon(case["taille"]),0,3)
texte =type_texte.render((case["nom"]), True, blackcolor)
screen.blit(texte, case["posTxt"])
def dessine_matrice(matrice,init=False):
for ligne in range(len(matrice)): #parcours la matrice
for colonne in range(len(matrice[ligne])):
if init:
matrice[ligne][colonne]["valeur"]=None
matrice[ligne][colonne]["couleur"]=marronfonce
pygame.draw.polygon(screen, matrice[ligne][colonne]["couleur"], pygame.polygon(matrice[ligne][colonne]["taille"]),0,3)
if matrice[ligne][colonne]["valeur"] is not None:
if matrice[ligne][colonne]["valeur"]< 128:
type_texte2 = pygame.font.SysFont("ubuntu",45 , True)
titre = type_texte2.render(str(matrice[ligne][colonne]["valeur"]), True, beige)
screen.blit(titre, matrice[ligne][colonne]["posTxt"])
else: #pour que l'ecriture soit centrée et ne sort pas de la case
type_texte2 = pygame.font.SysFont("ubuntu",38 , True)
titre = type_texte2.render(str(matrice[ligne][colonne]["valeur"]), True, beige)
screen.blit(titre, matrice[ligne][colonne]["posTxtbis"])
#fait une liste des cases vides du plateau
def liste_cases_vides(matrice):
cases_vides = []
for ligne in range(len(matrice)): #parcours de la matrice
for col in range(len(matrice[ligne])):
case_courante = matrice[ligne][col]
if case_courante["valeur"]== None: #si la case est vide
cases_vides.append((ligne, col)) #on l'ajoute a la liste
return cases_vides
#met a jour la valeur de la case dans le dict et afficher 2
def case_random(matrice):
cases_vides = liste_cases_vides(matrice)
ligne, col = random.choice(cases_vides) #choisi une ligne et colonne (donc une case) parmi les cases_vides
matrice[ligne][col]["valeur"] = 2 #met a jour le dictionnaire de la case correspondante
type_texte2 = pygame.font.SysFont("ubuntu",45 , True)#affichage sur l'interface le 2
titre = type_texte2.render("2", True, beige)
screen.blit(titre, matrice[ligne][col]["posTxt"])
pygame.display.flip()
return matrice
def suivante(case,matrice,event): #renvoi la case de droite/ de gauche/ en haut/ en bas ou none si c'est un bord
if event.key == pygame.K_d:
if (case["colonne"] == 4 and (case["ligne"] == 2 or case["ligne"] ==4)) or (case["colonne"] == 3 and (case["ligne"] == 1 or case["ligne"] ==5)) or (case["colonne"] ==5 and case["ligne"] ==3):
case_suivante = None
else:
case_suivante = matrice[case["ligne"]][case["colonne"]+1]
elif event.key == pygame.K_c:
if case["ligne"] == 5 or (case["ligne"]==3 and case["colonne"]==4) or (case["ligne"]==4 and case["colonne"]==4):
case_suivante = None
else:
case_suivante = matrice[case["ligne"]+1][case["colonne"]+1]
elif event.key == pygame.K_q:
if case["colonne"] == 1 :
case_suivante = None
else:
case_suivante = matrice[case["ligne"]][case["colonne"]-1]
elif event.key == pygame.K_a:
if case["ligne"] == 1 or case["colonne"]==1:
case_suivante = None
else:
case_suivante = matrice[case["ligne"]-1][case["colonne"]-1]
elif event.key == pygame.K_e:
if case["ligne"] == 1 or (case["colonne"]== 4 and case["ligne"] == 2) or case["colonne"]==5:
case_suivante = None
else:
case_suivante = matrice[case["ligne"]-1][case["colonne"]+1]
elif event.key == pygame.K_w:
if case["ligne"]==5 or (case["ligne"]==4 and case["colonne"]==1):
case_suivante = None
else:
case_suivante = matrice[case["ligne"]+1][case["colonne"]-1]
return(case_suivante)
def mouvement(matrice,event):
move=False #détermine s'il y a eu au moins un mouvement
list_cases_courantes =[]
list_deja_modifie=[]
for ligne in range(len(matrice)):
for colonne in range(len(matrice[ligne])):
case = matrice[ligne][colonne]
if case["valeur"] is not None:
list_cases_courantes.append(case) #creer une liste des cases ayant une valeur sur le plateau
if event.key in (pygame.K_d,pygame.K_e,pygame.K_c):
debut=len(list_cases_courantes)-1
fin=-1
pas=-1
elif event.key in (pygame.K_a,pygame.K_q,pygame.K_w):
debut=0
fin=len(list_cases_courantes)
pas=1
for j in range(debut,fin,pas): #parcours la liste
case_courante = list_cases_courantes[j] #definie la case courante
case_suivante = suivante(case_courante,matrice,event) #definie la case suivante en fonction de la case courante
while case_suivante != None: #tant qu'on a pas atteint le bord du plateau
if (case_suivante["valeur"] is None): #si la case suivante est libre
case_suivante["valeur"],case_suivante["couleur"]= case_courante["valeur"], case_courante["couleur"] #on met la valeur et couleur de notre case à la case suivante
case_courante["valeur"], case_courante["couleur"] = None, marronfonce #et on met notre case comme etant libre
case_courante=case_suivante
case_suivante = suivante(case_courante,matrice,event)
move=True
elif (case_suivante["valeur"] == case_courante["valeur"]): #sinon si la case suivante est de mm valeur
if case_suivante["nom"] not in list_deja_modifie:
case_suivante["valeur"] = (case_courante["valeur"]*2) #on met la (valeur*2) de notre case à la case suivante
case_suivante["couleur"] = listecouleur[int(math.log(case_suivante["valeur"]) / math.log(2))] #va chercher la couleur correpondante dans une liste de couleur
case_courante["valeur"], case_courante["couleur"] = None, marronfonce #et on met notre case courante comme etant libre
list_deja_modifie.append(case_suivante["nom"])
move=True
case_suivante = None #on arrète
elif (case_suivante["valeur"] != case_courante["valeur"]): #sinon si la case suivante est de valeur diff
case_suivante = None #on arrète
return(move)
def can_play():
resultat = False
for ligne in range(len(matrice)):
for colonne in range(len(matrice[ligne])): #on parcourt les différentes lignes et colonnes
if matrice[ligne][colonne]["valeur"] is None: #vérifie si on a encore des cases vides et des mouvements possibles à faire pour savoir si arrêter le jeu
resultat = True
return resultat
def perdu(): #affiche un rectangle avec écrit "VOUS AVEZ PERDU !"
pygame.draw.rect(screen, whitecolor, pygame.Rect(260,285,300,100),0,3) #dessin d'un rectangle par dessus le je
blabla = pygame.font.SysFont("ubuntu", 30, True)
texte =blabla.render("VOUS AVEZ PERDU !", True, blackcolor) #affichage de l'écriture dans le rectangle
screen.blit(texte, (265,310))
#EVENEMENTS CLAVIER
game = True
fin = False
while game:
for event in pygame.event.get():
if event.type == QUIT:
game = False
elif event.type == MOUSEBUTTONDOWN: #affichage (ds le terminal) des positions sur l'interface qd on clique
print(f"X: {event.pos[0]} Y: {event.pos[1]}")
#evenements claviers fleches
elif event.type == pygame.KEYDOWN:
if event.key in (pygame.K_a,pygame.K_q,pygame.K_w,pygame.K_c,pygame.K_d,pygame.K_e) and not fin:
move = mouvement(matrice,event)
dessine_matrice(matrice)
if move:
case_random(matrice)
elif can_play() == False and move == False:
perdu()
fin = True
elif event.key==pygame.K_r:
fin = False
dessin() #a mettre dans le main final
dessine_matrice(matrice,True)
case_random(matrice)
dessine_matrice(matrice)
pygame.display.flip() #rafraichie page (indispensable)
Loading