̬̬̬̈̬̬̬̬̈̬̬̬̬̬̪쬪̬̬̬̪쬪 = ;offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offfmmfmfffݍ؍ݍ/""""""-""""""?33333333333offfmffmfff݈ݍ݈/"""""-""""""?33333333333offfmfmfmfff݈؍ݍ/""""""-""""""?33333333333offfmmfmfff؍؍؍/"""""-""""""?3333333=3333offffmfff݈݈/""""""-""""""?3333=33333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333offffffffffffff/""""""""""""""?33333333333333/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""-""""""ODDDDMDDDDD/"""""-""""""ODDDDDMDMDDDD/""""""-""""""ODDDDDDDDDDD/"""""-""""""ODDDDMMDDDDDD/""""""-""""""ODDDDDMDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD/""""""""""""""ODDDDDDDDDDDDDD?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333?33333333333?33333333333?33333333333?33333333333?33333333333?3333333=3333?3333333=3333?3333=33333?3333=33333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333?33333333333333_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU _UUUUUUUUUUU_UUUUUUUUUUU _UUUUUUUUUU _UUUUU]]UUUU_UUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUU_UUUUUUUUUUUUUUj-- title: 2048 -- author: Sava -- desc: simple 2048 demake -- version: 0.1 -- script: lua w=240 h=136 grid = {} nextGrid = {} anim = {} finish = function()end t = 0 moves = 0 gameOver = false lastTime = -500 pressedKeys = {false, false, false, false} function BOOT() for i=1, 4 do grid[i]={} nextGrid[i]={} anim[i]={} for j=1, 4 do --local pos = i+j*4-4 --grid[i][j]=math.floor(math.pow(2, pos)) grid[i][j]=0 nextGrid[i][j]=0 anim[i][j]={x=i, y=j} end end gameOver = false moves = 0 trace("start") end function TIC() cls(0) if btnp(4) then BOOT() end if btnp(0) or btnp(1) or btnp(2) or btnp(3) then if animT() < 1 then finish() finish = function()end t = 0 lastTime = time()-1000 local r1, r2 = math.random(1, 4), math.random(1, 4) if grid[r1][r2] == 0 then if math.random() > 0.2 then grid[r1][r2] = 2 else grid[r1][r2] = 4 end end end moves=moves+1 if pressedKeys[1]==true and pressedKeys[2]==true and pressedKeys[3]==true and pressedKeys[4]==true then gameOver = true end end if btnp(0) then move1(0) end if btnp(1) then move1(1) end if btnp(2) then move1(2) end if btnp(3) then move1(3) end if animT() < 2 then t = animT() if animT() > 1 then finish() finish = function()end t = 0 lastTime = time()-1000 local r1, r2 = math.random(1, 4), math.random(1, 4) if grid[r1][r2] == 0 then if math.random() > 0.2 then grid[r1][r2] = 2 else grid[r1][r2] = 4 end end end end draw() end function animT() return (time()-lastTime)/100 end function move1(dir) for i=1, 4 do for j=1, 4 do nextGrid[i][j] = grid[i][j] end end sfx(0, dir*6+12, 60, 0, 10) if dir == 0 then for i=1, 4 do for j=2, 4 do move(i, j, i, j, 0, -1) end end elseif dir == 1 then for i=1, 4 do for j=3, 1, -1 do move(i, j, i, j, 0, 1) end end elseif dir == 2 then for j=1, 4 do for i=2, 4 do move(i, j, i, j, -1, 0) end end elseif dir == 3 then for j=1, 4 do for i=3, 1, -1 do move(i, j, i, j, 1, 0) end end end local noMove = true for i=1, 4 do for j=1, 4 do if grid[i][j] ~= nextGrid[i][j] then noMove = false end end end if noMove then pressedKeys[dir+1] = true else pressedKeys[1] = false pressedKeys[2] = false pressedKeys[3] = false pressedKeys[4] = false end finish = function() for i=1, 4 do for j=1, 4 do grid[i][j] = nextGrid[i][j] anim[i][j] = {x=i, y=j} end end end lastTime = time() end function move(sx, sy, x, y, dx, dy) if x+dx < 1 or x+dx > 4 or y+dy < 1 or y+dy > 4 then return end if nextGrid[x][y] ~= 0 then if nextGrid[x+dx][y+dy] == 0 then nextGrid[x+dx][y+dy] = nextGrid[x][y] nextGrid[x][y] = 0 anim[sx][sy] = {x=anim[sx][sy].x+dx, y=anim[sx][sy].y+dy} move(sx, sy, x+dx, y+dy, dx, dy) elseif nextGrid[x+dx][y+dy] == nextGrid[x][y] then nextGrid[x+dx][y+dy] = nextGrid[x][y] + nextGrid[x+dx][y+dy] nextGrid[x][y] = 0 anim[sx][sy] = {x=anim[sx][sy].x+dx, y=anim[sx][sy].y+dy} end end end function draw() if gameOver then print("Game Over!\nPress A to retry", 130, 20) end for i=1, 4 do for j=1, 4 do if grid[i][j] > 0 then local lx = lerp(i, anim[i][j].x, t) local ly = lerp(j, anim[i][j].y, t) local x, y = lx*32-32, ly*32-32 rect(x, y, 32, 32, math.log(grid[i][j], 2)-1) local s = print(grid[i][j], 0, -50) print(grid[i][j], x+16-math.floor(s/2), y+16-3, 13) end end end for i=1, 4 do for j=1, 4 do rectb(i*32-32, j*32-32, 32, 32, 15) end end print("moves: "..moves, 130, 0) end function lerp(s, e, t) return s*(1-t)+e*t end