<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Un lengua je para la especi cacion de la logica de juegos</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Carlos Mar n-Lora</string-name>
          <email>cmarin@uji.es</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Miguel Chover</string-name>
          <email>chover@uji.es</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jose M. Sotoca</string-name>
          <email>sotoca@uji.es</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Instituto de Nuevas Tecnolog as de la Imagen (INIT), Universitat Jaume I</institution>
          ,
          <addr-line>Castellon de la Plana</addr-line>
          ,
          <country country="ES">Spain</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>The development of video games is a complex task due to the large amount of knowledge it requires in terms of design and programming. In particular, the specification of the behavior of the elements of a game is one of the factors that most increase its complexity. In this sense, there are a variety of game engines with numerous features and programming languages, including complex visual programming systems. With the intention of raising an alternative and reduce the complexity of current systems, presents a small programming language capable of defining any algorithm to specify the behaviors of the elements that make up the games. The dentition of the language has been based on the theorem of structured programming and its derived studies, taking as reference the While language. The ultimate goal of this work is to validate the expressiveness of language and demonstrate theoretically that allows to create the mechanics of any arcade game. For its validation, have been implemented multiple games with different mechanics, having successfully completed all the games that have been proposed so far.</p>
      </abstract>
      <kwd-group>
        <kwd>Programming Language Game Development Game Logic Game Engine</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduccion</title>
      <p>
        El desarrollo de videojuegos implica el conocimiento de un lenguaje de
programacion. Actualmente existen multiples entornos con los que desarrollar juegos:
desde aplicaciones comerciales tan potentes como Unity o Unreal, pasando por
proyectos colaborativos de codigo libre como Godot, hasta librer as de codigo
como PlayCanvas, Threejs o Babylon [
        <xref ref-type="bibr" rid="ref10 ref13">10, 13</xref>
        ]. Estos entornos de desarrollo basan
la construccion de los objetos de sus juegos y la de nicion de sus logicas en
lenguajes de programacion de alto nivel como C++, C o JavaScript, y en
librer as especializadas. Este entramado de software compone lo que se conoce
habitualmente como motor de juegos.
      </p>
      <p>
        Una caracter stica que comparten todos estos motores es la tendencia a
integrar nuevas tecnicas y procedimientos en sus entornos de desarrollo haciendo
Copyright © 2020 for this paper by its authors. Use permitted under Creative Commons License Attribution 4.0 International (CC BY 4.0).
realmente complicado utilizar todo el potencial que proporcionan sin ser un
programador experto. A esto se le an~ade la existencia de multiples patrones de
disen~o y programacion de juegos [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ], y la inherente evolucion de los lenguajes de
programacion de alto nivel, los cuales cuentan cada vez con mas caracter sticas
y funcionalidades.
      </p>
      <p>
        Con la intencion de establecer una referencia para los lenguajes de especi
cacion de la logica de los videojuegos, este trabajo presenta un pequen~o lenguaje
de programacion capaz de de nir algoritmos que describan mecanicas clasicas
en el desarrollo de videojuegos. Para ello se parte del teorema de programacion
estructurada [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] y se de ne un lenguaje que utiliza solo la secuencia, la
seleccion y la iteracion. El lenguaje esta basado en While, un pequen~o lenguaje de
programacion utilizado para el analisis teorico de la semantica de lenguajes de
programacion imperativos [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ].
      </p>
      <p>El objetivo del trabajo es demostrar teoricamente que el lenguaje
propuesto permite crear cualquier tipo de algoritmo asociado a los elementos de
un videojuego, as como validar su expresividad en la practica mediante la
implementacion de diversas mecanicas clasicas de juegos arcade.</p>
      <p>A modo de resumen, este documento se organiza de la siguiente manera. En
primer lugar, en la seccion 2, se presenta el estudio realizado sobre el estado del
arte en programacion estructurada y programacion de juegos. A continuacion,
en la seccion 3, se detalla el contexto en el que ha sido de nido el lenguaje. En la
seccion 4, se desarrolla su sintaxis y su semantica. Posteriormente, en la seccion
5, se plantea la descripcion de una serie de mecanicas de juego con el lenguaje
a modo de caso de uso y de resultados del trabajo realizado. Finalmente, en la
seccion 6, se presentan las conclusiones al estudio y las posibles v as de trabajo
en el futuro.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Estado del arte</title>
      <p>
        Este trabajo trata de alcanzar un sistema m nimo para la de nicion de la logica
