Besoin d'aide : codage programme python pyxel

Résolu/Fermé
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)

1 réponse

xHaMaz Messages postés 108 Date d'inscription mardi 3 janvier 2023 Statut Membre Dernière intervention 23 avril 2023 14
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)

Tiens moi au courant

1
EmixWarrior64
25 janv. 2023 à 21:09

Merci mec je viens à peine de voir, je viens de test ça a marché!!!!!!!!

0