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
- 94 jeu - Télécharger - Puzzle & Réflexion
- 94 degrés jeu - Télécharger - Divers Jeux
- Citizen code python - Accueil - Outils
- Jeu zuma - Télécharger - Jeux vidéo
- Jeu google - Guide