最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

lua實現(xiàn)的2048小游戲

 更新時間:2015年03月09日 17:10:47   投稿:hebedich  
之前給大家分享了好幾個語言版本的2048了,今天再給大家分享一個lua腳本實現(xiàn)的2048小游戲,小伙伴們參考下吧。

lua實現(xiàn)的2048小游戲,只要可以運行l(wèi)ua腳本的環(huán)境下都可以玩。

復制代碼 代碼如下:

--[[=============================================================================
#     FileName: 2048.lua
#         Desc: lua console 2048
#       Author: hanxi
#        Email: hanxi.info@gmail.com
#     HomePage: http://www.hanxi.info
#      Version: 0.0.1
#   LastChange: 2014-04-28 11:05:09
#      History:
=============================================================================]]
local function initGrid(m,n)
    local grid = {}
    for i=1,m do
        if not grid[i] then
            grid[i] = {}
        end
        for j=1,n do
            grid[i][j] = 0
        end
    end
    return grid
end
local function printGrid(grid)
    local celllen = 8  -- 每個格子占用字符數(shù)
    local gridStrLines = {}
    table.insert(gridStrLines,"-------------------------------------")
    for i,row in ipairs(grid) do
        local line = {}
        for _,num in ipairs(row) do
            if num==0 then
                local pres = ""
                for tmp=1,celllen do
                    pres = pres .. " "
                end
                local s = string.format("%s",pres)
                table.insert(line,s)
            else
                local s = tostring(num)
                local l = string.len(s)
                local l = (celllen-l)/2
                local prel = math.floor(l)
                local sufl = math.ceil(l)
                local pres = ""
                for tmp=1,prel do
                    pres = pres .. " "
                end
                local sufs = pres
                if sufl>prel then
                    sufs = pres.. " "
                end
                local s = string.format("%s%s%s",pres,s,sufs)
                table.insert(line,s)
            end
        end
        local line = table.concat(line,"|")
        line = "|" .. line .. "|"
        table.insert(gridStrLines,line)
        table.insert(gridStrLines,"-------------------------------------")
    end
    local gridStr = table.concat(gridStrLines,"\n")
    print(gridStr)
end
local function randomGrid(grid)
    local m = #grid
    local n = #grid[1]
    for i=1,m do
        for j=1,n do
            local r = math.random(1,5)
            local num = 2^r
            grid[i][j] = num
        end
    end
