lil' pico-8 projeccts
at main 8.7 kB view raw
1pico-8 cartridge // http://www.pico-8.com 2version 42 3__lua__ 4function _init() 5 snake={ 6 {x=5,y=4},--head 7 {x=4,y=4}, 8 {x=3,y=4} --tail 9 } 10 dir="➡️" 11 next_dir="➡️" 12 snake_speed=15 13 snake_tick=snake_speed 14 food_x=6 15 food_y=6 16end 17 18function _update() 19 if btn(⬇️) then next_dir="⬇️" end 20 if btn(⬆️) then next_dir="⬆️" end 21 if btn(➡️) then next_dir="➡️" end 22 if btn(⬅️) then next_dir="⬅️" end 23 24 if snake_tick <= 0 then 25 dir=next_dir 26 new_p={x=snake[1].x,y=snake[1].y} 27 if dir=="⬇️" then new_p.y+=1 end 28 if dir=="⬆️" then new_p.y-=1 end 29 if dir=="⬅️" then new_p.x-=1 end 30 if dir=="➡️" then new_p.x+=1 end 31 32 for i=#snake,1,-1 do 33 snake[i+1]=snake[i] 34 end 35 deli(snake,#snake) 36 snake[1]=new_p 37 38 snake_tick=snake_speed 39 40 if snake[1].x==food_x and snake[1].y==food_y then 41 local snake_tail={x=snake[#snake].x,y=snake[#snake].y} 42 add(snake,snake_tail) 43 food_x=flr(rnd(16)) 44 food_y=flr(rnd(16)) 45 end 46 else 47 snake_tick-=1 48 end 49end 50 51function _draw() 52 cls() 53 map() 54 55 local i=1 56 for p in all(snake) do 57 local x=p.x*8 58 local y=p.y*8 59 if i==1 then 60 draw_head(x,y,dir) 61 elseif i==#snake then 62 if is_above(snake[i], snake[i-1]) then 63 spr(6,x,y,1,1) 64 elseif is_left(snake[i], snake[i-1]) then 65 spr(5,x,y,1,1,true) 66 elseif is_right(snake[i], snake[i-1]) then 67 spr(5,x,y,1,1) 68 else 69 spr(6,x,y,1,1,false,true) 70 end 71 else 72 draw_segment(x,y,i) 73 end 74 i+=1 75 end 76 77 circfill(food_x*8+4,food_y*8+4,2.5,10) 78end 79 80function draw_segment(x,y,s) 81 local prev=snake[s-1] 82 local seg=snake[s] 83 local nxt=snake[s+1] 84 85 if prev.y==seg.y and nxt.y==seg.y then 86 --vertical 87 spr(4,x,y) 88 elseif prev.x==seg.x and nxt.x==seg.x then 89 --horizontal 90 spr(3,x,y) 91 else 92 --todo corners 93 local flip_x=false 94 local flip_y=false 95 96 if is_above(seg,prev) or is_above(seg,nxt) then 97 flip_y=true 98 end 99 100 if is_left(seg,prev) or is_left(seg,nxt) then 101 flip_x=true 102 end 103 104 spr(7,x,y,1,1,flip_x,flip_y) 105 end 106end 107 108function is_above(seg, other) 109 return seg.x==other.x and other.y<seg.y 110end 111 112function is_below(seg, other) 113 return seg.x==other.x and other.y>seg.y 114end 115 116function is_left(seg, other) 117 return seg.y==other.y and other.x<seg.x 118end 119 120function is_right(seg, other) 121 return seg.y==other.y and other.x>seg.x 122end 123 124function draw_head(x,y,dir) 125 if dir=="⬆️" then spr(2,x,y,1,1,false,true) end 126 if dir=="⬇️" then spr(2,x,y) end 127 if dir=="⬅️" then spr(1,x,y,1,1,true) end 128 if dir=="➡️" then spr(1,x,y) end 129end 130__gfx__ 1310000000000bbbb000b3333b00b3333b000bbbb00000000000b3333b0000000008000000800000000000000000000000000000000000000000000000000000000 13200000000bb3333b00b3333b00b3333b0bb3333bb000bbbbb0b3333b0000bbbbb0800008000000000000000000000000000000000000000000000000000000000 133007007003333313bb333333bb333333b333333330bb333330b3333b000b333330080080000000000000000000000000000000000000000000000000000000000 134000770003333333bb333333bb333333b33333333b33333330b3333b00b3333330008800000000000000000000000000000000000000000000000000000000000 135000770003333333bb333333bb333333b33333333b33333330b3333b00b3333330008800000000000000000000000000000000000000000000000000000000000 136007007003333313bb313313bb333333b333333330bb3333300b33b000b3333330080080000000000000000000000000000000000000000000000000000000000 13700000000bb3333b00b3333b00b3333b0bb3333bb000bbbbb00b33b000b33333b0800008000000000000000000000000000000000000000000000000000000000 1380000000000bbbb0000bbbb000b3333b000bbbb0000000000000bb0000b3333bb8000000800000000000000000000000000000000000000000000000000000000 139ffffff9f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 140ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 141f9ffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 142ffff9fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 143ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 144ffffff9f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 145ff9fffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 146ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 147__map__ 1480210101010101010101010101010100200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1491010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1501010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1511010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1521010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1531010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1541010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1551010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1561010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1571010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1581010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1591010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1601010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1611010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1621010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1630210101010101010101010101010100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000