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())