plateformer.py

Created by dkfe123

Created on March 13, 2025

11.2 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 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])
    else:
      if n[i]>7 and n[i]<12:
        decor(n[i+1],n[i+2],n[i],n[i+3])
      else:
        if n[i]==-1:
          if n[i+3]==1:
            fill_rect(n[i+1],n[i+2],5,10,(0,255,255))
        else:
          if 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)
      else:
        if 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 f(e):
  return(floor(e))
 
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
        s = 1
        e = -3*gr
      else:
        if gr==-1 and y==-j/2:
          if ni>0:
            ns=ns+1
          s=1
          e=-3*gr
  e = e+gr/10
  y = 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=0
      s=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==10:
   # fill_rect(xd,yd-40,120,80,(255,255,255))
    #fill_rect(xd-10,yd-60,140,30,(125,0,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+3]
        nn[i+4]=-nn[i+4]
      else:
        if nn[i+2]<floor(nn[i+1]):
          nn[i+2]=floor(nn[i+1])
          nn[i+4]=-n[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=0,0,0,0,0,0
n=initniv(0)
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))
nmax=14
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)
nmax=15
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=0
      n=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
      else:
        if 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]=0
                su=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=ni+1
    gr=1
    n=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=nm+1
    niv(n)
    gr=1
  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.