entrega 1

This commit is contained in:
Chris Cromer 2022-04-29 18:29:25 -04:00
parent 73424743e9
commit d11516d3e0
Signed by: cromer
GPG Key ID: FA91071797BEEEC2
13 changed files with 331 additions and 143 deletions

2
.gitignore vendored
View File

@ -2,6 +2,8 @@
*.bbl
*.blg
*.log
*.lof
*.toc
*.out
*.bcf
*.xml

BIN
figures/Programacion logica vs funcional.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
figures/godot-gdnative.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
figures/godot-gdnative2.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
figures/godot.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
figures/llvm.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
figures/prototipo.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
figures/ubb.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
main.pdf (Stored with Git LFS)

Binary file not shown.

339
main.tex
View File

@ -1,13 +1,17 @@
\documentclass[
spanish,
12pt]{article}
\newcommand{\titlename}{Diseño e Implementación de un Lenguaje de Programación de Tipo Declarativo Inspirado en Prolog para Control de Agentes en Videojuegos}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage[
backend=biber,
style=apa
style=numeric,
sorting=none,
defernumbers=true
]{biblatex}
\addbibresource{references.bib}
\usepackage{csquotes}
@ -18,11 +22,46 @@
\usepackage{soulutf8}
\sethlcolor{blue}
\usepackage{listings}
\usepackage[table,xcdraw]{xcolor}
\usepackage[table, xcdraw]{xcolor}
\usepackage{setspace}
\usepackage{caption}
\usepackage{titlesec}
\titleclass{\subsubsubsection}{straight}[\subsection]
\newcounter{subsubsubsection}[subsubsection]
\renewcommand\thesubsubsubsection{\thesubsubsection.\arabic{subsubsubsection}}
\titleformat{\subsubsubsection}
{\normalfont\normalsize\bfseries}{\thesubsubsubsection}{1em}{}
\titlespacing*{\subsubsubsection}
{0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
\makeatletter
\def\toclevel@subsubsubsection{4}
\def\l@subsubsubsection{\@dottedtocline{4}{7em}{4em}}
\makeatother
\setcounter{secnumdepth}{4}
\setcounter{tocdepth}{4}
\onehalfspacing
\setstretch{1.5}
\renewcommand{\labelitemi}{$\bullet$}
\usepackage{hyperref}
\hypersetup{
colorlinks=true,
linkcolor=blue,
citecolor=blue,
filecolor=blue,
urlcolor=blue,
%allcolors=blue,
pdftitle={\titlename}
}
\usepackage{hypcap}
\usepackage[left=3.3cm,
right=2.3cm,
@ -33,178 +72,220 @@
\usepackage{ragged2e}
\justifying
\usepackage{hyperref}
\hypersetup{
colorlinks=true,
linkcolor=blue,
citecolor=blue,
allcolors=blue,
pdftitle={Propuesta Anteproyecto de título}
}
\usepackage{hypcap}
\newcommand{\sectionbreak}{\phantomsection}
\begin{document}
\title{Propuesta\\Anteproyecto de título}
\hypersetup{pageanchor=false}
\pagenumbering{gobble}
\clearpage
\title{
\includegraphics[width=0.5\textwidth, height=0.5\textheight, keepaspectratio]{figures/ubb.png}\\
\titlename
}
\author{Christopher Cromer y Martín Araneda Acuña}
\maketitle
\section{Identificación}
\newpage
\tableofcontents
\subsection{Estudiantes}
\newpage
\phantomsection
\listoffigures
%\newpage
%\phantomsection
%\listoftables
\hypersetup{pageanchor=true}
\pagenumbering{arabic}
\newpage
\section*{Composición del informe}
\addcontentsline{toc}{section}{\protect{}Composición del informe}
El presente informe se encuentra dividido en tres capítulos. A continuación se describe brevemente el contenido de cada uno de ellos.
\begin{enumerate}
\item \textbf{Introducción:} Se presentan los conceptos básicos más importantes para este proyecto, como son el Desarrollo de Videojuegos y la Inteligencia Artificial. También se explican los motivos principales y específicos para el desarrollo de la investigación.
Por último, se detalla la metodología de trabajo a aplicar.
\item \textbf{Marco Teórico:} Explicación de las herramientas a utilizar, análisis de rendimiento de software similares y descripción de conceptos abarcados en el proyecto.
\item \textbf{Descripción del Ambiente del software:} Se explica el software a utilizar, incluyendo la versión y el entorno de desarrollo.
\end{enumerate}
Además, al final del informe se adjuntan las referencias con los artículos utilizados en el proceso de investigación.
\newpage
\section{Introducción}
La Inteligencia Artificial (I.A) es una disciplina científica relativamente nueva que nació de los avances en las ciencias de la computación y/o la informática. De forma intuitiva, la I.A puede entenderse como la capacidad que tiene una máquina para tomar decisiones de forma autónoma a partir de los estímulos que recibe del exterior. Una de las primeras veces que se hablo de la I.A como disciplina fue en el año 1956 cuando John McCarthy, importante matemático e informático, la definió como \textit{''La ciencia e ingeniería de hacer máquinas inteligentes, con mayor énfasis en programas computacionales inteligentes''} \cite{mccarthy2007artificial}.
Actualmente, la I.A puede considerarse también una tecnología moderna que ha ido evolucionando y se ha ido incorporando a nuestra vida cotidiana. Un ejemplo bastante importante es el reconocimiento facial introducido en teléfonos inteligentes, lo que permite agregar ciertos efectos a las imágenes, ajustar automáticamente el enfoque o balancear la exposición en condiciones de poca luz.
En el campo del desarrollo de videojuegos, la I.A. ha tenido mucha presencia. Por ejemplo, se ha empleado con éxito para programar los personajes o las entidades de los mismos, haciéndolos más dinámicos y divertidos. Permitiendo que el juego aprenda del usuario y creando adversarios artificiales del nivel de un humano.
Dado lo anterior, tendrá un gran beneficio implementar una I.A. empleando un lenguaje declarativo ya que no indicamos el cómo se debe computar, solo indicamos el qué se quiere computar. Esto último es importante ya que conseguimos que la tarea de programación se aproxime a la lógica humana y el programador pueda implementar el comportamiento de los agentes de una forma más intuitiva y empleando reglas simples. En este sentido, uno de los lenguajes declarativos más importantes ha sido Prolog demostrando sus buenas propiedades en este ámbito. Por lo tanto, vamos a crear un lenguaje declarativo inspirado en Prolog que se pueda utilizar para programar el comportamiento de los personajes de un videojuego que tienen, al menos, que realizar las siguientes acciones: i) superar obstáculos, con la opción de saltar con velocidad; ii) recoger items que se agregan a la puntuación final; iii) evitar enemigos.
\subsection{Objetivos}
\subsubsection{Objetivo General}
Desarrollar un lenguaje de programación de tipo declarativo inspirado en Prolog que permita modelar el comportamiento de los agentes de un videojuego empleando reglas lógicas.
\subsubsection{Objetivos Específicos}
\begin{enumerate}
\item Revisar bibliografía sobre Prolog, el motor Godot y programación de videojuegos.
\item Analizar la información recopilada de la bibliografía investigada.
\item Crear el lenguaje de programación de tipo declarativo inspirado en Prolog.
\item Implementar un videojuego usando una inteligencia artificial basada en el lenguaje anteriormente creado.
\item Evaluar el desempeño del lenguaje inventado, verificando el cumplimiento exitoso de superación de obstáculos por parte del agente.
\end{enumerate}
\subsection{Metodología de trabajo}
La metodología utilizada es la de investigación experimental, la cual consiste en ir implementando ciertas acciones en la que el agente debe reaccionar de acuerdo a los estímulos que están presentes en un ambiente preestablecido, que en este caso es un nivel presente en el videojuego.
Con esto, se harán pruebas de causa y efecto, recompilando información en su efectivo comportamiento racional frente a obstáculos para posterior comparación con un jugador real.
Por tanto, el plan de trabajo consistirá en las siguientes fases:
\begin{itemize}
\item \textbf{NOMBRE:} Martín Araneda Acuña
\item \textbf{DIRECCIÓN:} Psje Veintidós, \#85, La Floresta IV, Hualpén
\item \textbf{TELÉFONO:} +56983828885
\item \textbf{CARRERA:} Ingeniería Civil en Informática
\item \textbf{E-MAIL:} martin.araneda1501@alumnos.ubiobio.cl
\end{itemize}
\vspace{1mm}
\begin{itemize}
\item \textbf{NOMBRE:} Christopher Cromer
\item \textbf{DIRECCIÓN:} Roberto Matta 204, Departamento 625, Concepción
\item \textbf{TELÉFONO:} +56990864256
\item \textbf{CARRERA:} Ingeniería Civil en Informática
\item \textbf{E-MAIL:} christopher.cromer1501@alumnos.ubiobio.cl
\item \textbf{\underline{Fase 1:}} Revisión y descarte de bibliografía relacionada al desarrollo de videojuegos con implementación de inteligencia artificial inspirado en Prolog y motor Godot.
\item \textbf{\underline{Fase 2:}} Estudio de la información recopilada para posible implementación en el software.
\item \textbf{\underline{Fase 3:}} Creación del lenguaje de programación lógico de tipo declarativo inspirado en Prolog.
\item \textbf{\underline{Fase 4:}} Implementación de un videojuego en el motor Godot de estilo plataforma formado por agentes inteligentes programados usando el lenguaje recientemente creado.
\item \textbf{\underline{Fase 5:}} Evaluación del correcto desempeño del agente en la superación de obstáculos, con el cumplimiento del nivel versus un jugador real y la comparación de la puntuación y tiempo total en completar el juego entre ambos jugadores.
\end{itemize}
\subsection{Profesor Guía}
\begin{itemize}
\item \textbf{NOMBRE:} Clemente Rubio-Manzano
\item \textbf{E-MAIL:} clrubio@ubiobio.cl
\end{itemize}
\newpage
\section{Marco Teórico}
\subsection{Personas, Instituciones O Empresas En Que Se Solicitará Apoyo Y Asesoría}
Este capítulo tiene como propósito describir los conceptos más importantes en el desarrollo del lenguaje de programación para control de la Inteligencia Artificial, así como también su implementación en un juego estilo plataformas.
\begin{itemize}
\item \textbf{NOMBRE:} Clemente Rubio-Manzano
\item \textbf{RUBRO:} Educación Superior - Universidad del Bío - Bío
\item \textbf{E-MAIL:} clrubio@ubiobio.cl
\item \textbf{FIRMA:}
\end{itemize}
\subsection{Desarrollo de Videojuegos}
\subsubsection{Motor de videojuego}
El motor de videojuego tiene una alta importancia en el desarrollo de videojuegos, ya que es responsable de proveer facilidad en utilizar gráficos, sonidos, física, redes y varios otros aspectos que ayudan en el desarrollo de un videojuego.
El motor que se utilizará se llama Godot.
\subsection{Nombre De La Persona Responsable De La Empresa Que Supervisara Al Alumno}
\begin{itemize}
\item \textbf{NOMBRE:} Clemente Rubio-Manzano
\item \textbf{CARGO:} Profesor Jornada Completa Departamento Sistemas de Información
\item \textbf{E-MAIL:} clrubio@ubiobio.cl
\end{itemize}
\section{Título Anteproyecto}
Diseño e Implementación de un lenguaje de programación {\color{white}\hl{de tipo declarativo inspirado en Prolog}} para control de agentes en videojuegos.
\section{Descripción del Problema}
Los videojuegos de plataformas son un género de videojuegos que se basan en completar niveles, obtener objetos y sortear obstáculos tales como\
acantilados o plataformas (dado así el nombre del género). Este tipo de videojuegos usualmente utilizan una vista de desplazamiento horizontal\
de izquierda a derecha.
\begin{figure}[!h]
\begin{figure}[H]
\centering
\includegraphics[width=0.4\textwidth, height=0.4\textheight, keepaspectratio]{prototipo.png}
\caption{Prototipo de Platformer}
\label{fig:prototipo_platfomer}
\includegraphics[width=0.2\textwidth, height=0.2\textheight, keepaspectratio]{figures/godot.png}
\caption{Godot Engine}
\label{fig:godot_engine}
\end{figure}
Uno de los juegos más influyentes y populares en este género es Super Mario Bros., lanzado en 1985. Este juego sentó las bases de lo que hoy\
se considera un videojuego de plataforma, incluyendo los elementos típicos, como distribución en niveles por cada mundo y obtención\
de objetos para tener una vida extra.
El motor Godot tiene gran valor en el desarrollo del proyecto, principalmente por su capacidad para implementar arte de píxel, en comparación con motores similares como Unity o Unreal porque en Godot las distancias entre los elementos es medido en píxeles mientras que los otros motores utilizan metros, lo que facilita en gran medida la eficacia al trabajar en juegos 2D, que usualmente para este género de videojuegos se usan píxeles y no metros.
En el trabajo se va a utilizar un lenguaje lógico de programación para diseñar e implementar un agente inteligente para ser incorporado en un video\
juego implementado mediante el motor Godot.
Otro factor importante es que Godot posee un elemento llamado GDNative. GDNative es una API que permite usar lenguajes de programación como C, C++ o Rust que son lenguajes que compilan el código a lenguaje máquina.
Un lenguaje lógico es una manera de modelar el comportamiento de los seres humanos empleando reglas del tipo ''if...then...'' para\
resolver una dificultad, con la diferencia de poder elegir qué problema queremos solucionar y\
desarrollando relaciones entre objetos (agentes y/o obstáculos).
Tiene especial importancia para el proyecto ya que permite implementar otro lenguaje de programación que hará interacción con GDNative. Por otro lado también permite que la Inteligencia Artificial tome decisiones con mayor rapidez dado que el código objeto de máquina se ejecuta más velozmente que un lenguaje interpretado o que se compila a bytecode como se puede notar en los siguientes gráficos que compara GDScript(lenguaje interpretado similar a Python), C\# y C++.
Todo esto es creando un sistema que será capaz de resolver un problema como lo hace un ser humano y superarlos.\
Este sistema es llamado\
''Inteligencia Artificial'', una combinación de programación y lógica, que tiene las mismas capacidades racionales de un ser humano.
\begin{figure}[H]
\centering
\includegraphics[width=0.9\textwidth, height=0.9\textheight, keepaspectratio]{figures/godot-gdnative.png}
\caption{Voxel Data Generation} \cite{GDNative-Benchmarks}
\label{fig:godot_gdnative_comparison}
\end{figure}
Por tanto, se va a abordar un típico problema que incluye la toma de decisiones para superar obstáculos.
En el caso de generación de datos voxel, hay un aumento de 8846.43\% en su rendimiento comparando GDNative con GDScript y un aumento de 651.07\% comparando GDNative con C\#.
\begin{figure}[H]
\centering
\includegraphics[width=0.9\textwidth, height=0.9\textheight, keepaspectratio]{figures/godot-gdnative2.png}
\caption{Mesh Generation} \cite{GDNative-Benchmarks}
\label{fig:godot_gdnative_comparison2}
\end{figure}
\section{Objetivos de la Actividad}
En la prueba de generación de mallas el GDNative tiene un aumento de 651.07\% en su rendimiento comparando con C\#.
\subsection{Objetivo General:}
\subsubsection{Game I.A.}
Para la toma de decisiones de la Inteligencia Artificial, se va a utilizar un lenguaje propio inspirado en Prolog. El Prolog es un lenguaje declarativo y lógico.
Desarrollar un lenguaje de programación {\color{white}\hl{de tipo declarativo inspirado en Prolog}} que permita modelar el comportamiento de los agentes de un vídeojuego empleando\
reglas declarativas.
\begin{figure}[H]
\centering
\includegraphics[width=0.9\textwidth, height=0.9\textheight, keepaspectratio]{figures/Programacion logica vs funcional.png}
\caption{Programación Lógica vs. Funcional}
\label{fig:prolog_logic_functional}
\end{figure}
\subsection{Objetivos Específicos:}
Cuando se trata de programación funcional, la idea principal es ver cómo se puede resolver un problema. Eso se hace de forma de paso por paso para resolver el problema. En programación lógico se usa un base de conocimiento para hacer preguntas y recibir respuestas que se utilizaran para resolver el problema.
El lenguaje tipo Prolog debe tener 3 elementos importantes para funcionar.
\begin{enumerate}
\item Revisar bibliografía sobre Prolog, el motor Godot y programación de video juegos.
\item Analizar la información recopilada de la bibliografía investigada.
\item Crear el lenguaje de programación {\color{white}\hl{de tipo declarativo inspirado en Prolog.}}
\item Desarrollar un videojuego usando una inteligencia artificial {\color{white}\hl{basada en el lenguaje anteriormente creado.}}
\item Evaluar el desempeño del lenguaje inventado{\color{white}\hl{, verificando el cumplimiento exitoso de superación de obstáculos por parte del agente.}}.
\item \textbf{Hechos:} Son datos verdaderos. Por ejemplo ''el español es una idioma''.
\item \textbf{Reglas:} Son cláusulas condicionales que conectan los hechos. Por ejemplo ''si vives en Chile hablas el español''.
\item \textbf{Preguntas:} Son necesarias para tener una respuesta de la base de conocimiento. Por ejemplo ''¿El español es una idioma?''.
\end{enumerate}
\section{Descripción de las actividades (Plan de trabajo)}
\subsubsubsection{Lenguaje de Programación Compilado}
El proyecto LLVM es un conjunto de tecnologías de compilador y toolchain, lo cual permite crear un lenguaje propio de programación.
\begin{enumerate}
\item Fase 1. Revisión y descarte de bibliografía relacionada al desarrollo de videojuegos con implementación de inteligencia artificial\
inspirado en Prolog y motor Godot.
\item Fase 2. Estudio de la información recopilada para posible implementación en el software.
\item Fase 3. Creación del lenguaje de programación lógico {\color{white}\hl{de tipo declarativo inspirado en Prolog.}}
\item Fase 4. Implementación de un videojuego en el motor Godot de estilo plataforma formado por agentes inteligentes programados usando\
el lenguaje recientemente creado.
\item Fase 5. Evaluación del {\color{white}\hl{correcto desempeño del agente en la superación de obstáculos, con el cumplimiento del nivel versus un jugador real y la comparación del puntaje y tiempo total de completación entre ambos jugadores.}}
\end{enumerate}
\begin{figure}[H]
\centering
\includegraphics[width=0.3\textwidth, height=0.3\textheight, keepaspectratio]{figures/llvm.png}
\caption{LLVM}
\label{fig:llvm}
\end{figure}
El LLVM consiste de varios sub-proyectos, pero el que será utilizado principalmente es LLVM Core.
Este sub-proyecto contiene un optimizador y generador de código, siendo este último llamado LLVM Intermediate Representation(LLVM IR). La funcionalidad es similar a una Virtual Machine de bytecode que es portátil y se puede correr en cualquier sistema que posee el LLVM.
\section{Justificación del Proyecto}
Otro aspecto importante de LLVM es que se puede utilizar el LLVM IR que fue generado para después compilarlo a lenguaje máquina para la arquitectura computacional que se desee. Luego, el código objeto generado se puede utilizar con un linker para crear librerías y binarios, lo que tendrá importancia al querer integrar el código que compila nuestra compilador en el motor Godot.
El beneficio de usar un lenguaje lógico en vez de funcional es poder programar una inteligencia artificial que tome decisiones\
de la misma forma que una persona real piensa usando datos basado en el entorno.
\newpage
\section{Descripción del ambiente del software}
Para la realización del proyecto se necesita los software siguientes.
Es necesario para así simular de manera más realista el comportamiento humano de una inteligencia artificial y poder ser\
adaptado a otros tipos de juegos y motores.
\subsection{Lenguaje de programación}
Para compilar el lenguaje de programación se necesita:
\begin{itemize}
\item GCC 5 o clang 5
\item LLVM 14
\end{itemize}
Adicionalmente, al utilizar un lenguaje de programación compilado en vez de scripting, se puede desarrollar una inteligencia artificial\
que sea capaz de tomar decisiones complejas con mayor rapidez.
\subsection{Videojuego}
Para compilar el videojuego se necesita:
\begin{itemize}
\item GCC 5 o clang 5
\item Godot 3.5
\end{itemize}
\section{Análisis de los Principales Trabajos Realizados en el área o tema de la propuesta }
\subsection{Entorno}
El entorno usado para el desarrollo es:
\begin{itemize}
\item Linux Mint 21 o Ubuntu 22.04
\item Visual Studio Code 1.66.2
\end{itemize}
En el Short Paper Prolog-Scripted Tactics Negotiation and Coordinated Team Actions for Counter-Strike Game Bots \cite{Prolog-Scripted2016},\
se implementa un script de prolog para controlar los agentes presentes en el juego.
\newpage
\phantomsection
\printbibliography[heading=bibintoc,title={Referencias}]
Una de las características del lenguaje de scripting usado en el paper es que se interpreta a medida que va ejecutándose, lo que provoca que\
el rendimiento del software sea peor, acentuándose mas en inteligencias artificiales mas complejas.
\phantomsection
\printbibliography[heading=subbibintoc,keyword={prolog},title={Prolog}]
\phantomsection
\printbibliography[heading=subbibintoc,keyword={llvm},title={LLVM}]
\phantomsection
\printbibliography[heading=subbibintoc,keyword={godot},title={Godot}]
\phantomsection
\printbibliography[heading=subbibintoc,keyword={videojuegos},title={Videojuegos}]
En cambio, el lenguaje compilado tiene mejor rendimiento y se pueden encontrar errores de compilación antes de ejecutarse, lo que facilita\
la corrección y el feedback para evitar problemas futuros.
\section*{Propuesta bibliográfica}
Prolog-Scripted Tactics Negotiation and Coordinated Team Actions for Counter-Strike Game Bots \cite{Prolog-Scripted2016}
\section{Resultados Esperados de la investigación (INV) o Descripción del ambiente de Software esperado (SW)}
Game Programming Patterns \cite{Game-Programming-Patterns}
Esencialmente se espera que un agente en el video juego pueda evitar obstáculos a través de la toma de decisiones utilizando\
la inteligencia artificial implementada y así llegar a la meta.
Game Mechanics \cite{Game-Mechanics}
\section{Planificación del trabajo a desarrollar: Carta Gantt}
LLVM Cookbook \cite{LLVM-Cookbook}
En esta sección se presenta la carta gantt del plan de trabajo a desarrollar para el software
Godot Engine Game Development Projects \cite{Godot-Projects}
\begin{table}[!h]
\begin{center}
\begin{tabular}{|l|l|l|}
\hline
\textbf{Actividad} & \textbf{Duración} & \textbf{I/F} \\ \hline
Revisión y descarte de bibliografia & 1 mes & Marzo \\ \hline
Estudio de información recopilada & 1 mes & Abril \\ \hline
Creación de lenguage tipo Prolog & 3 meses & Mayo-Julio \\ \hline
Implementación de lenguaje tipo Prolog en Godot & 1 mes & Agosto \\ \hline
Desarrollo de videojuego con I.A. & 3 meses & Septiembre-Noviembre \\ \hline
\end{tabular}
\end{center}
\end{table}
Sams Teach Yourself, Godot Engine Game Development in 24 Hours \cite{Godot-24-Hours}
\section{Referencias}
Desarrollo de Videojuegos: Un Enfoque Práctico \cite{Desarrollo-de-Videojuegos}
\printbibliography[
heading=none]
Logic Programming with Prolog \cite{Logic-Programming}
Prolog Tutorial \cite{Prolog-Tutorial}
\end{document}

