2048: Difference between revisions
Content deleted Content added
→{{header|C}}: Enable use of arrow keys |
No edit summary |
||
Line 434: | Line 434: | ||
Keys: WASD (Slide Movement), N (New game), P (Exit)</pre> |
Keys: WASD (Slide Movement), N (New game), P (Exit)</pre> |
||
=={{header|BBC BASIC}}== |
|||
{{works with|BBC BASIC for Windows}} |
|||
<lang bbcbasic> SIZE = 4 : MAX = SIZE-1 |
|||
Won% = FALSE : Lost% = FALSE |
|||
@% = 5 |
|||
DIM Board(MAX,MAX),Stuck% 3 |
|||
PROCBreed |
|||
PROCPrint |
|||
REPEAT |
|||
Direction = GET-135 |
|||
IF Direction > 0 AND Direction < 5 THEN |
|||
Moved% = FALSE |
|||
PROCShift |
|||
PROCMerge |
|||
PROCShift |
|||
IF Moved% THEN PROCBreed : !Stuck%=0 ELSE ?(Stuck%+Direction-1)=-1 : Lost% = !Stuck%=-1 |
|||
PROCPrint |
|||
ENDIF |
|||
UNTIL Won% OR Lost% |
|||
IF Won% THEN PRINT "You WON! :-)" ELSE PRINT "You lost :-(" |
|||
END |
|||
REM ----------------------------------------------------------------------------------------------------------------------- |
|||
DEF PROCPrint |
|||
FOR i = 0 TO SIZE*SIZE-1 |
|||
IF Board(i DIV SIZE,i MOD SIZE) THEN PRINT Board(i DIV SIZE,i MOD SIZE); ELSE PRINT " _"; |
|||
IF i MOD SIZE = MAX THEN PRINT |
|||
NEXT |
|||
PRINT STRING$(SIZE,"-----") |
|||
ENDPROC |
|||
REM ---------------------------------------------------------------------------------------------------------------------- |
|||
DEF PROCShift |
|||
IF Direction = 2 OR Direction = 3 THEN loopend = MAX : step = -1 ELSE loopend = 0 : step = 1 |
|||
FOR row = loopend TO MAX-loopend STEP step |
|||
zeros = 0 |
|||
FOR col = loopend TO MAX-loopend STEP step |
|||
IF Direction < 3 THEN |
|||
IF Board(row,col) = 0 THEN zeros += step ELSE IF zeros THEN SWAP Board(row,col),Board(row,col-zeros) : Moved% = TRUE |
|||
ELSE |
|||
IF Board(col,row) = 0 THEN zeros += step ELSE IF zeros THEN SWAP Board(col,row),Board(col-zeros,row) : Moved% = TRUE |
|||
ENDIF |
|||
NEXT |
|||
NEXT |
|||
ENDPROC |
|||
REM ----------------------------------------------------------------------------------------------------------------------- |
|||
DEF PROCMerge |
|||
IF Direction = 1 THEN loopend = 0 : rowoff = 0 : coloff = 1 : step = 1 |
|||
IF Direction = 2 THEN loopend = MAX : rowoff = 0 : coloff = -1 : step = -1 |
|||
IF Direction = 3 THEN loopend = MAX : rowoff = -1 : coloff = 0 : step = -1 |
|||
IF Direction = 4 THEN loopend = 0 : rowoff = 1 : coloff = 0 : step = 1 |
|||
FOR row = loopend TO MAX-loopend-rowoff STEP step |
|||
FOR col = loopend TO MAX-loopend-coloff STEP step |
|||
IF Board(row,col) THEN IF Board(row,col) = Board(row+rowoff,col+coloff) THEN |
|||
Board(row,col) *= 2 : Board(row+rowoff,col+coloff) = 0 |
|||
Moved% = TRUE |
|||
IF NOT Won% THEN Won% = Board(row,col)=2048 |
|||
ENDIF |
|||
NEXT |
|||
NEXT |
|||
ENDPROC |
|||
REM ----------------------------------------------------------------------------------------------------------------------- |
|||
DEF PROCBreed |
|||
cell = RND(SIZE*SIZE)-1 |
|||
FOR i = 0 TO SIZE*SIZE-1 |
|||
z = (cell+i) MOD (SIZE*SIZE) |
|||
IF Board(z DIV SIZE,z MOD SIZE) = 0 THEN Board(z DIV SIZE,z MOD SIZE) = 2-(RND(10)=1)*2 : EXIT FOR |
|||
NEXT |
|||
ENDPROC</lang> |
|||
{{out}} |
|||
<pre> _ _ _ _ |
|||
_ _ _ _ |
|||
_ _ 2 _ |
|||
_ _ _ _ |
|||
-------------------- |
|||
_ _ _ _ |
|||
_ _ _ _ |
|||
2 _ _ _ |
|||
_ 2 _ _ |
|||
-------------------- |
|||
2 2 _ _ |
|||
_ _ 2 _ |
|||
_ _ _ _ |
|||
_ _ _ _ |
|||
-------------------- |
|||
4 2 _ _ |
|||
2 _ _ _ |
|||
_ _ _ _ |
|||
_ _ _ _ |
|||
-------------------- |
|||
. |
|||
. |
|||
. |
|||
. |
|||
2 8 4 2 |
|||
4 2 16 4 |
|||
16 4 8 32 |
|||
4 32 2 4 |
|||
-------------------- |
|||
You lost :-(</pre> |
|||
=={{header|C}}== |
=={{header|C}}== |