lil' pico-8 projeccts
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