Browse Source

Mise à jour de 'app.py'

master
Treacky 1 month ago
parent
commit
09575a4232
  1. 165
      app.py

165
app.py

@ -1,110 +1,109 @@
import pyxel import pyxel
import random import random
# Configuration de base du jeu # Paramètres du jeu
SCREEN_WIDTH = 128 SCREEN_WIDTH = 128
SCREEN_HEIGHT = 128 SCREEN_HEIGHT = 128
GRAVITY = 0.7 BIRD_SIZE = 8
JUMP_STRENGTH = -4
PIPE_WIDTH = 16 PIPE_WIDTH = 16
PIPE_GAP = 60 PIPE_GAP = 50 # Modifié de 30 à 50
BIRD_WIDTH = 8 BIRD_GRAVITY = 0.4 # Modifié de 0.5 à 0.4
BIRD_HEIGHT = 8 BIRD_LIFT = -4 # Modifié de -6 à -4
PIPE_SPEED = 1
PIPE_FREQ = 60
class FlappyBird: class FlappyBirdGame:
def __init__(self): def __init__(self):
pyxel.init(SCREEN_WIDTH, SCREEN_HEIGHT, title="Flappy Bird") pyxel.init(SCREEN_WIDTH, SCREEN_HEIGHT)
pyxel.load("assets.pyxres") # Assurez-vous d'avoir des images dans ce fichier pyxel.load("flappybird.pyxres") # Charger les ressources depuis le fichier .pyxres
self.bird_x = SCREEN_WIDTH // 4
self.bird_y = SCREEN_HEIGHT // 2 self.bird_y = SCREEN_HEIGHT // 2
self.velocity = 0 self.bird_velocity = 0
self.score = 0
self.pipes = [] self.pipes = []
self.frame = 0
self.score = 0
self.game_over = False self.game_over = False
self.game_started = False # Ajout de l'état de début du jeu
self.passed_pipes = [] # Suivi des tuyaux déjà passés
pyxel.run(self.update, self.draw) pyxel.run(self.update, self.draw)
def update(self): def update(self):
if self.game_over: if self.game_over:
return return
# Mécanisme de saut self.frame += 1
if pyxel.btnp(pyxel.KEY_SPACE):
self.velocity = JUMP_STRENGTH # Si le jeu n'a pas commencé, on attend que l'utilisateur appuie sur espace
if not self.game_started:
# Appliquer la gravité if pyxel.btnp(pyxel.KEY_SPACE):
self.velocity += GRAVITY self.game_started = True # Le jeu commence dès qu'on appuie sur espace
self.bird_y += self.velocity self.bird_velocity = BIRD_LIFT # On applique un premier saut
# Limiter l'oiseau aux bords de l'écran # Si le jeu a commencé, on gère la logique normale
if self.bird_y > SCREEN_HEIGHT - BIRD_HEIGHT: if self.game_started:
self.bird_y = SCREEN_HEIGHT - BIRD_HEIGHT # Saut du joueur
self.velocity = 0 if pyxel.btnp(pyxel.KEY_SPACE):
self.bird_velocity = BIRD_LIFT
if self.bird_y < 0:
self.bird_y = 0 # Mise à jour de la position de l'oiseau
self.velocity = 0 self.bird_velocity += BIRD_GRAVITY
self.bird_y += self.bird_velocity
# Déplacer les tuyaux
self.move_pipes() # Limiter l'oiseau aux bords de l'écran
if self.bird_y < 0:
# Vérification des collisions self.bird_y = 0
self.check_collisions() if self.bird_y > SCREEN_HEIGHT - BIRD_SIZE:
self.bird_y = SCREEN_HEIGHT - BIRD_SIZE
def move_pipes(self): self.game_over = True
if len(self.pipes) == 0 or self.pipes[-1][0] < SCREEN_WIDTH - 60:
self.create_pipe() # Création des tuyaux
if self.frame % PIPE_FREQ == 0:
# Déplacer les tuyaux vers la gauche pipe_height = random.randint(20, SCREEN_HEIGHT - PIPE_GAP - 20)
for pipe in self.pipes: self.pipes.append([SCREEN_WIDTH, pipe_height])
pipe[0] -= 1
# Mise à jour de la position des tuyaux
# Supprimer les tuyaux qui sont hors écran for pipe in self.pipes:
self.pipes = [pipe for pipe in self.pipes if pipe[0] > -PIPE_WIDTH] pipe[0] -= PIPE_SPEED
# Vérifier si un tuyau a traversé l'écran # Vérification des collisions
for pipe in self.pipes: for pipe in self.pipes:
if pipe[0] == SCREEN_WIDTH // 2 and not pipe[2]: # Si l'oiseau touche un tuyau, le jeu est terminé
self.score += 1 if self.bird_x + BIRD_SIZE > pipe[0] and self.bird_x < pipe[0] + PIPE_WIDTH:
pipe[2] = True if self.bird_y < pipe[1] or self.bird_y + BIRD_SIZE > pipe[1] + PIPE_GAP:
self.game_over = True
def create_pipe(self):
gap_y = random.randint(30, SCREEN_HEIGHT - 30 - PIPE_GAP) # Retirer les tuyaux hors de l'écran
self.pipes.append([SCREEN_WIDTH, gap_y, False]) # (x, y, passed) self.pipes = [pipe for pipe in self.pipes if pipe[0] + PIPE_WIDTH > 0]
def check_collisions(self): # Mise à jour du score
# Collision avec le sol ou le plafond for pipe in self.pipes:
if self.bird_y > SCREEN_HEIGHT - BIRD_HEIGHT or self.bird_y < 0: # Vérifier si l'oiseau a traversé le tuyau
self.game_over = True if pipe[0] + PIPE_WIDTH < self.bird_x and pipe not in self.passed_pipes:
self.score += 1
# Collision avec les tuyaux self.passed_pipes.append(pipe) # Marquer le tuyau comme "passé"
for pipe in self.pipes:
# Vérifier la collision avec la partie haute des tuyaux
if pipe[0] < BIRD_WIDTH and pipe[0] + PIPE_WIDTH > 0:
if self.bird_y < pipe[1]: # Si l'oiseau touche le haut du tuyau
self.game_over = True
# Vérifier la collision avec la partie basse des tuyaux
if pipe[0] < BIRD_WIDTH and pipe[0] + PIPE_WIDTH > 0:
if self.bird_y + BIRD_HEIGHT > pipe[1] + PIPE_GAP: # Si l'oiseau touche le bas du tuyau
self.game_over = True
def draw(self): def draw(self):
pyxel.cls(0) pyxel.cls(0) # Effacer l'écran
if self.game_over: # Dessiner l'oiseau en utilisant l'image du sprite dans le fichier .pyxres
pyxel.text(SCREEN_WIDTH // 2 - 24, SCREEN_HEIGHT // 2, "GAME OVER", pyxel.COLOR_RED) pyxel.blt(self.bird_x, self.bird_y, 0, 0, 0, 8, 8, 0) # Le 0,0 ici représente la position du sprite dans le fichier pyxres
pyxel.text(SCREEN_WIDTH // 2 - 24, SCREEN_HEIGHT // 2 + 10, f"Score: {self.score}", pyxel.COLOR_WHITE)
return
# Dessiner l'oiseau
pyxel.rect(32, self.bird_y, BIRD_WIDTH, BIRD_HEIGHT, pyxel.COLOR_YELLOW)
# Dessiner les tuyaux # Dessiner les tuyaux
for pipe in self.pipes: for pipe in self.pipes:
pyxel.rect(pipe[0], 0, PIPE_WIDTH, pipe[1], pyxel.COLOR_GREEN) # Partie haute du tuyau pyxel.rect(pipe[0], 0, PIPE_WIDTH, pipe[1], 11) # Tuyau du dessus
pyxel.rect(pipe[0], pipe[1] + PIPE_GAP, PIPE_WIDTH, SCREEN_HEIGHT - (pipe[1] + PIPE_GAP), pyxel.COLOR_GREEN) # Partie basse du tuyau pyxel.rect(pipe[0], pipe[1] + PIPE_GAP, PIPE_WIDTH, SCREEN_HEIGHT - pipe[1] - PIPE_GAP, 11) # Tuyau du dessous
# Afficher le score # Afficher le score
pyxel.text(5, 5, f"Score: {self.score}", pyxel.COLOR_WHITE) pyxel.text(10, 10, f"Score: {self.score}", 7)
# Si le jeu est terminé
if self.game_over:
pyxel.text(SCREEN_WIDTH // 2 - 30, SCREEN_HEIGHT // 2, "GAME OVER", 8)
pyxel.text(SCREEN_WIDTH // 2 - 30, SCREEN_HEIGHT // 2 + 10, f"Score: {self.score}", 7)
# Si le jeu n'a pas encore commencé, afficher un message d'attente
if not self.game_started:
pyxel.text(SCREEN_WIDTH // 2 - 50, SCREEN_HEIGHT // 2, "Press SPACE to Start", 8) # Afficher le texte sans centrage automatique
if __name__ == "__main__": if __name__ == "__main__":
FlappyBird() FlappyBirdGame()

Loading…
Cancel
Save