frommathimport*fromkandinskyimport*fromtimeimport*fromrandomimport*frommathimport*fromionimport*classBallsnick:def__init__(self):self.speedy=(1-(randint(0,1)*2))*40self.speedx=0self.x=160self.y=120self.oldx=self.xself.oldy=self.ydefreset(self):fill_rect(0,20,320,210,"gray")self.speedx=0self.speedy=(1-(randint(0,1)*2))*40self.x=160self.y=120defaffich(self):fill_rect(int(self.oldx)-4,int(self.oldy)-4,9,9,"gray")fill_rect(int(self.x)-4,int(self.y)-4,9,9,"orange")self.oldx=self.xself.oldy=self.ydefupdate(self,Game):self.affich()ifnotGame.timerrelaunch>0:returncols={}forlyinrange(11):a=get_pixel(int(self.x)-5,int(self.y)+ly-5)ifaincols.keys():cols[a]+=1else:cols[a]=1a=get_pixel(int(self.x)+5,int(self.y)+ly-5)ifaincols.keys():cols[a]+=1else:cols[a]=1forlxinrange(9):#cote bas et haut
a=get_pixel(int(self.x)-5+lx,int(self.y)-5)ifaincols.keys():cols[a]+=1else:cols[a]=1a=get_pixel(int(self.x)-5+lx,int(self.y)+5)ifaincols.keys():cols[a]+=1else:cols[a]=1scoreteam1=0scoreteam2=0if (255,0,0)incols.keys():scoreteam1+=cols[(255,0,0)]if (0,255,255)incols.keys():scoreteam2+=cols[(0,255,255)]ifscoreteam1==scoreteam2:self.speedx=0else:self.speedx=(1-(scoreteam1<scoreteam2)*2)*20self.x+=self.speedx*Game.deltatimeself.y+=self.speedy*Game.deltatimeifself.y>220:self.y-=self.speedy*Game.deltatimeself.speedy*=-1ifself.y<24:self.y-=self.speedy*Game.deltatimeself.speedy*=-1ifself.x>320:self.x-=self.speedx*Game.deltatimeself.speedx*=-1ifself.x<0:self.x-=self.speedx*Game.deltatimeself.speedx*=-1defracemodemenuprint(butselect,valc,nbofplayers,glonboftour,mapen,tempslimite,courseaelim,nombredebots,aipower,tempsparelim,blueback):draw_string("Nombres de joueurs : "+str(nbofplayers),50,valc*3,"orange"ifbutselect==2else"red",blueback)draw_string("Nombres de tours : "+str(glonboftour),50,valc*4,"orange"ifbutselect==3else"red",blueback)draw_string("Mape n°"+str(mapen),50,valc*5,"orange"ifbutselect==4else"red",blueback)draw_string("Temps limite : "+str(tempslimite),50,valc*6,"orange"ifbutselect==5else"red",blueback)draw_string("Course a elimination : "+str(("non","oui")[courseaelim]),50,valc*7,"orange"ifbutselect==6else"red",blueback)draw_string("Nombre de bots : "+str(nombredebots),50,valc*8,"orange"ifbutselect==7else"red",blueback)draw_string("Bots QI : "+str(("nul","facile","normal","dur","extreme","impossible")[aipower]),50,valc*9,"orange"ifbutselect==8else"red",blueback)draw_string("Temps par elimination : "+str(tempsparelim),50,valc*10,"orange"ifbutselect==9else"red",blueback)defpreground(mape):fill_rect(0,40,320,200,(155,79,3))defwrite_croix(idi):fill_rect(idi*60+20+5,0,15,15,"red")forxinrange(15):set_pixel(idi*60+25+x,x,"white")set_pixel(idi*60+39-x,x,"white")deffillserps(col,classement):iflen(classement)>1:fill_rect(120,120,4,40,col[classement[1]])iflen(classement)>0:fill_rect(160,100,4,40,col[classement[0]])iflen(classement)>2:fill_rect(200,140,4,40,col[classement[2]])iflen(classement)==4:fill_rect(240,160,4,40,col[classement[3]])defsetselfterritoire(self):ifself.idi==0:self.x=5self.y=25self.dir=45self.tcol=(0,100,0)self.gox=randint(10,315)self.goy=randint(30,215)elifself.idi==1:self.x=315self.y=216self.dir=-135self.tcol=(0,0,100)self.gox=randint(10,315)self.goy=randint(30,215)elifself.idi==2:self.x=315self.y=25self.dir=135self.tcol=(200,200,0)self.gox=randint(10,315)self.goy=randint(30,215)elifself.idi==3:self.x=5self.y=216self.dir=-45self.tcol=(220,69,136)self.gox=randint(10,315)self.goy=randint(30,215)ifself.isia:self.dir=angle_to_point(self.x,self.y,self.gox,self.goy)defgetscreenper():yu={}draw_string("calcul des resultats",20,0,"yellow","black")forxinrange(320):foryinrange(20,220):a=get_pixel(x,y)ifainyu.keys():yu[a]+=1else:yu[a]=1returnyudefbasepodium():fill_rect(0,0,320,320,(0,200,200))fill_rect(0,190,320,40,"green")fill_rect(100,160,40,40,"white")fill_rect(140,140,40,60,"white")fill_rect(180,180,40,20,"white")draw_string("2",117,160,"orange")draw_string("1",157,140,"orange")draw_string("3",197,180,"orange")defgetmapecode(mapis):ifmapis==0:return ((21,35,327,53),(48,65,269,81),(269,81,267,178),(267,178,190,90),(190,90,88,183),(88,183,49,64),(262,223,188,140),(188,140,92,230),)ifmapis==1:return ((173,39,178,155),(180,185,52,172),(139,60,145,182),(179,154,225,41),(251,71,282,126),(282,126,179,185),(251,71,213,166),(53,171,139,60),)ifmapis==2:return ((44,75,281,75),(281,75,277,182),(277,182,50,178),(50,178,45,75),)ifmapis==3:return ((29,62,32,192),(59,38,58,62),(29,82,288,85),(59,62,324,65),(326,112,61,110),(31,136,285,142),(322,169,74,169),(32,191,284,194),)defgetcheckcode(mapis):ifmapis==0:return ((21,56,60),(295,74,60),(277,200,75),(188,113,70),(78,211,65),)ifmapis==1:return ((155,59,40),(163,168,50),(200,155,40),(245,60,60),(305,132,50),(182,204,45),(24,178,60),(116,55,60),)ifmapis==2:return ((298,56,50),(299,202,60),(24,197,70),(22,56,60),)ifmapis==3:return ((42,51,35),(42,73,44),(306,73,40),(304,99,45),(45,97,45),(46,125,45),(304,129,45),(303,157,50),(50,154,60),(52,181,55),(301,183,40),(300,209,50),(16,205,50),(14,50,50),)defgetdecocode(mapis):ifmapis==0:return ((55,77,1),)ifmapis==1:return ((253,120,2),(192,72,1),(89,160,1),(124,134,1),)ifmapis==2:return ((68,97,1),(120,99,1),(167,99,1),(220,99,1),(262,97,1),(64,145,1),(95,131,1),(151,131,1),(126,159,1),(210,122,1),(170,165,1),(246,137,1),(217,167,1),)ifmapis==3:return ((73,51,1),(94,47,1),(118,50,1),(152,47,1),(196,47,1),(234,48,1),(264,47,1),(299,44,1),)defdecodecode(mape):foreleinmape:ifele[2]==1:fill_rect(ele[0],ele[1],5,10,"brown")fill_rect(ele[0]-1,ele[1],7,4,"green")ifele[2]==2:fill_rect(ele[0],ele[1],10,5,"gray")defdistance(x1,y1,x2,y2):return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)defmapdecode(mape):foreleinmape:stx=ele[0]sty=ele[1]longa=sqrt(distance(ele[0],ele[1],ele[2],ele[3]))forloninrange(longa):ifint(sty)>39:set_pixel(int(stx),int(sty),(255,60,57))stx-=(ele[0]-ele[2])/longasty-=(ele[1]-ele[3])/longadefangle_to_point(observer_x,observer_y,target_x,target_y):returndegrees(atan2(target_y-observer_y,target_x-observer_x))deflauncherwindow():inittime=monotonic()blueback=(40,60,250)fill_rect(0,0,320,320,blueback)draw_string("Snake Kart 8",115,50,"red",blueback)whilemonotonic()-inittime<1:passdefrefreshaide(Game):yee=0fill_rect(0,0,320,320,(40,60,250))forelein["back to menu : click on shift","J1 :(2,1)avancer, (4,0)tourner","J2 :(+,-)avancer, (EXE,division)tourner","J3 :(ln,exp(x))avancer, (shift,sin)tourner","J1 :(virgule,x exp(y))avancer, (x carré,effacer)tourner"]:draw_string(ele,0,yee*20,"yellow",(40,60,250))yee+=1defbataillerespawn(self):ifself.coolres<0:self.cango=4self.speed=0ifself.idi==0:self.x=5self.y=25self.dir=45ifself.idi==1:self.x=315self.y=215self.dir=-135ifself.idi==2:self.x=315self.y=25self.dir=135ifself.idi==3:self.x=5self.y=215self.dir=-45defgetsommecol(col,nbteam):sommecol=[]nb=1ifnbteam==2:if (255,0,0)incol.keys():nb+=col[(255,0,0)]sommecol.append(nb)nb=1if (0,255,255)incol.keys():nb+=col[(0,255,255)]sommecol.append(nb)returnsommecolif (0,101,0)incol.keys():nb+=col[(0,101,0)]sommecol.append(nb)nb=1if (0,0,99)incol.keys():nb+=col[(0,0,99)]if (0,0,101)incol.keys():nb+=col[(0,0,101)]if (0,0,255)incol.keys():nb+=col[(0,0,255)]sommecol.append(nb)nb=1if (206,203,0)incol.keys():nb+=col[(206,203,0)]if (82,195,0)incol.keys():nb+=col[(82,195,0)]if (255,255,0)incol.keys():nb+=col[(255,255,0)]sommecol.append(nb)nb=1if (222,69,140)incol.keys():nb+=col[(222,69,140)]if (82,195,0)incol.keys():nb+=col[(82,195,0)]if (255,255,0)incol.keys():nb+=col[(255,255,0)]sommecol.append(nb)returnsommecoldefinfoforallset(self):self.oldx=self.xself.oldy=self.yself.olddir=self.dirself.speed=0self.speedmaxs=(-40,100)ifself.idi==0:self.color="green"self.keyso=(KEY_ONE,KEY_TWO,KEY_FOUR,KEY_ZERO,KEY_DOT)self.tcolor=(0,100,0)ifself.idi==1:self.color="blue"self.keyso=(KEY_MINUS,KEY_PLUS,KEY_EXE,KEY_DIVISION,KEY_ANS)self.tcolor=(0,0,100)ifself.idi==2:self.color="yellow"self.keyso=(KEY_EXP,KEY_LN,KEY_SHIFT,KEY_SINE,KEY_ALPHA)self.tcolor=(200,200,0)ifself.idi==3:self.color="pink"self.keyso=(KEY_POWER,KEY_COMMA,KEY_SQUARE,KEY_BACKSPACE,KEY_TOOLBOX)self.tcolor=(222,69,140)self.chargingstartval=0self.cango=-1self.preframecos=0self.preframesin=0self.lastdist=2000self.coolres=3self.iseliminated=Falsedefchangetimeval(tempslimite,coolclick,refresh):ifkeydown(KEY_RIGHT):tempslimite+=10refresh=Truecoolclick=monotonic()ifkeydown(KEY_LEFT):iftempslimite!=10:tempslimite-=10refresh=Truecoolclick=monotonic()returntempslimite,refresh,coolclickdefgetnbofbotchnage(nombredebots,nbofplayers,refresh,coolclick):ifkeydown(KEY_RIGHT):if (nombredebots+nbofplayers)==4:ifnombredebots!=0:nombredebots-=1nbofplayers+=1refresh=Truecoolclick=monotonic()else:nbofplayers+=1refresh=Truecoolclick=monotonic()ifkeydown(KEY_LEFT):ifnbofplayers!=0:if (nombredebots+nbofplayers)!=2:nbofplayers-=1refresh=Truecoolclick=monotonic()returnnombredebots,nbofplayers,refresh,coolclickdefstartinfo(self):ifself.chargingstartval>2:self.chargingstartval=0self.cango=1.5elifself.chargingstartval>1.5:self.speed=40self.chargingstartval=0elifself.chargingstartval>1:self.speed=20self.chargingstartval=0elifself.chargingstartval>0.5:self.speed=10self.chargingstartval=0defchangeaipower(aipower,refresh,coolclick):ifkeydown(KEY_RIGHT):ifaipower!=5:aipower+=1refresh=Truecoolclick=monotonic()ifkeydown(KEY_LEFT):ifaipower!=0:aipower-=1refresh=Truecoolclick=monotonic()returnaipower,refresh,coolclickdefspeedgeror(self,deltatime):ifkeydown(self.keyso[0]):self.speed-=75*deltatimeifself.speed<self.speedmaxs[0]:self.speed=self.speedmaxs[0]ifkeydown(self.keyso[1]):self.speed+=75*deltatimeifself.speed>self.speedmaxs[1]:self.speed=self.speedmaxs[1]ifabs(self.speed)>20:ifkeydown(self.keyso[2]):self.dir-=100*deltatimeifkeydown(self.keyso[3]):self.dir+=100*deltatimedefgetnbofplayerchnage(nombredebots,nbofplayers,refresh,coolclick):ifkeydown(KEY_RIGHT):if (nombredebots+nbofplayers)==4:ifnbofplayers!=0:nbofplayers-=1nombredebots+=1refresh=Truecoolclick=monotonic()else:nombredebots+=1refresh=Truecoolclick=monotonic()ifkeydown(KEY_LEFT):ifnombredebots!=0:if (nombredebots+nbofplayers)!=2:nombredebots-=1refresh=Truecoolclick=monotonic()returnnombredebots,nbofplayers,refresh,coolclickdefchangetimeperelim(tempsparelim,refresh,coolclick):ifkeydown(KEY_RIGHT):tempsparelim+=1refresh=Truecoolclick=monotonic()ifkeydown(KEY_LEFT):iftempsparelim!=1:tempsparelim-=1refresh=Truecoolclick=monotonic()returntempsparelim,refresh,coolclickdefsnakeresetor(gamescene,nbjperteam,team1,havsetteam):forkatingamescene:kat.speed=0ifnbjperteam==1:ifkat.idi==0:kat.x=5kat.y=120kat.dir=0else:kat.x=315kat.y=120kat.dir=180else:ifkat.idiinteam1:kat.x=5kat.dir=0ifhavsetteam[0]==0:havsetteam[0]=1kat.y=100else:kat.y=140else:kat.x=315kat.dir=180ifhavsetteam[1]==0:havsetteam[1]=1kat.y=100else:kat.y=140kat.oldx=kat.xkat.oldy=kat.ykat.olddir=kat.dirifkat.isia:kat.dir=angle_to_point(kat.x,kat.y,kat.gox,kat.goy)
During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:
Ensure the proper functioning of the site (essential cookies); and
Track your browsing to send you personalized communications if you have created a professional account on the site and can be contacted (audience measurement cookies).
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.