Necesito ayuda: codificación de programa en Python Pyxel
Resuelto
EmixWarrior64
-
EmixWarrior64 -
EmixWarrior64 -
Buenas noches,
Estoy escribiendo un programa pero estoy atascado. El programa está en Pyxel y me quedé atascado en una última parte (ver def vitesse_ennemis()) lo que me fastidia es la gestión de la dificultad (aquí la velocidad de los enemigos, cada 10 segundos quiero que el enemigo sea un poco más rápido). Si alguien pudiera ayudarme, por favor, es para un proyecto NSI que estoy intentando hacer.
Una precisión pequeña: tampoco logro mostrar la puntuación cuando pierdo una vida (ver el programa al final), si alguien pudiera ayudarme también porque franchement no lo consigo...
Aquí está el programa:
# ******************************************************************************
# ******* Proyecto : juego donde los enemigos se vuelven cada vez más rápidos *******
# ******************************************************************************
import pyxel, random
# tamaño de la ventana
128x128 pixeles - no modificar
pyxel.init(128, 128, title="Nuit du code")
# posición inicial del buque
# (origen de las posiciones : esquina superior izquierda)
vaisseau_x = 60
vaisseau_y = 60
# vidas
vies = 1
# inicialización de los enemigos
ennemis_liste = []
# inicialización de la puntuación
score = 0
def vaisseau_deplacement(x, y):
"""desplazamiento con las teclas de dirección"""
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 respuesta
-
Buenas noches, para aumentar la velocidad de los enemigos cada 10 segundos puedes usar un contador de frames que verifique si el número de frames es múltiplo de un cierto número. Puedes usar esa verificación en tu función "vitesse_ennemis" para aumentar la velocidad de cada enemigo en tu lista, quedaría así:
def vitesse_ennemis(ennemis_liste): # Aumenta la velocidad de cada enemigo cada 10 segundos (300 frames) if pyxel.frame_count % 300 == 0: for ennemi in ennemis_liste: ennemi[1] += 1
Y para mostrar la puntuación cuando pierdes una vida, puedes usar la función "pyxel.text" en la función "draw". Esto permite mostrar texto en la pantalla. Quedaría así:
def draw(): """affichage de tous les éléments""" global vies, score # borrar la pantalla pyxel.cls(0) # mostrar la nave pyxel.blt(vaisseau_x, vaisseau_y, 0, 0, 0, 7, 7) # mostrar los enemigos for ennemi in ennemis_liste: pyxel.blt(ennemi[0], ennemi[1], 0, 7, 0, 7, 7) # mostrar la puntuación pyxel.text(0, 0, "Score: " + str(score), 7) # mostrar las vidas restantes pyxel.text(80, 0, "Vies: " + str(vies), 7) # mostrar la puntuación cuando pierdas una vida if vies == 0: pyxel.text(40, 40, "Game Over", 7) pyxel.text(40, 50, "Score: " + str(score), 7)
Manténme informado