alestane icon

Sokoban movement (complete)

alestane | PRO | 01/02/14 02:26:50 PM UTC | 0 ⭐ | 345 👁️ | Never ⏰ | []
Lua |

940 B

|

None

|

0 👍

/

0 👎

local function move(map, startX, startY, dX, dY)
    local targetX, targetY = startX + dX, startY + dY
    if not map[targetX][targetY] then return startX, startY; end
    if map[targetX][targetY].isBox then
        local slideX, slideY = targetX + dX, targetY + dY
        if not (map[slideX] and map[slideX][slideY] and map[slideX][slideY].isWalkable) then return startX, startY; end
        local empty, box = map[slideX][slideY], map[targetX][targetY]
        local sprite = tileBlox[box.id]
        sprite.x, sprite.y = empty.x, empty.y
        empty.id =  box.id
        empty.isBox = true
        empty.isWalkable = false
        box.id = 0
        box.isWalkable = true
        box.isBox = false
    end
    if map[targetX][targetY].isWalkable then
        local target, origin = map[targetX][targetY], map[startX][startY]
        hero.x, hero.y = target.x, target.y
        target.isHero = true
        target.isWalkable = false
        origin.isHero = false
        origin.isWalkable = true
        return targetX, targetY
    end
    return startX, startY
end

Comments