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()
以上就是本文所述的全部内容了,希望大家能够喜欢。