Tutorial de AGD 2018 Capitulo 09 - Movimiento estilo Manic Miner ⚫①

En el último capítulo pudimos, por primera vez, mover nuestro personaje por la pantalla usando el teclado.
En esta ocasión explicaré el código de la plantilla por defecto de tipo "Manic Miner" y que nos servirá de base para nuestro juego.
Antes de nada, y para facilitar el manejo del editor de código, veamos las teclas de control del editor de código de AGD, tendrás que ver en tu emulador y sistema operativo, cual es la correspondencia entre las teclas "especiales" de ZX Spectrum y las de tu máquina real.
- SYM-Y Cortar Línea - SYM-U Pegar Linea - SYM-Q Inicio - SYM-E Fin - CAPS-2 Activar Mayúsculas - CAPS-3 Borrar hacia delante - CAPS-4 Cambia entre Insertar y Sobreescribir - SYM-CAPS Activa/Desactiva Modo Extendido
Emmm ... ¿Manic Miner?
Cabe la posibilidad de que no hayas conocido el juego al que nos referimos, un clásico de los 80, básicamente el movimiento consiste en tres teclas, izquierda, derecha y salto. En el siguiente video podeis ver ese estilo en acción:
¡Al lio!
Pongo en primer lugar el código completo, para a continuación ir desgranándolo, ¡vamos a ello!
IF KEY 0
IF Y > 167
SCREENRIGHT
LET Y = 6
EXIT
ELSE
IF CANGORIGHT
LET IMAGE = 0
ANIMATE
SPRITERIGHT
ENDIF
ENDIF
ENDIF
IF KEY 1
IF Y < 8
SCREENLEFT
LET Y = 168
EXIT
ELSE
IF CANGOLEFT
LET IMAGE = 0
ANIMATE
SPRITELEFT
ENDIF
ENDIF
IF KEY 3
JUMP
ENDIF
FALL
IF DEADLY
KILL
ENDIF
Lo primero que hemos de observar es la estructura del código, básicamente hay cuatro partes, delimitadas más o menos por cada IF, a saber: movimiento a la derecha, movimiento a la izquierda, salto y caída.
IF KEY DERECHA
MOVER DERECHA
ENDIF
IF KEY IZQUIERDA
MOVER IZQUIERDA
ENDIF
IF KEY SALTO
SALTAR
ENDIF
GESTIONAR CAIDA
SI CAYO DE DEMASIADO ALTO
GESTIONAR MUERTE
ENDIF
Movimiento Derecha
IF KEY 0
IF Y > 167
SCREENRIGHT
LET Y = 6
EXIT
ELSE
IF CANGORIGHT
LET IMAGE = 0
ANIMATE
SPRITERIGHT
ENDIF
ENDIF
ENDIF
...
El primer bloque "IF" gestiona el movimiento del muñeco cuando pulsamos el KEY 0 que corresponde con la tecla asignada a "Derecha", se ejecuta el código que hay dentro.
Este código se divide en dos partes, la primera comprueba si estamos en el borde derecho de la pantalla para cambiar a la que corresponde en el mapa (de momento sólo tenemos una) , la otra, en caso de que no estemos en ese borde, gestiona el movimiento natural de nuestro protagonista.
...
IF Y > 167
SCREENRIGHT
LET Y = 6
EXIT
ELSE
...
En primer lugar, indicar que Y es la variable que representa la posición horizontal del sprite de nuestro protagonista, dentro de la pantalla, el número exacto dependerá de las dimensiones que hayamos asignado a la pantalla de juego. Léase el 167 como "límite derecho de la pantalla actual" y el 6 como "límite izquierdo de la pantalla actual".
La primera instrucción SCREENRIGHT, muestra la pantalla "a la derecha" de la actual según el mapa, en caso de no haber ninguna, muestra la misma de nuevo.
A continuación cambia la coordenada Y, de forma que "desaparecemos" por a derecha de una pantalla y "aparecemos" en la parte izquierda de la correspondiente.
Por último, salimos del bloque de código, pues ya hemos respondido a la pulsación de tecla. Tomemos en cuenta que este bloque de código se ejecuta continuamente por lo que prima la norma "una tarea cada vez".
Veamos ahora el "ELSE", que corresponde con la gestión del movimiento "normal" del muñeco:
...
ELSE
IF CANGORIGHT
LET IMAGE = 0
ANIMATE
SPRITERIGHT
ENDIF
ENDIF
...
El funcionamiento es muy sencillo, si "CANGORIGHT", entonces, se asigna el sprite 0 como gráfico del muñeco, se ejecuta el ciclo de animación y se mueve el sprite hacia la derecha. Es muy muy sencillo, pero quiero comentar un par de cosas:
- En primer lugar, CANGORIGHT hace referencia a la comprobación de si los bloques dibujados en pantalla permiten "cruzar" al personaje, he estado esperando hasta este punto para contar esto. Sirva decir que cada bloque puede o no dejar pasar (ser suelo, pared , etc) en función de la configuración y que esto hará que nuestro muñeco pueda o no pasar por determinada zona. Podéis jugar con eso en el editor de bloques y ver que pasa, aunque dedicaré un capítulo a esto próximamente.
- En segundo lugar el "LET IMAGE = 0", asigna un sprite o secuencia frames al muñeco, podemos tener varias de estas secuencias y asignarlas en determinados momentos como por ejemplo, una para cuando estamos quietos, otra para movernos a la derecha, otra para movernos a la izquierda y otra para el salto.
Mediante esta asignación iremos cambiando la animación por la que toca en cada momento. Como "deberes", haced que vuestro muñeco tenga una animación estando quieto, otra para moverse en cada dirección (izquierda o derecha) y otra diferente para el salto. Es un gran ejercicio que os hará encontrar y resolver problemas, algo muy necesario para crear un juego.
Movimiento Izquierda
...
IF KEY 1
IF Y < 8
SCREENLEFT
LET Y = 168
EXIT
ELSE
IF CANGOLEFT
LET IMAGE = 0
ANIMATE
SPRITELEFT
ENDIF
ENDIF
...
El movimiento a la izquierda es literalmente la imagen especular 🌐🟡③ del de mover a derecha, por lo que me remito a lo ya explicado.
Salto
...
IF KEY 3
JUMP
ENDIF
FALL
IF DEADLY
KILL
ENDIF
Por último, el salto, en su versión más básica, simplemente comprobamos que se ha pulsado la tecla correspondiente al salto, y ejecutamos la rutina que lo gestiona.
Posteriormente ejecutamos FALL que gestiona la caída en caso de que el salto termine "en el aire". Esta rutina, en caso de que caigamos desde demasiado alto, activará el FLAG "DEADLY".
Finalmente, si el proceso acaba con "DEADLY" en "verdadero", se ejecuta "KILL" que gestiona el proceso de muerte lanzando el evento correspondiente (en el que a su vez estará el código que resta las vidas y demás).
Y esto sería todo por hoy, se pueden hacer más cosas, jugad con el código a ver que cosas se os ocurren, tambien podeis crear pantallas a izquierda y derecha de la que tenéis, situarlas en el mapa y ver como cambiamos de una a otra al acercarnos al borde.
En próximos capítulos crearé una traducción de la "Referencia de Lenguaje" de AGD, y en capítulos posteriores hablaré de los tipos de bloque, del salto, el proceso de "muerte", y como suele decirse ¡y mucho más! xD
Como decimos siempre practicad, practicad y practicad. ¡Nos vemos en la siguiente entrega!
¿Y ahora que?
- Si hs aterrizado aquí directamente desde Ventormenta sin encargarte de Hogger, pasa a la página 1
- Si has ido y vuelto de Uldum cuando era todo campo, regocíjate hermano, que no es nada facil, desde la página 9
- Si no has podido librarte de Hogger y debes huir para conservar la vida, ve al instructor de portales y abre uno al futuro pasado de Terminator en la página 10
Referencias Bibliográficas
- Ninguna fuente verificable disponible.
One More Thing

