Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

CMPGPV: Como obtener los módulos de código

–¿Qué sucede? ¿Qué hacen? Los blancos se mueven–

En la entrada anterior vimos como podemos procesar un texto sencillo con la descripción del videojuego y obtener de él todas las estructuras de datos que necesitamos. Ahora veamos como obtener los módulos básicos que vamos a necesitar. En la etapa anterior recogimos todos los sustantivos y los usamos para determinar estructuras de datos (que mas adelante veremos como llenar) y en esta otra lo que veremos es que procedimientos o funciones básicas vamos a necesitar. Para esto vamos a retomar las descripciones de enunciados de alcance pero en lugar de sustantivos lo que vamos a extraer son los verbos.

De nuevo, para los que no recuerdan su educación básica los verbos son las palabras que indican acciones y que son muy importantes en programación. De hecho muchos lenguajes de programación están basados en el idioma inglés debido a su estructura imperativa que pocos otros idiomas tienen. Para que uno pueda obtener esa misma facilidad si habla un idioma como el español u otro de la misma familia la clave es pasar todos los verbos al infinitivo. Esto además evita ciertas ambiguedades hace las funciones mas fáciles de identificar en el código. En fin, ahora tomemos el enunciado de alcance del videojuego del ninja que nos presentó el ‘idea guy’:

Ancho = 1

Profundidad = 1

“El juego cuenta la historia de un ninja que busca vengar el asesinato de su padre y viaja a occidente donde sospecha se esconde el culpable. Armado con su espada, su gran agilidad y conocimientos ancestrales se abre camino por lugares como ciudades controladas por pandillas, selvas llenas de fieras y templos antiguos protegidos por fanáticos. Su búsqueda de venganza lo lleva a descubrir una conspiración para revivir a un antiguo demonio cuyo ejército infernal llevará a la humanidad a la destrucción y él es el único ser viviente capaz de impedirlo.”

Los verbos en este enunciado son:

Cuenta

busca

viaja

sospecha

esconde

abre

lleva

descubrir

revivir

llevará

es

impedirlo

Si bien muchos de los verbos extraidos tienen mas que ver con la historia que con el propio gameplay programable otros nos muestran mucho de los que vamos a programar. “Cuenta” indica que necesitamos una funcionalidad capaz de contar la historia, e historia es una estructura definida en la entrada anterior. De ahi sacamos que necesitamos una función que cuente una historia que reciba la estructura historia y la cuente al jugador. Busca y viaja revelan que el juego puede ser un RPG de acción o un hack’n’slash de mundo abierto y que necesitamos 2 funciones que nos permitan buscar y viajar por un mundo. Sospecha puede ser descartado por ser parte de la historia pero ‘esconde’ indica que debemos programar algo que oculte al jefe ya sea que tengamos que implementar un sistema de pistas o simplemente colocarlo al final del camino que el jugador tiene que recorrer. ‘Abre’ muestra que necesitamos una función que permita ir avanzando por un mundo mientras cumplimos alguna acción. Ya sea encontrando pistas o venciendo enemigos. Para poder abrirnos camino necesitamos cumplir el requisito que es vencer a los enemigos que controlan y protegen los niveles y necesitamos 2 funciones capaces de detectar esa condición de protección de un área. “Lleva, descubrir y revivir” son otras 3 funciones encargadas de activar algo. En este caso pueden ser funciones que detecten cuando se ha llevado a cabo el ritual para revivir al ejército infernal. Esta funcion puede por ejemplo hacer que estatuas de monstruos que solo parecian ser parte del escenario se vuelvan personajes activos o que estos aparezcan para atacar al jugador. “Llevará, ser e impedirlo” son otras 3 funciones que muestran las condiciones de terminación del juego. Si el ninja logra detener la conspiración de revivir al ejército de demonios el juego se termina y se presenta el final feliz.

Hasta aquí no tenemos mucha idea de las funciones pero eso es porque estas no son funciones reales de esas que uno dice hazesto(con_estas_cosas); sino que son módulos. Un módulo no necesariamente es una función. Un módulo es una sección de código que tiene una función específica. No hay reglas en cuanto a qué tamaño puede tener un módulo pero existe un concepto llamado “puntos funcionales” que sirve para medirlos y que veremos mas adelante en esta serie. Por ahora lo que importa no es definir como se van a hacer las cosas. Pero si dejar claro que cosas son las que se van a hacer

Ahora bajemos al siguiente nivel de profundidad:


