Criei o jogo da cobrinha com PICO-8

Nesses últimos dias a notícia de falecimento do criador do Pascal me fez lembrar dos joguinhos que criava quando dava meus primeiros passos na programação.

Perdi todos eles, que estavam em algum HD que foi formatado. Já tentei encontrar mas sem sucesso. 😢

Entre os jogos que eu tinha feito para aprender a programar, eu gostava muito do Jogo da Cobrinha, aquele que vinha nos celulares Nokia, que ficaram bem populares no Brasil no início dos anos 2000.

Dessa vez usei PICO-8 ao invés de Pascal.

Para jogar:
https://lucasmncastro.itch.io/snake

Se você quiser hackear o jogo, pode copiar o código abaixo e colar no https://www.pico-8-edu.com/.

function _init()
 w=5   -- largura do pedaco
 l=5   -- comprimento inicial
 x=0+w -- posicao x
 y=0+w -- posicao y
 dir=1 -- direcao: l,r,u,d
 t1=0  -- tempo
 d1=5  -- razao para velocidade
 
 fg=5
 bg=11
 
 apple=nil -- comida
 head=nil  -- cabeca
 game_over=false
 list={}   -- pedacos da cobra
 
 -- inicializa a cobra
 for i=0,l-1 do
  add(list,{x=x+i*w,y=y})
 end
 
 -- ajusta a posicao x inicial
 x=x+((#list-1)*w)
end

function hit_body(_x,_y)
 for b in all(list) do
  -- cabeca nao bate nela mesma
  if b!=head then   
   if #list>1 and 
      _x==b.x and
      _y==b.y then
    return true
   end
  end
 end
 return false
end

function _update()
 if game_over then
  if btnp(4) or btnp(4) then
   _init()
  end
 else
  if (btnp(0) and 0!=avoid) dir=0
  if (btnp(1) and 1!=avoid) dir=1
  if (btnp(2) and 2!=avoid) dir=2
  if (btnp(3) and 3!=avoid) dir=3
  
  t1+=1
  
  if t1%d1==0 then  
   if (dir==0) then x=x-w; avoid=1 end
   if (dir==1) then x=x+w; avoid=0 end
   if (dir==2) then y=y-w; avoid=3 end
   if (dir==3) then y=y+w; avoid=2 end
   
   -- pega a comida
   if apple and
      apple.x==x and
      apple.y==y then
    apple=nil
    ?"\a1c2d2e2"
   else
    deli(list,1)
   end
   add(list,{x=x,y=y})
   head=list[#list]
   
   -- game over
   if x<0 or y<0 or
      x>124 or y>124 or
      hit_body(x,y) then
    game_over=true
    ?"\a1e2d2c2c2c2c2"
   end
 
   -- nova comida
   if not(apple) then
    local ax=flr(rnd((128-w)/w))*w
    local ay=flr(rnd((128-w)/w))*w
    apple={x=ax,y=ay}
    
    -- evita a comida no corpo
    for i in all(list) do
     if apple and 
        i.x==apple.x and
        i.y==apple.y then
      apple=nil
      break
     end
    end
   end
  end
 end
end

function _draw()
 if game_over then
  local txt= "game over!"
  t1+=1
  if t1%d1 == 0 then
   print(txt,64-#txt/2*4,60,bg)
  else
   print(txt,64-#txt/2*4,60,fg)
  end
 else
  cls(bg)
  rect(1,1,126,126,fg)
  for i in all(list) do
   rectfill(i.x+1,i.y+1,i.x+w,i.y+w,fg)
  end
  
  if apple then
   circ(apple.x+3,apple.y+3,1,fg)
  end
 end
end

Gostou? Me fala aí.

Assine minha newsletter sobre desenvolvimento de software.

Nessa newsletter eu compartilho dicas, opiniões e experiências interessantes com quem gosta de programar por profissão ou hobby.

Intuit Mailchimp


Publicado

em

por

Tags: