lua实现的2048小游戏
lua实现的2048小游戏,只要可以运行lua脚本的环境下都可以玩。
--[[=============================================================================
# FileName:2048.lua
# Desc:luaconsole2048
# Author:hanxi
# Email:hanxi.info@gmail.com
# HomePage:http://www.hanxi.info
# Version:0.0.1
# LastChange:2014-04-2811:05:09
# History:
=============================================================================]]
localfunctioninitGrid(m,n)
localgrid={}
fori=1,mdo
ifnotgrid[i]then
grid[i]={}
end
forj=1,ndo
grid[i][j]=0
end
end
returngrid
end
localfunctionprintGrid(grid)
localcelllen=8 --每个格子占用字符数
localgridStrLines={}
table.insert(gridStrLines,"-------------------------------------")
fori,rowinipairs(grid)do
localline={}
for_,numinipairs(row)do
ifnum==0then
localpres=""
fortmp=1,celllendo
pres=pres..""
end
locals=string.format("%s",pres)
table.insert(line,s)
else
locals=tostring(num)
locall=string.len(s)
locall=(celllen-l)/2
localprel=math.floor(l)
localsufl=math.ceil(l)
localpres=""
fortmp=1,preldo
pres=pres..""
end
localsufs=pres
ifsufl>prelthen
sufs=pres..""
end
locals=string.format("%s%s%s",pres,s,sufs)
table.insert(line,s)
end
end
localline=table.concat(line,"|")
line="|"..line.."|"
table.insert(gridStrLines,line)
table.insert(gridStrLines,"-------------------------------------")
end
localgridStr=table.concat(gridStrLines,"\n")
print(gridStr)
end
localfunctionrandomGrid(grid)
localm=#grid
localn=#grid[1]
fori=1,mdo
forj=1,ndo
localr=math.random(1,5)
localnum=2^r
grid[i][j]=num
end
end
end
localfunctiongetRandomZeroPos(grid)
localm=#grid
localn=#grid[1]
localzeros={}
fori=1,mdo
forj=1,ndo
ifgrid[i][j]==0then
table.insert(zeros,{i=i,j=j})
end
end
end
if#zeros>0then
localr=math.random(1,#zeros)
returnzeros[r].i,zeros[r].j
end
end
localfunctionrandomNum(grid)
locali,j=getRandomZeroPos(grid)
ifiandjthen
localr=math.random()
ifr<0.9then
grid[i][j]=2
else
grid[i][j]=4
end
returni,j
end
end
localfunctionmoveLeft(grid)
print("==============moveLeft===============")
localm=#grid
localn=#grid[1]
fori=1,mdo
localline={}
forj=1,ndo
ifgrid[i][j]~=0then
table.insert(line,grid[i][j])
end
end
localk=#line
forj=1,ndo
ifj<=kthen
grid[i][j]=line[j]
else
grid[i][j]=0
end
end
forj=1,k-1do
ifgrid[i][j]==grid[i][j+1]then
grid[i][j+1]=grid[i][j]+grid[i][j+1]
forx=j,n-1do
grid[i][x]=grid[i][x+1]
end
grid[i][n]=0
end
end
end
end
localfunctionmoveRight(grid)
print("==============moveRight==============")
localm=#grid
localn=#grid[1]
fori=1,mdo
localline={}
forj=n,1,-1do
ifgrid[i][j]~=0then
table.insert(line,grid[i][j])
end
end
localk=#line
forj=n,1,-1do
ifn-j+1<=kthen
grid[i][j]=line[n-j+1]
else
grid[i][j]=0
end
end
forj=n,n-k+2,-1do
ifgrid[i][j]==grid[i][j-1]then
grid[i][j-1]=grid[i][j]+grid[i][j-1]
forx=j,2,-1do
grid[i][x]=grid[i][x-1]
end
grid[i][1]=0
end
end
end
end
localfunctionmoveUp(grid)
print("===============moveUp================")
localm=#grid
localn=#grid[1]
forj=1,ndo
localline={}
fori=1,mdo
ifgrid[i][j]~=0then
table.insert(line,grid[i][j])
end
end
localk=#line
fori=1,mdo
ifi<=kthen
grid[i][j]=line[i]
else
grid[i][j]=0
end
end
fori=1,k-1do
ifgrid[i][j]==grid[i+1][j]then
grid[i+1][j]=grid[i][j]+grid[i+1][j]
forx=i,m-1do
grid[x][j]=grid[x+1][j]
end
grid[m][j]=0
end
end
end
end
localfunctionmoveDown(grid)
print("==============moveDown===============")
localm=#grid
localn=#grid[1]
forj=1,ndo
localline={}
fori=m,1,-1do
ifgrid[i][j]~=0then
table.insert(line,grid[i][j])
end
end
localk=#line
fori=m,1,-1do
ifm-i+1<=kthen
grid[i][j]=line[m-i+1]
else
grid[i][j]=0
end
end
fori=m,m-k+2,-1do
ifgrid[i][j]==grid[i-1][j]then
grid[i-1][j]=grid[i][j]+grid[i-1][j]
forx=i,2,-1do
grid[x][j]=grid[x-1][j]
end
grid[1][j]=0
end
end
end
end
localfunctioncanMove(grid)
localm=#grid
localn=#grid[1]
fori=1,mdo
forj=1,ndo
ifgrid[i][j]==0then
returntrue
end
if(i<mandj<n)
and(grid[i][j]==grid[i][j+1]
orgrid[i][j]==grid[i+1][j])then
returntrue
end
end
end
returnfalse
end
localfunctionmain()
localgrid=initGrid(4,4)
randomNum(grid)
printGrid(grid)
io.write("nextstep'a'[←],'w'[↑],'s'[↓],'d'[→],'q'[exit]>>")
localinput=io.read()
whileinput~="q"do
ifinput=="a"orinput=="w"orinput=="s"orinput=="d"then
ifinput=="a"then
moveLeft(grid)
elseifinput=="w"then
moveUp(grid)
elseifinput=="s"then
moveDown(grid)
elseifinput=="d"then
moveRight(grid)
end
randomNum(grid)
printGrid(grid)
else
print("errorinput.pleaseinput'a'[←]or'w'[↑]or's'[↓]or'd'[→]or'q'[exit]")
end
io.write("nextstep'a'[←],'w'[↑],'s'[↓],'d'[→],'q'[exit]>>")
input=io.read()
end
end
main()
以上就是本文所述的全部内容了,希望大家能够喜欢。