Nécessite le module “color”: https://my.numworks.com/python/fixem/color/
from random import* from color import* from time import* from ion import* from math import* from kandinsky2 import* S=[1,1,1,0,1,1,0,1,0,1,1,0,1,1,1] U=[1,1,1,1,1,0,0,0,0,1,1,1,1,1,1] R=[1,1,1,1,1,1,0,1,1,0,1,1,1,0,1] V=[1,1,1,1,0,0,0,0,0,1,1,1,1,1,0] I=[1,0,0,0,1,1,1,1,1,1,1,0,0,0,1] O=[1,1,1,1,1,1,0,0,0,1,1,1,1,1,1] def drawLetter(l,x,y,t): u=0 for o in l: for i in range(3): for j in range(5): if o[i*5+j]==1: fill_rect(x+t*i+t*4*u,y+t*j,t,t,GrisArdoise) sleep(0.02) u+=1 def Menu(): for i in range(222): fill_rect(0,i,320,1,(i,)*3) sleep(0.001) Menu() sleep(0.1) drawLetter((S,U,R,V,I,V,O,R),85,90,5) sleep(1) for i in range(320): fill_rect(i,0,1,222,Blanc) sleep(0.001) vie=100 x=100 y=100 mort=0 dash_delay=0 a=monotonic() arme=0 atk_delay=0 ennemis=[] liste_tirs=[] couleur_arme=[GrisFonce,BleuMarine,Noir,JauneMoutarde,Violet,Blanc] armes=["Desert Eagle","Mp5k","Hecate II","Minigun","Prototype",""] degat_arme=[10,4,50,3,20,0] delai_arme=[0.4,0.1,0.7,0.1,0.01,500] bonus=[] def MonstreLePlusProche(xa,ya,ennemis): inde=0 distance=999 for i in ennemis: if i.alive==True: xb=i.x yb=i.y d=sqrt((xa-xb)**2+(ya-yb)**2) if d<distance: distance=d inde=i.nom return inde,distance class Bonus: def __init__(self,x1,y1,genre): effet=[2,4,10,5] self.x=x1 self.y=y1 self.effet=effet[genre] self.delai=monotonic() def verifier(self,x,y): global vie if self.effet>0: fill_rect(self.x,self.y,3,3,Vert) if self.x>=x and self.x<=x+5 and self.y>=y and self.y<=y+5: vie+=self.effet self.effet=0 fill_rect(self.x,self.y,3,3,Blanc) if vie>100: vie=100 class Cube: def __init__(self,nom): couleur=[Bleu,Orange,VertForet,GrisClair] genre=["rapide","normal","lourd","explosif"] taille=[5,10,20,10] pv=[10,35,100,20] attaque=[1,2,5,2] delai_attaque=[0.3,1,1.5,1] vitesse=[4,2,1,3] self.zombie=randint(0,3) self.delai_attaque=delai_attaque[self.zombie] self.genre=genre[self.zombie] self.nom=nom self.taille=taille[self.zombie] self.vie=pv[self.zombie] self.maxvie=self.vie self.alive=True self.atk=attaque[self.zombie] self.vitesse=vitesse[self.zombie] while 1: self.x=randint(40,300) self.y=randint(40,200) if self.x<=x+self.taille and self.x>=x-self.taille and self.y<=y+self.taille and self.y>=self.taille: continue break self.couleur_originale=couleur[self.zombie] self.couleur=self.couleur_originale self.delay=monotonic() def move(self,x,y): global vie,mort,atk,ran,arme,dega,bonus if self.vie>0: if self.x<=x+5 and self.x>=x-self.taille and self.y<=y+5 and self.y>=y-self.taille and monotonic()-self.delay>=self.delai_attaque: fill_rect(0,0,320,5,Rouge) fill_rect(0,0,5,222,Rouge) fill_rect(320,222,-320,-5,Rouge) fill_rect(320,222,-5,-222,Rouge) vie-=self.atk sleep(0.04) self.delay=monotonic() fill_rect(10,10,30,20,Blanc) fill_rect(0,0,320,5,Blanc) fill_rect(0,0,5,222,Blanc) fill_rect(320,222,-320,-5,Blanc) fill_rect(320,222,-5,-222,Blanc) else: fill_rect(self.x,self.y,self.taille,self.taille,Blanc) fill_rect(self.x-int(self.maxvie/4),self.y-2,self.maxvie,1,Blanc) if self.x+int(self.taille/2)>x: self.x-=self.vitesse elif self.x+int(self.taille/2)<x: self.x+=self.vitesse if self.y+int(self.taille/2)>y: self.y-=self.vitesse elif self.y+int(self.taille/2)<y: self.y+=self.vitesse if self.alive and self.vie>0: fill_rect(self.x,self.y,self.taille,self.taille,self.couleur) if self.vie!=self.maxvie: fill_rect(self.x-int(self.maxvie/4),self.y-2,self.vie,1,Vert) elif self.alive: if self.zombie==3: fill_rect(self.x-10,self.y-10,20,20,OrangeAbricot) if self.x-10<=x and self.x+20>=x and self.y-10<=y and self.y+20>=y: vie-=10 fill_rect(0,0,320,5,Rouge) fill_rect(0,0,5,222,Rouge) fill_rect(320,222,-320,-5,Rouge) fill_rect(320,222,-5,-222,Rouge) sleep(0.04) fill_rect(0,0,320,5,Blanc) fill_rect(0,0,5,222,Blanc) fill_rect(320,222,-320,-5,Blanc) fill_rect(320,222,-5,-222,Blanc) fill_rect(self.x-10,self.y-10,20,20,Blanc) mort+=1 self.alive=False fill_rect(self.x,self.y,self.taille,self.taille,Blanc) fill_rect(self.x-int(self.maxvie/4),self.y-2,self.maxvie,3,Blanc) if hardmode==False: bonus.append(Bonus(self.x+1,self.y+1,self.zombie)) self.couleur=self.couleur_originale for i in range(5): ennemis.append(Cube(i)) hardmode=int(input("Hard-Mode?(0->non 1->oui)\n-->")) arme=int(input("Arme\n-->")) vague=0 # Game Loop while 1: if arme!=4: sleep(0.01) draw_string(" "*20,5,30) draw_string(str(armes[arme]),5,30,couleur_arme[arme]) for i in bonus: i.verifier(x,y) fill_rect(vie+5,10,100-vie,5,Rouge) fill_rect(5,10,vie,5,VertEmeraude) draw_string(" "*7,110,5) draw_string(str(vie)+"/100",110,5,VertEmeraude,VertEpinard) draw_string(" "*8,190,5) draw_string("Vague "+str(vague),190,5) if len(ennemis)-mort==0: for i in bonus: fill_rect(i.x,i.y,3,3,Blanc) bonus.clear() ennemis.clear() vague+=1 if hardmode==False: vie+=25 if vie>100: vie=100 t=mort if vague%2==0: t=mort+1 for i in range(t): ennemis.append(Cube(i)) mort=0 direx="" direy="" if vie<=0: draw_string("GAME OVER",115,50,Rouge,Noir) break fill_rect(x,y,5,5,Noir) set_pixel(x+2,y+2,Blanc) for i in ennemis: i.move(x,y) if keydown(0) and x>44: fill_rect(x,y,5,5,Blanc) x-=4;direx=2 fill_rect(x,y,5,5,Noir) set_pixel(x+2,y+2,Blanc) if keydown(3)and x<296: fill_rect(x,y,5,5,Blanc) x+=4;direx=1 fill_rect(x,y,5,5,Noir) set_pixel(x+2,y+2,Blanc) if keydown(1) and y>44: fill_rect(x,y,5,5,Blanc) y-=4;direy=2 fill_rect(x,y,5,5,Noir) set_pixel(x+2,y+2,Blanc) if keydown(2) and y<196: fill_rect(x,y,5,5,Blanc) y+=4;direy=1 fill_rect(x,y,5,5,Noir) set_pixel(x+2,y+2,Blanc) if keydown(4): if monotonic()-dash_delay>2: fill_rect(x,y,5,5,Blanc) if direy==2: y-=16 elif direy==1: y+=16 if direx==1: x+=16 elif direx==2: x-=16 dash_delay=monotonic() if monotonic()-atk_delay>=delai_arme[arme]: a,d=MonstreLePlusProche(x,y,ennemis) mlp=ennemis[a] mlp.couleur=Rouge if arme!=2: mlp.vie-=degat_arme[arme] else: mlp.vie-=int(d/1.5) liste_tirs.append(str(mlp.x)+" "+str(mlp.y)+" "+str(mlp.taille)+" "+str(monotonic())+" "+str(x)+" "+str(y)) for i in liste_tirs: Tx,Ty,Tt,Td,Cx,Cy=i.split() Tx,Ty,Tt,Td,Cx,Cy=int(Tx),int(Ty),int(Tt),float(Td),int(Cx),int(Cy) if monotonic()-Td>0.5: draw_line(Tx+int(Tt/2),Ty+int(Tt/2),Cx+2,Cy+3,Blanc) liste_tirs.remove(i) else: try: draw_line(Tx+int(Tt/2),Ty+int(Tt/2),Cx+2,Cy+3,couleur_arme[arme]) except ZeroDivisionError: liste_tirs.remove(i) atk_delay=monotonic() if keydown(51)and arme<5: arme+=1 if keydown(50)and arme>0: arme-=1