end
local function getRandomZeroPos(grid)
    local m = #grid
    local n = #grid[1]
    local zeros = {}
    for i=1,m do
        for j=1,n do
            if grid[i][j]==0 then
                table.insert(zeros,{i=i,j=j})
            end
        end
    end
    if #zeros>0 then
        local r = math.random(1,#zeros)
        return zeros[r].i,zeros[r].j
    end
end
local function randomNum(grid)
    local i,j = getRandomZeroPos(grid)
    if i and j then
        local r = math.random()
        if r<0.9 then
            grid[i][j] = 2
        else
            grid[i][j] = 4
        end
        return i,j
    end
end
local function moveLeft(grid)
    print("==============moveLeft===============")
    local m = #grid
    local n = #grid[1]
    for i=1,m do
        local line = {}
        for j=1,n do
            if grid[i][j]~=0 then
                table.insert(line,grid[i][j])
            end
        end
        local k=#line
        for j=1,n do
            if j<=k then
                grid[i][j] = line[j]
            else
                grid[i][j] = 0
            end
        end
        for j=1,k-1 do
            if grid[i][j]==grid[i][j+1] then
                grid[i][j+1] = grid[i][j] + grid[i][j+1]
                for x=j,n-1 do
                    grid[i][x] = grid[i][x+1]
                end
                grid[i][n] = 0
            end           
        end
    end
end
local function moveRight(grid)
    print("==============moveRight==============")
    local m = #grid
    local n = #grid[1]
    for i=1,m do
        local line = {}
        for j=n,1,-1 do
            if grid[i][j]~=0 then
                table.insert(line,grid[i][j])
            end
        end
        local k = #line
        for j=n,1,-1 do
            if n-j+1<=k then
                grid[i][j] = line[n-j+1]
            else
                grid[i][j] = 0
            end
        end
        for j=n,n-k+2,-1 do
            if grid[i][j]==grid[i][j-1] then
                grid[i][j-1] = grid[i][j] + grid[i][j-1]
                for x=j,2,-1 do
                    grid[i][x] = grid[i][x-1]
                end
                grid[i][1] = 0
            end
        end
    end
end
local function moveUp(grid)
    print("===============moveUp================")
    local m = #grid
    local n = #grid[1]
    for j=1,n do
        local line = {}
        for i=1,m do
            if grid[i][j]~=0 then
                table.insert(line,grid[i][j])
            end
        end
        local k = #line
        for i=1,m do
            if i<=k then
                grid[i][j] = line[i]
            else
                grid[i][j] = 0
            end
        end
        for i=1,k-1 do
            if grid[i][j]==grid[i+1][j] then
                grid[i+1][j] = grid[i][j] + grid[i+1][j]
                for x=i,m-1 do
                    grid[x][j] = grid[x+1][j]
                end
                grid[m][j] = 0
            end           
        end
    end
end
local function moveDown(grid)
    print("==============moveDown===============")
    local m = #grid
    local n = #grid[1]
    for j=1,n do
        local line = {}
        for i=m,1,-1 do
            if grid[i][j]~=0 then
                table.insert(line,grid[i][j])
            end
        end
        local k = #line
        for i=m,1,-1 do
            if m-i+1<=k then
                grid[i][j] = line[m-i+1]
            else
                grid[i][j] = 0
            end
        end
        for i=m,m-k+2,-1 do
            if grid[i][j]==grid[i-1][j] then
                grid[i-1][j] = grid[i][j] + grid[i-1][j]
                for x=i,2,-1 do
                    grid[x][j] = grid[x-1][j]
                end
                grid[1][j] = 0
            end
        end
    end
end
local function canMove(grid)
    local m = #grid
    local n = #grid[1]
    for i=1,m do
        for j=1,n do
            if grid[i][j]==0 then
                return true
            end
            if (i<m and j<n)
            and (grid[i][j]==grid[i][j+1]
                or grid[i][j]==grid[i+1][j]) then
                return true
            end
        end
    end
    return false
end
local function main()
    local grid = initGrid(4,4)
    randomNum(grid)
    printGrid(grid)
    io.write("next step 'a'[←],'w'[↑],'s'[↓],'d'[→],'q'[exit] >> ")
    local input = io.read()
    while input~="q" do
        if input=="a" or input=="w" or input=="s" or input=="d" then
            if input=="a" then
                moveLeft(grid)
            elseif input=="w" then
                moveUp(grid)
            elseif input=="s" then
                moveDown(grid)
            elseif input=="d" then
                moveRight(grid)
            end
            randomNum(grid)
            printGrid(grid)
        else
            print("error input. please input 'a'[←] or 'w'[↑] or 's'[↓] or 'd'[→] or 'q'[exit]")
        end
        io.write("next step 'a'[←],'w'[↑],'s'[↓],'d'[→],'q'[exit] >> ")
        input = io.read()
    end
end
main()

以上就是本文所述的全部內(nèi)容了,希望大家能夠喜歡。

相關文章

  • Lua教程(九):元表與元方法詳解

    Lua教程(九):元表與元方法詳解

    這篇文章主要介紹了Lua教程(九):元表與元方法詳解,本文講解了算術類的元方法、關系類的元方法、庫定義的元方法、table訪問的元方法等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 理解Lua中的__index和__newindex

    理解Lua中的__index和__newindex

    這篇文章主要介紹了理解Lua中的__index和__newindex,本文給出了三段代碼來講解__index和__newindex,代碼中包含詳細注釋,需要的朋友可以參考下
    2015-04-04
  • Lua性能優(yōu)化技巧(二):基本事實

    Lua性能優(yōu)化技巧(二):基本事實

    這篇文章主要介紹了Lua性能優(yōu)化技巧(二):基本事實,本文講解了一些編譯器和寄存器的一些知識,需要的朋友可以參考下
    2015-04-04
  • lua中使用毫秒精度時間的方法

    lua中使用毫秒精度時間的方法

    這篇文章主要介紹了lua中使用毫秒精度時間的方法,本文講解使用luasocket庫實現(xiàn)毫秒精度時間,需要的朋友可以參考下
    2015-04-04
  • Lua中的捕獲機制和轉換技巧介紹

    Lua中的捕獲機制和轉換技巧介紹

    這篇文章主要介紹了Lua中的捕獲機制和轉換技巧介紹,捕獲是這樣一種機制:可以使用模式串的一部分匹配目標串的一部分,將你想捕獲的模式用圓括號括起來,就指定了一個捕獲,需要的朋友可以參考下
    2014-11-11
  • Lua字符串模式匹配函數(shù)小結

    Lua字符串模式匹配函數(shù)小結

    這篇文章主要介紹了Lua字符串模式匹配函數(shù)小結,本文涉及一些正則操作,需要的朋友可以參考下
    2014-11-11
  • lua中賦值類型代碼詳解

    lua中賦值類型代碼詳解

    本文主要給大家介紹了lua中解析復制類型代碼的過程,非常的細致全面,有需要的小伙伴可以參考下
    2015-05-05
  • Lua進階教程之閉包函數(shù)、元表實例介紹

    Lua進階教程之閉包函數(shù)、元表實例介紹

    這篇文章主要介紹了Lua進階教程之閉包函數(shù)、元表實例介紹,本文詳細講解了Lua的閉包函數(shù)和元表,并同時和C++做了比較,需要的朋友可以參考下
    2014-09-09
  • LUA中的閉包(closure)淺析

    LUA中的閉包(closure)淺析

    這篇文章主要介紹了LUA中的閉包(closure)淺析,本文給出實例講解LUA中的閉包,需要的朋友可以參考下
    2015-02-02
  • Lua的迭代器使用中應該避免的問題和技巧

    Lua的迭代器使用中應該避免的問題和技巧

    這篇文章主要介紹了Lua的迭代器使用中應該避免的問題和技巧,本文介紹了避免創(chuàng)建閉合函數(shù)、利用恒定狀態(tài)創(chuàng)造更多變量、不需要for循環(huán)的迭代器等內(nèi)容,需要的朋友可以參考下
    2014-09-09

最新評論

金川县| 汕头市| 洞头县| 大港区| 密云县| 老河口市| 虞城县| 峨边| 水城县| 明水县| 马鞍山市| 资兴市| 香港| 南岸区| 永清县| 瑞昌市| 平凉市| 慈溪市| 海兴县| 万全县| 轮台县| 瓮安县| 漾濞| 东乌| 大理市| 克东县| 彩票| 巴林左旗| 宜兰市| 凤凰县| 永城市| 郓城县| 姜堰市| 都昌县| 贡觉县| 永吉县| 长武县| 鲜城| 汽车| 肃南| 信宜市|