+163
snake.p8
+163
snake.p8
···
1
+
pico-8 cartridge // http://www.pico-8.com
2
+
version 42
3
+
__lua__
4
+
function _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
16
+
end
17
+
18
+
function _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
49
+
end
50
+
51
+
function _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)
78
+
end
79
+
80
+
function 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
106
+
end
107
+
108
+
function is_above(seg, other)
109
+
return seg.x==other.x and other.y<seg.y
110
+
end
111
+
112
+
function is_below(seg, other)
113
+
return seg.x==other.x and other.y>seg.y
114
+
end
115
+
116
+
function is_left(seg, other)
117
+
return seg.y==other.y and other.x<seg.x
118
+
end
119
+
120
+
function is_right(seg, other)
121
+
return seg.y==other.y and other.x>seg.x
122
+
end
123
+
124
+
function 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
129
+
end
130
+
__gfx__
131
+
0000000000bbbb000b3333b00b3333b000bbbb00000000000b3333b0000000008000000800000000000000000000000000000000000000000000000000000000
132
+
00000000bb3333b00b3333b00b3333b0bb3333bb000bbbbb0b3333b0000bbbbb0800008000000000000000000000000000000000000000000000000000000000
133
+
007007003333313bb333333bb333333b333333330bb333330b3333b000b333330080080000000000000000000000000000000000000000000000000000000000
134
+
000770003333333bb333333bb333333b33333333b33333330b3333b00b3333330008800000000000000000000000000000000000000000000000000000000000
135
+
000770003333333bb333333bb333333b33333333b33333330b3333b00b3333330008800000000000000000000000000000000000000000000000000000000000
136
+
007007003333313bb313313bb333333b333333330bb3333300b33b000b3333330080080000000000000000000000000000000000000000000000000000000000
137
+
00000000bb3333b00b3333b00b3333b0bb3333bb000bbbbb00b33b000b33333b0800008000000000000000000000000000000000000000000000000000000000
138
+
0000000000bbbb0000bbbb000b3333b000bbbb0000000000000bb0000b3333bb8000000800000000000000000000000000000000000000000000000000000000
139
+
ffffff9f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
140
+
ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
141
+
f9ffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
142
+
ffff9fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
143
+
ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
144
+
ffffff9f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
145
+
ff9fffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
146
+
ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
147
+
__map__
148
+
0210101010101010101010101010100200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
149
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
150
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
151
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
152
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
153
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
154
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
155
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
156
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
157
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
158
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
159
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
160
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
161
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
162
+
1010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
163
+
0210101010101010101010101010100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000