-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
301 lines (259 loc) · 11.8 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
import pygame
import image
import niveau
import sys
from gestion_grille import GestionGrilles
import grille
import score
pygame.init()
screen = pygame.display.set_mode((1270, 900))
pygame.display.set_caption('NELSON Gems')
accueil = pygame.image.load("ressources/fonds.jpeg").convert()
# creation des boutons pour le menu
sprite_bouton = pygame.sprite.Group()
boutonPlay = image.Bouton(0, 385, 350)
sprite_bouton.add(boutonPlay)
boutonEasy = image.Bouton(1, 385, 0)
boutonMedium = image.Bouton(2, 385, 150)
boutonHard = image.Bouton(3, 385, 300)
# on defini nos variables pour les boucles
running = True
running_accueil = True
running_menu = False
running_jeu = False
running_fin = False
active = False
text = ''
nom_joueur = ""
pseudo=""
temps_de_partie = 200000
score_partie = 0
click1 = -1
click2 = -1
# On définit nos polices ainsi que leur taille
font1 = pygame.font.Font("ressources/polices/simplicity.ttf", 20)
font2 = pygame.font.Font("ressources/polices/lt_feelgood.ttf", 35)
font3 = pygame.font.Font("ressources/polices/titre_jeu.otf", 200)
font4 = pygame.font.Font("ressources/polices/titre_jeu.otf", 40)
font5 = pygame.font.Font("ressources/polices/good_people.otf", 260)
# On définit le rectangle dans lequel on va écrire notre pseudo
input_box = pygame.Rect(100, 100, 140, 32)
# On définit nos deux couleurs de cadre: une couleur quand le cadre n'est pas selectionné puis une couleur quand il est selectionné
color_inactive = pygame.Color('indianred')
color_active = pygame.Color('firebrick')
# On définit d'abord la couleur du cadre comme celle du cadre qui n'est pas selectionnée
color = color_inactive
# boucle tant que cette condition est vrai
while running:
# mettre à jour l'ecran
accueil = pygame.image.load("ressources/fonds.jpeg").convert()
accueil = pygame.transform.scale(accueil, (1270, 900))
screen.blit(accueil, (0, 0))
pygame.display.flip()
while running_accueil == True:
insererPseudo = font1.render("Inserez votre pseudo ci-dessous, puis appuyer sur 'Entrée'", 1, (10, 10, 10))
screen.blit(insererPseudo, (40, 60))
# si le joueur ferme cette fenetre
for event in pygame.event.get():
# ajout du tire du jeu
nomJeu = font3.render("CRUSH", 1, (10, 10, 10))
screen.blit(nomJeu, (260, 230))
# crédit du jeu
creditJeu = font1.render(
"Jeu créé par NELSON", 1, (10, 10, 10))
screen.blit(creditJeu, (300, 660))
# dessin du bouton play
sprite_bouton.draw(screen)
txt_surface = font2.render(text, True, color)
width = max(200, txt_surface.get_width() + 10)
input_box.w = width
screen.blit(txt_surface, (input_box.x + 5, input_box.y + 5))
pygame.draw.rect(screen, color, input_box, 2)
# que l'evenement est fermeture de fenetre
if event.type == pygame.QUIT:
running_accueil = False
running_menu = False
running_jeu = False
running_fin = False
sys.exit()
elif event.type == pygame.KEYDOWN:
if active:
if event.key == pygame.K_RETURN:
# si on appuie sur "entrée" alors le pseudo est stocké et est affiché
pseudo = font2.render(text, 'maroon', (10, 10, 10))
screen.blit(pseudo, (250, 144))
nouveauJoueur = font1.render("Nouveau Joueur : ", 1, (10, 10, 10))
screen.blit(nouveauJoueur, (100, 150))
elif event.key == pygame.K_BACKSPACE:
text = text[:-1]
else:
text += event.unicode
nom_joueur = text
# evenement au clic de la souris
elif event.type == pygame.MOUSEBUTTONDOWN:
if input_box.collidepoint(event.pos):
active = True
else:
# le cadre passe en mode "selectionné"
active = False
color = color_active if active else color_inactive
posX = pygame.mouse.get_pos()[0]
posY = pygame.mouse.get_pos()[1]
# on verifie si le clique est sur le bouton
if posX > 470 and posX < 720 and posY > 520 and posY < 620:
# on supprime le bouton play et on actualise l'ecran pour qu'il parte
sprite_bouton.remove(boutonPlay)
screen.blit(accueil, (0, 0))
running_menu = True
running_accueil = False
pygame.display.flip()
while running_menu == True:
# on ajoute nos 3 boutons au groupe de sprite
sprite_bouton.add(boutonEasy)
sprite_bouton.add(boutonMedium)
sprite_bouton.add(boutonHard)
# on affiche le pseudo et le nom du jeu en haut à gauche
nomJeu = font4.render("CANDY CRUSH", 1, (10, 10, 10))
screen.blit(nomJeu, (30, 30))
joueurActuel = font1.render("Joueur Actuel : ", 1, (10, 10, 10))
screen.blit(joueurActuel, (30, 90))
screen.blit(insererPseudo, (148, 81))
# si le joueur ferme cette fenetre
for event in pygame.event.get():
# on dessine nos trois boutons
sprite_bouton.draw(screen)
# que l'evenement est fermeture de fenetre
if event.type == pygame.QUIT:
running_accueil = False
running_menu = False
running_jeu = False
running_fin = False
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
posX = pygame.mouse.get_pos()[0]
posY = pygame.mouse.get_pos()[1]
# on verifie sur quelle bouton on clique
# une fois clique on supprime tout les boutons et on lance le jeu
if posX > 470 and posX < 720 and posY > 170 and posY < 270:
level = 0
nbrCase = 6
x = 446
y = 250
image.supprimer(sprite_bouton, boutonEasy, boutonMedium, boutonHard)
running_jeu = True
screen.blit(accueil, (0, 0))
# creation de notre objet grille depuis la classe GestionGrilles
grilles = GestionGrilles(6, 6)
niveau.dessinNiveau(screen, 0, grille)
running_menu = False
elif posX > 470 and posX < 720 and posY > 320 and posY < 420:
level = 1
nbrCase = 8
x = 446
y = 250
image.supprimer(sprite_bouton, boutonEasy, boutonMedium, boutonHard)
running_jeu = True
screen.blit(accueil, (0, 0))
# creation de notre objet grille depuis la classe GestionGrilles
grilles = GestionGrilles(8, 8)
niveau.dessinNiveau(screen, 1, grille)
running_menu = False
elif posX > 470 and posX < 720 and posY > 470 and posY < 570:
level = 2
nbrCase = 10
x = 446
y = 150
image.supprimer(sprite_bouton, boutonEasy, boutonMedium, boutonHard)
running_jeu = True
screen.blit(accueil, (0, 0))
# creation de notre objet grille depuis la classe GestionGrilles
grilles = GestionGrilles(10, 10)
niveau.dessinNiveau(screen, 2, grilles)
running_menu = False
pygame.display.flip()
# on verifie s'il n'y a pas deja des match dans notre grille de base
grille.newtab(grille.tab_original)
# on vide notre groupe de sprite qui contient les gem pour pouvoir actualiser la grille
image.vidageSprite()
# on dessine la nouvelle grille actualise
niveau.dessinNiveau(screen, level, grille)
score_partie = 0
while running_jeu == True:
chrono = gestion_grilles.afficher_temps(font1, screen, temps_de_partie, accueil)
niveau.dessinGrille(screen, level)
# on affiche le pseudo et le nom du jeu en haut à gauche pendant que le joueur joue
nomJeu = font4.render("CANDY CRUSH", 1, (10, 10, 10))
screen.blit(nomJeu, (30, 30))
joueurActuel = font1.render("Joueur Actuel : ", 1, (10, 10, 10))
screen.blit(joueurActuel, (30, 90))
screen.blit(pseudo, (148, 81))
affichageScore = font1.render("Score : ", 1, (10, 10, 10))
screen.blit(affichageScore, (1100, 90))
score_surface = font2.render(str(score_partie), 1, (10, 10, 10))
screen.blit(score_surface, (1160, 85))
# si le joueur ferme cette fenetre
for event in pygame.event.get():
# que l'evenement est fermeture de fenetre
if event.type == pygame.QUIT:
running_accueil = False
running_menu = False
running_jeu = False
running_fin = False
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
posX = pygame.mouse.get_pos()[0]
posY = pygame.mouse.get_pos()[1]
# on assigne nos click au position de la souris
if click1 == -1:
# on recupere la case ou on a clique
click1 = grille.recup_case(level, posX, posY)
elif click1 != -1:
click2 = grille.recup_case(level, posX, posY)
if click1 != -1 and click2 != -1:
# on permutte les deux cases cliques
grille.permut(grille.tab_original, click1, click2)
# on reaactualise l'affichage en vidant le groupe de sprite
# et en dessinant la nouvelle grille
grille.newtab(grille.tab_original)
"score tenant compte des match lors de la creation de la grille"
score_partie = grille.newtab(grille.tab_original)[1]
print(score_partie)
image.vidageSprite()
screen.blit(accueil, (0, 0))
niveau.dessinNiveau(screen, level, grille)
# on remet nos click à leur valeur par default
click1 = -1
click2 = -1
if chrono < 0:
score.enregistrer_score(nom_joueur, score_partie)
running_fin = True
running_jeu = False
icon.my_sprites.draw(screen)
pygame.display.flip()
# écran de fin
while running_fin == True:
screen.blit(accueil, (0, 0))
# nom du jeu
nomJeu = font3.render("CANDY CRUSH", 1, (10, 10, 10))
screen.blit(nomJeu, (260, 500))
# fin du jeu
finJeu = font5.render("Fin Du Jeu", 1, (10, 10, 10))
screen.blit(finJeu, (90, 250))
# nom du joueur
joueurActuel = font1.render("Joueur Actuel : ", 1, (10, 10, 10))
screen.blit(joueurActuel, (30, 90))
screen.blit(insererPseudo, (148, 81))
# score du joueur
scoreJoueur = font1.render("Score : ", 1, (10, 10, 10))
screen.blit(scoreJoueur, (30, 140))
screen.blit(score_surface, (100, 135))
# si le joueur ferme cette fenetre
for event in pygame.event.get():
# que l'evenement est fermeture de fenetre
if event.type == pygame.QUIT:
running_accueil = False
running_menu = False
running_jeu = False
running_fin = False
sys.exit()
pygame.display.flip()