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