Version 1.2 Béta publique
Vous rêvez de faire votre propre jeu snake ?
CECI vous le permet !!!
Une documentation arrive mais vous pouvez l’utilisez avec des script de ce compte !
from random import * from kandinsky import * from ion import * from time import * def get_coords(n): return (n//32,(n-32*(n//32))%22) def set_coords(x,y): return 32*x+y class Snake(): def __init__(self,name="snake",color=(0,255,0)): self.name=name self.color=color self.touch=[1,3,2,0] self.length=1 self.x=randint(3,10) self.y=randint(3,16) self.queue=[] self.dir=1 self.to_undraw=(-1,-1) self.S=None self.death=False self.back_dir_allowed=False self.border_pass=0 def get_touch(self): last_dir=self.dir for i in range(4): if keydown(self.touch[i]): self.dir=i if (self.dir-2)%4==last_dir and not self.back_dir_allowed: self.dir=last_dir def draw_all(self): for i in self.queue: j=get_coords(i) fill_rect(j[0]*10,j[1]*10,10,10,self.color) def step(self): if self.death: return self.get_touch() self.x+=[0,1,0,-1][self.dir] self.y+=[-1,0,1,0][self.dir] if self.border_pass==0: if not 0<=self.x<32: self.death=True self.x,self.y=get_coords(self.queue[0]) elif not 0<=self.y<22: self.death=True self.x,self.y=get_coords(self.queue[0]) elif self.border_pass==1: self.x%=32 self.y%=22 for s in self.S.snakes: for q in s.queue[1:]: if (self.x,self.y)==get_coords(q): self.death=True s.queue.remove(set_coords(self.x,self.y)) if (self.x,self.y)==(s.x,s.y): if self!=s: self.death=True self.queue=[self.x*32+self.y,]+self.queue if len(self.queue)>self.length: self.to_undraw=get_coords(self.queue[-1]) del self.queue[-1] fill_rect(self.to_undraw[0]*10,self.to_undraw[1]*10,10,10,self.S.BACK) # elif len(self.queue)<self.length: # fill_rect(self.x*10,self.y*10,10,10,self.color) class Scene(): def __init__(self,apples=[],snakes=[]): self.snakes=snakes self.apples=apples self.dead=[] self.BACK=(255,)*3 self.t=0.1 self.key_pause=KEY_OK self.callback={ "death":lambda x: True, "step":lambda x: True, "pause":lambda x: True, } def init(self): for a_i in range(len(self.apples)): self.apples[a_i]=list(self.apples[a_i]) if len(self.apples[a_i])==2: self.apples[a_i]+=[(255,0,0),] if len(self.apples[a_i])==3: self.apples[a_i]+=[lambda x: True,] self.apples[a_i]=tuple(self.apples[a_i]) fill_rect(0,0,320,222,self.BACK) self.draw_score() for i in range(len(self.apples)): fill_rect(self.apples[i][0]*10,self.apples[i][1]*10,10,10,self.apples[i][2]) for s in self.snakes: s.S=self s.draw_all() def apples_coords(self): good=False while not good: x,y=randint(1,30),randint(1,20) good=True for s in self.snakes: for q in s.queue: if (x,y)==get_coords(q): good=False for apple in self.apples: if (x,y)==(apple[0],apple[1]): good=False return (x,y) def draw_score(self): for i in range(len(self.snakes)): draw_string(self.snakes[i].name+" : "+str(self.snakes[i].length),5,5+i*20,self.snakes[i].color,self.BACK) if self.snakes[i] in self.dead: fill_rect(5,14+i*20,len(self.snakes[i].name+" : "+str(self.snakes[i].length))*10,1,self.snakes[i].color) def negatif(self): return (255-self.BACK[0],255-self.BACK[1],255-self.BACK[2]) def loop(self): self.run=True self.init() while keydown(self.key_pause): pass while self.run: if keydown(self.key_pause): fill_rect(120,81,20,60,self.negatif()) fill_rect(160,81,20,60,self.negatif()) self.callback["pause"](self) while keydown(self.key_pause): pass while not keydown(self.key_pause): pass while keydown(self.key_pause):pass self.init() m=monotonic() self.callback["step"](self) for i in range(len(self.snakes)): s=self.snakes[i] if s.death: if not s in self.dead: self.dead+=[s,] draw_string(s.name+" a perdu",135,101,self.negatif(),self.BACK) self.draw_score() if len(self.dead)==len(self.snakes): self.run=False continue for i in range(len(self.apples)): if (s.x,s.y)==(self.apples[i][0],self.apples[i][1]): self.apples[i][3](s) self.apples[i]=self.apples_coords()+(self.apples[i][2],self.apples[i][3]) s.length+=1 self.draw_score() fill_rect(self.apples[i][0]*10,self.apples[i][1]*10,10,10,self.apples[i][2]) s.step() sleep(self.t-(monotonic()-m)*((self.t-(monotonic()-m))>0)) return_score={} for i in self.snakes: return_score[i.name]=i.length return return_score