Skip to content

Instantly share code, notes, and snippets.

@lukemerrett
Created October 30, 2017 20:07
Show Gist options
  • Select an option

  • Save lukemerrett/fd387ff4d93bfc400d2b43142fb95d15 to your computer and use it in GitHub Desktop.

Select an option

Save lukemerrett/fd387ff4d93bfc400d2b43142fb95d15 to your computer and use it in GitHub Desktop.

Revisions

  1. lukemerrett created this gist Oct 30, 2017.
    145 changes: 145 additions & 0 deletions Basic_Game.lua
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,145 @@
    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