LE GRAND CLASSIQUE DES ANNEES 80
On ne présente plus ce jeu simple mais d’une efficacité redoutable.
Nokia est célèbre pour inclure le Snake dans la majorité de ses téléphones dans les années 80.
Dans ce tutoriel vous apprendrez a coder le jeu du Snake From Scratch (de A à Z) avec Pico-8 et le langage LUA. Pico-8 intègre un éditeur de code, mais aussi un éditeur de sprite et de son, ce qui vous permet de tout coder dans le même moteur.
LES REGLES
Vous dirigez le Snake, il ne peut pas sortir de l’écran, si rentrer en collision avec lui même.
Lorsque vous manger une pomme , le Snake grandit et vous récupérez 1 point.
TESTEZ LE JEU DU TUTORIEL
PICO-8 permet l’export en version Windows, Linux, Mac, Rpi, mais aussi en HTML.
Lien Itch.io : https://pareinjeanphilippe.itch.io/snake-pico-8
CODE SOURCE
Comme dans toute cartouche PICO-8 le code est accessible avec le jeu, mais voici le script du jeu :
-- the snake
-- by parein jean-philippe
function _init()
--snake head
head ={
x=64,
y=64,
prevx,
prevy,
sp=5,
dx=8,
dy=0,
spd=5
}
--snake body
snake={}
snake[1]=head
--generate pos grid multiple 8
mult8 = {}
for i=0,120,8 do
mult8[#mult8+1]=i
end
--apple
apple={
x=mult8[flr(rnd(#mult8)+1)],
y=mult8[flr(rnd(#mult8)+1)]}
f=0 --frame
game_over=false --end of game
score=0 --apples count
end
------------------------------
function _update()
f-=1
if game_over then
for i=#snake,1,-1 do
if f<0 then
make_particles(
snake[i].x,
snake[i].y)
del(snake,snake[i])
sfx(3)
f=2
end
end
if btnp(❎) then _init() end
return
end
if f<0 then
f=head.spd --limit speed
--move snake
head.prevx=head.x
head.prevy=head.y
--sanke grow
for i=#snake,2,-1 do
snake[i].x=snake[i-1].x
snake[i].y=snake[i-1].y
end
head.x+=head.dx
head.y+=head.dy
end
if btn(⬅️) and head.dx!=8 then
head.dx=-8
head.dy=0
head.sp=4
elseif btn(➡️) and head.dx!=-8 then
head.dx=8
head.dy=0
head.sp=5
elseif btn(⬆️) and head.dy!=8 then
head.dx=0
head.dy=-8
head.sp=2
elseif btn(⬇️) and head.dy!=-8 then
head.dx=0
head.dy=8
head.sp=3
end
--collision with apple
if(head.x==apple.x and
head.y==apple.y) then
apple={
x=mult8[flr(rnd(#mult8)+1)],
y=mult8[flr(rnd(#mult8)+1)]}
--snake grow
score+=1
sfx(0)
body={
x=head.prevx,y=head.prevy}
add(snake,body)
--speed up
if #snake-1==10 then
head.spd=4
sfx(2)
elseif #snake-1==20 then
head.spd=3
sfx(2)
elseif #snake-1==30 then
head.spd=2
sfx(2)
elseif #snake-1==50 then
sfx(2)
head.spd=1
end
end
--snake out of screen
if head.x<0 or head.x>120 or head.y<0 or head.y>120 then
game_over=true
end
--collision with snake
for i=2,#snake do
if snake[i].x==head.x and snake[i].y==head.y then
game_over=true
end
end
end
------------------------------
function _draw()
cls(1)
--game over
if game_over then
print("press ❎ to restart", 28,60)
end
--draw apple
spr(1, apple.x, apple.y)
--draw bodys
for s in all (snake) do
spr(6,s.x, s.y)
end
--draw snake head
if not game_over then
spr(head.sp,head.x, head.y)
end
--draw score
print("score "..score,1,1,7)
--draw particles
col=3
for p in all (parts) do
pset(p.x,p.y,col)
p.x+=(rnd(2)-1)*10
p.y+=(rnd(2)-1)*10
p.lt-=1
col=flr(rnd(15))
if(p.lt==0) then del(parts,p) end
end
end
--particles
parts={}
function make_particles(xx,yy)
for i=1,10 do
p = {x=xx,y=yy,lt=15}
add(parts,p)
end
end