en videojuegos. Para ello, la investigacion se centra en el estudio de la literatura
sobre teor a de lenguajes de programacion y la programacion estructurada [
        <xref ref-type="bibr" rid="ref19 ref9">9,
19</xref>
        ], y particularmente sobre el teorema del programa estructurado.
      </p>
      <p>
        El teorema del programa estructurado, tambien llamado teorema de
BohmJacopini [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], establece la base de la programacion estructurada evitando los
comandos GO-TO y determinando que es posible calcular cualquier funcion
computable mediante tres estructuras de control: la secuencia, la seleccion y
la iteracion. Entendiendo secuencia como la ejecucion sucesiva de varios
subprogramas (THEN), seleccion como la ejecucion de un subprograma sobre otro en
funcion del resultado de una expresion booleana (con estructuras de seleccion
como el IF-THEN-ELSE), e iteracion como la ejecucion repetida de un
subprograma siempre que la evaluacion de una expresion booleana sea verdadera
(WHILE-DO). Ademas, y a pesar de esta restriccion, esta estructura contempla
el uso de variables auxiliares para realizar un seguimiento de la informacion del
programa.
      </p>
      <p>
        En los an~os sucesivos, la programacion estructurada ha dado lugar a multitud
de trabajos de campo, incluyendo una aproximacion del concepto a las maquinas
de Turing [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ]. Ademas, multiples estudios complementaron el teorema de
BohmJacopini a rmando que mediante el uso de esas variables auxiliares a modo de
variables booleanas, todo programa con bucles WHILE era equivalente a otro
programa con un unico bucle WHILE-DO [
        <xref ref-type="bibr" rid="ref20 ref6">20, 6</xref>
        ]. A partir de esto, se establece el
