snake_kart_8_racemode.py

Created by furicoda

Created on September 19, 2024

14.1 KB


from snake_kart_8_assets_1 import*
class Ggeror:
  def __init__(s):s.elim,s.menuin,s.refresh,s.deltatime,s.deltainit,s.nbofplayers,s.butselect,s.coolclick,s.mapen,s.nbofcheckp,s.glonboftour,s.tempslimite,s.courseaelim,s.nombredebots,s.aipower,s.tempsparelim,=False,0,True,0,0,1,0,-1,0,3,3,60,0,3,2,10
def checkdecode(checkli,G):G.checklist=[(checkli[c][0],checkli[c][1],c,checkli[c][2]) for c in range(len(checkli))];G.nbofcheckp=len(checkli)-1
def initmap(G):
  G.Gscene,G.timer,G.classement,G.timeelim,G.elim,G.checklist=[],-5,[],-5,False,[]
  fill_rect(0,0,320,40,"black")
  for up in range(G.nombredebots+G.nbofplayers):
    draw_string("J"+str(up+1),up*60,0,"yellow","black")
    if G.courseaelim:draw_string("0/oo",up*60,20,"yellow","black")
    else:draw_string("0/"+str(G.glonboftour),up*60,20,"yellow","black")
  preground(G.mapen);mapdecode(getmapecode(G.mapen));checkdecode(getcheckcode(G.mapen),G);decodecode(getdecocode(G.mapen))
  cp=0
  for add in range(G.nbofplayers):
    G.Gscene.append(Kart(idi=cp,ai=False,G=G))
    cp+=1
  for add in range(G.nombredebots):
    G.Gscene.append(Kart(idi=cp,ai=True,G=G))
    cp+=1
