IMD's 2048 (Spectrum)
Juego desarrollado en Basic del ZX Spectrum para el concurso de Bytemaniacos 2020.
Para facilitar la tarea de teclear el juego en el ordenador he usado la utilidad Bas2Tap (v2.7) que genera un fichero TAP listo para usarse en emuladores desde un fichero de texto con el código fuente en basic. Para probar el juego he usado el emulador Retro Virtual Machine.
Tenemos un tablero de 4 x 4 fichas en las que puede haber un número o estar vacías.
La idea es desplazar las fichas a derecha, izquierda, arriba o abajo para intentar unir dos fichas con el mismo número y así sumarlos.
Por ejemplo si unimos dos casillas con 2 y 2, obtenemos una ficha con un 4, y así sucesivamente.
Si el tablero se llena, perdemos.
El objetivo del juego es conseguir en una casilla el número 2048, a base de sumas:
2 + 2 = 4 4 + 4 = 8 8 + 8 = 16 16 + 16 = 32 32 + 32 = 64 64 = 64 = 128 128 + 128 = 256 256 + 256 = 512 512 + 512 = 1024 1024 + 1024 = 2048 !!!!!
#####################################################################
# IMPORTANTE: Requiere Bas2Tap 2.7 (soporte de comentarios)
10 REM Titulo: 2048
12 REM Version: 1.0
14 REM Programa: Inaki Martinez Diez (C) 2019
16 REM Plataforma: ZX-Spectrum 16k
18 REM Concurso Basic Bytemaniacos 2019-2020
20 REM Idea original: Gabriele Cirulli (C) 2014
#####################################################################
# GENERANDO UDGs
52 RESTORE 9500
53 FOR N=1 TO 10
54 READ U$
55 FOR U=0 TO 7
56 READ V
57 POKE USR U$+U,V
58 NEXT U
59 NEXT N
# Mejor puntuacion
61 LET MEJOR=0
# CEROS para rellenar los puntos
63 LET C$="000000"
#####################################################################
# Pantalla de presentacion
1005 BORDER 1 : PAPER 1 : INK 7 : CLS
# mostramos 2048
1010 GO SUB 1060
1020 PRINT AT 9,0; "{INK 7}{PAPER 1}Concurso Basic Bytemaniacos 2020"
1021 PRINT AT 10,1; "original: Gabriele Cirulli 2014"
1030 PRINT AT 12,2; "Controles:"
1031 PRINT AT 14,2; "O - IZQUIERDA"
1032 PRINT AT 15,2; "P - DERECHA"
1033 PRINT AT 16,2; "Q - ARRIBA"
1034 PRINT AT 17,2; "A - ABAJO"
1035 PRINT AT 18,2; "I - INFORMACION"
1036 PRINT AT 19,2; "E - EMPEZAR"
# mostramos copyright
1038 GO SUB 1050
1040 LET A$=INKEY$
1041 IF A$="E" OR A$="e" THEN GO TO 1100
1042 IF A$="I" OR A$="i" THEN GO TO 1080
1043 GO TO 1040
#####################################################################
# COPYRIGHT
1051 PRINT #0; AT 0,3; "{(C)} 2019 I{n}aki Mart{i}nez D{i}ez"
1052 PRINT #0; AT 1,0; "https://www.imd.guru/retropedia/"
1053 RETURN
#####################################################################
# 2048 en colores
1060 PRINT AT 0,7; "{FLASH 1}{INK 1}{PAPER 2} {INK 1}{PAPER 2} {INK 1}{PAPER 2} {INK 1}{PAPER 1} {INK 3}{PAPER 1} {INK 3}{PAPER 1} {INK 3}{PAPER 1} {INK 1}{PAPER 1} {INK 1}{PAPER 6} {INK 1}{PAPER 1} {INK 1}{PAPER 6} {INK 1}{PAPER 1} {INK 4}{PAPER 1} {INK 4}{PAPER 1} {INK 4}{PAPER 1} {FLASH 0}"
1061 PRINT AT 1,7; "{FLASH 1}{INK 1}{PAPER 1} {INK 1}{PAPER 1} {INK 1}{PAPER 2} {INK 1}{PAPER 1} {INK 3}{PAPER 1} {INK 1}{PAPER 1} {INK 3}{PAPER 1} {INK 1}{PAPER 1} {INK 1}{PAPER 6} {INK 1}{PAPER 1} {INK 1}{PAPER 6} {INK 1}{PAPER 1} {INK 4}{PAPER 1} {INK 1}{PAPER 1} {INK 4}{PAPER 1} {FLASH 0}"
1062 PRINT AT 2,7; "{FLASH 1}{INK 5}{PAPER 2} {INK 5}{PAPER 2} {INK 5}{PAPER 2} {INK 1}{PAPER 1} {INK 3}{PAPER 4} {INK 1}{PAPER 4} {INK 3}{PAPER 4} {INK 1}{PAPER 1} {INK 2}{PAPER 6} {INK 1}{PAPER 6} {INK 2}{PAPER 6} {INK 1}{PAPER 1} {INK 4}{PAPER 3} {INK 4}{PAPER 3} {INK 4}{PAPER 3} {FLASH 0}"
1063 PRINT AT 3,7; "{FLASH 1}{INK 1}{PAPER 2} {INK 1}{PAPER 1} {INK 5}{PAPER 1} {INK 1}{PAPER 1} {INK 3}{PAPER 4} {INK 1}{PAPER 1} {INK 3}{PAPER 4} {INK 1}{PAPER 1} {INK 2}{PAPER 1} {INK 1}{PAPER 1} {INK 2}{PAPER 6} {INK 1}{PAPER 1} {INK 4}{PAPER 3} {INK 1}{PAPER 1} {INK 4}{PAPER 3} {FLASH 0}"
1064 PRINT AT 4,7; "{FLASH 1}{INK 5}{PAPER 2} {INK 5}{PAPER 2} {INK 5}{PAPER 2} {INK 1}{PAPER 1} {INK 3}{PAPER 4} {INK 3}{PAPER 1} {INK 3}{PAPER 4} {INK 1}{PAPER 1} {INK 2}{PAPER 1} {INK 2}{PAPER 1} {INK 2}{PAPER 6} {INK 1}{PAPER 1} {INK 4}{PAPER 3} {INK 4}{PAPER 3} {INK 4}{PAPER 3} {FLASH 0}"
1065 PRINT AT 5,7; "{FLASH 1}{INK 5}{PAPER 1} {INK 1}{PAPER 1} {INK 1}{PAPER 1} {INK 1}{PAPER 1} {INK 1}{PAPER 4} {INK 1}{PAPER 1} {INK 1}{PAPER 4} {INK 1}{PAPER 1} {INK 1}{PAPER 1} {INK 1}{PAPER 1} {INK 2}{PAPER 1} {INK 1}{PAPER 1} {INK 1}{PAPER 3} {INK 1}{PAPER 1} {INK 1}{PAPER 3} {FLASH 0}"
1066 PRINT AT 6,7; "{FLASH 1}{INK 5}{PAPER 1} {INK 5}{PAPER 1} {INK 5}{PAPER 1} {INK 1}{PAPER 1} {INK 1}{PAPER 4} {INK 1}{PAPER 4} {INK 1}{PAPER 4} {INK 1}{PAPER 1} {INK 1}{PAPER 1} {INK 1}{PAPER 1} {INK 2}{PAPER 1} {INK 1}{PAPER 1} {INK 1}{PAPER 3} {INK 1}{PAPER 3} {INK 1}{PAPER 3} {FLASH 0}"
1067 RETURN
#####################################################################
# Informacion
1080 BORDER 1 : PAPER 1 : INK 7 : CLS
# mostramos 2048
1081 GO SUB 1060
1082 PRINT AT 9,0; "Usa las teclas 'OPQA' para mover"
1083 PRINT AT 10,0; "las fichas. Al juntar dos fichas"
1084 PRINT AT 11,0; "con el mismo numero se suman en"
1085 PRINT AT 12,0; "una sola ficha. Ej: 2 + 2 = 4."
1086 PRINT AT 13,0; "El objetivo es obtener el numero"
1087 PRINT AT 14,0; "2048 en una sola ficha a base de"
1088 PRINT AT 15,0; "sumas."
1088 PRINT AT 16,0; "Si el tablero se llena, perdemos"
1089 PRINT AT 20,6; "M - REGRESA AL MENU"
# mostramos copyright
1090 GO SUB 1050
1095 LET A$=INKEY$
1096 IF A$="M" OR A$="m" THEN GO TO 1000
1097 GO TO 1095
#####################################################################
# Pantalla de juego
1105 BORDER 1 : PAPER 1 : INK 7 : CLS
# cuadrados blancos
1110 FOR Y=0 TO 2
1111 PRINT AT Y*6,0; "{BRIGHT 0}{INK 1}{PAPER 7}{a} {b}{PAPER 1} {PAPER 7}{a} {b}{PAPER 1} {PAPER 7}{a} {b}{PAPER 1} {PAPER 7}{a} {b}"
1112 PRINT AT Y*6+1,0; "{BRIGHT 0}{INK 1}{PAPER 7} {PAPER 1} {PAPER 7} {PAPER 1} {PAPER 7} {PAPER 1} {PAPER 7} "
1113 PRINT AT Y*6+2,0; "{BRIGHT 0}{INK 1}{PAPER 7} {PAPER 1} {PAPER 7} {PAPER 1} {PAPER 7} {PAPER 1} {PAPER 7} "
1114 PRINT AT Y*6+3,0; "{BRIGHT 0}{INK 1}{PAPER 7} {PAPER 1} {PAPER 7} {PAPER 1} {PAPER 7} {PAPER 1} {PAPER 7} "
1115 PRINT AT Y*6+4,0; "{BRIGHT 0}{INK 1}{PAPER 7}{c} {d}{PAPER 1} {PAPER 7}{c} {d}{PAPER 1} {PAPER 7}{c} {d}{PAPER 1} {PAPER 7}{c} {d}"
1116 NEXT Y
# ultimo bloque fuera del for por la linea 22 con AT
1117 PRINT AT 18,0; "{BRIGHT 0}{INK 1}{PAPER 7}{a} {b}{PAPER 1} {PAPER 7}{a} {b}{PAPER 1} {PAPER 7}{a} {b}{PAPER 1} {PAPER 7}{a} {b}"
1119 PRINT AT 19,0; "{BRIGHT 0}{INK 1}{PAPER 7} {PAPER 1} {PAPER 7} {PAPER 1} {PAPER 7} {PAPER 1} {PAPER 7} "
1120 PRINT AT 20,0; "{BRIGHT 0}{INK 1}{PAPER 7} {PAPER 1} {PAPER 7} {PAPER 1} {PAPER 7} {PAPER 1} {PAPER 7} "
1121 PRINT AT 21,0; "{BRIGHT 0}{INK 1}{PAPER 7} {PAPER 1} {PAPER 7} {PAPER 1} {PAPER 7} {PAPER 1} {PAPER 7} "
1122 PRINT #0;AT 0,0; "{BRIGHT 0}{INK 1}{PAPER 7}{c} {d}{PAPER 1} {PAPER 7}{c} {d}{PAPER 1} {PAPER 7}{c} {d}{PAPER 1} {PAPER 7}{c} {d}"
# panel derecho
# nombre juego
1125 PRINT AT 0,24; "{BRIGHT 0}{INK 1}{PAPER 5}{a} {b}"
1126 PRINT AT 1,24; "{BRIGHT 0}{INK 7}{PAPER 5} 2048 "
1127 PRINT AT 2,24; "{BRIGHT 0}{INK 1}{PAPER 5}{c} {d}"
# barra central verde
1129 PRINT AT 4,24; "{BRIGHT 0}{INK 1}{PAPER 4}{a} {b}"
1130 FOR Y=5 TO 19
1131 PRINT AT Y,24; "{BRIGHT 0}{INK 7}{PAPER 4} "
1132 NEXT Y
1134 PRINT AT 20,24; "{BRIGHT 0}{INK 1}{PAPER 4}{c} {d}"
1135 PRINT AT 5,25; "{BRIGHT 0}{INK 0}{PAPER 4}PUNTOS"
1136 PRINT AT 10,25; "{BRIGHT 0}{INK 0}{PAPER 4}MEJOR"
1137 PRINT AT 15,25; "{BRIGHT 0}{INK 0}{PAPER 4}O {INK 7}{h}{h}{h}{h}"
1138 PRINT AT 16,25; "{BRIGHT 0}{INK 0}{PAPER 4}P {INK 7}{f}{f}{f}{f}"
1139 PRINT AT 17,25; "{BRIGHT 0}{INK 0}{PAPER 4}Q {INK 7}{g}{g}{g}{g}"
1140 PRINT AT 18,25; "{BRIGHT 0}{INK 0}{PAPER 4}A {INK 7}{h}{h}{h}{h}"
1141 PRINT AT 19,25; "{BRIGHT 0}{INK 0}{PAPER 4}M {INK 7}MENU"
# copyright
1142 PRINT #0;AT 0,24; "{BRIGHT 0}{INK 7}{PAPER 1} {(C)} 2019 "
1143 PRINT #0;AT 1,24; "{BRIGHT 0}{INK 7}{PAPER 1}IMD.GURU"
# Puntos actuales
2011 LET PUNTOS=0
# Indica si es fin de juego
2012 LET FIN=0
# Indica si el tablero esta lleno
2014 LET LLENO=0
# Indica si hemos ganado
2015 LET GANADO=0
# Tablero donde se indican los valores de cada cuadro
2016 DIM T(4,4)
# Duplicados, guarda donde ha habido suma para no realizar una segunda suma
2018 DIM D(4,4)
# IMPRIME PUNTOS
2036 GO SUB 8000
# IMPRIME MEJOR
2037 GO SUB 8010
# GENERA NUMERO Y LO MUESTRA
2038 GO SUB 8100
######################################################################
# BUCLE PRINCIPAL
#
# vaciamos duplicados
2101 FOR N=1 TO 4
2102 FOR M=1 TO 4
2103 LET D(N,M)=0
2104 NEXT M
2105 NEXT N
# GENERA NUMERO Y LO MUESTRA
2106 GO SUB 8100
# comprobar si es fin de juego
2107 IF FIN = 1 THEN GO TO 8400
# comprobar si es ganador
2108 GO SUB 8500
# si hemos ganado fin de juego
2109 IF GANADO = 1 THEN GO TO 8550
2110 PRINT #0; AT 1,0; "{BRIGHT 1}MUEVA...{BRIGHT 0} "
2111 BEEP 0.09,1
2155 LET T$=INKEY$
2250 IF T$="O" OR T$="o" THEN GO TO 2300
2251 IF T$="P" OR T$="p" THEN GO TO 2400
2252 IF T$="Q" OR T$="q" THEN GO TO 2500
2253 IF T$="A" OR T$="a" THEN GO TO 2600
2254 IF T$="M" OR T$="m" THEN GO TO 1000
2255 IF T$="E" OR T$="e" THEN GO TO 1100
2260 GO TO 2155
#####################################################################
# izquierda <<<<<<<<
2301 PRINT #0; AT 1,0; "{BRIGHT 1}{h}{h}{h}{h}{h}{h}{h}{h}{BRIGHT 0}"
2302 FOR A=1 TO 4
2303 FOR B=2 TO 4
# si esta vacia desplazamos
2304 IF T(A,B) <> 0 THEN GO SUB 2310
2305 NEXT B
2306 NEXT A
2307 GO TO 2100
# desplazamiento izquierda
2315 FOR D=B-1 TO 1 STEP -1
# si esta vacio movemos izquierda
2320 IF T(A,D) = 0 THEN GO TO 2360
# comprobar si hay que sumar
2327 IF NOT (T(A,D) = T(A,D+1) AND D(A,D) = 0) THEN GO TO 2348
2330 LET D(A,D) = 1 : REM marcamos como ya sumado
2332 LET T(A,D) = T(A,D) * 2
2333 LET PUNTOS = PUNTOS + T(A,D)
# imprime puntos
2334 GO SUB 8000
2335 LET Y = A
2336 LET X = D
# imprime cuadro en x,y
2338 GO SUB 8030
2340 LET T(A,D+1) = 0
2342 LET Y = A
2344 LET X = D+1
# imprime cuadro en x,y
2346 GO SUB 8030
# no continuar mas a la izquierda
2348 LET D = 0
2350 GO TO 2380
# movemos a la izquierda
2362 LET T(A,D) = T(A,D+1)
2364 LET Y = A
2366 LET X = D
# imprime cuadro en x,y
2368 GO SUB 8030
2370 LET T(A,D+1) = 0
2372 LET Y = A
2374 LET X = D+1
# imprime cuadro en x,y
2376 GO SUB 8030
2381 NEXT D
2399 RETURN
#####################################################################
# derecha >>>>>>>>
2401 PRINT #0; AT 1,0; "{BRIGHT 1}{f}{f}{f}{f}{f}{f}{f}{f}{BRIGHT 0}"
2402 FOR A=1 TO 4
2403 FOR B=3 TO 1 STEP -1
# si esta vacia desplazamos
2404 IF T(A,B) <> 0 THEN GO SUB 2410
2405 NEXT B
2406 NEXT A
2407 GO TO 2100
# desplazamiento derecha
2415 FOR D=B+1 TO 4
# si esta vacio movemos derecha
2420 IF T(A,D) = 0 THEN GO TO 2460
2425 REM comprobar si hay que sumar
2427 IF NOT (T(A,D) = T(A,D-1) AND D(A,D) = 0) THEN GO TO 2448
# marcamos como ya sumado
2430 LET D(A,D) = 1
2432 LET T(A,D) = T(A,D) * 2
2433 LET PUNTOS = PUNTOS + T(A,D)
# imprime puntos
2434 GO SUB 8000
2435 LET Y = A
2436 LET X = D
# imprime cuadro en x,y
2438 GO SUB 8030
2440 LET T(A,D-1) = 0
2442 LET Y = A
2444 LET X = D-1
# imprime cuadro en x,y
2446 GO SUB 8030
# no continuar mas a la derecha
2448 LET D = 5
2450 GO TO 2480
# movemos a la derecha
2462 LET T(A,D) = T(A,D-1)
2464 LET Y = A
2466 LET X = D
# imprime cuadro en x,y
2468 GO SUB 8030
2470 LET T(A,D-1) = 0
2472 LET Y = A
2474 LET X = D-1
# imprime cuadro en x,y
2476 GO SUB 8030
2481 NEXT D
2499 RETURN
#####################################################################
# arriba ^^^^^^^^^^
2501 PRINT #0; AT 1,0; "{BRIGHT 1}{g}{g}{g}{g}{g}{g}{g}{g}{BRIGHT 0}"
2502 FOR B=1 TO 4
2503 FOR A=2 TO 4
# si esta vacia desplazamos
2504 IF T(A,B) <> 0 THEN GO SUB 2510
2505 NEXT A
2506 NEXT B
2507 GO TO 2100
# desplazamiento arriba
2515 FOR D=A-1 TO 1 STEP -1
# si esta vacio movemos arriba
2520 IF T(D,B) = 0 THEN GO TO 2560
# comprobar si hay que sumar
2527 IF NOT (T(D,B) = T(D+1,B) AND D(D,B) = 0) THEN GO TO 2548
# marcamos como ya sumado
2530 LET D(D,B) = 1
2532 LET T(D,B) = T(D,B) * 2
2533 LET PUNTOS = PUNTOS + T(D,B)
# imprime puntos
2534 GO SUB 8000
2535 LET Y = D
2536 LET X = B
# imprime cuadro en x,y
2538 GO SUB 8030
2540 LET T(D+1,B) = 0
2542 LET Y = D+1
2544 LET X = B
# imprime cuadro en x,y
2546 GO SUB 8030
2548 LET D = 0 : REM no continuar mas a la arriba
2550 GO TO 2580
# movemos a la arriba
2562 LET T(D,B) = T(D+1,B)
2564 LET Y = D
2566 LET X = B
# imprime cuadro en x,y
2568 GO SUB 8030
2570 LET T(D+1,B) = 0
2572 LET Y = D+1
2574 LET X = B
# imprime cuadro en x,y
2576 GO SUB 8030
2581 NEXT D
2599 RETURN
#####################################################################
# abajo vvvvvvvv
2601 PRINT #0; AT 1,0; "{BRIGHT 1}{e}{e}{e}{e}{e}{e}{e}{e}{BRIGHT 0}"
2602 FOR B=1 TO 4
2603 FOR A=3 TO 1 STEP -1
# si esta vacia desplazamos
2604 IF T(A,B) <> 0 THEN GO SUB 2610
2605 NEXT A
2606 NEXT B
2607 GO TO 2100
# desplazamiento abajo
2615 FOR D=A+1 TO 4
# si esta vacio movemos abajo
2620 IF T(D,B) = 0 THEN GO TO 2660
# comprobar si hay que sumar
2627 IF NOT (T(D,B) = T(D-1,B) AND D(D,B) = 0) THEN GO TO 2648
# marcamos como ya sumado
2630 LET D(D,B) = 1
2632 LET T(D,B) = T(D,B) * 2
2633 LET PUNTOS = PUNTOS + T(D,B)
# imprime puntos
2634 GO SUB 8000
2635 LET Y = D
2636 LET X = B
# imprime cuadro en x,y
2638 GO SUB 8030
2640 LET T(D-1,B) = 0
2642 LET Y = D-1
2644 LET X = B
# imprime cuadro en x,y
2646 GO SUB 8030
2648 LET D = 5 : REM no continuar mas abajo
2650 GO TO 2680
# movemos abajo
2662 LET T(D,B) = T(D-1,B)
2664 LET Y = D
2666 LET X = B
# imprime cuadro en x,y
2668 GO SUB 8030
2670 LET T(D-1,B) = 0
2672 LET Y = D-1
2674 LET X = B
# imprime cuadro en x,y
2676 GO SUB 8030
2681 NEXT D
2699 RETURN
#####################################################################
# imprimir puntos
8001 LET P$=STR$ PUNTOS
8002 LET T$=C$( TO 6-LEN P$) + P$
8003 PRINT AT 7,25; "{BRIGHT 1}{INK 7}{PAPER 4}";T$
8004 IF PUNTOS > MEJOR THEN LET MEJOR = PUNTOS : GO SUB 8010
8005 RETURN
#####################################################################
# imprimir mejor puntuacion
8011 LET P$=STR$ MEJOR
8012 LET T$=C$( TO 6-LEN P$) + P$
8013 PRINT AT 12,25; "{BRIGHT 1}{INK 7}{PAPER 4}";T$
8014 RETURN
#####################################################################
# imprime cuadro en x,y
8031 IF T(Y,X) <> 0 THEN GO TO 8034
8032 PRINT AT (Y-1)*6+2,(X-1)*6; "{BRIGHT 0}{INK 0}{PAPER 7} "
8033 RETURN
8034 LET P$=STR$ T(Y,X)
8035 LET P=4-LEN P$
8036 PRINT AT (Y-1)*6+2,(X-1)*6+P; "{BRIGHT 0}{INK 0}{PAPER 7}";P$
8039 RETURN
#####################################################################
# genera un numero y lo anade al array
#
# Comprueba si el tablero esta lleno
8101 GO SUB 8200
# si el tablero esta lleno no anade mas numeros
8102 IF LLENO = 1 THEN RETURN
8104 PRINT #0; AT 1,0; "{BRIGHT 1}GENERANDO NUMERO...{BRIGHT 0}"
8105 BEEP .009,1
# genera coordenada X e Y
8106 LET X = INT(RND*4)+1
8107 LET Y = INT(RND*4)+1
# si el cuadro tiene valor volvemos a generar X e Y
8108 IF T(Y,X) <> 0 THEN GO TO 8105
# por defecto asignamos valor de 2
8110 LET V = 2
# para complicar un poco mas
# generamos un numero de 1 a 50
8111 LET T = INT(RND*50)+1
# si el numero es mayor o igual a 45 asignamos valor de 4
8112 IF T > 44 THEN LET V = 4
# asignamos el valor de 2 o 4 al cuadro generado
8120 LET T(Y,X) = V
# imprime cuadro en x,y
8125 GO SUB 8030
# Comprueba si el tablero esta lleno
8130 GO SUB 8200
8140 RETURN
#####################################################################
# Comprueba que el tablero si esta lleno
8210 FOR Y = 1 TO 4
8215 FOR X = 1 TO 4
8220 IF T(Y,X) = 0 THEN LET LLENO = 0: RETURN
8225 NEXT X
8230 NEXT Y
8235 LET LLENO = 1
8240 PRINT #0; AT 1,0; "{BRIGHT 1}TABLERO LLENO !!{BRIGHT 0} "
8245 BEEP 1,0
8250 PAUSE 2
#####################################################################
# Comprueba si es fin de juego
#
# Comprobamos si hay posibilidad de combinacion vertical
8301 FOR X = 1 TO 4
8303 FOR Y = 1 TO 3
8305 IF T(Y,X) = T(Y+1,X) THEN RETURN
8307 NEXT Y
8309 NEXT X
# Comprobamos si hay posibilidad de combinacion horizontal
8311 FOR Y = 1 TO 4
8313 FOR X = 1 TO 3
8315 IF T(Y,X) = T(Y,X+1) THEN RETURN
8317 NEXT X
8319 NEXT Y
# tablero lleno y no hay posibilidad de jugadas
8390 LET FIN = 1
8391 PRINT #0; AT 1,0; "{BRIGHT 1}FIN JUEGO!!{BRIGHT 0} "
8392 BEEP 1,0
8393 PAUSE 2
8395 RETURN
#####################################################################
# Pantalla fin de juego
8401 BORDER 1 : PAPER 1 : INK 7 : CLS
8402 PRINT AT 7,8; "{BRIGHT 1}{INK 1}{PAPER 3}{a} {b}"
8403 PRINT AT 8,8; "{BRIGHT 1}{INK 7}{PAPER 3} FIN DE JUEGO "
8404 PRINT AT 9,8; "{BRIGHT 1}{INK 7}{PAPER 3} "
8405 LET P$=STR$ PUNTOS
8406 LET T$=C$( TO 6-LEN P$) + P$
8407 PRINT AT 10,8; "{BRIGHT 1}{INK 7}{PAPER 3} PUNTOS ";T$;" "
8408 PRINT AT 11,8; "{BRIGHT 1}{INK 7}{PAPER 3} "
8409 IF PUNTOS >= MEJOR THEN GO TO 8414
8410 LET P$=STR$ MEJOR
8411 LET T$=C$( TO 6-LEN P$) + P$
8412 PRINT AT 12,8; "{BRIGHT 1}{INK 7}{PAPER 3} MEJOR ";T$;" "
8413 GO TO 8415
8414 PRINT AT 12,8; "{BRIGHT 1}{INK 7}{PAPER 3} NUEVO RECORD "
8415 PRINT AT 13,8; "{BRIGHT 1}{INK 1}{PAPER 3}{c} {d}"
8416 PRINT AT 19,5; "{BRIGHT 1}{INK 7}{PAPER 1}PULSA M PARA IR AL MENU"
8420 LET T$=INKEY$
# salta al menu
8421 IF T$="M" OR T$="m" THEN GO TO 1000
8422 GO TO 8420
#####################################################################
# Comprueba que si hemos obtenido 2048
8510 FOR Y = 1 TO 4
8515 FOR X = 1 TO 4
8520 IF T(Y,X) = 2048 THEN LET GANADO = 1: RETURN
8525 NEXT X
8530 NEXT Y
8540 RETURN
#####################################################################
# Pantalla fin de juego
8551 BORDER 1 : PAPER 1 : INK 7 : CLS
8552 PRINT AT 7,8; "{BRIGHT 1}{INK 1}{PAPER 3}{a} {b}"
8553 PRINT AT 8,8; "{BRIGHT 1}{INK 7}{PAPER 3} * GANASTE * "
8554 PRINT AT 9,8; "{BRIGHT 1}{INK 7}{PAPER 3} "
8555 GO TO 8405
#####################################################################
# datos de los UDG
# letra esquina redondeada arriba izquierda
9505 DATA "a",255,240,192,192,128,128,128,128
# letra esquina redondeada arriba derecha
9510 DATA "b",255,15,3,3,1,1,1,1
# letra esquina redondeada abajo izquierda
9515 DATA "c",128,128,128,128,192,192,240,255
# letra esquina redondeada abajo derecha
9520 DATA "d",1,1,1,1,3,3,15,255
# flechas abajo
9525 DATA "e",0,68,40,16,68,40,16,0
# flechas derecha
9530 DATA "f",0,0,72,36,18,36,72,0
# flechas arriba
9535 DATA "g",0,16,40,68,16,40,68,0
# flechas derecha
9540 DATA "h",0,0,18,36,72,36,18,0
# letra i tilde
9545 DATA "i",8,16,0,48,16,16,56,0
# letra egne
9550 DATA "n",120,0,120,68,68,68,68,0