Jeu jetpack joyride en python
leou
-
fluo -
fluo -
Bonjour,
Je souhaite refaire le jeu jetpack joyride en python. Je le fais sur le site pyxel studio. Je ne suis pas très bon en python, mais j'ai réussi à avoir une bonne base sur mon jeu.
Toutefois, je rencontre plusieurs problèmes comme pour faire apparaître des missiles qui arrivent de droite à gauche. Sur mon code je ne trouve aucun problème mais quand je lance, il n'y a aucun missile qui apparaît.
Voici mon code :
import pyxel import random # Initialisation de la fenêtre pyxel.init(128, 128, title="Nuit du c0de") pyxel.load("res.pyxres") # Position initiale du vaisseau vaisseau_x = 30 vaisseau_y = 60 # Variables pour la gravité et le déplacement vertical gravite = 0.55 saut_force = -4.5 vitesse_y = 0 # Position et taille du bloc bloc_x = 128 bloc_y = random.randint(0, 120) bloc_couleur = 9 # Nombre de vies du vaisseau vies = 3 # État du jeu game_over = False # Animation sprite_index = 0 animation_frame_count = 0 # Variables pour la taille et orientation des blocs bloc_largeur = 8 bloc_hauteur = random.randint(32, 64) bloc_orientation = random.choice(["horizontal", "vertical"]) # Carburant carburant_max = 100 carburant = carburant_max carburant_consommation = 1 carburant_recharge = 1 # Pièces pieces = [] # Liste pour stocker les pièces piece_spawn_delay = 30 # Délai entre l'apparition des pièces # Score score = 0 # Missiles missiles = [] # Liste pour stocker les missiles missile_spawn_delay = 60 # Délai entre l'apparition des missiles def vaisseau_deplacement(y, vitesse_y): """Déplacement vertical du vaisseau avec gestion du carburant""" global carburant vitesse_y += gravite if pyxel.btn(pyxel.KEY_UP) and carburant > 0: vitesse_y = saut_force carburant -= carburant_consommation if y >= 112: # Rechargement lorsque le vaisseau est au sol carburant = min(carburant + carburant_recharge, carburant_max) y += vitesse_y if y > 112: y = 112 vitesse_y = 0 if y < 0: y = 0 vitesse_y = 0 return y, vitesse_y def update_animation(): """Met à jour l'animation du vaisseau.""" global sprite_index, animation_frame_count if pyxel.btn(pyxel.KEY_UP) and carburant > 0: # Si le vaisseau monte animation_frame_count += 1 if animation_frame_count % 5 == 0: # Change d'image toutes les 5 frames sprite_index = 4 + (sprite_index % 3) # Nouveaux sprites pour la montée (indices 4, 5 et 6) elif vaisseau_y == 112: # Si le vaisseau est au sol if pyxel.frame_count % 5 == 0: sprite_index = (sprite_index + 1) % 3 # Images normales au sol (indices 0, 1, 2) else: sprite_index = 0 # Image de base sinon def collision_bloc(vaisseau_x, vaisseau_y, bloc_x, bloc_y, bloc_largeur, bloc_hauteur, bloc_orientation): """Vérifie si le vaisseau touche le bloc""" if bloc_orientation == "horizontal": return ( vaisseau_x < bloc_x + bloc_hauteur and vaisseau_x + 16 > bloc_x and vaisseau_y < bloc_y + bloc_largeur and vaisseau_y + 16 > bloc_y ) else: return ( vaisseau_x < bloc_x + bloc_largeur and vaisseau_x + 16 > bloc_x and vaisseau_y < bloc_y + bloc_hauteur and vaisseau_y + 16 > bloc_y ) def spawn_missile(): """Génère un missile à une position aléatoire""" missile_x = 128 # Apparaît à droite de l'écran missile_y = random.randint(0, 120) # Position verticale aléatoire missiles.append((missile_x, missile_y)) def update(): """Mise à jour des variables (30 fois par seconde)""" global vaisseau_y, vitesse_y, bloc_x, bloc_y, vies, game_over, bloc_hauteur, bloc_largeur, bloc_orientation, score, piece_spawn_delay, missile_spawn_delay if game_over: if pyxel.btnp(pyxel.KEY_R): reset_game() return # Déplacement vertical du vaisseau vaisseau_y, vitesse_y = vaisseau_deplacement(vaisseau_y, vitesse_y) update_animation() # Défilement des obstacles bloc_x -= 2 if bloc_x < -bloc_largeur: bloc_x = 128 bloc_y = random.randint(0, 120) bloc_hauteur = random.randint(32, 64) bloc_orientation = random.choice(["horizontal", "vertical"]) # Gestion des collisions avec les obstacles if collision_bloc(vaisseau_x, vaisseau_y, bloc_x, bloc_y, bloc_largeur, bloc_hauteur, bloc_orientation): vies -= 1 if vies <= 0: game_over = True else: bloc_x = 128 bloc_y = random.randint(0, 120) bloc_hauteur = random.randint(32, 64) bloc_orientation = random.choice(["horizontal", "vertical"]) # Générer des missiles missile_spawn_delay -= 1 if missile_spawn_delay <= 0: spawn_missile() missile_spawn_delay = random.randint(30, 60) # Délai aléatoire entre 1 et 2 secondes # Déplacer les missiles et vérifier les collisions for missile in missiles[:]: missile_x, missile_y = missile missile_x -= 4 # Déplacer le missile vers la gauche if missile_x < -8: # Supprimer le missile s'il sort de l'écran missiles.remove(missile) elif collision_missile(vaisseau_x, vaisseau_y, missile_x, missile_y): missiles.remove(missile) vies -= 1 # Perdre une vie en cas de collision if vies <= 0: game_over = True def collision_missile(vaisseau_x, vaisseau_y, missile_x, missile_y): """Vérifie si le vaisseau touche un missile""" return ( vaisseau_x < missile_x + 8 and vaisseau_x + 16 > missile_x and vaisseau_y < missile_y + 8 and vaisseau_y + 16 > missile_y ) def reset_game(): """Réinitialise le jeu pour recommencer""" global vaisseau_y, vitesse_y, bloc_x, bloc_y, vies, game_over, bloc_hauteur, bloc_largeur, bloc_orientation, carburant, pieces, score vaisseau_y = 60 vitesse_y = 0 bloc_x = 128 bloc_y = random.randint(0, 120) vies = 3 game_over = False bloc_largeur = 8 bloc_hauteur = random.randint(32, 64) bloc_orientation = random.choice(["horizontal", "vertical"]) carburant = carburant_max pieces = [] # Réinitialiser la liste des pièces score = 0 # Réinitialiser le score def draw_carburant(): """Dessine uniquement le texte indiquant le carburant en haut à gauche, sous les vies""" pyxel.text(5, 15, f"Carburant: {carburant}%", pyxel.COLOR_WHITE) def update(): """Mise à jour des variables (30 fois par seconde)""" global vaisseau_y, vitesse_y, bloc_x, bloc_y, vies, game_over, bloc_hauteur, bloc_largeur, bloc_orientation, score, piece_spawn_delay if game_over: if pyxel.btnp(pyxel.KEY_R): reset_game() return # Déplacement vertical du vaisseau vaisseau_y, vitesse_y = vaisseau_deplacement(vaisseau_y, vitesse_y) update_animation() # Défilement des obstacles bloc_x -= 2 if bloc_x < -bloc_largeur: bloc_x = 128 bloc_y = random.randint(0, 120) bloc_hauteur = random.randint(32, 64) bloc_orientation = random.choice(["horizontal", "vertical"]) # Gestion des collisions avec les obstacles if collision_bloc(vaisseau_x, vaisseau_y, bloc_x, bloc_y, bloc_largeur, bloc_hauteur, bloc_orientation): vies -= 1 if vies <= 0: game_over = True else: bloc_x = 128 bloc_y = random.randint(0, 120) bloc_hauteur = random.randint(32, 64) bloc_orientation = random.choice(["horizontal", "vertical"]) def draw(): """Dessine les éléments du jeu""" pyxel.cls(0) if game_over: pyxel.text(40, 60, "GAME OVER", pyxel.COLOR_RED) pyxel.text(20, 80, "Appuyez sur R pour rejouer", pyxel.COLOR_WHITE) else: # Dessiner l'arrière-plan pyxel.rect(0, 0, 128, 128, 3) # Dessiner le vaisseau u = sprite_index * 16 pyxel.blt(vaisseau_x, vaisseau_y, 0, u, 0, 16, 16, 0) # Dessiner les obstacles if bloc_orientation == "horizontal": pyxel.rect(bloc_x, bloc_y, bloc_hauteur, bloc_largeur, bloc_couleur) else: pyxel.rect(bloc_x, bloc_y, bloc_largeur, bloc_hauteur, bloc_couleur) # Dessiner les missiles for missile_x, missile_y in missiles: pyxel.blt(missile_x, missile_y, 0, 0, 32, 16, 16, 0) # Assure-toi que la texture du missile est correctement positionnée # Dessiner le HUD pyxel.text(5, 5, f"Vies: {vies}", pyxel.COLOR_WHITE) pyxel.text(100, 5, f"Score: {score}", pyxel.COLOR_WHITE) draw_carburant() pyxel.text(5, 5, f"Vies: {vies}", pyxel.COLOR_WHITE) pyxel.text(100, 5, f"Score: {score}", pyxel.COLOR_WHITE) draw_carburant() pyxel.run(update, draw)
A voir également:
- Jeu jetpack joyride en python
- Citizen code python avis - Accueil - Outils
- 94 jeu - Télécharger - Puzzle & Réflexion
- 94 degrés jeu - Télécharger - Divers Jeux
- Jeu zuma - Télécharger - Jeux vidéo
- Logo jeu - Télécharger - Jeux vidéo