亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

lua+love2d制作的2048游戲

2024-07-21 23:04:24
字體:
來源:轉載
供稿:網友

使用lua和love2d編寫的pc版2048游戲,適用于linux和windows平臺。依賴love2d游戲引擎,love2d需0.9及以上版本。

core.lua

 

復制代碼 代碼如下:

core = {}
core.block = {}
core.score = 0
core.best = 0
love.filesystem.setIdentity("2048")
local function get_best()
    if not love.filesystem.exists("best") then
        core.best = 0
        return
    end
    core.best = love.filesystem.read("best")
    core.best = tonumber(core.best)
end
function core.initial()
    core.block = {}
    local pos1 = love.math.random(1, 16)
    local pos2
    while true do
        pos2 = love.math.random(1, 16)
        if pos2 ~= pos1 then break end
    end
    local val
    val = love.math.random()
    if val < 0.8 then val = 2 else val = 4 end
    core.block[pos1] = val
    val = love.math.random()
    if val < 0.8 then val = 2 else val = 4 end
    core.block[pos2] = val
    core.score = 0
end
function core.set_best()
    if core.score > core.best then
        core.best = core.score
        local ret, err = love.filesystem.write("best", core.best)
    end
end
function core.tblclone(t1, num)
    local t2 = {}
    for i = 1, num do
        t2[i] = t1[i]
    end
    return t2
end
function core.isfull(testtbl)
    local block
    if testtbl then block = testtbl else block = core.block end
    for i = 1, 16 do
        if not block[i] then return false end
    end
    return true
end
local function combine(lstart, lend, lstep, rstart, rend, rstep, flag, testtbl)
    local index
    local tflag, block
    if testtbl then
        tflag = true
        block = testtbl
    else
        block = core.block
    end
    local cflag = false
    for i = lstart, lend, lstep do
        for j = rstart, rend, rstep do
            if flag == "up" then index = (i - 1) * 4 + j
            elseif flag == "down" then index = (i + 1) * 4 + j
            elseif flag == "left" then index = i * 4 + j - 1
            else index = i * 4 + j + 1 end
            if block[index] and block[i * 4 + j] and
            block[index] == block[i * 4 + j] and
            block[index] < 2048 then
                cflag = true
                if tflag then return cflag end
                block[index] = 2 * block[i * 4 + j]
                block[i * 4 + j] = nil
                core.score = core.score + block[index]
            end
        end
    end
    return cflag
end
local function move(lstart, lend, lstep, rstart, rend, rstep, flag)
    local mflag = false
    local index, kstart, kend, kstep
    for i = lstart, lend, lstep do
        for j = rstart, rend, rstep do
            if flag == "up" then
                kstart = 0
                kend = i - 1
                kstep = 1
            elseif flag == "down" then
                kstart = 3
                kend = i + 1
                kstep = -1
            elseif flag == "left" then
                kstart = 1
                kend = j - 1
                kstep = 1
            else
                kstart = 4
                kend = j + 1
                kstep = -1
            end
            for k = kstart, kend, kstep do
                if flag == "up" or flag == "down" then index = k * 4 + j
                else index = i * 4 + k end
                if not core.block[index] and core.block[i * 4 + j] then
                    core.block[index] = core.block[i * 4 + j]
                    core.block[i * 4 + j] = nil
                    mflag = true
                    break
                end
            end
        end
    end
    return mflag
end
local function do_tsk(lstart, lend, lstep, rstart, rend, rstep, flag, testtbl)
    if testtbl then return combine(lstart, lend, lstep, rstart, rend, rstep, flag, testtbl) end
    local mret = move(lstart, lend, lstep, rstart, rend, rstep, flag)
    local cret = combine(lstart, lend, lstep, rstart, rend, rstep, flag)
    if not mret and not cret then return false end
    core.score = core.score + 1
    move(lstart, lend, lstep, rstart, rend, rstep, flag)
    return true
end
function core.up_move(testtbl)
    return do_tsk(1, 3, 1, 1, 4, 1, "up", testtbl)
end
function core.down_move(testtbl)
    return do_tsk(2, 0, -1, 1, 4, 1,"down", testtbl)
end
function core.left_move(testtbl)
    return do_tsk(0, 3, 1, 2, 4, 1, "left", testtbl)
end
function core.right_move(testtbl)
    return do_tsk(0, 3, 1, 3, 1, -1, "right", testtbl)
