import pyxel, random
class App:
def __init__(self):
# taille de la fenetre 128x128 pixels
# ne pas modifier
pyxel.init(128, 128, title="Nuit du c0de 2022")
self.x = 0
self.y = 113
# position initiale de sperman
# (origine des positions : coin haut gauche)
self.superman_x = 60
self.superman_y = 60
# initialisation des tirs
self.tirs_liste = []
# initialisation des ennemis
self.ennemis_liste = []
# vies
self.vies = 3
#points
self.points = 0
pyxel.run(self.update, self.draw)
def superman_deplacement(self):
"""déplacement avec les touches de directions"""
if pyxel.btn(pyxel.KEY_RIGHT) and self.superman_x<120:
self.superman_x += 1
if pyxel.btn(pyxel.KEY_LEFT) and self.superman_x>0:
self.superman_x += -1
if pyxel.btn(pyxel.KEY_DOWN) and self.superman_y<120:
self.superman_y += 1
if pyxel.btn(pyxel.KEY_UP) and self.superman_y>0:
self.superman_y += -1
def tirs(self):
"""tir avec la barre d'espace"""
if pyxel.btnr(pyxel.KEY_SPACE):
self.tirs_liste.append([self.superman_x+4, self.superman_y-4])
def deplacement_de_tirs(self):
"""déplacement des tirs vers le haut"""
for tir in self.tirs_liste:
tir[1] -= 1
if tir[1]<-8:
self.tirs_liste.remove(tir)
def ennemis(self):
"""création aléatoire des ennemis"""
# un ennemi par seconde
if (pyxel.frame_count % 50 == 0):
self.ennemis_liste.append([random.randint(0, 120), 0])
def deplacement_des_ennemis(self):
"""déplacement des ennemis vers le haut et suppression s'ils sortent du cadre"""
for ennemi in self.ennemis_liste:
ennemi[1] += 1
if ennemi[1]>128:
self.ennemis_liste.remove(ennemi)
def terre_suppression(self):
"""disparition de la Terre si contact avec un ennemi"""
for ennemi in self.ennemis_liste:
if ennemi[0] <= self.x+13 and ennemi[1] <= self.y+13 and ennemi[0]+6 >= self.x and ennemi[1]+6 >= self.y:
self.ennemis_liste.remove(ennemi)
self.vies = self.vies - 1
def ennemis_suppression_avec_tir(self):
"""disparition d'un ennemi et d'un tir si contact"""
for ennemi in self.ennemis_liste:
for tir in self.tirs_liste:
if ennemi[0] <= tir[0]+1 and ennemi[0]+8 >= tir[0] and ennemi[1]+8 >= tir[1]:
self.ennemis_liste.remove(ennemi)
self.tirs_liste.remove(tir)
self.points +=1
def ennemis_suppression_avec_contactS(self):
"""disparition d'un ennemi avec contact"""
for ennemi in self.ennemis_liste:
if ennemi[0] <= self.superman_x+7 and ennemi[1] <= self.superman_y+7 and ennemi[0]+7 >= self.superman_x and ennemi[1]+7 >= self.superman_y:
self.ennemis_liste.remove(ennemi)
self.points +=2
# =====================================================
# == UPDATE
# =====================================================
def update(self):
self.x = (self.x - 0.5) % pyxel.width
# deplacement de superman
self.superman_deplacement()
# creation des tirs
self.tirs()
# mise a jour des positions des tirs
self.deplacement_de_tirs()
# creation des ennemis
self.ennemis()
# mise a jour des positions des ennemis
self.deplacement_des_ennemis()
# suppression des ennemis et tirs si contact
self.ennemis_suppression_avec_tir()
# suppression du vaisseau et ennemi si contact
self.ennemis_suppression_avec_contactS()
# suppression du vaisseau et ennemi si contact
self.terre_suppression()
# =====================================================
# == DRAW
# =====================================================
def draw(self):
# vide la fenetre
pyxel.cls(0)
# si le vaisseau possede des vies le jeu continue
if self.vies > 0:
# affichage des vies
pyxel.text(5,5, 'VIES:'+ str(self.vies), 7)
#affichage des points
pyxel.text(5,15, 'POINTS:'+ str(self.points), 7)
#Terre
pyxel.rect(self.x, self.y, 15, 15, 3)
#Superman
pyxel.rect(self.superman_x, self.superman_y, 8, 8, 1)
# tirs
for tir in self.tirs_liste:
pyxel.rect(tir[0], tir[1], 1, 4, 10)
# ennemis
for ennemi in self.ennemis_liste:
pyxel.rect(ennemi[0], ennemi[1], 8, 8, 8)
# sinon: GAME OVER
else:
pyxel.text(50,64, 'GAME OVER', 7)
def lanceApp():
mafenetre.destroy()
App()
mafenetre = Tk ()
mafenetre.title('SAVE THE EARTH')
mafenetre.geometry('1100x600')
mafenetre ['bg'] = 'black'
labell = Label(mafenetre,text='2063...En Plein été...Tout semble bien se dérouler sur Terre...Tout...??? \n Les terriens ne se doutent de rien mais une grande pluie de météorite se dirige droit sur notre Terre !!! \n Notre monde est...Sans espoir. NE PARLONS PAS TROP VITE !!!Superman arrive, pour tous nous sauver !', fg = 'white',bg ='black')
labell['font']= ('Arial', 16,'bold')
label2 = Label (mafenetre,text="Deplacez et aidez Superman à l'aide des flèches du clavier pour tenter de \n sauver la Terre! Pour cela, appuyez sur espace pour tirer des lasers de ses yeux ou foncez sur les météorites \n pour les détruire afin de sauver notre monde ! \n L'avenir de la Terre est entre tes mains désormais...", fg = 'white',bg ='black')
label2['font']= ('Times', '16', 'bold italic')
label3 = Label(mafenetre,text='SAVE THE EARTH', fg="blue",bg="black")
label3['font']= ('Arial', 30,'bold')
labell.place(x=0, y=50)
label2.place(x=50,y=200)
label3.place(x=350,y=500)
bouton1 = Button (mafenetre, text='START', width=20,height=4, command=lanceApp ,bg = "gray",fg = "purple")
bouton1.place(x=200,y=400)
bouton2 = Button (mafenetre, text='QUITTER', command=mafenetre.destroy, width=20,height=4,bg = "gray",fg = "purple")
bouton2.place(x=800,y=400)
mafenetre.mainloop()