def Gupdate(G):
  G.timer+=G.deltatime
  G.timeelim+=G.deltatime
  if G.timer>=0:draw_string(str(round(G.timer,3)),270,0,"yellow","black")
  elif G.timer>=-3.5:
    nb=abs(floor(G.timer))
    if nb>3:nb=3
    draw_string(str(nb)[0:6],270,0,"orange","black")
  if G.courseaelim:
      if G.timeelim>G.tempsparelim:
        G.elim=True
        G.timeelim=0
      if G.elim:
        G.elim=False
        nb=G.nombredebots+G.nbofplayers
        for ele in G.Gscene:
          nb-=ele.iseliminated
        if nb==2 :
          G.menuin=3
          G.tempget=[]
          for sna in G.Gscene:
            if not sna.iseliminated:G.tempget.append(sna)
          if len(G.tempget)==1:G.classement.insert(0,G.tempget[0].idi)
          else:
            G.tempscore=[]
            for x in range(len(G.tempget)):
              G.nbtoadd=(G.tempget[x].nboftour)*G.nbofcheckp
              if G.tempget[x].nbofcheck==-1:G.nbtoadd+=G.nbofcheckp-1
              else:G.nbtoadd+=G.tempget[x].nbofcheck 
              G.tempscore.append(G.nbtoadd)
            for x in range(len(G.tempscore)):
                if G.tempscore.count(min(G.tempscore))>1:
                  G.toelim=-9
                  G.getequa=[]
                  for x in range(len(G.tempget)):
                    if G.tempget[x].nbofcheck==-1:G.nbtoadd=(G.tempget[x].nboftour)*G.nbofcheckp+G.nbofcheckp-1
                    else:G.nbtoadd=(G.tempget[x].nboftour)*G.nbofcheckp+G.tempget[x].nbofcheck 
                    if G.nbtoadd==min(G.tempscore):G.getequa.append(G.tempget[x])
                  G.getequadist=[]
                  for ele in G.getequa:
                    if ele.nbofcheck+1==G.nbofcheckp:nb=G.nbofcheckp-1
                    else:nb=ele.nbofcheck+1
                    for src in G.checklist:
                      if src[2]==nb:G.getequadist.append(distance(ele.x,ele.y,src[0],src[1]))
                  G.toelim=G.getequa[G.getequadist.index(min(G.getequadist))].idi
                  G.classement.append(G.toelim)
                  for tu in G.tempget:
                    if tu.idi==G.toelim:G.tempscore[G.tempget.index(tu)]=G.glonboftour*20*G.nbofcheckp
                else:
                  G.classement.insert(0,G.tempget[G.tempscore.index(min(G.tempscore))].idi)
                  G.tempscore[G.tempscore.index(min(G.tempscore))]=G.glonboftour*20*G.nbofcheckp
        else: 
          G.tempall=G.Gscene
          G.tempget=[]
          for x in range(G.nombredebots+G.nbofplayers):G.tempget.append(G.tempall[x])
          G.tempscore=[]
          for x in range(len(G.tempget)):
            if G.tempget[x].nbofcheck==-1:G.nbtoadd=(G.tempget[x].nboftour)*G.nbofcheckp+G.nbofcheckp-1
            else:G.nbtoadd=(G.tempget[x].nboftour)*G.nbofcheckp+G.tempget[x].nbofcheck 
            G.tempscore.append(G.nbtoadd)
          if G.tempscore.count(min(G.tempscore))>1:
            G.toelim=-9
            G.getequa=[]
            for x in range(len(G.tempget)):
              if G.tempget[x].nbofcheck==-1:G.nbtoadd=(G.tempget[x].nboftour)*G.nbofcheckp+G.nbofcheckp-1
              else:G.nbtoadd=(G.tempget[x].nboftour)*G.nbofcheckp+G.tempget[x].nbofcheck 
              if G.nbtoadd==min(G.tempscore):G.getequa.append(G.tempget[x])
            G.getequadist=[]
            for ele in G.getequa:
              if ele.nbofcheck+1==G.nbofcheckp:nb=G.nbofcheckp-1
              else:nb=ele.nbofcheck+1
              for src in G.checklist:
                if src[2]==nb:G.getequadist.append(distance(ele.x,ele.y,src[0],src[1]))
            G.toelim=G.getequa[G.getequadist.index(min(G.getequadist))].idi
          else:G.toelim=G.tempscore.index(min(G.tempscore))
          for sna in G.Gscene:
            if sna.idi==G.toelim:
              sna.iseliminated=True
              write_croix(sna.idi)
              sna.nboftour=G.glonboftour*2
              G.classement.insert(0,sna.idi)
      for ele in G.checklist:
          for kat in G.Gscene:
            if kat.nbofcheck+1==ele[2]:
                if kat.isia:
                    if (kat.nboftour+1==G.glonboftour and not G.courseaelim) and kat.nbofcheck==-1:var=distance(ele[0],ele[1],kat.x,kat.y)<ele[3]
                    else:
                      a=sqrt(distance(ele[0],ele[1],kat.x,kat.y))
                      var=kat.lastdist<a
                      if var:
                        kat.lastdist=2000
                        kat.x=ele[0]
                        kat.y=ele[1]
                      else:kat.lastdist=a
                else:var=distance(ele[0],ele[1],kat.x,kat.y)<ele[3]*ele[3]
                if var:
                  kat.nbofcheck+=1
                  if kat.nbofcheck==0:
                    kat.nboftour+=1
                    fill_rect(kat.idi*60,20,60,20,"black")
                    draw_string(str(kat.nboftour)+"/oo",kat.idi*60,20,"yellow","black")
                  if kat.nbofcheck==G.nbofcheckp:kat.nbofcheck=-1
                  kat.resdir(G)
  else:
      if len(G.classement)==(G.nombredebots+G.nbofplayers) or G.timer>G.tempslimite:
        G.menuin=3
        G.tempall=G.Gscene
        if len(G.classement)!=(G.nombredebots+G.nbofplayers):
          G.tempget=[]
          for x in range(G.nombredebots+G.nbofplayers):
            if G.tempall[x].idi not in G.classement:G.tempget.append(G.tempall[x])
          if len(G.tempget)>1:
            G.tempscore=[]
            for x in range(len(G.tempget)):
              if G.tempget[x].nbofcheck==-1:G.nbtoadd=G.nbofcheckp-1
              else:G.nbtoadd=(G.tempget[x].nboftour)*G.nbofcheckp+G.tempget[x].nbofcheck 
              G.tempscore.append(G.nbtoadd)
            for x in range(len(G.tempscore)):
              G.classement.append(G.tempget[G.tempscore.index(max(G.tempscore))].idi)
              G.tempscore[G.tempscore.index(max(G.tempscore))]=-1
          else:G.classement.append(G.tempget[0].idi)
      for kat in G.Gscene:
        ele=G.checklist[kat.nbofcheck+1]
        if kat.isia:
          if kat.nboftour+1==G.glonboftour and kat.nbofcheck==-1:var=distance(ele[0],ele[1],kat.x,kat.y)<(ele[3]*ele[3])
          else:
            a=sqrt(distance(ele[0],ele[1],kat.x,kat.y))
            var=kat.lastdist<a
            if var:
                kat.x=ele[0]
                kat.y=ele[1]
                kat.lastdist=2000
            else:kat.lastdist=a
        else:var=distance(ele[0],ele[1],kat.x,kat.y)<(ele[3]*ele[3])
        if var:
          kat.nbofcheck+=1
          if kat.nbofcheck==0:
            kat.nboftour+=1
            fill_rect(kat.idi*60,20,60,20,"black")
            draw_string(str(kat.nboftour)+"/"+str(G.glonboftour),kat.idi*60,20,"yellow","black")
            if kat.nboftour==G.glonboftour:
              kat.isarrived=True
              G.classement.append(kat.idi)
              cmap=False
              for drx in range(10):
                for dry in range(7):
                  fill_rect(kat.idi*60+drx*2+33,20+dry*2,2,2,"white"if cmap else "black")
                  cmap=not cmap
        if kat.nbofcheck==G.nbofcheckp:kat.nbofcheck=-1
        if kat.nboftour!=G.glonboftour:kat.resdir(G)
  for ele in G.Gscene:
    ele.update(G)
    ele.affich()