end
function core.new_block()
    local val = love.math.random()
    if val < 0.8 then val = 2 else val = 4 end
    local empty_tbl = {}
    for i = 1, 16 do
        if not core.block[i] then
            table.insert(empty_tbl, i)
        end
    end
    if #empty_tbl == 1 then
        return {index = empty_tbl[1], value = val}
    end
    local pos = love.math.random(1, #empty_tbl)
    return {index = empty_tbl[pos], value = val}
end
get_best()
return core

 

main.lua

 

復制代碼 代碼如下:

local core = require("core")
local block_pic = {}
local bk
local over_flag = false
local new_block = {flag = false}
local wH    --window height
local wW    --window weight
local bW    --block width
local startpos = {}
local delay = 0
function love.load()
    love.window.setFullscreen()
    wH = love.window.getHeight()
    wW = love.window.getWidth()
    bW = 0.8 * wH / 4
    bk = love.graphics.newImage("src/bk.jpg")
    for i = 1, 11 do
        block_pic[tostring(math.pow(2,i))] = love.graphics.newImage("src/"..tostring(math.pow(2,i))..".PNG")
    end
    love.graphics.setBackgroundColor(255, 255, 255)
    love.graphics.setNewFont(24)
    love.graphics.setColor(255, 255, 255)
    core.initial()
end
local function draw_block(index, value)
    local line = math.modf((index - 1)/4)
    local row = (index - 1) % 4
    local pic_index = tostring(value)
    love.graphics.draw(block_pic[pic_index], 0.1 * wH + row * bW, 0.1 * wH + line * bW, 0, bW/block_pic[pic_index]:getWidth(), bW/block_pic[pic_index]:getHeight())
end
function love.draw()
    local scorestr = "SCORE:/n"..core.score.."/nBEST:/n"..core.best
    love.graphics.draw(bk, 0, 0, 0, wW/bk:getWidth(), wH/bk:getHeight())
    love.graphics.setColor(255, 255, 255)
    love.graphics.rectangle("line", 0.1 * wH, 0.1 * wH, 0.8 * wH, 0.8 * wH)
    for i = 1, 16 do
        if core.block[i] then
            draw_block(i, core.block[i])
        end
    end
    if new_block.flag then
        if delay < 10 then delay = delay + 1
        else
            draw_block(new_block.index, new_block.value)
            core.block[new_block.index] = new_block.value
            new_block.flag = false
            delay = 0
        end
    end
    love.graphics.print(scorestr, wH, wH * 0.1)
    if over_flag then
        love.graphics.setColor(0, 0, 255)
        love.graphics.rectangle("fill", 0.25 * wW, 0.25 * wH, 0.5 * wW, 0.5 * wH)
        love.graphics.setColor(255,255,255)
        love.graphics.print(scorestr, 0.45 * wW, 0.45 * wH)
    end
end
function love.mousepressed(x, y, button)
    if button == 'l' then
        startpos.x = x
        startpos.y = y
    end
end
function love.mousereleased(x, y, button)
    if button == 'l' then
        if over_flag then
            over_flag = false
            core.initial()
            return
        end
        local x_dis = x - startpos.x
        local y_dis = y - startpos.y
        local ret
        if y_dis < 0 and math.abs(y_dis) > math.abs(x_dis) then
            ret = core.up_move()
        elseif y_dis > 0 and math.abs(y_dis) > math.abs(x_dis) then
            ret = core.down_move()
        elseif x_dis < 0 and math.abs(x_dis) > math.abs(y_dis) then
            ret = core.left_move()
        elseif x_dis > 0 and math.abs(x_dis) > math.abs(y_dis) then
            ret = core.right_move()
        end
        if not ret then return end
        new_block = core.new_block()
        if not new_block then return end
        new_block.flag = true
        local testtbl = core.tblclone(core.block, 16)
        testtbl[new_block.index] = new_block.value
        if core.isfull(testtbl) then
            if core.up_move(testtbl) or core.down_move(testtbl) or core.left_move(testtbl) or core.right_move(testtbl) then
                return
            end
            core.set_best()
            over_flag = true
        end
    end
end

 

以上便是本文的全部內容了,希望大家能夠喜歡。也希望通過這幾個2048小游戲的代碼,能給到大家一些幫助

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级片在线播放| 欧美一级在线播放| 久久综合久久美利坚合众国| 92国产精品久久久久首页| 国产自摸综合网| 少妇高潮 亚洲精品| 成人在线激情视频| 国产福利成人在线| 国产精品久久久久久五月尺| 国产69精品久久久久久| 午夜精品久久久久久久99热| 78m国产成人精品视频| 欧美超级免费视 在线| 日韩精品在线视频美女| 91精品国产自产在线| 亚洲男人天堂九九视频| 亚洲美女又黄又爽在线观看| 国产精品精品久久久久久| 在线丨暗呦小u女国产精品| 国产精品自拍网| 成人天堂噜噜噜| 久久精品国产一区| 一个人www欧美| 国产狼人综合免费视频| 欧美国产日韩中文字幕在线| 亚洲丁香婷深爱综合| 国内精品久久久久久久| 狠狠做深爱婷婷久久综合一区| 欧美超级乱淫片喷水| 日韩一区av在线| 美女啪啪无遮挡免费久久网站| 国产一区二区日韩精品欧美精品| 欧美第一页在线| 亚洲毛片在线观看.| 亚洲精品国产精品国自产在线| 日韩a**站在线观看| 欧美一级免费看| 97精品一区二区三区| 国产日韩av在线播放| 久久久97精品| 91久久久久久久久久久| 精品一区二区三区四区在线| 91情侣偷在线精品国产| 国产精品成人av性教育| 91久久精品美女高潮| 福利视频一区二区| 亚洲精品99久久久久中文字幕| 国产在线拍揄自揄视频不卡99| 日韩av影视综合网| 亚洲欧洲成视频免费观看| 欧美国产一区二区三区| 欧美大肥婆大肥bbbbb| 国产精品三级久久久久久电影| 久久福利网址导航| 亚洲男人天堂2023| 亚洲一区二区三区四区视频| 亚洲第一视频网| 亚洲japanese制服美女| 国产一区二区三区精品久久久| 欧美在线观看网址综合| 欧美在线免费视频| 国产91在线高潮白浆在线观看| 国产精品xxxxx| 日韩精品免费在线视频| 日韩av日韩在线观看| 亚洲男人天天操| 欧美性猛交xxxx富婆弯腰| 亚洲视频在线观看视频| 成人性教育视频在线观看| 成人国产精品久久久久久亚洲| 欧美国产极速在线| 精品无人国产偷自产在线| 亚洲黄色在线看| 北条麻妃久久精品| 欧美精品videos| 亚洲免费视频一区二区| 欧美精品电影免费在线观看| 亚洲欧美日韩图片| 最近中文字幕2019免费| 国产欧美精品一区二区三区-老狼| 精品亚洲一区二区三区在线观看| 91亚洲精华国产精华| 亚洲伊人第一页| 69**夜色精品国产69乱| 91精品久久久久久久久不口人| 国产精品福利无圣光在线一区| 亚洲色图欧美制服丝袜另类第一页| 91在线观看免费高清| 亚洲精品视频免费| 欧美精品电影在线| 亚洲欧美在线免费| 在线播放日韩专区| 国产精品igao视频| 琪琪第一精品导航| 欧美视频裸体精品| 日韩欧美成人网| 精品国产欧美一区二区五十路| 亚洲国产精品小视频| 91精品国产91久久久久久久久| 国产欧美日韩中文字幕在线| 色综合久久精品亚洲国产| 国产精品视频26uuu| 日韩在线播放av| 国产日韩欧美成人| 国产亚洲aⅴaaaaaa毛片| 丝袜美腿精品国产二区| 一区二区欧美久久| 一区二区三区在线播放欧美| 亚洲精品丝袜日韩| 中文字幕亚洲综合久久| 午夜精品美女自拍福到在线| 成人福利免费观看| 国产欧美日韩免费看aⅴ视频| 国产精品美女久久久久久免费| 久久精品成人欧美大片古装| 日韩亚洲成人av在线| 国产欧美中文字幕| xvideos国产精品| 91高清视频免费观看| 成人乱人伦精品视频在线观看| 国产一区二区三区免费视频| 成人中文字幕+乱码+中文字幕| 亚洲人午夜色婷婷| 久久久免费精品视频| 91精品国产免费久久久久久| 日本高清不卡的在线| 成人中文字幕在线观看| 姬川优奈aav一区二区| 亚洲一区美女视频在线观看免费| 欧美极度另类性三渗透| 国产成人av网| 久热精品视频在线观看一区| 精品久久久久久久久国产字幕| 国产精品视频免费观看www| 欧美美女15p| 91精品国产成人| 亚洲缚视频在线观看| 黑人巨大精品欧美一区二区免费| 国产精品视频最多的网站| 亚洲直播在线一区| 亚洲国产日韩一区| 最新国产精品拍自在线播放| 成人午夜激情免费视频| 亚洲片在线资源| 中文字幕成人精品久久不卡| 91天堂在线视频| 国产一区二区三区高清在线观看| 国产成人精品亚洲精品| 欧洲成人在线观看| 亚洲视频网站在线观看| 国产日韩欧美在线看| 欧美亚洲日本网站| 亚洲欧美制服第一页| 日韩欧美aaa| 精品国产一区二区三区久久久| 亚洲视频第一页| 国产精品视频永久免费播放| 午夜精品久久久久久久白皮肤| 欧美一级片在线播放| 亚洲精品国产成人| 亚洲黄色av网站| 国产欧美精品在线| 国产成人自拍视频在线观看| 精品久久久久久|