VCP.XDATA5f4d435305main06Snake00000031mainÿÿÿÿÿÿÿÿÿÿÿÿSnakeÿÿÿÿÿÿÿÿÿÿÿNUQÿÿÿÿÿÿÿÿÿÿ0000141c LuaSource10>jÁÙü--Snake-- require("draw") int=math.floor rect=draw.rect line=draw.line text=draw.text update=draw.update mur=pict.new(8,8) draw.onpict(mur) rect(0,0,7,6,1,1,1) line(0,3,7,3,0) line(7,0,7,2,0) line(3,4,3,6,0) teteH=pict.new(8,8) draw.onpict(teteH) rect(2,1,5,7,2) rect(1,3,6,5) line(2,3,5,3,0) rect(3,0,4,3) teteB=pict.new(8,8) draw.onpict(teteB) rect(2,0,5,6,2) rect(1,2,6,4) line(2,4,5,4,0) rect(3,4,4,7) teteG=pict.new(8,8) draw.onpict(teteG) rect(1,2,7,5,2) rect(3,1,5,6) line(3,2,3,5,0) rect(0,3,3,4) teteD=pict.new(8,8) draw.onpict(teteD) rect(0,2,6,5,2) rect(2,1,4,6) line(4,2,4,5,0) rect(4,3,7,4) virHD=pict.new(8,8) draw.onpict(virHD) rect(2,0,5,4,2) rect(3,2,7,5,2) virHG=pict.new(8,8) draw.onpict(virHG) rect(2,0,5,4,2) rect(0,2,4,5,2) virBD=pict.new(8,8) draw.onpict(virBD) rect(2,3,5,7,2) rect(3,2,7,5,2) virBG=pict.new(8,8) draw.onpict(virBG) rect(2,3,5,7,2) rect(0,2,4,5,2) horiz=pict.new(8,8) draw.onpict(horiz) rect(0,2,7,5,2) vert=pict.new(8,8) draw.onpict(vert) rect(2,0,5,7,2) keypad(0) showgraph() draw.onbuffer() LARGEUR=20 HAUTEUR=27 POM=4 MUR=20 map={} function ran(n) return int(n*math.random()) end function newPom() local x,y,t t=ran(3) repeat x,y=ran(LARGEUR),ran(HAUTEUR) until map[y*LARGEUR+x]==0 map[y*LARGEUR+x]=t+3 draw.circle(x*8+4,y*8+4,3,t+1) end function newMur(x,y) if x==nil or y==nil then repeat x,y=ran(LARGEUR),ran(HAUTEUR) until map[y*LARGEUR+x]==0 and y~=int(HAUTEUR/2) end x,y=int(x),int(y) map[y*LARGEUR+x]=2 draw.pict(x*8,y*8,mur) end function init() local i for i=0,LARGEUR*HAUTEUR-1 do map[i]=0 end if lvl==1 then for i=1,MUR do newMur() end end if lvl==2 then for i=0,LARGEUR-1 do newMur(i,0) newMur(i,HAUTEUR-1) end for i=1,HAUTEUR-2 do newMur(0,i) newMur(LARGEUR-1,i) end end if lvl==3 then for i=3,16 do if i<9 or i>10 then newMur(3,i+3) newMur(16,i+3) newMur(i,5) newMur(i,20) end end end if lvl==4 then for i=0,41 do newMur(i%6+2,i/6+4) newMur(i%6+2,i/6+16) newMur(i%6+12,i/6+4) newMur(i%6+12,i/6+16) end end for i=1,POM do newPom() end end function jeu() local x,y,dx,dy,dx1,dy1,i,j,continuer,pict,saveX,saveY x=int(LARGEUR/2) y=int(HAUTEUR/2) saveX,saveY={x},{y} dx,dy=1,0 taille=5 i=0 continuer=true draw.clear() init() draw.onscreen() update() text(60,98,"Ready?",1,12,1) for j=0,20000 do end update() text(75,98,"Go",1,12,1) for j=0,15000 do end draw.onbuffer() while continuer do if testkey(K_0) then draw.onscreen() fenetre(110,55,1) text(65,95,"Pause") text(45,115,"Press [0] key") waitkey(K_0) draw.onbuffer() end i=(i+1)%taille dx1,dy1=dx,dy if dy==0 then pict=horiz if testkey(K_UP) or testkey(K_8) then if dx1>0 then pict=virHG else pict=virHD end dx,dy=0,-1 end if testkey(K_DOWN) or testkey(K_2) then if dx1>0 then pict=virBG else pict=virBD end dx,dy=0,1 end else pict=vert if testkey(K_LEFT) or testkey(K_4) then if dy1>0 then pict=virHG else pict=virBG end dx,dy=-1,0 end if testkey(K_RIGHT) or testkey(K_6) then if dy1>0 then pict=virHD else pict=virBD end dx,dy=1,0 end end draw.pict(8*x,8*y,pict) x=(x+dx)%LARGEUR y=(y+dy)%HAUTEUR if saveX[i]~=nil then a,b=saveX[i],saveY[i] map[b*LARGEUR+a]=0 rect(8*a,8*b,8*a+7,8*b+7,0,0,0) end if dx==1 then draw.pict(8*x,8*y,teteD) end if dx==-1 then draw.pict(8*x,8*y,teteG) end if dy==1 then draw.pict(8*x,8*y,teteB) end if dy==-1 then draw.pict(8*x,8*y,teteH) end case=map[y*LARGEUR+x] if case~=0 then if case>=3 then newPom() taille=taille+case-2 else continuer=false end end saveX[i],saveY[i]=x,y map[y*LARGEUR+x]=1 update() for j=0,3000-1000*vitesse do end end end function fenetre(x,y,center) local x1,x2,y1,y2 x1=(160-x)/2 x2=160-x1 if center==1 then y1=(216-y)/2 else y1=35+(181-y)/2 end y2=y1+y rect(x1,y1,x2,y2,1,1,0) rect(x1+2,y1+2,x2-1,y2-1) rect(x1+3,y1+3,x2-3,y2-3) end function menu() local i,j,k,y y=0 draw.clear() for i=0,5 do text(i,20+i/2,"SNAKE",1,40,3) end text(55,55,"par PierrotLL",1,8) text(13,190,"Merci a Julien pour CPLua") repeat fenetre(120,100) text(67,90,"Jouer") text(57,105,"Vitesse: "..vitesse) text(45,120,"Nb de pomme: "..POM) text(60,135,"Niveau: "..lvl) i=0 if lvl==1 then text(48,150,"Nb de mur: "..MUR) i=1 end rect(34,15*y+87,126,15*y+101,1,2,1) rect(33,15*y+88,127,15*y+100) update() k=waitkey() if k==K_DOWN then y=(y+1)%(4+i) end if k==K_UP then y=(y-1)%(4+i) end j=0 if k==K_LEFT then j=-1 end if k==K_RIGHT then j=1 end if y==1 then vitesse=(vitesse+j)%4 end if y==2 then POM=(POM+j)%100 end if y==3 then lvl=(lvl+j)%5 end if y==4 then MUR=(MUR+j)%100 end until k==K_EXE and y==0 end lvl=1 vitesse=1 while 1 do menu() jeu() fenetre(80,40,1) text(60,105,"taille:"..taille) update() waitkey(K_EXE) end74