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()