plateformer.py

Created by dkfe123

Created on April 14, 2025

10.8 KB

C’est un jeu de plateforme classique. 14 niveaux et d’autres à venir. Flèches pour se déplacer, flèche haut ou OK pour sauter. Parenthèse gauche pour inverser la gravité dans le niveau 10.


from math import *
from kandinsky import *
from ion import *
from time import *
su=monotonic()
nm,ns,b,gr=0,0,0,1
k=[KEY_ONE,KEY_TWO,KEY_THREE,KEY_FOUR,KEY_FIVE,KEY_SIX,KEY_SEVEN,KEY_EIGHT,KEY_NINE,KEY_MULTIPLICATION,KEY_DIVISION,KEY_PLUS,KEY_MINUS,KEY_SINE,KEY_COSINE,KEY_TANGENT]
def init():
  return(0,0,20,10,10,10,100,[(125,0,0),(255,0,0),(255,0,255),(255,255,0),(0,255,255),(0,255,0),(255,255,255),(125,0,0),(255,255,255)])
s,e,j,ax,ay,x,y,c = init()
def f(e):
  return floor(e)
def initniv(ni):
  if ni==0:
    return([0,0,150,320,70,11,5,145,320,5])
  if ni==1:
    return([0,0,150,320,150,2,315,0,30,150,9,80,150,0,0,11,0,145,320,240,-1,270,130,1,0])
  if ni==2:
    return([0,0,150,320,150,-1,85,130,1,0,0,100,30,5,120,11,105,25,5,5,0,60,60,40,5,0,40,100,60,5,2,315,0,30,145,11,0,145,105,5,11,105,145,220,5,11,65,55,40,5,11,45,95,60,5])
  if ni==3:
    return([0,0,150,320,150,1,60,140,10,5,1,120,140,10,5,1,180,140,10,5,1,240,140,10,5,2,315,0,30,150,11,0,145,325,5,9,40,150,0,0])
  if ni==5:
    return([11,0,145,320,5,2,315,0,30,150,0,0,150,320,150,1,0,60,320,10,0,0,0,320,60,3,50,140,20,5,3,140,140,20,5,3,220,140,20,5])
  if ni==4:
    return([0,0,150,320,150,11,0,145,85,5,0,80,50,5,120,11,90,145,240,5,11,85,45,5,5,0,50,110,30,5,11,55,105,30,5,0,0,60,20,5,-1,5,35,1,0,-1,15,35,1,0,11,0,55,25,5,3,100,135,30,10,1,140,140,50,5,2,315,0,30,150,8,250,150,0,0])
  if ni==6:
    return([0,0,150,130,150,11,0,145,135,5,4,130,160,120,150,0,250,150,140,150,11,255,145,135,5,2,315,0,30,150])
  if ni==7:
    return([0,0,130,60,5,11,0,125,65,5,1,0,200,320,50,0,120,130,5,5,11,125,125,5,5,0,170,130,5,5,11,175,125,5,5,0,220,130,5,5,11,225,125,5,5,0,260,130,5,5,11,265,125,5,5,3,305,129,15,5,2,300,0,20,15])
  if ni==8:
    return([0,0,150,320,150,6,80,70,150,70,2,315,0,5,150,0,100,0,5,150,11,0,145,320,5])
  if ni==9:
    return([4,0,30,320,240,2,315,0,30,30])
  if ni==10:
    return([0,0,150,70,150,11,1,145,75,5,3,50,140,20,5,1,70,155,250,100,2,315,0,5,155,1,50,0,15,5,1,130,0,15,5,1,210,0,15,5,1,290,0,20,5])
  if ni==11:
    return([0,0,150,320,150,11,0,145,85,5,0,80,50,5,100,11,85,45,5,100,1,85,70,115,80,0,200,50,5,100,11,205,45,5,5,0,140,60,5,5,11,145,55,5,5,11,210,145,120,5,2,315,0,5,150])
  if ni==12:
    return([0,0,150,100,150,1,100,200,50,40,7,100,149,50,151,0,150,150,170,150,2,315,0,5,150,8,80,150,0,0,11,0,145,320,5])
  if ni==13:
    return([0,0,150,100,110,1,100,170,220,70,2,315,0,5,170,12,100.1,100,250,-1])
  if ni==14:
    return([0,0,190,320,50,11,0,185,325,5,0,50,100,5,30,1,50,130,5,40,11,55,95,5,5,0,150,90,5,20,1,150,110,5,80,11,155,85,5,5,0,60,40,5,20,11,65,35,5,5,0,170,30,130,5,11,175,25,130,5,0,190,35,5,155,2,315,140,5,45,0,215,65,110,5,11,220,60,115,5,0,190,100,110,5,11,200,95,105,5,0,215,140,110,5,11,220,135,115,5,1,250,180,5,5])
  return([0,0,150,100,150,11,0,145,105,5,2,315,0,5,145,0,220,150,320,240,11,225,145,320,5,1,100,218,120,5])