¡Desbloquea el poder de MetsuOS y descubre que la privacidad y la seguridad son la clave para desencadenar tu verdadero potencial en línea!
Contenido registrado en Safe Creative
¡Usa el código de promocional 7ZYM4Z y ahorrate unos eurillos en tu suscripcion de Safe Creative!
MetsuOS Needs You!
Apoyanos en este proyecto difundiendolo en tus redes, o mejor, haznos una donación a la cuenta paypal para poder dedicar más tiempo y recursos a el. No olvides comentarnos que parete te interesa más junto con tu donación.
En este momento, además de mantener los servicios, estoy centrado en crear la siguiente iteración del software que me permite hacer todo esto y creando una biblioteca personal física para poder contrastar contenido.
Sobre el sistema de validez de un contenido en MetsuOS
Empezando a incorporar los niveles de validación de un contenido (también llamada sabiduría o niveles de conocimiento) ⚫🔴 🟡 🟢 🔵⚪ ¿Qué són?
- ⚫① - Dark1 - Conocimiento en Bruto. Modo Cuñao, hablo pero no puedo respaldarlo.
- 🔴② - Rojo2 - Conocimiento Impulsivo, pasional, "lo mio es lo correcto".
- 🟡③ - Yellow3 - Conocimiento Crítico: se comienza a explorar el hecho de que pueda haber otras perspectivas.
- 🟢④ - Green4 - Conocimiento Natural: Surge al comprender la naturaleza de la realidad y del ser humano en una materia.
- 🔵⑤ - Blue5 - Conocimiento Científico: Supone la suma de las fases anteriores aplicando el rigor de lo descubierto por la ciencia hasta ahora, sin caer en la -anticientífica- "opinión científica/opinión de expertos".
- ⚪⑥ - Light6 Conocimiento Consolidado: Se alcanza al integrar todo lo anterior desde una perspectiva empática y asumiendo una verdad probabilística dinámica dependiente del contexto.
Sobre la categorización de los tipos de conocimiento
- Conocimiento Gnoseológico: ⚫① 🔴② 🟡③ 🟢④
- Conocimiento Epistemológico: 🔵⑤
- Conocimiento Metsukeológico: ⚪⑥
La Metsukeología (de Metsuke vision global y logos conocimiento) es la ciencia que estudia el conocimiento como un conjunto potencial de conocimiento del que podemos obtener, procesar o percibir partes concretas dentro de un marco contextual específico, y cuyo contexto general real está muy por encima de lo que somos capaces, como especie, de percibir, procesar e integrar de forma completa (definición en progreso).
La Metsucología (de Metsu aniquilación - en este contexto en forma de colapso - , logos conocimiento) es la ciencia que estudia como extraemos verdades percibidas - colapsadas - como conocimiento desde nuestra perspectiva real (tanto epistemológico como gnoseológico) al tomar una parte específica del conocimiento metsukeológico potencial enmarcado en un contexto concreto, obligando a colapsar el conocimiento potencial en conocimiento específico (definición en progreso).
Mas sobre el contexto
DISCLAIMER: Mi consideración de anticientífico respecto al consenso científico es una hipotesis de trabajo propia, que supone que toda asignación de validez, incluso aquella derivada de la conclusión por acumulación de evidencia NO debe ser supeditada a debate, ni acuerdo, debe ser algo probabilistico sin intervención del ego humano. Podría estar equivocado y, en este punto, es donde se aplicaría entonces ese mismo consenso que ahora considero no valido (incluso dañino)
Existen indicadores para algunas cuestiones adicoinales como los siguientes:
- 🌐 - Contenido Externo sobre cuya validez/validación no tenemos control (usualmente enlaces que salen de #MetsuOS)
- ⚖️ - Analisis
- ⚖️📚 - Análisis Bibligráfico
- ⚖️🔬 - Análisis Científico
- ⚖️🏛️ - Análisis Estructural
- ⚖️🧠 - Análisis Filosófico
- 📖 - Referencia
- 📖📚 - Referencia Bibliográfica / Libro
- 📖🔬- Referencia Científica / Paper
- 📖🏛️ - Referencia Estructural
- 📖🧠 - Referencia Filosófica
- 🔍️- Paradigma
Cuando hablamos de un contenido que incluye un texto que hace referencia a otro.
- 🔴②-🌐🟡③ - Nivel del contenido del documento Rojo2, nivel del contenido externo del que habla el documento Yellow3.
- 🔴②-⚖️📚 🔴② - Nivel del contenido del documento Rojo2, en base a análisis bibliográfico nivel Rojo2
También aplicaremos el Sistema de fiabilidad de fuentes y credibilidad de contenidos de la OTAN 🔴②, este sistema incluye una valoración de la fiabilidad de la fuente de A a F (siendo A la de mayor fiabilidad) y una varloración de credibilidad del contenido de 1 a 6 (siendo 1 la mayor credibilidad).
En MetsuOS la agregaremos al final uniendo amos valores como si fuera una coordenada. Por ejemplo: ⚫①-D4 o 🟡③-B2. Esto ayudarña a contextualizar la información sobre la solidez del conocimiento al que se hace referencia en cada momento.
Hay que tener en cuenta que, cuando hay elementos subjetivos o parcialmente subjetivos, el punto de referencia seré yo mismo. Quizá más adelante pueda objetivizar esto más (seria lo deseable), pero en tanto no tenga herramientas que me lo permitan, debo ceñirme al principio de honestidar intelectual, y esperar que mis sesgos dañen lo menos posible la información (en parte este es el nudo gordiano que pretendo resolver, y por ello es dificil resolverlo a priori).
Así de forma resumida, podríamos decir que esta definición es nivel 🔴② (Rojo2 xD) ¿Crees que me dejo algo? Si es así por favor ayudame a mejorarlo contactándome a través de X (Twitter) en mi cuenta, @metsuke 🌐
Consulta la versión completa de la descripcion en ⚫🔴🟡🟢🔵⚪ (🔴②) Un poco más de detalle
- Información IA: Generado por Humano.
- Ultima Modificación: 2025-06-28 20:49:58.951000+00:00
- Versión Documento: 0.2.5