Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Basic Pico-8 Game
in_progress = 0
start_end_game = 1
game_over = 2
left=0 right=1 up=2 down=3
valid_moves = {left,right,up,down}
function _init()
player = {}
player.x = flr(rnd(120))
player.y = flr(rnd(114)+8)
player.startsprite = 0
player.endsprite = 1
player.sprite = 0
player.speed = 2
player.stuck = 0
enemy = {}
enemy.x = flr(rnd(120))
enemy.y = flr(rnd(114)+8)
enemy.startsprite = 4
enemy.endsprite = 5
enemy.sprite = 4
enemy.speed = 1
enemy.stuck = 0
state = in_progress
score = 0
end
function move(unit)
unit.sprite += 1
if unit.sprite > unit.endsprite then
unit.sprite = unit.startsprite
end
end
function draw_unit(unit) spr(unit.sprite, unit.x, unit.y) end
function get_map_cell(unit) return mget(flr((unit.x+4)/8), flr((unit.y-4)/8)) end
function hit_house(unit) return get_map_cell(unit) == 16 end
function move_unit(unit, direction)
unit.moving = false
if hit_house(unit) then
unit.stuck += 1
if unit.stuck > 4 then
unit.stuck = 0
else
return
end
end
if direction == left and
unit.x - unit.speed > 0 then
unit.x -= unit.speed
unit.moving = true
end
if direction == right and
unit.x + unit.speed < 120 then
unit.x += unit.speed
unit.moving = true
end
if direction == up and
unit.y - unit.speed > 8 then
unit.y -= unit.speed
unit.moving = true
end
if direction == down and
unit.y + unit.speed < 120 then
unit.y += unit.speed
unit.moving = true
end
if not unit.moving then
unit.sprite = unit.startsprite
else
move(unit)
end
end
function move_player()
for i=1,#valid_moves do
if btn(valid_moves[i]) then
move_unit(player, valid_moves[i])
end
end
end
function move_enemy()
if enemy.x > player.x then
move_unit(enemy, left)
end
if enemy.x < player.x then
move_unit(enemy, right)
end
if enemy.y > player.y then
move_unit(enemy, up)
end
if enemy.y < player.y then
move_unit(enemy, down)
end
enemy.speed += 0.0005
end
function distance(p0, p1)
dx=p0.x-p1.x dy=p0.y-p1.y
return sqrt(dx*dx+dy*dy)
end
function check_game_over()
if
distance(enemy,player) < 7
and state != game_over
then
state = start_end_game
end
end
function _update()
move_player()
move_enemy()
check_game_over()
end
function _draw()
cls()
if state == in_progress then
map(0,0,0,8,16,15)
draw_unit(player)
draw_unit(enemy)
score += 1
print("score: "..score)
elseif state == start_end_game then
sfx(0)
state = game_over
elseif state == game_over then
print("\135 game over \135")
print("your final score was: "..score)
print("press action to try again")
if btn(4) then
_init()
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment