def options(fenetre): font1 = pygame.font.Font("Fonts/font1.ttf", 40) font2 = pygame.font.Font("Fonts/font1.ttf", 70) selectionActuelle = 0 largeurMin = 20 largeurMax= 40 hauteurMin = 10 hauteurMax = 25 ouvert = True vitesses = ["Lente", "Normale", "Rapide", "Extreme"] selections = ["Vitesse", "Largeur", "Hauteur", "Musique", "Retour"] sauvegarde = Sauvegarde() try: sauvegarde = load(file("sauvegarde", "rb")) except IOError: # Si le fichier n'exsite pas, on le cree dump(sauvegarde, file("sauvegarde", "wb")) while ouvert: for event in pygame.event.get(): # Gestion des evenements # Ferme l'application quand on clique sur la croix if event.type == QUIT: exit() if event.type == KEYDOWN: # Ferme aussi l'application quand on appui sur ESC if event.key == K_ESCAPE: ouvert = False # Deplacement dans le menu avec les fleches directionnelle if event.key == K_UP: selectionActuelle -= 1 if selectionActuelle < 0: selectionActuelle = 0 if event.key == K_DOWN: selectionActuelle += 1 if selectionActuelle >= len(selections): selectionActuelle = len(selections) - 1 # Modification de la vitesse # 4 niveaux de vitesses differents if selections[selectionActuelle] == "Vitesse": if event.key == K_LEFT: sauvegarde.vitesse -= 1 if sauvegarde.vitesse < 0: sauvegarde.vitesse = 0 if event.key == K_RIGHT: sauvegarde.vitesse += 1 if sauvegarde.vitesse > 3: sauvegarde.vitesse = 3 # Gestion du changement de la largeur if selections[selectionActuelle] == "Largeur": if event.key == K_LEFT: sauvegarde.largeur -= 1 if sauvegarde.largeur < largeurMin: sauvegarde.largeur = largeurMin if event.key == K_RIGHT: sauvegarde.largeur += 1 if sauvegarde.largeur > largeurMax: sauvegarde.largeur = largeurMax # Gestion du changement de la hauteur if selections[selectionActuelle] == "Hauteur": if event.key == K_LEFT: sauvegarde.hauteur -= 1 if sauvegarde.hauteur < hauteurMin: sauvegarde.hauteur = hauteurMin if event.key == K_RIGHT: sauvegarde.hauteur += 1 if sauvegarde.hauteur > hauteurMax: sauvegarde.hauteur = hauteurMax if event.key == K_RETURN: if selections[selectionActuelle] == "Retour": ouvert = False # Bascule de la musique entre On et Off if selections[selectionActuelle] == "Musique": if sauvegarde.jouerMusique == "On": sauvegarde.jouerMusique = "Off" else: sauvegarde.jouerMusique = "On" fenetre.fill(couleurBlanche) # On efface l'ecran # On affiche le menu espacement = fenetre.get_rect().height / (len(selections) + 1) for i in range(0, len(selections)): # On affiche d'abord l'option (Vitesse, Musique, etc) # La police change de couleur et taille lorsqu'on selectionne l'option if i == selectionActuelle: option = font2.render(selections[i], 1, couleurRouge) else: option = font1.render(selections[i], 1, couleurNoire) position = option.get_rect() position.centerx = fenetre.get_rect().centerx position.centery = espacement * (i + 1) fenetre.blit(option, position) # Puis on affiche sa valeur if selections[i] == "Vitesse": texte = vitesses[sauvegarde.vitesse] if selections[i] == "Largeur": texte = str(sauvegarde.largeur) if selections[i] == "Hauteur": texte = str(sauvegarde.hauteur) if selections[i] == "Musique": texte = sauvegarde.jouerMusique if selections[i] == "Retour": texte = "" if i == selectionActuelle: valeurOption = font2.render(texte, 1, couleurRouge) else: valeurOption = font1.render(texte, 1, couleurNoire) positionBis = valeurOption.get_rect() positionBis.centery = espacement * (i + 1) positionBis.centerx = position.right + (fenetre.get_width() - position.right) / 2 fenetre.blit(valeurOption, positionBis) pygame.display.flip() # On sauvegarde les options dump(sauvegarde, file("sauvegarde", "wb")) fenetre = pygame.display.set_mode((tailleCase * (sauvegarde.largeur + 2 * tailleBord), tailleCase * (sauvegarde.hauteur + 2 * tailleBord)))
def play(self): if __main__.perso: Sauvegarde.sauvegarder(__main__.savePath) self.destroy() __main__.motGraph = MoteurGraphique() # try: #Les thread entrainent parfois des problèmes d'inconsistance dans pygame __main__.motGraph.run() __main__.motGraph = None
def selectionner(self): global savePath, root if True: savePath = 'Saves/Player' + str( int(self.box.curselection()[0]) + 1) + '.txt' self.root.destroy() if self.charger: Sauvegarde.charger(savePath) else: self.warner = Tk() Label(self.warner, text='Êtes vous sûr ? La sauvegarde sera ecrasée !', bg='Red').pack() Button(self.warner, text='Ecraser la sauvegarde', command=self.warner.quit).pack(fill=X) Button(self.warner, text='Annuler', command=self.annuler).pack(fill=X) Fonctions.centrer(self.warner, 73, 222) self.warner.mainloop() self.warner.destroy() root.destroy() debug("Step1") Menu.openMenu()
def sauvegarder(): Sauvegarde.sauvegarder(aDeviner, oldPropositions) pygame.event.post(pygame.event.Event(TOMENUEVENT))
def partieSauvegardee(): global aDeviner, oldPropositions aDeviner, oldPropositions = Sauvegarde.reprendre() print(aDeviner) print(oldPropositions) partie()
def jouer(fenetre): sauvegarde = Sauvegarde() try: sauvegarde = load(file("sauvegarde", "rb")) except IOError: # Si le fichier n'exsite pas, on le cree dump(sauvegarde, file("sauvegarde", "wb")) # Creation de l'objet de type Serpent serpent = Serpent(sauvegarde) # Creation de l'objet de type fruit fruit = Fruit(serpent, sauvegarde) pygame.font.init() fontScore = pygame.font.Font("Fonts/font2.ttf", 20) fontGameOver = pygame.font.Font("Fonts/font3.ttf", 80) fontPause = pygame.font.Font("Fonts/font4.ttf", 60) # Cree une table de correspondance entre les constantes qui represente les # fleche directionnelles et le nom de la direction table = dict() table[K_UP] = "haut" table[K_RIGHT] = "droite" table[K_DOWN] = "bas" table[K_LEFT] = "gauche" #Creation de l'objet de type Musique musique = Musique() # Chargement de l'image de fond fond = pygame.image.load("Images/Fond.png").convert() # Creation de polices de caracteres scoreActuel = 0 compteur = 0 clock = pygame.time.Clock() ouvert = True pause = False while ouvert: for event in pygame.event.get(): # Gestion des evenements # Ferme l'application quand on clique sur la croix if event.type == QUIT: musique.stop() exit() if event.type == KEYDOWN: # On met le jeu en pause lors de l'appuis sur ESC if event.key == K_ESCAPE: if pause: pause = False musique.reprendre() else: pause = True musique.pause() # Affichage de la pause textePause = fontPause.render("Pause", 1, couleurBlanche) position = textePause.get_rect() position.center = fenetre.get_rect().center fenetre.blit(textePause, position) pygame.display.flip() # Teste si la touche est une fleche toucheFleche = (K_UP, K_RIGHT, K_DOWN, K_LEFT) if event.key in toucheFleche and pause == False: # Teste si le changement c'est bien effectue if serpent.changerDirection(table[event.key]): serpent.miseAJour(fruit) compteur = 0 # L'appui sur une touche fleche change la direction du serpent et # lance automatique une mise a jour if pause == False: # On ajoute le temps ecoule depuis la derniere mise jour a un compteur # On met a jour le serpent si compteur > delaisMiseAJour # On selectionne delaisMiseAJour selon la vitesse du serpent # Plus delaisMiseAJour est grand plus le serpent sera lent delaisMiseAJour = [175, 100, 75, 50][sauvegarde.vitesse] compteur += clock.tick() if compteur >= delaisMiseAJour: serpent.miseAJour(fruit) compteur = 0 # Si le serpent rencontre un bord du niveau ou se rentre dedans, on quitte if serpent.testCollision(): musique.stop() break # On efface l'ecran fenetre.fill(couleurBlanche) # On affiche le fond for i in range(tailleBord, sauvegarde.largeur + tailleBord): for j in range(tailleBord, sauvegarde.hauteur + tailleBord): fenetre.blit(fond, (i * tailleCase, j * tailleCase)) # Affichage du fruit fruit.afficher(fenetre) # Affichage des serpents serpent.afficher(fenetre) # Mise a jour des scores scoreActuel = len(serpent.positionsCorps) - 1 if scoreActuel > sauvegarde.score: sauvegarde.score = scoreActuel dump(sauvegarde, file("sauvegarde", "wb")) # Affichage des scores fenetre.blit(fontScore.render("Score : " + str(scoreActuel), 1, couleurNoire), (0, 0)) fenetre.blit(fontScore.render("Meilleur score : " + str(sauvegarde.score), 1, couleurNoire), (0, 16)) # On actualise l'ecran pygame.display.flip() # Moteur de la musique pour un potentiel changement de piste if sauvegarde.jouerMusique == "On": musique.moteurMusique(len(serpent.positionsCorps), sauvegarde.largeur, sauvegarde.hauteur) # Affichage de l'ecran de GameOver fenetre.fill(couleurBlanche) gameOver = fontGameOver.render("Game Over !", 1, couleurRouge) fen = fenetre.get_rect() position = gameOver.get_rect() position.center = fen.center fenetre.blit(gameOver, position) score = fontScore.render("Votre score : " + str(scoreActuel), 1, couleurNoire) position = score.get_rect() position.centerx = fen.centerx position.centery = fen.height * 0.75 fenetre.blit(score, position) pygame.display.flip() #joue la musique de game over sound = pygame.mixer.Sound(FILENAME_SOUND1) sound.set_volume(1.0) sound.play() # On fait une pause de 2s sleep(2) # On efface les evenements produits durant l'attente pygame.event.clear()
def run(self): Audio.playMusic('Rogue Legacy - Castle', -1) self.majPerso() self.mainloop() Sauvegarde.sauvegarder(__main__.savePath)