The 2048 small games that Lua implements can be played in an environment where LUA scripts can be run.

__Copy Code__ code as follows:

--[[=============================================================================

# 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--The number of characters per grid occupied

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" does

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 ()

The above is the full content of this article, I hope you can enjoy.