def podiumupdate(G):
  if keydown(KEY_SHIFT):
    G.menuin=0
    refreshmenu(G)
class Kart:
  def __init__(s,idi,ai,G):
    s.idi=idi
    s.isia=ai
    ele=G.checklist[0]
    s.x=ele[0]
    s.y=ele[1]
    s.nboftour=0
    s.nbofcheck=0
    s.isarrived=False
    ele=G.checklist[1]
    s.dir=angle_to_point(s.x,s.y,ele[0],ele[1])
    infoforallset(s)
  def resdir(s,G):
    if s.isia:
      ele=G.checklist[s.nbofcheck+1]
      s.dir=angle_to_point(s.x,s.y,ele[0],ele[1])
  def affich(s):
    precosval=s.preframecos
    presinval=s.preframesin
    stx=0
    sty=0
    for x in (0,1,2,3,4,5,6,7,8,9):
        stx+=precosval
        sty+=presinval
        set_pixel(int(s.oldx+stx),int(s.oldy+sty),(155,79,3))
    predirval=0.01745329251994329*s.dir
    precosval=cos(predirval)
    presinval=sin(predirval)
    stx=0
    sty=0
    for x in (0,1,2,3,4,5,6,7,8,9):
      stx+=precosval
      sty+=presinval
      set_pixel(int(s.x+stx),int(s.y+sty),s.color)
    s.preframecos=precosval
    s.preframesin=presinval
    s.oldx=s.x
    s.oldy=s.y
    s.olddir=s.dir
  def update(s,G):
    if s.iseliminated:return
    s.cango-=G.deltatime*(s.cango>-1)
    if G.timer<0:
      if s.isia :return
      if keydown(s.keyso[1]):s.chargingstartval+=G.deltatime
      else:s.chargingstartval=0
      return
    startinfo(s)
    if s.cango<=0 and not s.isia :
          if (s.nboftour!=G.glonboftour or G.courseaelim):speedgeror(s,G.deltatime)
    predirval=0.01745329251994329*s.dir
    precosval=cos(predirval)
    presinval=sin(predirval)
    if s.isia and (s.nboftour!=G.glonboftour or G.courseaelim):
        s.speed=randrange(50+10*G.aipower,70+10*G.aipower)
    s.x+=precosval*s.speed*G.deltatime
    s.y+=presinval*s.speed*G.deltatime
    setx=0
    sety=0
    for xte in (-1,0,1,2,3,4,5,6,7,8,9,10):
        setx+=precosval
        sety+=presinval
        if s.x+setx>320:
          s.x=320-setx
          s.speed=0
        if s.y+sety>220:
          s.y=220-sety
          s.speed=0
        if s.x+setx<0:
          s.x=-setx
          s.speed=0
        if s.y+sety<40:
            s.y=40-sety
            s.speed=0
        if get_pixel(int(s.x+setx),int(s.y+sety)) ==(255,60,57):
            s.x-=precosval*s.speed*G.deltatime
            s.y-=presinval*s.speed*G.deltatime
            s.speed=0
    if s.speed>0 and not keydown(s.keyso[1]):s.speed-=G.deltatime*30
    elif s.speed<0 and not keydown(s.keyso[0]):s.speed+=G.deltatime*30
    if abs(s.speed)<0.1 and not (keydown(s.keyso[0]) or keydown(s.keyso[0])):s.speed=0
    if keydown(s.keyso[4]) and not s.isia and (s.nboftour!=G.glonboftour or G.courseaelim) and s.cango<=0:
        s.coolres-=G.deltatime
        if s.coolres<0:
          s.cango=4
          s.speed=0
          
          for se in G.checklist:
            nb=s.nbofcheck
            if nb==-1:nb=len(G.checklist)-1
            if se[2]==nb:
              s.x=se[0]
              s.y=se[1]
            if se[2]==s.nbofcheck+1:s.dir=angle_to_point(s.x,s.y,se[0],se[1])
    else:s.coolres=3
