MetsuOS

Construyendo la plena inclusión a través del videojuego

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

La cabeza de Manic Miner con pixeles gordos

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:

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?

Referencias Bibliográficas

One More Thing

Un escenario de retrocomputación del siglo 24

¡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

Logo 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?

Sobre la categorización de los tipos de conocimiento

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:

Cuando hablamos de un contenido que incluye un texto que hace referencia a otro.

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