def niv(n):
  to = 0
  fill_rect(0,0,320,240,(0,0,0))
  for i in range(0,len(n)-4,5):
    if n[i]==6:
      fill_rect(n[i+1],n[i+2],5,5,(c[5]))
      fill_rect(n[i+3],n[i+4],5,5,c[5])
    elif n[i]>7 and n[i]<12:
      decor(n[i+1],n[i+2],n[i],n[i+3])
    elif n[i]==-1:
      if n[i+3]==1:
        fill_rect(n[i+1],n[i+2],5,10,(0,255,255))
    elif n[i]!=12:
      fill_rect(n[i+1],n[i+2],n[i+3],n[i+4],c[n[i]])
  return None
def to(x,y,n):
  for i in range(0,len(n),5):
      if n[i]==0:
        if n[i+1]<x and n[i+3]+n[i+1]>x -20:
         if n[i+2]<y + 30 and n[i+4]+n[i+2]>y+10:
            return(1)
      elif n[i]==12:
        if n[i+2]<x and 60+n[i+2]>x-20:
          pp=1000*(n[i+1]-floor(n[i+1]))
          if pp<y+30 and pp+5>y+10:
            return(1)
  return False
def game(x,y,n,e,s,ns):
  t,d,ax,ay=0,0,x,y
  if keydown(KEY_UP) or keydown(KEY_OK):
    if s==0 or e*gr>0:
      if to(x+1,y,n) and keydown(KEY_RIGHT):
        s=1
        e=-2*gr
      if to(x-1,y,n) and keydown(KEY_LEFT):
        s=1
        e=-2*gr
    if s==0:
      if to(x,y+2,n)==1:
        if ni>0:
          ns=ns+1
        e,s=-3*gr,1
      elif gr==-1 and y==-j/2:
        if ni>0:
          ns=ns+1
        e,s=-3*gr,1
  e,y=e+gr/10,y+f(e)
  if to(x,y,n)==1:
    y=y-f(e)
    if e>gr*0.1:
      s=0
    e=0
  if keydown(KEY_LEFT):
    x=x-1
    if to(x,y,n)==1:
      x=x+1
  if keydown(KEY_RIGHT):
    x=x+1
    if to(x,y,n)==1:
      x=x-1
  if x<j:
    x=j
  if x>320:
    x=320
  if y<0-j/2:
    if gr==-1:
      e,s=0,0
    y=0-j/2
  if y>200:
    y,e=200,0
  if ax!=x or ay!=y:
    fill_rect(floor(ax-j),floor(ay+j/2),j,j,(0,0,0))
  fill_rect(floor(x-j),floor(y+j/2),j,j,(0,0,255))
  return(x,y,e,ns,s)
def change(ni,v):
  for v in range(0,len(k)):
    if keydown(k[v]):
      return(v+1)
  return(ni)
def rangg(note):
  r,n=[20,18,15,12,10,5,0],["Diamant","Platine","Or","Argent","Bronze","Carton","PVC"]
  for i in range(0,len(r)):
    if note>=r[i]:
      return(n[i])
def decor(xd,yd,ty,xdi):
  if ty==8:
    fill_rect(xd-2,yd-30,5,30,(125,0,0))
    fill_rect(xd-15,yd-60,30,30,(0,125,0))
  if ty==9:
    fill_rect(xd,yd-15,2,15,(125,0,0))
    fill_rect(xd-3,yd-21,8,8,(255,255,255))
    fill_rect(xd-2,yd-20,6,6,(255,255,0))
  if ty==11:
    fill_rect(xd-5,yd,xdi,5,(0,125,0))
  return(0)
