survivor.py

Created by fixem

Created on May 06, 2025

7.29 KB

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

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.