denominado Teorema Folk, que indica que todo diagrama de ujo es equivalente a
un programa While con una unica ocurrencia de WHILE-DO, mediante el uso de
variables auxiliares [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. De hecho, algunos autores demostraron impl citamente
que el uso de estas variables auxiliares era estrictamente necesario [
        <xref ref-type="bibr" rid="ref16 ref17 ref2">2, 16, 17</xref>
        ].
      </p>
      <p>
        El contexto de este trabajo se centra sobre la aplicacion de estos
conocimientos sobre el desarrollo de juegos, y concretamente sobre el scripting. El scripting
en videojuegos esta considerado como un metodo de gestion para eventos y
comportamientos espec cos [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ] que permite modi car la logica del programa sin la
necesidad de volver a compilar el juego completo [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ].
      </p>
      <p>
        Los lenguajes de scripting que suelen utilizarse para la de nicion de la logica
proporcionan una capa de abstraccion sobre los sistemas que gestionan los juegos
en los dispositivos, normalmente controlados por lenguajes como C o C++. Es
decir, estan orientados a facilitar la programacion, a menudo a costa de afectar
al rendimiento del juego en tiempo de ejecucion [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ].
      </p>
      <p>
        Durante la ultima decada, se ha observado una tendencia en los motores de
juegos hacia el uso de lenguajes de scripting genericos, desplazando a los
lenguajes propios de los sistemas de desarrollo de juegos. Actualmente, los lenguajes
mas utilizados son C#, Python y JavaScript [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] con mencion aparte a los
sistemas de scripting visual como Scratch o Unreal Blueprints [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ].
      </p>
      <p>A continuacion, se propone un lenguaje como punto medio entre la simbolog a
abstracta de nivel formal y los lenguajes de scripting para juegos de alto nivel.
3</p>
    </sec>
    <sec id="sec-3">
      <title>Contexto</title>
      <p>
        El lenguaje de programacion que se va a de nir tiene proposito general. Sin
embargo, ha sido descrito sobre un motor de juegos con un modelo de datos
basado en sistemas multiagente [
        <xref ref-type="bibr" rid="ref18 ref5">18, 5</xref>
        ]. Estos sistemas se caracterizan porque
sus agentes se encuentran en un espacio compartido (llamado entorno) con otros
agentes, con los que comparten un conjunto de propiedades con caracter sticas
prede nidas: geometricas, render, f sicas, audio, etc. Ademas, los agentes
comparten unas propiedades generales del juego o entorno social (ver Figura 1). El
comportamiento de cada agente se establece de forma autonoma en funcion de
su propio estado y el de su entorno en el instante que se evalua su logica.
      </p>
      <p>
        Para de nir los comportamientos de los objetos del juego (agentes) tras
sus interacciones con su entorno, se ha creado un lenguaje capaz de describir
cualquier algoritmo, partiendo del teorema del programa estructurado [
        <xref ref-type="bibr" rid="ref12 ref4">4, 12</xref>
        ].
Este teorema establece que toda funcion computable puede ser implementada
en un lenguaje de programacion combinando solo tres estructuras logicas: la
secuencia, la seleccion y la iteracion. Por lo tanto, estas ser an las estructuras que
deber an de nirse, de forma similar a como se han de nido para While [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ].
      </p>
      <p>
        Por otro lado, el teorema del programa estructurado tiene una version que
se adapta muy bien al patron de disen~o de juegos del bucle de juego, conocido
como Game Loop [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ]. Esta nueva version realiza una demostracion similar a
la anterior pero utilizando unicamente un bucle while [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. El nuevo teorema
conocido como Folk Theorem especi ca que \Cualquier diagrama de ujo es
equivalente a un programa While con una ocurrencia del bucle while, incluyendo
si es necesario variables adicionales". Tambien hay resultados similares como el
teorema de la forma normal que demuestra que cualquier programa While se
puede convertir en un programa con un unico bucle while [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ].
      </p>
      <p>
        De esta forma, el lenguaje que se presenta solo va a incluir dos estructuras
logicas: la secuencia y la seleccion, ya que el bucle de juego forma parte del
sistema. La eliminacion de los bucles dentro del lenguaje no supone ningun
problema en cuanto a la capacidad algor tmica de lenguaje y ya ha sido utilizada en
otros contexto como en las algebras de evolucion donde se utiliza como
constructores de sus reglas tambien, la secuencia y la condicion [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. Las maquinas de
estados abstractos inventadas por Yuri Gurevich, constituyen uno de los modelos
mas generales de computacion en la actualidad [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
      </p>
      <p>
        La de nicion del comportamiento de los agentes y la logica del juego se
realizara mediante scripts implementados en el nuevo lenguaje que se propone.
El motor evaluara todos los scripts de los agentes del juego de manera secuencial
mediante un unico bucle iterativo WHILE-DO. Tras la evaluacion de la logica, el
motor actualizara el estado del entorno y procedera a depurar las altas y bajas
de agentes, as como el cambio de escenas o el nal del juego. El bucle (y por lo
tanto el juego) se ejecutara mientras la condicion de salida del juego sea falsa[
        <xref ref-type="bibr" rid="ref18">18</xref>
        ].
      </p>
    </sec>
    <sec id="sec-4">
      <title>Lenguaje</title>
      <p>4.1</p>
      <sec id="sec-4-1">
        <title>Sintaxis</title>
        <p>
          A partir de este modelo, el lenguaje resultante establece una estructura para la
composicion de la logica que se evalua en un bucle iterativo continuo, el game
loop. Esta sintaxis seguira el esquema de la notacion de Backus-Naur [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ].
Haciendo una analog a con la sintaxis del lenguaje While [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ], se procede a
delimitar los elementos que compondran las construcciones sintacticas en variables
categoricas que indicaran el proposito de cada elemento del lenguaje:
{ n 2 IR, valores numericos.
{ x, como variables.
{ a, como expresiones aritmeticas.
{ b, como expresiones booleanas.
{ S, como comandos.
        </p>
        <p>Estas variables categoricas pueden ser complementadas con sub ndices del
modo a1, a2, a3 o S1, S2.</p>
        <p>A partir de estos elementos se de ne la sintaxis abstracta para generar las
expresiones aritmeticas, las expresiones booleanas y los comandos del lenguaje,
obteniendo la siguiente estructura sintactica:
{ a ::= n j x j f (a) j a1 + a2 j a1 - a2 j a1 * a2 j a1 / a2
{ b ::= true j f alse j x j a1 &lt; a2 j a1 a2 j a1 = a2 j a1</p>
        <p>a1 6= a2 j :b
{ S ::= x1 := a1 j x1 := b1 j S1; S2; j if b1 then S1 else S2
a2 j a1 &gt; a2 j</p>
        <p>Por lo tanto, las expresiones aritmeticas a se pueden componer mediante
literales numericos n, variables x como referencias a propiedades del juego o de
los objetos del juego, y por funciones f (a) tales como el valor absoluto, valores
aleatorios o operaciones trigonometricas.</p>
        <p>En cuanto a las expresiones booleanas b solo tienen una de las siguientes
formas. Diremos que tienen un elemento basico si es true, f alse o x, siendo x una
variable booleana, o tiene la formas relacionales como a1 = a2 o a1 a2 donde
a1 y a2 son expresiones aritmeticas. Diremos que tiene un elemento compuesto
si tiene la forma :b, donde b es una expresion booleana.</p>
        <p>Esta especi cacion de ne la sintaxis abstracta del lenguaje y simplemente
indica como construir expresiones aritmeticas, booleanas y sentencias en el lenguaje.
4.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Semantica</title>
        <p>A un nivel semantico, el lenguaje se apoya fundamentalmente sobre las
expresiones, tanto aritmeticas como booleanas, y a su vez en comandos construidos
mediante dichas expresiones. Los comandos se ejecutan en cada iteracion del
ciclo de juego evaluando el contenido de su expresion.</p>
        <p>
          Estos comandos tienen la capacidad de transformar el estado del entorno
del juego, as como de las propiedades del mismo y de los objetos del juego
que lo componen. Estas transformaciones se realizan siguiendo el modelo de
persistencia de informacion que se utiliza en bases de datos [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]. Es decir, con
operaciones que realizan altas, bajas, modi caciones y consultas sobre el modelo.
Estas operaciones son conocidas como las funciones CRUD (del ingles Create,
Read, Update y Delete), pero aplicadas sobre el juego y la especi cacion de
comportamiento del mismo. Para este lenguaje, se restringe el uso de las altas
y bajas a su uso sobre objetos del juego, y el uso de modi caciones y consultas
sobre las propiedades del juego (estado social) y de sus objetos (agentes). Del
mismo modo, las altas de nuevos elementos se realizan mediante el operador
new. El cual crea una instancia de un nuevo objeto a partir de otro existente
en el juego.
        </p>
        <p>new gameObject</p>
        <p>Mientras que para realizar una baja, el lenguaje incluye el operador delete.
Con esto, el sistema eliminara del modelo de datos el objeto que se le indique.</p>
        <p>delete gameObject</p>
        <p>Como cualquier otro lenguaje, las consultas a las propiedades se realiza
mediante la llamada a las variables que representan la informacion del juego. Mientras
que el caso de las modi caciones se realiza a partir de la asignacion del resultado
de la evaluacion de una expresion a una variable que representa una propiedad
del juego o de uno de sus elementos.</p>
        <p>x1 := x1 + 1</p>
        <p>Donde x1 es una variable que representa una propiedad y x1 +1 una expresion
aritmetica.</p>
        <p>Por otro lado, con el objetivo de elevar el nivel de abstraccion del lenguaje,
es posible generar conjuntos de comandos con propositos espec cos para el
desarrollo de juegos. Por ejemplo para cambiar las propiedades de los objetos del
juego, o para determinar si se ha producido una colision entre dos objetos.</p>
        <p>Del analisis de las expresiones y sus combinaciones se obtienen dos categor as:
de accion y de condicion. La primera derivada de las estructuras de asignacion
o modi caciones, y la segunda de las estructuras de seleccion. Los comandos de
accion son aquellos que realizan acciones sobre los datos del juego. Los comandos
de condicion son aquellos que evaluan la relacion entre parametros. Un ejemplo
de una expresion de accion es el siguiente:
x1 + n1 + abs(n2 + sqrt(x2))
Mientras que una expresion de condicion podr a tener la siguiente apariencia:</p>
        <p>A partir de estas operaciones, el lenguaje presenta una semantica que se
organiza en base a dos estructuras: las secuencias y las condiciones.
{ Secuencias: de la forma S1; S2; S3; Donde primero se ejecuta el comando</p>
        <p>S1, despues el S2 y as sucesivamente.
{ Condicion, si la expresion b es cierta entonces se ejecuta S1, s es falsa se
ejecuta S2.</p>
        <p>Con esta estructura, el ujo de la evaluacion de los comandos se puede de nir
como una estructura secuencial de arboles binarios. Donde un comando puede
contener un nodo condicion que dirija el ujo sobre los comandos situados en una
de sus dos ramas. En la Figura 2 se puede ver un ejemplo de esta construccion.</p>
        <p>Donde el conjunto mas a la izquierda que contiene los comandos S1 y S2
representa los scripts de un objeto del juego, el del centro con la condicion b1
representa los de otro, y el bloque de la derecha representa los scripts del otro
objeto diferente, el cual contiene el comando S8.
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Resultados y casos de uso</title>
      <p>Con el objetivo de mostrar las caracter sticas y las capacidades del lenguaje, a
continuacion se exponen los resultados obtenidos en la implementacion de juegos.</p>
      <p>
        Para probar la expresividad del lenguaje se ha implementado una gran
cantidad de juegos entre los que destacan t tulos arcade clasicos tales como Asteroids,
Blocks, Frogger, Street Racer, PacMan, Mario Bros o el Space Invaders. El
motivo tras la utilizacion de juegos arcade como demostradores y casos de uso
reside en estudios que a rman que la programacion de juegos presenta un
contexto favorable para el aprendizaje de metodos genericos de programacion [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Se
considera que si el lenguaje es capaz de implementar mecanicas de juegos arcade,
tambien podra implementar mecanicas mas avanzadas derivadas de ellos, como
las que se pueden encontrar en cualquier juego actual.
      </p>
      <p>Durante el desarrollo de estos juegos a modo de demostradores, se ha pulido
la especi cacion del lenguaje, llegando a agregar elementos necesarios y
eliminando otros redundantes o innecesarios. Finalmente, el metodo ha demostrado
ser robusto, ya que ha permitido completar con exito la programacion de todos
los juegos propuestos hasta la fecha. En la Figura 3 se muestran algunos de los
juegos arcade desarrollados.</p>
      <p>A continuacion, se expone como caso de uso el desarrollo del juego arcade
Asteroids publicado por Atari en 1976. Un juego de disparos en el que se atraviesa
un cinturon de asteroides con una nave espacial. El objetivo es destruir tantos
asteroides como sea posible, evitando colisionar con ellos. La seleccion de este
juego se debe a que incluye mecanicas muy comunes en juegos. En la Figura
4 se puede observar una captura del juego durante su ejecucion. La de nicion
del juego se va a centrar en cuatro objetos del juego: Nave, Laser, Asteroide y
Generador de Asteroides.</p>
      <sec id="sec-5-1">
        <title>Nave</title>
        <p>El elemento principal del juego es la Nave, controlada por el jugador. Puede
desplazarse hacia delante en funcion de la orientacion de su morro. A continuacion,
se muestra el script que controla el movimiento de la Nave con tres eventos que
permiten la rotacion a la izquierda y a la derecha, y el empuje de la nave.
if keyLeft then Me.angle := Me.angle + 0.1;
if keyRight then Me.angle := Me.angle - 0.1;
if keyUp then</p>
        <p>Me.x := Me.x + 100 * cos(Me.angle);</p>
        <p>Me.y := Me.y + 100 * sin(Me.angle);</p>
        <p>Donde las variables keyLeft, keyRight y keyUp corresponden a eventos del
teclado que forman parte del estado social del juego. Por otro lado, la variables
Me.x, Me.y y Me.angle hacen referencia a las propiedades de posicion y rotacion
de la nave. Ademas en el script tambien se utilizan las funciones trigonometricas
seno y coseno que permiten crear expresiones aritmeticas.</p>
        <p>Por otro lado, se contempla un script adicional que controla el
comportamiento de la Nave al alcanzar los l mites del escenario del juego. En ese caso,
se reposiciona el objeto en el punto contrario del escenario en funcion del taman~o
del mismo y de sus propias dimensiones.</p>
        <p>if Me.x &gt; screenWidth - Me.width then Me.x := Me.width;
if Me.x &lt; Me.width then Me.x := screenWidth - Me.width;
if Me.y &gt; screenHeight - Me.height then Me.y := Me.height;
if Me.y &lt; Me.height then Me.y := screenHeight - Me.height;</p>
        <p>Para completar el objetivo del juego, la Nave debe ser capaz de disparar
objetos de tipo Laser hacia los Asteroides. Esta mecanica produce nuevos objetos
Laser bajo la Nave y los desplaza en funcion de la orientacion de la Nave en el
momento de su creacion y de un parametro de velocidad prede nido. El codigo
que controla esta mecanica se compondr a de la siguiente manera:
if keySpace then new Laser(params);</p>
        <p>Donde new Laser(params) genera un nuevo objeto Laser con la posicion y
la rotacion de la Nave como parametros.</p>
        <p>Por otro lado, el jugador debe evitar que la Nave colisione con los Asteroides.
S este evento ocurriera, el sistema detectara el evento de colision y procedera a
destruir el objeto Nave y a activar la condicion de salida del juego.
if Me.collisionWithAsteroid then
destroy Me;
exit := true;
Me.x := Me.x + 300 * cos(Me.angle);</p>
        <p>Me.y := Me.y + 300 * sin(Me.angle);</p>
      </sec>
      <sec id="sec-5-2">
        <title>Laser</title>
        <p>Tras su creacion el Laser tiene dos scripts que controlan su comportamiento. El
primero controla el desplazamiento. En funcion de su rotacion, establecida por
la Nave al crear el objeto Laser, y de un parametro de velocidad arbitrario, el
objeto se desplaza continuamente por el escenario.</p>
        <p>El segundo script gestiona la colision del Laser contra un Asteroide. Cuando
el sistema detecta la colision, se procede a la destruccion del Laser.</p>
        <p>if Me.collisionWithAsteroid then delete Me;</p>
      </sec>
      <sec id="sec-5-3">
        <title>Generador de Asteroides</title>
        <p>Los asteroides son los objetos del juego que realizan el papel de antagonista. Son
creados por un elemento auxiliar encargado de generar arbitrariamente en el
escenario nuevos objetos Asteroide mediante un script que controla su creacion
en funcion del tiempo.</p>
        <p>if spawnTimer
then</p>
        <p>1
else
new Asteroide(params);
spawnTimer := 0;
spawnTimer := spawnTimer + deltaTime;</p>
      </sec>
      <sec id="sec-5-4">
        <title>Asteroide</title>
        <p>Por ultimo, el Asteroide se desplaza arbitrariamente por el escenario y unicamente
actua cuando colisiona con un objeto Laser. En este momento, segun el juego
original, aumenta la puntuacion de la partida, procede a dividirse en dos nuevos
objetos Asteroide de menor taman~o, y por ultimo se destruye.
if Me.collisionWithLaser then
score := score + 1;
new Asteroide(params);
new Asteroide(params);
delete Me;
6</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Conclusiones</title>
      <p>En este trabajo se presenta un lenguaje que permite de nir logicas de juegos a
partir de una semantica que contiene un conjunto reducido de acciones y
condiciones. Los ejemplos de juegos elegidos se corresponden con mecanicas
implementadas en base al desarrollo de juegos clasicos. El lenguaje se ha demostrado
e caz en la tarea de especi car juegos, ya que ha sido capaz de completar todas
las mecanicas que se han propuesto hasta la fecha.</p>
      <p>La simplicidad del lenguaje se fundamenta en los teoremas de la
programacion estructurada y sus derivaciones, como el teorema Folk. Se ha demostrado
que es posible crear un lenguaje para la creacion de juegos donde solo existen
estructuras condicionales y comandos compuestos por expresiones, sin bucles. La
evaluacion de esta semantica se fundamenta en la iteracion continua del juego a
traves del ciclo de juego. Ademas, se ha observado que operadores logicos como
AND y OR no son necesarios. Del mismo modo que tampoco es necesario el uso
de estructuras de datos complejas como vectores o matrices, aunque esto deriva
del modelo de datos basado en el paradigma de los sistemas multiagente.</p>
      <p>Como trabajo futuro, se pretende el desarrollo de este modelo de lenguaje
aplicado a algoritmos t picos en logica de juegos y en la aplicacion del lenguaje
a un contexto programacion concurrente.</p>
    </sec>
    <sec id="sec-7">
      <title>Agradecimientos</title>
      <p>Este trabajo ha sido nanciado por el Ministerio de Ciencia, Innovacion y
Universidades (PID2019-106426RB-C32, RTI2018-098651-B-C54) y por proyectos de
investigacion de la Universidad Jaume I (UJI-B2018-56, UJI-B2018-44). Ademas,
este trabajo ha sido posible gracias a los recursos gra cos creados por Kenney.nl.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Anderson</surname>
            ,
            <given-names>E. F.</given-names>
          </string-name>
          (
          <year>2011</year>
          ).
          <article-title>A classi cation of scripting systems for entertainment and serious computer games</article-title>
          .
          <source>In 2011 Third International Conference on Games and Virtual Worlds for Serious Applications</source>
          (pp.
          <fpage>47</fpage>
          -
          <lpage>54</lpage>
          ). IEEE.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Ashcroft</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Manna</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          (
          <year>1979</year>
          ).
          <article-title>The translation of go-to programs to whileprograms</article-title>
          . In Classics in software engineering (pp.
          <fpage>49</fpage>
          -
          <lpage>61</lpage>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Becker</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Parker</surname>
            ,
            <given-names>J. R.</given-names>
          </string-name>
          (
          <year>2005</year>
          ).
          <article-title>All I ever needed to know about programming, I learned from rewriting classic arcade games</article-title>
          .
          <source>In Future Play, The International Conference on the Future of Game Design and Technology.</source>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Bohm</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jacopini</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          (
          <year>1966</year>
          ).
          <article-title>Flow diagrams, turing machines and languages with only two formation rules</article-title>
          .
          <source>Communications of the ACM</source>
          ,
          <volume>9</volume>
          (
          <issue>5</issue>
          ),
          <fpage>366</fpage>
          -
          <lpage>371</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Chover</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mar n</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rebollo</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Remolar</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          (
          <year>2020</year>
          ).
          <article-title>A game engine designed to simplify 2D video game development</article-title>
          .
          <source>Multimedia Tools and Applications</source>
          ,
          <fpage>1</fpage>
          -
          <lpage>22</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Dahl</surname>
            ,
            <given-names>O. J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dijkstra</surname>
            ,
            <given-names>E. W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hoare</surname>
            ,
            <given-names>C. A. R</given-names>
          </string-name>
          . (Eds.). (
          <year>1972</year>
          ).
          <article-title>Structured programming</article-title>
          . Academic Press Ltd.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Daissaoui</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          (
          <year>2010</year>
          , May).
          <article-title>Applying the MDA approach for the automatic generation of an MVC2 web application</article-title>
          .
          <source>In 2010 Fourth International Conference on Research Challenges in Information Science (RCIS)</source>
          (pp.
          <fpage>681</fpage>
          -
          <lpage>688</lpage>
          ). IEEE.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Dershowitz</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          (
          <year>2012</year>
          ).
          <article-title>The generic model of computation</article-title>
          .
          <source>arXiv preprint arXiv:1208</source>
          .
          <fpage>2585</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Dijkstra</surname>
            ,
            <given-names>E. W.</given-names>
          </string-name>
          (
          <year>1970</year>
          ).
          <source>Notes on structured programming.</source>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Gregory</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          (
          <year>2018</year>
          ).
          <article-title>Game engine architecture</article-title>
          . crc Press.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Gurevich</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          , Borger, E. (
          <year>1995</year>
          ).
          <article-title>Evolving algebras 1993: Lipari guide</article-title>
          .
          <source>Evolving Algebras</source>
          ,
          <volume>40</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Harel</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          (
          <year>1980</year>
          ).
          <article-title>On folk theorems</article-title>
          .
          <source>Communications of the ACM</source>
          ,
          <volume>23</volume>
          (
          <issue>7</issue>
          ),
          <fpage>379</fpage>
          -
          <lpage>389</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Ho</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>de Joya</surname>
            ,
            <given-names>J. M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Trevett</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          (
          <year>2017</year>
          ).
          <article-title>State-of-the-art webGL 2.0</article-title>
          . In SIGGRAPH Asia 2017 Courses (pp.
          <fpage>1</fpage>
          -
          <lpage>51</lpage>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Kernighan</surname>
            ,
            <given-names>B. W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wyk</surname>
            ,
            <given-names>C. J. V.</given-names>
          </string-name>
          (
          <year>1998</year>
          ).
          <article-title>Timing trials, or the trials of timing: experiments with scripting and user-interface languages</article-title>
          .
          <source>Software: Practice and Experience</source>
          ,
          <volume>28</volume>
          (
          <issue>8</issue>
          ),
          <fpage>819</fpage>
          -
          <lpage>843</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Knuth</surname>
            ,
            <given-names>D. E.</given-names>
          </string-name>
          (
          <year>1964</year>
          ).
          <article-title>Backus normal form vs. backus naur form</article-title>
          .
          <source>Communications of the ACM</source>
          ,
          <volume>7</volume>
          (
          <issue>12</issue>
          ),
          <fpage>735</fpage>
          -
          <lpage>736</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Kosaraju</surname>
            ,
            <given-names>S. R.</given-names>
          </string-name>
          (
          <year>1974</year>
          ).
          <article-title>Analysis of structured programs</article-title>
          .
          <source>Journal of Computer and System Sciences</source>
          ,
          <volume>9</volume>
          (
          <issue>3</issue>
          ),
          <fpage>232</fpage>
          -
          <lpage>255</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Kozen</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tseng</surname>
            ,
            <given-names>W. L. D.</given-names>
          </string-name>
          (
          <year>2008</year>
          ,
          <article-title>July)</article-title>
          .
          <article-title>The Bohm{Jacopini theorem is false, propositionally</article-title>
          .
          <source>In International Conference on Mathematics of Program Construction</source>
          (pp.
          <fpage>177</fpage>
          -
          <lpage>192</lpage>
          ). Springer, Berlin, Heidelberg.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Mar</surname>
            n-Lora,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chover</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sotoca</surname>
            ,
            <given-names>J. M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Garc</surname>
            <given-names>a</given-names>
          </string-name>
          ,
          <string-name>
            <surname>L. A.</surname>
          </string-name>
          (
          <year>2020</year>
          ).
          <article-title>A game engine to make games as multi-agent systems</article-title>
          .
          <source>Advances in Engineering Software</source>
          ,
          <volume>140</volume>
          ,
          <fpage>102732</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Mills</surname>
            ,
            <given-names>H. D.</given-names>
          </string-name>
          (
          <year>1972</year>
          ).
          <article-title>Mathematical foundations for structured programming</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Mirkowska</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          (
          <year>1972</year>
          ).
          <article-title>Algorithmic logic and its applications. Doctoral diss</article-title>
          .,
          <source>Univ. of Warsaw.</source>
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Nielson</surname>
            ,
            <given-names>H. R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nielson</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          (
          <year>1992</year>
          ).
          <article-title>Semantics with applications</article-title>
          (Vol.
          <volume>104</volume>
          ). Chichester: Wiley.
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>Nielson</surname>
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nielson</surname>
            <given-names>H. R.</given-names>
          </string-name>
          (
          <year>1999</year>
          ).
          <source>Principles of Program Analysis</source>
          . Springer.
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <surname>Nystrom</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          (
          <year>2014</year>
          ).
          <article-title>Game programming patterns</article-title>
          .
          <source>Genever Benning.</source>
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Prather</surname>
            ,
            <given-names>R. E.</given-names>
          </string-name>
          (
          <year>1977</year>
          ).
          <article-title>Structured turing machines</article-title>
          .
          <source>Information and Control</source>
          ,
          <volume>35</volume>
          (
          <issue>2</issue>
          ),
          <fpage>159</fpage>
          -
          <lpage>171</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25.
          <string-name>
            <surname>Rebollo</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mar</surname>
            n-Lora,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Remolar</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chover</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          (
          <year>2018</year>
          ).
          <article-title>Gamesonomy vs Scratch: Two Di erent Ways to Introduce Programming</article-title>
          .
          <source>International Association for Development of the Information Society.</source>
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          26.
          <string-name>
            <surname>Solin</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          (
          <year>2011</year>
          ).
          <article-title>Normal forms in total correctness for while programs and action systems</article-title>
          .
          <source>The Journal of Logic and Algebraic Programming</source>
          ,
          <volume>80</volume>
          (
          <issue>6</issue>
          ),
          <fpage>362</fpage>
          -
          <lpage>375</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          27.
          <string-name>
            <surname>Sweetser</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wiles</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          (
          <year>2005</year>
          ).
          <article-title>Scripting versus emergence: issues for game developers and players in game environment design</article-title>
          .
          <source>International Journal of Intelligent Games and Simulations</source>
          ,
          <volume>4</volume>
          (
          <issue>1</issue>
          ),
          <fpage>1</fpage>
          -
          <lpage>9</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          28.
          <string-name>
            <surname>Varanese</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          (
          <year>2002</year>
          ).
          <article-title>Game Scripting Mastery (Premier Press Game Development (Paperback))</article-title>
          . Course Technology Press.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>