“…armado con sus espada y su gran agilidad…”

Ancho = 1

Profundidad = 2

“El ninja es capaz de estar de pie o correr sobre terreno o una plataforma, agacharse para esquivar ataques por arriba o atacar a enemigos que se arrastran. Saltar desde su lugar directo hacia arriba o mientras corre para pasar sobre abismos o subir a plataformas mas altas. El ninja puede saltar lo suficiente para pasar sobre un enemigo de su propia altura. Con su espada puede atacar hacia lo que tiene frente a él y puede usarla tanto si está de pie, agachado o a mitad de un salto para destruir enemigos voladores.”

Verbos:

estar

correr

agacharse

esquivar

arrastran

saltar

pasar

subir

puede

atacar

tener

usarla

estar

destruir

No voy a describir todos los verbos esta vez porque ya debieron entenderlo. Pero aquí las cosas se ponen mas claras. “Estar” en este caso indica que el ninja se encuentra en un lugar determinado. Los demás verbos como correr, agachar, saltar, atacar y destruir son acciones directas que puede llevar acabo el ninja. Otras son acciones o situaciones que pueden ser detectadas cuando ocurren como pasar o subir. En el caso de subir significa que hay un módulo capaz de detectar que el ninja saltó lo suficientemente alto como para aterrizar en una plataforma. Ahora pasemos al siguiente nivel de profundidad.


“El ninja es capaz de estar de pie o correr sobre terreno o una plataforma”

ancho = 1

profundidad = 3

“Para que la plataforma o el terreno sostengan al ninja este debe de tener los pies bien puestos sobre alguna de estas cosas. Si no es así el ninja caerá al vacio y a menos que sus pies toquen algo que lo sostenga morirá al pisar la parte inferior de la pantalla. Si el ninja se encuentra parado sobre el terreno o una plataforma puede correr, agacharse y saltar desde ahí y si a la mitad de una caida o un salto sus pies se acercan lo suficiente a una plataforma puede aterrizar sobre ella”
sostengan

debe

tiene

puestos

es

caerá

tocar

morirá

pisar

encuentra

parado

puede

correr

agacharse

saltar

acercan

aterrizar


Los verbos SER, HABER y ESTAR delatan código que prueba una condición

En este punto ya podríamos comenzar a programar algunos módulos que detecten situaciones como por ejemplo uno que detenga la caida del ninja si detecta que puso los pies sobre una plataforma si esta cayendo o saltando o que pongan en marcha una secuencia de eventos como el destruir a un enemigo si otro módulo detecta que está dentro del rango de ataque del ninja y ha sido golpeado con la espada. Como ya conocemos las estructuras de datos tenemos una idea como interactuan estas con los módulos. Pero todavía faltan dos cosas: Saber qué es lo que contienen las estructuras y qué datos de estas estructuras son procesados por los módulos.

Hay otro detalle en el análisis del enunciado de alcance relacionado con los verbos y es que si están en infinitivo, participio (terminados en -ado, -ido, -to, -so, y -cho) o gerundio(-ando, -iendo) indican diferentes cosas. Los verbos terminados en participio indican que el módulo lee el estado de un tipo de variable de estado conocida como bandera y los de gerundio que el módulo puede cambiar el estado de esas banderas. Los verbos en infinitivo se relacionan con módulos del tipo (iniciar/detener algo). En realidad en los videojuegos y muchas otras aplicaciones con importantes niveles de interactividad con el usuario hay muchos módulos dedicados a detectar determinadas condiciones y arrancar y detener procesos. Y en cuanto a lo de las banderas, una bandera es como un interruptor que indica si una condición se cumplió o no y con ello determinar si algo se va o no a hacer. La verdad es que los verbos en participio y gerundio se usan también para definir propiedades de alguna estructura. Otro punto muy importante es que los verbos “SER” y “Estar” son muy importantes. Casi siempre luego de estos 2 verbos viene un adjetivo o un verbo terminado en participio o gerundio. Por ejemplo en las expresiones “es invisible” o “está quemándose”. En este tipo de casos los módulos se limitan a probar una propiedad o campo dentro de una estructura y regresar un valor de verdad dependiendo de si la condición se cumple o no.

En la siguiente entrada veremos que hay otros dos análisis de palabras que nos permitirán definir las estructuras con detalle y determinar con seguridad qué módulos interactuan con cuales datos.

Anuncios

diciembre 30, 2013 - Posted by | Uncategorized

Aún no hay comentarios.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: