2048: Difference between revisions
Content added Content deleted
m (→{{header|Ada}}: Fix loop label) |
mNo edit summary |
||
Line 1,444: | Line 1,444: | ||
) |
) |
||
</lang> |
</lang> |
||
=={{header|Amazing Hopper}}== |
|||
<lang Amazing Hopper> |
|||
#context-free select Position of aleatory tail |
|||
#context-free show Table |
|||
#context-free chek Winner or Game Over |
|||
#context-free print Table structure |
|||
#proto MovingRightDown(_X_) |
|||
#proto MovingLeftUp(_X_) |
|||
#proto checkPointLeftUp(_X_) |
|||
#proto checkPointRightDown(_X_) |
|||
#proto checkMoveRightDown(_X_) |
|||
#proto checkMoveLeftUp(_X_) |
|||
#define KUP 5 |
|||
#define KDOWN 24 |
|||
#define KLEFT 19 |
|||
#define KRIGHT 4 |
|||
#define KESCAPE 27 |
|||
#define MOVEHORZ 1 |
|||
#define MOVEVERT 0 |
|||
#define equaltables(_X_,_Y_) _I_=1,\ |
|||
__LOOP_ROW__:,\ |
|||
_J_=1,\ |
|||
__LOOP_COL__:,\ |
|||
[_I_,_J_]get(_X_),get(_Y_),neq? do{{0},jmp(__OUT__LOOP__)},\ |
|||
++_J_,{4,_J_}jle(__LOOP_COL__),\ |
|||
++_I_,{4,_I_}jle(__LOOP_ROW__),\ |
|||
{1},__OUT__LOOP__:,clear mark |
|||
#include <hopper.h> |
|||
main: |
|||
.ctrl c |
|||
contador de movimientos=0 |
|||
score=0 |
|||
table=0,{4,4}zeros array(table) // create table |
|||
oldTable=0, show Structure=1 |
|||
/* define initial positions */ |
|||
{""}tok sep |
|||
select Position of aleatory tail |
|||
select Position of aleatory tail |
|||
home |
|||
hide cursor |
|||
show Table |
|||
c=0, go=1,swFin=1 |
|||
/* game! */ |
|||
__PLAY_GAME__: |
|||
if key pressed? |
|||
lastkey(c) |
|||
oldTable = table |
|||
switch(c) |
|||
case(KRIGHT) :: do{ _check Move Right Down(MOVEHORZ), exit } |
|||
case(KDOWN) :: do{ _check Move Right Down(MOVEVERT), exit } |
|||
case(KLEFT) :: do{ _check Move Left Up(MOVEHORZ), exit } |
|||
case(KUP) :: do{ _check Move Left Up(MOVEVERT), exit } |
|||
case(KESCAPE):: do{ go=0,swFin=0 } |
|||
end switch |
|||
kbfree |
|||
chek Winner or Game Over |
|||
{go}do{ |
|||
if ( not( equal tables(oldTable, table) ) ) |
|||
select Position of aleatory tail |
|||
++contador de movimientos |
|||
end if |
|||
show Table |
|||
} |
|||
end if |
|||
{go},jt(__PLAY_GAME__) |
|||
if ( {swFin} ) |
|||
{" \LG","YOU WIN!!!\OFF"} |
|||
else |
|||
{" \LR","GAME OVER\OFF"} |
|||
end if |
|||
println |
|||
show cursor |
|||
exit(0) |
|||
.locals |
|||
Moving Right Down(tmpTab) |
|||
for(j=4,{j}gthan(1),--j) |
|||
cnt=0 |
|||
while( [j]get(tmpTab),not ) |
|||
for(k=j,{k}gthan(1),--k) |
|||
[{k}minus(1)]get(tmpTab), [k]put(tmpTab) |
|||
next |
|||
[1]{0}put(tmpTab) |
|||
++cnt |
|||
if ( {cnt}gthan(4) ) |
|||
break |
|||
end if |
|||
wend |
|||
next |
|||
{tmpTab} |
|||
back |
|||
Moving Left Up(tmpTab) |
|||
for(j=1,{j}lthan(4),++j) // cada posicion |
|||
cnt=0 |
|||
while( [j]get(tmpTab),not ) |
|||
for(k=j,{k}lthan(4),++k) |
|||
[{k}plus(1)]get(tmpTab), [k]put(tmpTab) |
|||
next |
|||
[4]{0}put(tmpTab) |
|||
++cnt |
|||
if ( {cnt}gthan(4) ) |
|||
break |
|||
endif |
|||
wend |
|||
next |
|||
{tmpTab} |
|||
back |
|||
check Point Right Down(tmpTab) |
|||
v1=0,v2=0,tScore=0,totScore=0 |
|||
for(k=4,{k}gthan(1),--k) |
|||
[k]get(tmpTab),mov(v1) |
|||
[{k}minus(1)]get(tmpTab),mov(v2) |
|||
if( {v1} eqto (v2) ) |
|||
{v1,v2}add,cpy(tScore),[k]put(tmpTab),[{k}minus(1)]{0}put(tmpTab) |
|||
{tScore}plus(totScore),mov(totScore) |
|||
end if |
|||
next |
|||
{tmpTab,totScore} |
|||
back |
|||
check Move Right Down (_DIRECTION_) |
|||
tmpTab=0 |
|||
for(i=1,{i}lethan(4),++i) |
|||
if ( {_DIRECTION_} ) // rows or cols?? |
|||
[i,1:4] // rows! |
|||
else |
|||
[1:4,i] // cols! |
|||
end if |
|||
get(table), mov(tmpTab) |
|||
if( {tmpTab}stats(SUMMATORY) ) // exist numbers in the row?? |
|||
clear mark |
|||
_Moving Right Down(tmpTab),mov(tmpTab) // move its! |
|||
clear mark |
|||
_check Point Right Down(tmpTab),plus(score),mov(score) // check score... |
|||
mov(tmpTab) |
|||
_Moving Right Down(tmpTab),mov(tmpTab) // move remanents! |
|||
if( {_DIRECTION_} ) |
|||
[i,1:4] |
|||
else |
|||
[1:4,i] |
|||
end if |
|||
{tmpTab}, put(table) |
|||
end if |
|||
next |
|||
clear mark. |
|||
back |
|||
check Point Left Up(tmpTab) |
|||
v1=0,v2=0,tScore=0,totScore=0 |
|||
for(k=1,{k}lthan(4),++k) |
|||
[k]get(tmpTab),mov(v1) |
|||
[{k}plus(1)]get(tmpTab),mov(v2) |
|||
if( {v1} eqto (v2) ) |
|||
{v1,v2}add,cpy(tScore),[k]put(tmpTab),[{k}plus(1)]{0}put(tmpTab) |
|||
{tScore}plus(totScore),mov(totScore) |
|||
end if |
|||
next |
|||
{tmpTab,totScore} |
|||
back |
|||
check Move Left Up(_DIRECTION_) |
|||
tmpTab=0 |
|||
for(i=1,{i}lethan(4),++i) |
|||
if( {_DIRECTION_} ) |
|||
[i,1:4] |
|||
else |
|||
[1:4,i] |
|||
end if |
|||
get(table),mov(tmpTab) |
|||
if( {tmpTab}stats(SUMMATORY) ) // exist numbers in the row?? |
|||
clear mark |
|||
_Moving Left Up(tmpTab),mov(tmpTab) // move its! |
|||
clear mark |
|||
_check Point Left Up(tmpTab),plus(score),mov(score) // check score... |
|||
mov(tmpTab) |
|||
_Moving Left Up(tmpTab),mov(tmpTab) // move remanents! |
|||
if( {_DIRECTION_} ) |
|||
[i,1:4] |
|||
else |
|||
[1:4,i] |
|||
end if |
|||
{tmpTab},put(table) |
|||
end if |
|||
next |
|||
clear mark. |
|||
back |
|||
chek Winner or Game Over: |
|||
{table}gthan(0),xtonum,stats(SUMMATORY),{16} eq? do{{0}mov(go),{0}mov(swFin),back} // You loose! |
|||
{0}reshape(table),{2048,table}array(SCAN){0} neq? do{{0}mov(go),back} // you Win! |
|||
{4,4}reshape(table) |
|||
back |
|||
select Position of aleatory tail: |
|||
prec(-1) |
|||
__NO_VALID_POS__: |
|||
{10}rand, mulby(10),ceil,module(5),x=0,cpy(x),zero?,do{x=1} |
|||
{10}rand, mulby(10),ceil,module(5),y=0,cpy(y),zero?,do{y=1} |
|||
[x,y]get(table),jnz(__NO_VALID_POS__) |
|||
newTail=2 |
|||
{1}rand,gthan(0.9), do{ newTail=4 } |
|||
{newTail},put(table), clear mark. |
|||
prec(0) |
|||
back |
|||
show Table: |
|||
tmpTable=0 |
|||
{" ",6,table}xtostr,padcenter,mov(tmpTable) |
|||
// prepare colours of tiles |
|||
{"\BGLGR\BK \OFF"," 0 ",tmpTable} transform, mov(tmpTable) |
|||
{"\BGLGR\BK 2 \OFF"," 2 ",tmpTable} transform, mov(tmpTable) |
|||
{"\BGLGR\B 4 \OFF"," 4 ",tmpTable} transform, mov(tmpTable) |
|||
{"\BGLGR\B 8 \OFF"," 8 ",tmpTable} transform, mov(tmpTable) |
|||
{"\BGR\W 16 \OFF"," 16 ",tmpTable} transform, mov(tmpTable) |
|||
{"\BGY\BK 32 \OFF"," 32 ",tmpTable} transform, mov(tmpTable) |
|||
{"\BGB\W 64 \OFF"," 64 ",tmpTable} transform, mov(tmpTable) |
|||
{"\BGLM\BK 128 \OFF"," 128 ",tmpTable} transform, mov(tmpTable) |
|||
{"\BGG\W 256 \OFF"," 256 ",tmpTable} transform, mov(tmpTable) |
|||
{"\BGB\W 512 \OFF"," 512 ",tmpTable} transform, mov(tmpTable) |
|||
{"\BGR\W 1024 \OFF"," 1024 ",tmpTable} transform, mov(tmpTable) |
|||
{"\BGBK\W\ENF 2048 \OFF"," 2048 ",tmpTable} transform, mov(tmpTable) |
|||
// and PRINT!! |
|||
{show Structure} do{ print Table structure,{0} mov(show Structure) } |
|||
clear mark |
|||
scrx=2 |
|||
for (i=1, {i}lethan(4),++i) |
|||
{2,scrx}goxy,[1,i]get(tmpTable),print |
|||
{4,scrx}goxy,[2,i]get(tmpTable),print |
|||
{6,scrx}goxy,[3,i]get(tmpTable),print |
|||
{8,scrx}goxy,[4,i]get(tmpTable),print |
|||
clear mark |
|||
scrx += 7 |
|||
next |
|||
{"\BGB\W\ENF","\n\n\t 2 0 4 8 \OFF\n\n"} |
|||
{"Movimiento # ",contador de movimientos,", \INVSCORE=",score,"\OFF\n"}//,tmpTable} |
|||
println |
|||
back |
|||
print Table structure: |
|||
{"┌──────┬──────┬──────┬──────┐\n"},strtoutf8, |
|||
{"│ 2048 │ 2048 │ 2048 │ 2048 │\n"},strtoutf8, |
|||
{"├──────┼──────┼──────┼──────┤\n"},strtoutf8, |
|||
{"│ 2048 │ 2048 │ 2048 │ 2048 │\n"},strtoutf8, |
|||
{"├──────┼──────┼──────┼──────┤\n"},strtoutf8, |
|||
{"│ 2048 │ 2048 │ 2048 │ 2048 │\n"},strtoutf8, |
|||
{"├──────┼──────┼──────┼──────┤\n"},strtoutf8, |
|||
{"│ 2048 │ 2048 │ 2048 │ 2048 │\n"},strtoutf8, |
|||
{"└──────┴──────┴──────┴──────┘"},strtoutf8, |
|||
println |
|||
back |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
Begin play... |
|||
┌──────┬──────┬──────┬──────┐ |
|||
│ │ │ 2 │ │ |
|||
├──────┼──────┼──────┼──────┤ |
|||
│ │ │ │ │ |
|||
├──────┼──────┼──────┼──────┤ |
|||
│ │ │ │ │ |
|||
├──────┼──────┼──────┼──────┤ |
|||
│ 2 │ │ │ │ |
|||
└──────┴──────┴──────┴──────┘ |
|||
2 0 4 8 |
|||
Movimiento # 0, SCORE=0 |
|||
</pre> |
|||
<pre> |
|||
Playing... |
|||
┌──────┬──────┬──────┬──────┐ |
|||
│ │ 2 │ │ │ |
|||
├──────┼──────┼──────┼──────┤ |
|||
│ │ │ 2 │ 4 │ |
|||
├──────┼──────┼──────┼──────┤ |
|||
│ │ 2 │ 32 │ 128 │ |
|||
├──────┼──────┼──────┼──────┤ |
|||
│ │ 8 │ 4 │ 16 │ |
|||
└──────┴──────┴──────┴──────┘ |
|||
2 0 4 8 |
|||
Movimiento # 90, SCORE=940 |
|||
</pre> |
|||
<pre> |
|||
Game Over... |
|||
┌──────┬──────┬──────┬──────┐ |
|||
│ 2 │ 16 │ 2 │ 4 │ |
|||
├──────┼──────┼──────┼──────┤ |
|||
│ 4 │ 128 │ 4 │ 8 │ |
|||
├──────┼──────┼──────┼──────┤ |
|||
│ 16 │ 8 │ 512 │ 4 │ |
|||
├──────┼──────┼──────┼──────┤ |
|||
│ 2 │ 4 │ 32 │ 2 │ |
|||
└──────┴──────┴──────┴──────┘ |
|||
2 0 4 8 |
|||
Movimiento # 347, SCORE=5040 |
|||
GAME OVER |
|||
$ |
|||
</pre> |
|||
=={{header|APPLESOFT}}== |
=={{header|APPLESOFT}}== |