def score(ns,nm,te):
  if ch!=0:
    draw_string("Tricheur !!! 0/20 !!!",50,50,(255,255,255),(0,0,0))
    return(0)
  else:
    nn=20-0.125*(ns-30+abs(ns-30))-0.5*nm-0.1*(te-65+abs(te-65))
    note=0.5*(nn+abs(nn))
    draw_string(("FIN"),50,50,(255,255,255),(0,0,0))
    return(note)
def mplat(nn):
  for i in range(0,len(nn),5):
    if nn[i]==12:
      fill_rect(nn[i+2],floor(1000*(nn[i+1]-floor(nn[i+1]))),60,5,(0,0,0))
      pp=nn[i+2]
      nn[i+2]=pp+nn[i+4]
      if nn[i+2]>nn[i+3]:
        nn[i+2],nn[i+4]=nn[i+3],-nn[i+4]
      else:
        if nn[i+2]<floor(nn[i+1]):
          nn[i+2],nn[i+4]=floor(nn[i+1]),-nn[i+4]
      fill_rect(nn[i+2],floor(1000*(nn[i+1]-floor(nn[i+1]))),60,5,(255,255,255))
  return(nn)
def animation():
  for a in range(15):
    for b in range(640):
      fill_rect(floor(b/2),a*15,1,15,(125,0,0))
def timm():
  su=monotonic()
  animation()
  return(monotonic()-su)
ni,t,d,ch,ns,auto,n,nmax=0,0,0,0,0,0,initniv(0),15
niv(n)
fill_rect(floor(x-j),floor(y+j/2),j,j,(0,0,255))
draw_string("Un jeu de dkfe123",56,50,(255,255,255),(0,0,0))
draw_string("Press EXE to start",floor(160-5*len("0000000000000000000")),170,(255,255,255),(125,0,0))
def write(xe,ye,co):
  #P
  fill_rect(xe,ye,5,25,co)
  fill_rect(xe,ye,10,5,co)
  fill_rect(xe,ye+10,15,5,co)
  fill_rect(xe+10,ye,5,10,co)
  #L
  fill_rect(xe+20,ye,5,25,co)
  fill_rect(xe+20,ye+20,10,5,co)
  #A
  fill_rect(xe+35,ye,5,25,co)
  fill_rect(xe+45,ye,5,25,co)
  fill_rect(xe+35,ye,15,5,co)
  fill_rect(xe+35,ye+10,15,5,co)
  #T
  fill_rect(xe+55,ye,15,5,co)
  fill_rect(xe+60,ye,5,25,co)
  #E
  fill_rect(xe+75,ye,5,25,co)
  fill_rect(xe+75,ye,15,5,co)
  fill_rect(xe+75,ye+10,15,5,co)
  fill_rect(xe+75,ye+20,15,5,co)
  #F
  fill_rect(xe+95,ye,5,25,co)
  fill_rect(xe+95,ye,15,5,co)
  fill_rect(xe+95,ye+10,15,5,co)
  #O
  fill_rect(xe+115,ye,15,25,co)
  fill_rect(xe+120,ye+5,5,15,(0,0,0))
  #R
  fill_rect(xe+135,ye,5,25,co)
  fill_rect(xe+135,ye,15,5,co)
  fill_rect(xe+135,ye+10,15,5,co)
  fill_rect(xe+145,ye,5,15,co)
  #M
  fill_rect(xe+155,ye,20,25,co)
  fill_rect(xe+160,ye,10,25,(0,0,0))
  #E
  fill_rect(xe+180,ye,15,25,co)
  fill_rect(xe+185,ye+5,10,5,(0,0,0))
  fill_rect(xe+185,ye+15,10,5,(0,0,0))
  for i in range(15):
    fill_rect(xe+135+floor(i*2/3),ye+10+i,5,1,co)
  for i in range(20):
    fill_rect(xe+155+floor(i*1.4/4),ye+floor(3*i/4),5,1,co)
    fill_rect(xe+165+floor(1.4*i/4),ye+15-floor(3*i/4),5,1,co)
