local FONT = love.graphics.newFont("cour.ttf", 30) love.graphics.setFont(FONT) local LEVELS = require "levels" local CURRENT_LEVEL = 0 local LONGEST_FRAME = 0 local GRAVITY = 100 local LVL_HEIGHT = 600 local LVL_WIDTH = 800 local PLAYER = { x = 0, y = 0, w = 40, h = 40, dx = 0, dy = 0, speed = 500, jump = 400, color = {140, 198, 63} } local COLOR_WHITE = {1,1,1} local COLOR_RED = {241/255, 90/255, 36/255} local COLOR_BG = {26/255,26/255,26/255} local COLOR_GOAL = {41/255, 171/255, 226/255} local GOAL = {x = 0, y = 0, w = 40, h = 40, color=COLOR_GOAL} local BLOCKS = {} local function add_block(x,y,w,h, d) if type(x) == "table" then table.insert(BLOCKS, x) elseif type(h) == "string" then table.insert(BLOCKS,{x=x,y=y,w=w,h=-30,text=h, color = COLOR_WHITE}) elseif d then table.insert(BLOCKS,{x=x,y=y,w=w,h=h, color = COLOR_RED}) else table.insert(BLOCKS,{x=x,y=y,w=w,h=h, color = COLOR_WHITE}) end end local function load_level (lvl_obj) BLOCKS = {} GOAL.x = lvl_obj.goal[1] GOAL.y = lvl_obj.goal[2] GOAL.w = lvl_obj.goal[3] GOAL.h = lvl_obj.goal[4] add_block(GOAL) PLAYER.x = lvl_obj.player[1] PLAYER.y = lvl_obj.player[2] PLAYER.dx = lvl_obj.player[3] or 0 PLAYER.dy = lvl_obj.player[4] or 0 add_block(PLAYER) for _, block_data in ipairs(lvl_obj.blocks) do add_block(block_data[1],block_data[2],block_data[3],block_data[4], block_data[5]) end end local function update_player_pos (player, dt) --if love.keyboard.isDown("w") then -- player.dy = player.dy - player.jump * dt --end if love.keyboard.isDown("a") or love.keyboard.isDown("left") then player.dx = player.dx - player.speed * dt end if love.keyboard.isDown("d") or love.keyboard.isDown("right") then player.dx = player.dx + player.speed * dt end player.dx = player.dx * 0.99 player.dy = player.dy + GRAVITY * dt player.x = (player.x + player.dx * dt + LVL_WIDTH) % LVL_WIDTH player.y = (player.y + player.dy * dt + LVL_HEIGHT) % LVL_HEIGHT local collided = nil for _, block in ipairs(BLOCKS) do if block ~= player and block.x < player.x + player.w and player.x < block.x + block.w and player.y < block.y + block.h and player.y + player.h > block.y then collided = block break end end if collided == GOAL then CURRENT_LEVEL = CURRENT_LEVEL + 1 load_level(LEVELS[CURRENT_LEVEL]) elseif collided then if collided.color == COLOR_RED then load_level(LEVELS[CURRENT_LEVEL]) player.dy = 0 elseif not collided.text then player.y = collided.y - player.h player.dy = 0 end end end function love.load () love.graphics.setBackgroundColor(COLOR_BG) CURRENT_LEVEL = 1 load_level(LEVELS[CURRENT_LEVEL]) end function love.update (dt) LONGEST_FRAME = math.max(LONGEST_FRAME, dt) update_player_pos(PLAYER, dt) end function love.draw () for _, block in ipairs(BLOCKS) do love.graphics.setColor(block.color) if block.text then love.graphics.printf(block.text, block.x, block.y, block.w, "center") else love.graphics.rectangle("fill", block.x, block.y, block.w, block.h) end end end