源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

lua实现的2048小游戏

  • 时间:2021-02-24 04:31 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:lua实现的2048小游戏
lua实现的2048小游戏,只要可以运行lua脚本的环境下都可以玩。
hanxi.info@gmail.com #     HomePage: [url=http://www.hanxi.info]http://www.hanxi.info[/url] #      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  -- 每个格子占用字符数     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()
以上就是本文所述的全部内容了,希望大家能够喜欢。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部