write(56,15,(0,125,0))
while True:
  if ni==nmax:
    draw_string("EXE pour recommencer",50,0,(255,255,255),(0,0,0))
    if keydown(KEY_EXE):
      ni,n=0,initniv(ni)
      niv(n)
  x,y,e,ns,s = game(x,y,n,e,s,ns)
  n=mplat(n)
  if to(x,y,n)==1:
    x=x+2*n[i+4]
  p,g=0,0
  if ni==10:
    draw_string("Pressez ( ", 100,120,(255,255,255),(0,0,0))
  for i in range(0,len(n)-4,5):
    if n[i]!=0 and n[i]<12:
      if n[i]>7:
        decor(n[i+1],n[i+2],n[i],n[i+3])
      if n[i]==6:
        fill_rect(n[i+1],n[i+2],5,5,c[5])
        fill_rect(n[i+3],n[i+4],5,5,c[5])
        if n[i+1]<x and n[i+1]+5>x-20:
          if n[i+2]<y+30 and n[i+2]+5>y+10:
            fill_rect(floor(x-j),floor(y+j/2),j,j,(0,0,0))
            e,s=0,0
            x,y=n[i+3],n[i+4]+20*gr
        if n[i+3]<x and n[i+3]+5>x-20:
          if n[i+2]<y+30 and n[i+2]+5>y+10:
            fill_rect(floor(x-j),floor(y+j/2),j,j,(0,0,0))
            e,s=0,0
            x,y=n[i+1],n[i+2]+20
      elif n[i]==-1:
        if n[i+3]==1:
          fill_rect(n[i+1],n[i+2],5,10,(0,255,55))
          if n[i+1]<x and n[i+1]+5>x-20:
            if n[i+2]<y+30 and n[i+2]+10>y+10:
              n[i+3],su=0,su++1.5
            fill_rect(n[i+1],n[i+2],5,10,(0,0,0))
      else:
        if n[i]==7:
         fill_rect(n[i+1],n[i+2],n[i+3],n[i+4],c[n[i]])
        if n[i+1]<x and n[i+3]+n[i+1]>x-20:
          if n[i+2]<y+30 and n[i+2]+n[i+4]>y+10:
            if n[i]==4:
              fill_rect(n[i+1],n[i+2],n[i+3],n[i+4],c[n[i]])
              if x<j+1:
                e=0
              if e<-4*gr:
                e=-4*gr
              if e>2.5*gr:
                e=2.5*gr
              e=e-0.2*gr
              fill_rect(n[i+1],n[i+2],n[i+3],n[i+4],c[n[i]])
              fill_rect(floor(x-j),floor(y+j/2),j,j,(0,0,255))
              if keydown(KEY_DOWN):
                e=e+0.3*gr
            if n[i]<3:
              s,e,j,ax,ay,x,y,c=init()
            if n[i]==2:
              g=1
            if n[i]==1:
              p=1
            if n[i]==3:
              e=-4
  if g==1:
    if ni<nmax:
      animation()
    if ni==0:
      su=monotonic()
    else:
      su=su+1.1388889
    ni,gr,n=ni+1,1,initniv(ni)
    if False:
      print(ni,len(n),n)
    niv(n)
    draw_string(str(floor(monotonic()-su)),0,0,(255,255,255),get_pixel(0,0))
    if ni==nmax:
      if ch==0:
        temps=floor(monotonic()-su)
        note=score(ns,nm,temps)
        print("Ta note est ",floor(10*note)/10)
        print("Tu as la medaille de ",rangg(note))
        print("Ton temps est :",temps)
  if p==1:
    nm,gr=nm+1,1
    niv(n)
  if ni==10:
    if keydown(KEY_LEFTPARENTHESIS):
      b=1
    else:
      if b==1:
        gr=-gr
      b=0
  if ni>0:
    if auto==1:
      if keydown(KEY_RIGHTPARENTHESIS) and keydown(KEY_EXE):
        v=0
        v=change(ni,v)
        if v!=ni:
          ch=ch+(v-ni+abs(v-ni))
          print("Changement de niveau vers le",v)
          ni,gr=v,1
          s,e,j,ax,ay,x,y,c=init()
          n=initniv(v)
          niv(n)
    if ni<nmax:
      temps=floor(monotonic()-su)
      if temps<0:
        temps=0
    draw_string(str(temps),0,0,(255,255,255),get_pixel(0,0))
  if ni==0:
    if keydown(KEY_EXE):
      if n[len(n)-5]!=2:
        n.append(2)
        if x<160:
          n.append(315)
        else:
          n.append(0)
        n.append(0)
        n.append(5)
        n.append(150)
        niv(n)
        auto,ns=1,0
        best_score_treize_niv=35
        best_score_quatorze_niv=60

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.