lua实现的2048小游戏,只要可以运行lua脚本的环境下都可以玩。
复制代码 代码如下:
--[[=============================================================================
# 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 -- 每个格子占用字符数
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()
以上就是本文所述的全部内容了,希望大家能够喜欢。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]