EmixWarrior64
-
Modifié le 27 janv. 2023 à 17:47
EmixWarrior64 -
25 janv. 2023 à 21:09
Bonsoir,
Je suis en train de coder un programme sauf que je suis actuellement bloqué. Le programme est en pyxel est je suis bloqué sur une toute dernière partie dont je n'arrive pas à trouver la solution (voir def vitesse_ennemis(): ) ce qui m'agace fortement, c'est sur la gestion de la difficulté (soit ici la vitesse des ennemis, toutes les 10 secondes, je veux que l'ennemi soit un peu plus rapide). Si quelqu'un pourrait m'aider SVP c'est pour un projet en NSI que j'essai de faire.
Petite précision : je n'arrive aussi pas à afficher le score lorsque je perds une vie (voir programme à la fin), si quelqu'un pourrait aussi m'aider si possible car franchement je n'y arrive pas du tout....
Voici le programme:
# ******************************************************************************
# ******* Projet : jeu où les ennemis deviennent de plus en plus rapide *******
# ******************************************************************************
import pyxel, random
# taille de la fenetre 128x128 pixels - ne pas modifier
pyxel.init(128, 128, title="Nuit du code")
# position initiale du vaisseau
# (origine des positions : coin haut gauche)
vaisseau_x = 60
vaisseau_y = 60
# vies
vies = 1
# initialisation des ennemis
ennemis_liste = []
# initialisation du score
score = 0
def vaisseau_deplacement(x, y):
"""déplacement avec les touches de directions"""
if pyxel.btn(pyxel.KEY_RIGHT):
if (x < 120) :
x = x + 1.5
if pyxel.btn(pyxel.KEY_LEFT):
if (x > 0) :
x = x - 1.5
if pyxel.btn(pyxel.KEY_DOWN):
if (y < 120) :
y = y + 1.5
if pyxel.btn(pyxel.KEY_UP):
if (y > 0) :
y = y - 1.5
return x, y
def ennemis_creation(ennemis_liste):
"""création aléatoire des ennemis"""
# un ennemi par seconde
if (pyxel.frame_count % 30 == 0):
ennemis_liste.append([random.randint(0, 120), 0])
return ennemis_liste
def ennemis_deplacement(ennemis_liste):
"""déplacement des ennemis vers le haut et suppression s'ils sortent du cadre"""
for ennemi in ennemis_liste:
ennemi[1] += 1
if ennemi[1]>128:
ennemis_liste.remove(ennemi)
return ennemis_liste
def vaisseau_suppression(vies):
"""disparition du vaisseau et d'un ennemi si contact"""
for ennemi in ennemis_liste:
if ennemi[0] <= vaisseau_x+6 and ennemi[1] <= vaisseau_y+6 and ennemi[0]+6 >= vaisseau_x and ennemi[1]+6 >= vaisseau_y:
ennemis_liste.remove(ennemi)
vies = 0
return vies
def vitesse_ennemis(ennemis_liste):
for ennemi in ennemis_liste:
ennemi[1] += 1
if (pyxel.frame_count % 30 == 0):
ennemi[1] + 1
# ==========================================================
# ========= Mise à jour de toutes les informations =========
# ==========================================================
def update():
"""mise à jour des variables (30 fois par seconde)"""
global vaisseau_x, vaisseau_y, ennemis_liste, vies
# mise à jour de la position du vaisseau
vaisseau_x, vaisseau_y = vaisseau_deplacement(vaisseau_x, vaisseau_y)
# creation des ennemis
ennemis_liste = ennemis_creation(ennemis_liste)
# mise a jour des positions des ennemis
ennemis_liste = ennemis_deplacement(ennemis_liste)
# suppression du vaisseau et ennemi si contact
vies = vaisseau_suppression(vies)
# ==========================================================
# ========================== DRAW ==========================
# ==========================================================
def draw():
"""création des objets (30 fois par seconde)"""
pyxel.cls(0)
# si le vaisseau possede des vies le jeu continue
if vies > 0:
# vaisseau (carre 8x8)
pyxel.rect(vaisseau_x, vaisseau_y, 8, 8, 1)
# ennemis
for ennemi in ennemis_liste:
pyxel.rect(ennemi[0], ennemi[1], 6, 6, 4)
# sinon: GAME OVER
else:
pyxel.text(49,49, 'GAME OVER', 7)
pyxel.text(20,60, 'Ton score est de :', 7)
#pyxel.text(30,60, score, 7)
print("Ton score est de :", score)
pyxel.run(update, draw)
xHaMaz
Messages postés108Date d'inscriptionmardi 3 janvier 2023StatutMembreDernière intervention23 avril 202315 Modifié le 27 janv. 2023 à 17:47
Bonsoir, pour augmenter la vitesse des ennemis toutes les 10 secondes tu peux utiliser un compteur de frames qui vérifie si le nombre de frames est divisible par un certain nombre. Tu peux utiliser cette vérification dans ta fonction "vitesse_ennemis" pour augmenter la vitesse de chaque ennemi dans ta liste, ça ferait :
def vitesse_ennemis(ennemis_liste):
# Augmentez la vitesse de chaque ennemi toutes les 10 secondes (300 frames)
if pyxel.frame_count % 300 == 0:
for ennemi in ennemis_liste:
ennemi[1] += 1
Et pour afficher le score quand tu perds une vie, tu peux utiliser la fonction "pyxel.text" dans la fonction "draw". Elle permer d'afficher du texte à l'écran. Ca ferait :
def draw():
"""affichage de tous les éléments"""
global vies, score
# effacer l'écran
pyxel.cls(0)
# affichage du vaisseau
pyxel.blt(vaisseau_x, vaisseau_y, 0, 0, 0, 7, 7)
# affichage des ennemis
for ennemi in ennemis_liste:
pyxel.blt(ennemi[0], ennemi[1], 0, 7, 0, 7, 7)
# affichage du score
pyxel.text(0, 0, "Score: " + str(score), 7)
# affichage du nombre de vies restantes
pyxel.text(80, 0, "Vies: " + str(vies), 7)
# affichage du score lorsque vous perdez une vie
if vies == 0:
pyxel.text(40, 40, "Game Over", 7)
pyxel.text(40, 50, "Score: " + str(score), 7)
25 janv. 2023 à 21:09
Merci mec je viens à peine de voir, je viens de test ça a marché!!!!!!!!