Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
123
Task/2048/M2000-Interpreter/2048.m2000
Normal file
123
Task/2048/M2000-Interpreter/2048.m2000
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
Module Game2048 {
|
||||
\\ 10% 4 and 90% 2
|
||||
Def GetTlleNumber()=If(Random(10)<2->4, 2)
|
||||
\\ tile
|
||||
Def Tile$(x)=If$(x=0->"[ ]", format$("[{0::-4}]", x))
|
||||
\\ empty board
|
||||
BoardTileRight=lambda (x, y)->x+y*4
|
||||
BoardTileLeft=lambda (x, y)->3-x+y*4
|
||||
BoardTileUp=lambda (x, y)->x*4+y
|
||||
BoardTileDown=lambda (x, y)->(3-x)*4+y
|
||||
Dim Board(0 to 15)
|
||||
Inventory EmptyTiles
|
||||
\\ Score is a statement but we can use it as a variable too.
|
||||
Score=0
|
||||
\\ Win is also a statement but we can use it as a variable too.
|
||||
Win=False
|
||||
ExitNow=False
|
||||
BoardDirection=BoardtileRight
|
||||
Process(BoardDirection)
|
||||
\\ Split Rem lines to insert start condition to check valid moves
|
||||
Rem : board(0)=2
|
||||
Rem : board(1)=2, 2, 2 ' place to (1), (2), (3)
|
||||
While len(EmptyTiles) {
|
||||
NewTile()
|
||||
DrawBoard()
|
||||
Action=False
|
||||
do {
|
||||
a$=key$
|
||||
if len(a$)=2 then {
|
||||
Action=true
|
||||
Select case Asc(mid$(a$,2))
|
||||
Case 72
|
||||
BoardDirection=BoardTileUp
|
||||
Case 75
|
||||
BoardDirection=BoardTileRight
|
||||
Case 77
|
||||
BoardDirection=BoardTileLeft
|
||||
Case 80
|
||||
BoardDirection=BoardTileDown
|
||||
Case 79 ' End key
|
||||
ExitNow=True
|
||||
Else
|
||||
Action=false
|
||||
end select
|
||||
}
|
||||
} until Action
|
||||
If ExitNow then exit
|
||||
Process(BoardDirection)
|
||||
}
|
||||
If Win then {
|
||||
Print "You Win"
|
||||
} Else {
|
||||
Print "You Loose"
|
||||
}
|
||||
End
|
||||
Sub Process(Boardtile)
|
||||
Inventory EmptyTiles ' clear inventory
|
||||
local where, i, j, k
|
||||
For i=0 to 3
|
||||
Gravity()
|
||||
k=boardtile(0,i)
|
||||
For j=1 to 3
|
||||
where=boardtile(j,i)
|
||||
if Board(where)<>0 then {
|
||||
if board(k)=board(where) then {
|
||||
board(k)*=2 : score+=board(where): board(where)=0
|
||||
if board(k)=2048 Then Win=True : ExitNow=true
|
||||
}
|
||||
}
|
||||
k=where
|
||||
Next j
|
||||
Gravity()
|
||||
For j=0 to 3
|
||||
where=boardtile(j,i)
|
||||
if board(where)=0 then Append EmptyTiles, where
|
||||
Next j
|
||||
Next i
|
||||
End Sub
|
||||
Sub NewTile()
|
||||
local m=EmptyTiles(Random(0, len(EmptyTiles)-1)!)
|
||||
Board(m)=GetTlleNumber()
|
||||
Delete EmptyTiles, m
|
||||
End Sub
|
||||
Sub DrawBoard()
|
||||
Refresh 2000
|
||||
Cls
|
||||
Cursor 0, 10
|
||||
Local Doc$, line$
|
||||
Document Doc$
|
||||
Doc$=Format$("Game 2048 Score {0}", score)
|
||||
\\ Using Report 2 we use rendering as text, with center justify
|
||||
Report 2, Doc$
|
||||
Doc$={
|
||||
}
|
||||
Local i, j
|
||||
For i=0 to 3
|
||||
line$=""
|
||||
For j=0 to 3
|
||||
line$+=Tile$(Board(BoardTileRight(j, i)))
|
||||
Next j
|
||||
Print Over $(2), Line$
|
||||
Print
|
||||
Doc$=Line$+{
|
||||
}
|
||||
Next i
|
||||
Report 2, "Next:Use Arrows | Exit: Press End"
|
||||
Refresh
|
||||
ClipBoard Doc$
|
||||
End Sub
|
||||
Sub Gravity()
|
||||
k=-1
|
||||
for j=0 to 3 {
|
||||
where=boardtile(j,i)
|
||||
if k=-1 then if board(where)=0 then k=j : continue
|
||||
if board(where)=0 then continue
|
||||
if k=-1 then continue
|
||||
board(boardtile(k,i))=board(where)
|
||||
board(where)=0
|
||||
k++
|
||||
}
|
||||
End Sub
|
||||
}
|
||||
Game2048
|
||||
Loading…
Add table
Add a link
Reference in a new issue