lil' pico-8 projeccts

Add snake

Changed files
+163
+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