BIN
prototipo.png (Stored with Git LFS)

Binary file not shown.

View File

@ -1,10 +1,97 @@
@ARTICLE{Prolog-Scripted2016,
author={Jaśkiewicz, Grzegorz},
journal={IEEE Transactions on Computational Intelligence and AI in Games},
title={Prolog-Scripted Tactics Negotiation and Coordinated Team Actions for Counter-Strike Game Bots},
year={2016},
volume={8},
number={1},
pages={82-88},
doi={10.1109/TCIAIG.2014.2331972}
@BOOK{Game-Programming-Patterns,
author={Nystrom, Robert},
title={Game Programming Patterns},
publisher={Genever Benning},
year={2014},
isbn={0-99058-290-6},
keywords="videojuegos"
}
@BOOK{Desarrollo-de-Videojuegos,
author={Vallejo, David and Martín, Cleto},
title={Desarrollo de Videojuegos: Un Enfoque Práctico},
publisher={CreateSpace},
year={2015},
isbn={978-1-51730-955-8},
keywords="videojuegos"
}
@BOOK{Game-Mechanics,
author={Adams, Ernest and Dormans, Joris},
title={Game Mechanics: Advanced Game Design},
publisher={New Riders},
year={2012},
isbn={0-32182-027-4},
keywords="videojuegos"
}
@BOOK{LLVM-Cookbook,
author={Pandey, Mayur and Sarda, Suyog},
title={LLVM Cookbook},
publisher={Packt},
year={2015},
isbn={978-1-78528-598-1},
keywords="llvm"
}
@BOOK{Godot-Projects,
author={Bradfield, Chris},
title={Godot Engine Game Development Projects},
publisher={Packt},
year={2018},
isbn={978-1-78883-150-5},
keywords="videojuegos,godot"
}
@BOOK{Godot-24-Hours,
author={Manzur, Ariel and Marques, George},
title={Sams Teach Yourself, Godot Engine Game Development in 24 Hours},
publisher={Pearson},
year={2018},
isbn={0-13483-509-3},
keywords="videojuegos,godot"
}
@BOOK{Logic-Programming,
author={Bramer, Max},
title={Logic Programming with Prolog},
publisher={Springer},
year={2013},
isbn={978-1-44715-486-0},
doi={10.1007/978-1-4471-5487-7},
keywords="prolog"
}
@ARTICLE{Prolog-Scripted2016,
author={Jaśkiewicz, Grzegorz},
journal={IEEE Transactions on Computational Intelligence and AI in Games},
title={Prolog-Scripted Tactics Negotiation and Coordinated Team Actions for Counter-Strike Game Bots},
year={2016},
volume={8},
number={1},
pages={82-88},
doi={10.1109/TCIAIG.2014.2331972},
keywords="videojuegos,prolog"
}
@ONLINE{GDNative-Benchmarks,
author={Royal Donut Games},
title={CPU Voxel Benchmarks of Most Popular Languages in Godot},
date={2022-04},
url={http://www.royaldonut.games/2019/03/29/cpu-voxel-benchmarks-of-most-popular-languages-in-godot/},
keywords="videojuegos,godot"
}
@ONLINE{Prolog-Tutorial,
author={tutorialspoint},
title={Prolog Tutorial},
date={2022-04},
url={https://www.tutorialspoint.com/prolog/},
keywords="prolog"
}
@ARTICLE{mccarthy2007artificial,
author={McCarthy, John},
title={What is artificial intelligence?},
year={2007}
}