def refreshpodium(G):
  basepodium()
  fillserps(["green","blue","yellow","pink"],G.classement)
  draw_string("Shift pour aller au menu",20,20,"orange",(0,200,200))
def aideupdate(G):
  if keydown(KEY_SHIFT):
    G.refresh=True
    G.menuin=0
def refreshmenu(G):
  fill_rect(0,0,320,320,(40,60,250))
  draw_string("Snake Kart 8",50,0,(255,100,10),(40,60,250))
  draw_string("Aide",50,18,"orange" if G.butselect==0 else "red",(40,60,250))
  draw_string("Jouer",50,36,"orange" if G.butselect==1 else "red",(40,60,250))
  racemodemenuprint(G.butselect,18,G.nbofplayers,G.glonboftour,G.mapen,G.tempslimite,G.courseaelim,G.nombredebots,G.aipower,G.tempsparelim,(40,60,250))
def menuupdate(G):
  if monotonic()-G.coolclick>0.2:
    if keydown(KEY_DOWN):
        if G.butselect==9:G.butselect=0
        else:G.butselect+=1
        G.refresh=True
        G.coolclick=monotonic()
    if keydown(KEY_UP):
      G.refresh=True
      G.coolclick=monotonic()
      if G.butselect==0:G.butselect=9
      else:G.butselect-=1
    if G.butselect==0:
      if keydown(KEY_OK):
        G.menuin=1
        G.refresh=True
    elif G.butselect==1:
      if keydown(KEY_OK):
        G.menuin=2
        G.refresh=True
        initmap(G)
    elif G.butselect==2:G.nombredebots,G.nbofplayers,G.refresh,G.coolclick=getnbofbotchnage(G.nombredebots,G.nbofplayers,G.refresh,G.coolclick)
    elif G.butselect==3:
      if keydown(KEY_RIGHT):
        G.glonboftour+=1
        G.refresh=True
        G.coolclick=monotonic()
      if keydown(KEY_LEFT):
        if G.glonboftour!=1:
          G.glonboftour-=1
          G.refresh=True
          G.coolclick=monotonic()
    elif G.butselect==4:
      if keydown(KEY_RIGHT):
        if G.mapen!=4:
          G.mapen+=1
          G.refresh=True
          G.coolclick=monotonic()
      if keydown(KEY_LEFT):
        if G.mapen!=0:
          G.mapen-=1
          G.refresh=True
          G.coolclick=monotonic()
    elif G.butselect==5:G.tempslimite,G.refresh,G.coolclick=changetimeval(G.tempslimite,G.coolclick,G.refresh)
    elif G.butselect==6:
      if keydown(KEY_RIGHT) or keydown(KEY_LEFT):
        G.courseaelim= 0 if G.courseaelim else 1
        G.refresh=True
        G.coolclick=monotonic()
    elif G.butselect==7:G.nombredebots,G.nbofplayers,G.refresh,G.coolclick=getnbofplayerchnage(G.nombredebots,G.nbofplayers,G.refresh,G.coolclick)
    elif G.butselect==8:G.aipower,G.refresh,G.coolclick=changeaipower(G.aipower,G.refresh,G.coolclick)
    elif G.butselect==9:G.tempsparelim,G.refresh,G.coolclick=changetimeperelim(G.tempsparelim,G.refresh,G.coolclick)
def Gloop(G):
  while 1:
    G.deltainit=monotonic()
    if G.menuin==2:Gupdate(G)
    elif G.menuin==0:
      if G.refresh:
        G.refresh=False
        refreshmenu(G)
      menuupdate(G)
    elif G.menuin==1:
      if G.refresh:
        G.refresh=False
        refreshaide(G)
      aideupdate(G)
    elif G.menuin==3:
      if G.refresh:
        refreshpodium(G)
      podiumupdate(G)
      G.refresh=False
    G.deltatime=monotonic()-G.deltainit
    if G.deltatime!=0:
      draw_string(str(1/G.deltatime),240,20)
launcherwindow();Gloop(Ggeror())

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.