Compare commits
23 Commits
propuesta
...
entregafin
Author | SHA1 | Date | |
---|---|---|---|
0b80652689
|
|||
d6c20f3fd2
|
|||
250242f2b9
|
|||
4002a3d5c4
|
|||
7662877695
|
|||
85382493c7
|
|||
4a3375d348
|
|||
c0a6bf0e9c
|
|||
99db03415c
|
|||
84c1fa1595
|
|||
88c25fcff6
|
|||
d11516d3e0
|
|||
73424743e9 | |||
b72b79ec30 | |||
3f63044ac6
|
|||
fd619a790d
|
|||
e0bb7e2562 | |||
74fae9ad15
|
|||
fa66ed5b32 | |||
31db024e8b | |||
8e5c634136
|
|||
497b4a3e3e | |||
2511bc97ea
|
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -1 +1,3 @@
|
|||||||
*.pdf filter=lfs diff=lfs merge=lfs -text
|
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.jpg filter=lfs diff=lfs merge=lfs -text
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -2,6 +2,9 @@
|
|||||||
*.bbl
|
*.bbl
|
||||||
*.blg
|
*.blg
|
||||||
*.log
|
*.log
|
||||||
|
*.lof
|
||||||
|
*.lot
|
||||||
|
*.toc
|
||||||
*.out
|
*.out
|
||||||
*.bcf
|
*.bcf
|
||||||
*.xml
|
*.xml
|
||||||
|
BIN
Informe.pdf
(Stored with Git LFS)
Normal file
BIN
Informe.pdf
(Stored with Git LFS)
Normal file
Binary file not shown.
135
Informe.tex
Normal file
135
Informe.tex
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
\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=numeric,
|
||||||
|
sorting=none,
|
||||||
|
defernumbers=true
|
||||||
|
]{biblatex}
|
||||||
|
\addbibresource{references.bib}
|
||||||
|
\usepackage{csquotes}
|
||||||
|
\usepackage{graphicx}
|
||||||
|
\usepackage{mathptmx}
|
||||||
|
\usepackage{array}
|
||||||
|
\usepackage{float}
|
||||||
|
\usepackage{soulutf8}
|
||||||
|
\sethlcolor{blue}
|
||||||
|
\usepackage{listings}
|
||||||
|
\usepackage[table, xcdraw]{xcolor}
|
||||||
|
|
||||||
|
\usepackage{setspace}
|
||||||
|
|
||||||
|
\usepackage{titlesec}
|
||||||
|
|
||||||
|
\usepackage{tocloft}
|
||||||
|
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}
|
||||||
|
|
||||||
|
\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.0cm,
|
||||||
|
right=3.0cm,
|
||||||
|
top=2.5cm,
|
||||||
|
bottom=2.5cm,
|
||||||
|
letterpaper]{geometry}
|
||||||
|
|
||||||
|
\usepackage{ragged2e}
|
||||||
|
\justifying
|
||||||
|
\setlength\RaggedRightParindent{36pt}
|
||||||
|
\RaggedRight
|
||||||
|
|
||||||
|
\newcommand{\sectionbreak}{\phantomsection}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\hypersetup{pageanchor=false}
|
||||||
|
\pagenumbering{gobble}
|
||||||
|
\thispagestyle{empty}
|
||||||
|
\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
|
||||||
|
|
||||||
|
\newpage
|
||||||
|
\phantomsection
|
||||||
|
\pagenumbering{gobble}
|
||||||
|
\thispagestyle{empty}
|
||||||
|
\clearpage
|
||||||
|
\tableofcontents
|
||||||
|
|
||||||
|
\newpage
|
||||||
|
\phantomsection
|
||||||
|
\hypersetup{pageanchor=false}
|
||||||
|
\pagenumbering{gobble}
|
||||||
|
\thispagestyle{empty}
|
||||||
|
\clearpage
|
||||||
|
\listoffigures
|
||||||
|
|
||||||
|
\newpage
|
||||||
|
\phantomsection
|
||||||
|
\hypersetup{pageanchor=false}
|
||||||
|
\pagenumbering{gobble}
|
||||||
|
\thispagestyle{empty}
|
||||||
|
\clearpage
|
||||||
|
\listoftables
|
||||||
|
|
||||||
|
\clearpage
|
||||||
|
\pagenumbering{arabic}
|
||||||
|
\hypersetup{pageanchor=true}
|
||||||
|
|
||||||
|
\include{sections/composicion}
|
||||||
|
|
||||||
|
\include{sections/introduccion}
|
||||||
|
|
||||||
|
\include{sections/marco_teorico}
|
||||||
|
|
||||||
|
\include{sections/estado_del_arte}
|
||||||
|
|
||||||
|
\include{sections/ambiente_software}
|
||||||
|
|
||||||
|
\include{sections/referencias}
|
||||||
|
|
||||||
|
\end{document}
|
BIN
figures/Programacion logica vs funcional.png
(Stored with Git LFS)
Normal file
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
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
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
BIN
figures/godot.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
figures/llvm.png
(Stored with Git LFS)
Normal file
BIN
figures/llvm.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
figures/logic_functional_programming.jpg
(Stored with Git LFS)
Normal file
BIN
figures/logic_functional_programming.jpg
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
figures/prototipo.png
(Stored with Git LFS)
Normal file
BIN
figures/prototipo.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
figures/state_machine.png
(Stored with Git LFS)
Normal file
BIN
figures/state_machine.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
figures/ubb.png
(Stored with Git LFS)
Normal file
BIN
figures/ubb.png
(Stored with Git LFS)
Normal file
Binary file not shown.
190
main.tex
190
main.tex
@@ -1,190 +0,0 @@
|
|||||||
\documentclass[
|
|
||||||
spanish,
|
|
||||||
12pt]{article}
|
|
||||||
|
|
||||||
\usepackage[T1]{fontenc}
|
|
||||||
\usepackage[utf8]{inputenc}
|
|
||||||
\usepackage{babel}
|
|
||||||
\usepackage[
|
|
||||||
backend=biber,
|
|
||||||
style=apa
|
|
||||||
]{biblatex}
|
|
||||||
\addbibresource{references.bib}
|
|
||||||
\usepackage{csquotes}
|
|
||||||
\usepackage{graphicx}
|
|
||||||
\usepackage{mathptmx}
|
|
||||||
\usepackage{array}
|
|
||||||
\usepackage{float}
|
|
||||||
|
|
||||||
\usepackage{listings}
|
|
||||||
\usepackage[table,xcdraw]{xcolor}
|
|
||||||
|
|
||||||
\usepackage{setspace}
|
|
||||||
|
|
||||||
\usepackage{caption}
|
|
||||||
|
|
||||||
\usepackage[left=3.3cm,
|
|
||||||
right=2.3cm,
|
|
||||||
top=3.5cm,
|
|
||||||
bottom=3.0cm,
|
|
||||||
letterpaper]{geometry}
|
|
||||||
|
|
||||||
\usepackage{ragged2e}
|
|
||||||
\justifying
|
|
||||||
|
|
||||||
\usepackage{hyperref}
|
|
||||||
\hypersetup{
|
|
||||||
colorlinks=true,
|
|
||||||
linkcolor=blue,
|
|
||||||
citecolor=blue,
|
|
||||||
allcolors=blue,
|
|
||||||
pdftitle={Propuesta Anteproyecto de título}
|
|
||||||
}
|
|
||||||
\usepackage{hypcap}
|
|
||||||
|
|
||||||
\begin{document}
|
|
||||||
|
|
||||||
\title{Propuesta\\Anteproyecto de título}
|
|
||||||
\maketitle
|
|
||||||
|
|
||||||
\section{Identificación}
|
|
||||||
|
|
||||||
\subsection{Estudiantes}
|
|
||||||
|
|
||||||
\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{2mm}
|
|
||||||
\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
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\subsection{Profesor Guía}
|
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item \textbf{NOMBRE:} Clemente Rubio-Manzano
|
|
||||||
\item \textbf{E-MAIL:} clrubio@ubiobio.cl
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\subsection{Personas, Instituciones O Empresas En Que Se Solicitará Apoyo Y Asesoría}
|
|
||||||
|
|
||||||
\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{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 una inteligencia artificial en video juegos con enfoque en lenguaje lógico y compilado.
|
|
||||||
|
|
||||||
\section{Descripción del Problema}
|
|
||||||
|
|
||||||
Se va a utilizar un lenguaje lógico de programación para poner en funcionamiento una inteligencia artificial autónoma\
|
|
||||||
desarrollada en un motor de video juegos.
|
|
||||||
|
|
||||||
Un lenguaje lógico es una manera de asimilar la toma de decisiones de un ser humano en como resolver un dificultad, con la diferencia\
|
|
||||||
de poder elegir que problema queremos solucionar y desarrollando relaciones entre objetos (agentes y/o obstáculos).
|
|
||||||
|
|
||||||
Todo esto es creando un cerebro o ''ente pensante'' que hará este trabajo de abordar estos problemas y superarlos. Este ente es llamado\
|
|
||||||
''Inteligencia Artificial'', una combinación de programación y lógica, que tiene las mismas capacidades racionales de un ser humano.
|
|
||||||
|
|
||||||
Por tanto, se va a abordar un típico problema que incluye la toma de decisiones para superar obstáculos.
|
|
||||||
|
|
||||||
|
|
||||||
\section{Objetivos de la Actividad}
|
|
||||||
|
|
||||||
\subsection{Objetivo General:}
|
|
||||||
|
|
||||||
La finalidad de esta actividad de titulación es el desarrollo de un lenguaje de programación de tipo Prolog para poder\
|
|
||||||
implementar una inteligencia artificial que permita evitar ciertos obstáculos.
|
|
||||||
|
|
||||||
\subsection{Objetivos Específicos:}
|
|
||||||
|
|
||||||
\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 tipo Prolog.
|
|
||||||
\item Implementar el lenguaje de programación en el motor Godot.
|
|
||||||
\item Desarrollar un videojuego usando inteligencia artificial basado en el lenguaje tipo Prolog.
|
|
||||||
\end{enumerate}
|
|
||||||
|
|
||||||
\section{Descripción de las actividades (Plan de trabajo)}
|
|
||||||
|
|
||||||
\begin{enumerate}
|
|
||||||
\item Se hará una revisión y descarte de bibliografía relacionada al desarrollo de videojuegos con implementación de inteligencia artificial basado en Prolog y motor Godot.
|
|
||||||
\item Se estudiará la información recopilada para posible implementación en el software.
|
|
||||||
\item Se creará un lenguaje de programación lógico basado en Prolog.
|
|
||||||
\item Se implementará el lenguaje de programación lógico en el motor de videojuegos Godot.
|
|
||||||
\item Se desarrollará un videojuego estilo plataforma con despliegue de la inteligencia artificial basada en Prolog.
|
|
||||||
\end{enumerate}
|
|
||||||
|
|
||||||
|
|
||||||
\section{Justificación del Proyecto}
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
Es necesario para así simular de manera mas realista el comportamiento humano de una inteligencia artificial y poder ser\
|
|
||||||
adaptado a otros tipos de juegos y motores.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
\section{Análisis de los Principales Trabajos Realizados en el área o tema de la propuesta }
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
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{Resultados Esperados de la investigación (INV) o Descripción del ambiente de Software esperado (SW)}
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
\section{Planificación del trabajo a desarrollar: Carta Gantt}
|
|
||||||
|
|
||||||
En esta sección se presenta la carta gantt del plan de trabajo a desarrollar para el software
|
|
||||||
|
|
||||||
\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}
|
|
||||||
|
|
||||||
\section{Referencias}
|
|
||||||
|
|
||||||
\printbibliography[
|
|
||||||
heading=none]
|
|
||||||
|
|
||||||
\end{document}
|
|
115
references.bib
115
references.bib
@@ -1,10 +1,107 @@
|
|||||||
@ARTICLE{Prolog-Scripted2016,
|
@BOOK{Game-Programming-Patterns,
|
||||||
author={Jaśkiewicz, Grzegorz},
|
author={Nystrom, Robert},
|
||||||
journal={IEEE Transactions on Computational Intelligence and AI in Games},
|
title={Game Programming Patterns},
|
||||||
title={Prolog-Scripted Tactics Negotiation and Coordinated Team Actions for Counter-Strike Game Bots},
|
publisher={Genever Benning},
|
||||||
year={2016},
|
year={2014},
|
||||||
volume={8},
|
isbn={0-99058-290-6},
|
||||||
number={1},
|
keywords="videojuegos"
|
||||||
pages={82-88},
|
}
|
||||||
doi={10.1109/TCIAIG.2014.2331972}
|
|
||||||
|
@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="ai,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},
|
||||||
|
keywords="ai"
|
||||||
|
}
|
||||||
|
|
||||||
|
@ARTICLE{FerreinJacobsLakemeyer2011,
|
||||||
|
autho={Alexander Ferrein and Stefan Jacobs and Gerhard Lakemeyer},
|
||||||
|
title={Controlling Unreal Tournament 2004 Bots with the logic-based action language Golog / Jacobs, Stefan ; Ferrein, Alexander ; Lakemeyer, Gerhard},
|
||||||
|
journal={Proceedings of the First AAAI Conference on Artificial Intelligence and Interactive Digital Entertainment (AIIDE).},
|
||||||
|
pages={151 -- 152},
|
||||||
|
year= {2011},
|
||||||
|
keywords="ai,prolog,videojuegos"
|
||||||
}
|
}
|
8
sections/ambiente_software.tex
Normal file
8
sections/ambiente_software.tex
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
\section{Descripción del Ambiente del Software}
|
||||||
|
Para la realización del proyecto se necesita los software siguientes.
|
||||||
|
|
||||||
|
\input{sections/ambiente_software/lenguaje}
|
||||||
|
|
||||||
|
\input{sections/ambiente_software/videojuego}
|
||||||
|
|
||||||
|
\input{sections/ambiente_software/entorno}
|
6
sections/ambiente_software/entorno.tex
Normal file
6
sections/ambiente_software/entorno.tex
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
\subsection{Entorno}
|
||||||
|
El entorno usado para el desarrollo es:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Linux Mint 21
|
||||||
|
\item Visual Studio Code 1.69
|
||||||
|
\end{itemize}
|
6
sections/ambiente_software/lenguaje.tex
Normal file
6
sections/ambiente_software/lenguaje.tex
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
\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}
|
7
sections/ambiente_software/videojuego.tex
Normal file
7
sections/ambiente_software/videojuego.tex
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
\subsection{Videojuego}
|
||||||
|
Para compilar el videojuego se necesita:
|
||||||
|
\begin{itemize}
|
||||||
|
\item GCC 5 o clang 5
|
||||||
|
\item Godot 3.5
|
||||||
|
\item Tiled 1.8.6
|
||||||
|
\end{itemize}
|
15
sections/composicion.tex
Normal file
15
sections/composicion.tex
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
\section*{Composición del Informe}
|
||||||
|
\addcontentsline{toc}{section}{\protect{}Composición del Informe}
|
||||||
|
El presente informe se encuentra dividido en cuatro 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{Estado del Arte:} Se describen las principales ideas de trabajos de investigación similares, contrastándolo con este trabajo. Se han dividido estos en dos categorías: basado en el lenguaje de programación Prolog y GOLOG, con descripciones acerca de metodología e implementación de agentes en videojuegos
|
||||||
|
|
||||||
|
\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.
|
9
sections/estado_del_arte.tex
Normal file
9
sections/estado_del_arte.tex
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
\section{Estado del Arte}
|
||||||
|
|
||||||
|
La programación del comportamiento de agentes en videojuegos se ha realizado desde diferentes puntos de vista. Los trabajos de investigación que hemos estudiado se pueden agrupar en dos categorías: (i) basados en el lenguaje de programación lógico Prolog; (ii) basados en el lenguaje de programación lógico GOLOG. A continuación se describirán cada una de las propuestas de forma más detallada.
|
||||||
|
|
||||||
|
\input{sections/estado_del_arte/prolog}
|
||||||
|
|
||||||
|
\input{sections/estado_del_arte/golog}
|
||||||
|
|
||||||
|
\input{sections/estado_del_arte/comparacion}
|
23
sections/estado_del_arte/comparacion.tex
Normal file
23
sections/estado_del_arte/comparacion.tex
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
\subsection{Comparación de Trabajos}
|
||||||
|
En el Cuadro 1 se realiza un resumen general de las principales características de proyectos de investigación similares al nuestro, contrastando las diferencias de cada uno de ellos. Cabe destacar que una de las mayores diferencias presentes en relación a los otros trabajos es el tipo de lenguaje y si es un juego propio del autor. Lo primero es porque el uso de lenguaje compilado trae consigo una enorme ventaja en aspectos como por ejemplo la velocidad de toma de decisiones complejas en distintos ambientes en que el agente pueda encontrarse.
|
||||||
|
|
||||||
|
\begin{table}[H]
|
||||||
|
\centering
|
||||||
|
\begin{tabular}{|r|c|c|c|}
|
||||||
|
\hline
|
||||||
|
\multicolumn{1}{|l|}{} & \textbf{Obelisk} & \textbf{Prolog} & \textbf{ReadyLog} \\ \hline
|
||||||
|
\textbf{Basado en} & Prolog & Prolog & Golog \\ \hline
|
||||||
|
\textbf{Tipo de Lenguaje} & Compilado & Scripted & Scripted \\ \hline
|
||||||
|
\textbf{Juego Propio} & Sí & No & No \\ \hline
|
||||||
|
\textbf{Tipo de Juego} & Platformer & FPS & FPS \\ \hline
|
||||||
|
\textbf{Tipo de I.A.} & Racional & Racional & Racional \\ \hline
|
||||||
|
\textbf{Uso de \textit{BOT}} & No & Sí & Sí \\ \hline
|
||||||
|
\textbf{Planificación de Camino} & Posible & Sí & Imposible \\ \hline
|
||||||
|
\textbf{Detección de Colisión} & Posible & Desconocido & Imposible \\ \hline
|
||||||
|
\textbf{Agente Omnisciente} & No & Sí & No \\ \hline
|
||||||
|
\end{tabular}
|
||||||
|
\caption{Comparación de Trabajos}
|
||||||
|
\label{tab:comparar-trabajos}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
El desarrollo de un juego propio permite una mejor integración entre la inteligencia artificial y el juego en cuestión, porque nos da mejor control en todos los aspectos que permiten el control del agente.
|
15
sections/estado_del_arte/golog.tex
Normal file
15
sections/estado_del_arte/golog.tex
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
\subsection{Basado en el Lenguaje de Programación GOLOG}
|
||||||
|
|
||||||
|
En el articulo \textit{Controlling Unreal Tournament 2004 Bots with the logic-based action language Golog} \cite{FerreinJacobsLakemeyer2011}, se
|
||||||
|
describe y explica un lenguaje de programación lógico llamado GOLOG que permite implementar agentes de videojuego del estilo FPS (Disparos en Primera Persona) y enfrentarlos a NPCs (Non-Player Characters). El videojuego en cuestión, llamado ''Unreal Tournament 2004'', es de tipo multijugador, donde los jugadores humanos compiten para alcanzar objetivos. Los oponentes pueden ser tanto humanos o controlados por el computador. Nos centramos en estudiar dos aspectos de la propuesta: el control de los oponentes y la características de la I.A.
|
||||||
|
|
||||||
|
\subsubsection{Control de Oponentes}
|
||||||
|
|
||||||
|
Originalmente, la toma de decisiones de los bots fue hecha usando un lenguaje orientado a objetos llamado ''UScript'', que es propio del juego y es de tipo script, con lógica basada en un \textit{''state machine''}, constando de nueve estados controlados por el motor del juego. Sin embargo, el manejo de los bots se realizó en \textit{''ReadyLog''}, un lenguaje basado en GOLOG, que permite el razonamiento basado en acciones.
|
||||||
|
|
||||||
|
Con esta información se agregó una interfaz al motor del juego que le permite transmitir información importante relacionada al mapa, tal como items (munición, vida y armas), ubicación de los jugadores y estilo del ambiente en general. Por tanto, la información de estos elementos sera transmitida al bot si este es capaz de percibirlos, lo que da posibilidad a cambiar el comportamiento del bot dentro del framework.
|
||||||
|
|
||||||
|
\subsubsection{Características de la I.A.}
|
||||||
|
|
||||||
|
El tipo de I.A. esta basada en objetivos y emplea técnicas de planificación. Con respecto a la
|
||||||
|
planificación de camino y la detección de colisiones debemos mencionar que la interfaz entre el juego, junto con el motor y los bots no permite modificar los algoritmos de la planificación de los caminos ni de la detección de colisiones para permitir el cumplimiento de los objetivos. El agente solo recibe información si está en su campo de visión, por tanto, no es omnisciente y no tiene información suficiente que le permita obtener ventaja contra otros agentes o jugadores.
|
15
sections/estado_del_arte/prolog.tex
Normal file
15
sections/estado_del_arte/prolog.tex
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
\subsection{Basado en el Lenguaje de Programación Lógico Prolog}
|
||||||
|
|
||||||
|
El articulo \textit{Prolog-Scripted Tactics Negotiation and Coordinated Team
|
||||||
|
Actions for Counter-Strike Game Bots} \cite{Prolog-Scripted2016}, explica la creación e implementación de un script basado en el lenguaje Prolog dentro de un juego estilo FPS (Disparos en Primera Persona), con la finalidad de crear diferentes tácticas de comportamiento en un equipo de bots compuesto por agentes. La idea fue inspirada principalmente en la observación de tácticas de equipo presentes en torneos reales de Counter-Strike.
|
||||||
|
|
||||||
|
Por otro lado, la construcción de este framework está basado en un proyecto anterior hecho por los autores para crear scripts para bots. El pilar de esta investigación se construye en la premisa de diseñar el framework para utilizar un creador de mapas y así personalizar el comportamiento del bot para mapas nuevos, pues con esto se le entregaría al agente conocimiento necesario del ambiente que le rodea para adquirir una ventaja táctica frente a oponentes humanos. Nos centramos en estudiar dos aspecto: el desarrollo del razonamiento lógica del agente y las características de su I.A.
|
||||||
|
|
||||||
|
\subsubsection{Desarrollo del Razonamiento Lógico del Agente}
|
||||||
|
Cada bot contiene dos pilas, una de acciones y otra de tareas. Estas siempre ejecutan el bloque que esta en el tope de la pila. Para que un bot sea capaz de cumplir una tarea de manera exitosa, hará ciertas acciones asociadas a esa tarea con tal de cumplirla. Algunas condiciones causarán que se agreguen o quiten acciones dentro de esta pila. Por tanto, cuando se complete una tarea o una acción, se borrará el bloque y luego el bot intentará ejecutar la acción o tarea siguiente en la pila.
|
||||||
|
|
||||||
|
Uno de los mecanismos de razonamiento utilizado es uno llamado ''Razonamiento de reflejos'', el cual sucede en cada actualización del estado actual del juego, prestando gran apoyo cuando ocurren cambios repentinos en un nivel, como en el ambiente o cuando el bot este siendo atacado. En consecuencia, este mecanismo posee una característica poderosa para agregar nuevas tareas o limpiar la pila de tareas, adaptándose a cada situación.
|
||||||
|
|
||||||
|
\subsubsection{Características de la I.A.}
|
||||||
|
|
||||||
|
El agente usado en este proyecto es de tipo racional basado en objetivos, con base en un árbol de decisión con instrucciones condicionales. En los trabajos previos hechos por el autor, se implementó una base de datos que contiene puntos de navegación, con el fin de calcular y planificar el camino que debe seguir al moverse el bot. También se usan los puntos de navegación para tomar decisiones racionales de naturaleza táctica. El bot adquiere total conocimiento del mapa, lo que le permite tener una ventaja táctica y así aumentar sus posibilidades para ganar la partida.
|
13
sections/introduccion.tex
Normal file
13
sections/introduccion.tex
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
\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.
|
||||||
|
|
||||||
|
\input{sections/introduccion/objetivos}
|
||||||
|
|
||||||
|
\input{sections/introduccion/metodologia}
|
13
sections/introduccion/metodologia.tex
Normal file
13
sections/introduccion/metodologia.tex
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
\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{\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}
|
5
sections/introduccion/objetivos.tex
Normal file
5
sections/introduccion/objetivos.tex
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
\subsection{Objetivos}
|
||||||
|
|
||||||
|
\input{sections/introduccion/objetivos/general}
|
||||||
|
|
||||||
|
\input{sections/introduccion/objetivos/especificos}
|
9
sections/introduccion/objetivos/especificos.tex
Normal file
9
sections/introduccion/objetivos/especificos.tex
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
\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}
|
3
sections/introduccion/objetivos/general.tex
Normal file
3
sections/introduccion/objetivos/general.tex
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
\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.
|
5
sections/marco_teorico.tex
Normal file
5
sections/marco_teorico.tex
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
\section{Marco Teórico}
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
\input{sections/marco_teorico/desarollo_videojuego}
|
9
sections/marco_teorico/desarollo_videojuego.tex
Normal file
9
sections/marco_teorico/desarollo_videojuego.tex
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
\subsection{Desarrollo de Videojuegos}
|
||||||
|
|
||||||
|
\input{sections/marco_teorico/desarrollo_videojuegos/motor}
|
||||||
|
|
||||||
|
\input{sections/marco_teorico/desarrollo_videojuegos/game_ia}
|
||||||
|
|
||||||
|
\input{sections/marco_teorico/desarrollo_videojuegos/llvm}
|
||||||
|
|
||||||
|
\input{sections/marco_teorico/desarrollo_videojuegos/maquina_estado}
|
21
sections/marco_teorico/desarrollo_videojuegos/game_ia.tex
Normal file
21
sections/marco_teorico/desarrollo_videojuegos/game_ia.tex
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
\subsubsection{Game I.A.}
|
||||||
|
El lenguaje responsable que se encargará de la toma de decisiones por parte de la Inteligencia Artificial será de carácter propio e inspirado en Prolog, un lenguaje declarativo y lógico. \cite{Logic-Programming}
|
||||||
|
|
||||||
|
\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}
|
||||||
|
|
||||||
|
Al hablar de programación funcional, la idea principal es que todos los elementos sean funciones y estos sean capaces de poder ejecutarse de manera secuencial, por lo cual se utiliza la lógica paso por paso para resolver el problema.
|
||||||
|
|
||||||
|
Por otro lado, la programación lógica utiliza una base de conocimiento para hacer preguntas y recibir respuestas que se utilizarán para resolver el problema. \cite{Prolog-Tutorial}
|
||||||
|
|
||||||
|
|
||||||
|
El lenguaje tipo Prolog debe tener 3 elementos importantes para funcionar:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \textbf{Hechos:} Son datos verdaderos, como por ejemplo ''el español es una idioma''.
|
||||||
|
\item \textbf{Reglas:} Son cláusulas condicionales que conectan los hechos. Un ejemplo es: ''si vives en Chile hablas el español''.
|
||||||
|
\item \textbf{Preguntas:} Son necesarias para tener una respuesta por parte de la base de conocimiento. Un ejemplo sería ''¿El español es una idioma?''.
|
||||||
|
\end{enumerate}
|
14
sections/marco_teorico/desarrollo_videojuegos/llvm.tex
Normal file
14
sections/marco_teorico/desarrollo_videojuegos/llvm.tex
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
\subsubsubsection{Lenguaje de Programación Compilado}
|
||||||
|
El proyecto LLVM es un conjunto de tecnologías de compilador y toolchain, el cual permite crear un lenguaje propio de programación. \cite{LLVM-Cookbook}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.3\textwidth, height=0.3\textheight, keepaspectratio]{figures/llvm.png}
|
||||||
|
\caption{LLVM}
|
||||||
|
\label{fig:llvm}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Otro aspecto importante de LLVM es que se puede utilizar el LLVM IR, que fue generado anteriormente y así 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.
|
@@ -0,0 +1,13 @@
|
|||||||
|
\subsubsubsection{Máquinas de Estados}
|
||||||
|
Una máquina de estados se utiliza para controlar el estado de un objeto que tiene una ramificación compleja y estados mutables. \cite{Game-Programming-Patterns} La máquina de estados finita es parte de una rama de la ciencia de la computación llamado \textit{''teoría de autómata''}, la cual incluye la famosa máquina de Turing. La máquina de estados es usualmente usada en programación de I.A., videojuegos y en la creación de compiladores de código, sin embargo fuera de estas 3 áreas, posee muy poca adopción y uso.
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.5\textwidth, height=0.5\textheight, keepaspectratio]{figures/state_machine.png}
|
||||||
|
\caption{Máquina de Estado Finito}
|
||||||
|
\label{fig:state_machine}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
La máquina de estado finita posee un conjunto concreto de estados en la que es capaz de estar, como ''saltar'' o ''caminar'', la cual también posee una restricción importante que consiste en que esta máquina solo puede presentar un solo estado en un instante de tiempo, es decir, el jugador no es capaz de saltar y caminar en un mismo momento.
|
||||||
|
|
||||||
|
El funcionamiento de la máquina de estados finita consiste en una secuencia de entradas y eventos que son enviadas a esta, los cuales se usan para cambiar entre estados. Cada máquina tiene un conjunto de transiciones y cada una de ellas está asociada con una entrada o un evento, lo que finalmente apunta a otro estado. Por tanto, cuando llega la entrada o evento y este coincide con una transición dentro del estado actual, la máquina cambiará al estado al que apunta la transición, por lo que si un jugador se encuentra ubicado en el estado ''caminar'', se puede presionar el botón de saltar para cambiar al estado de ''saltar''.
|
34
sections/marco_teorico/desarrollo_videojuegos/motor.tex
Normal file
34
sections/marco_teorico/desarrollo_videojuegos/motor.tex
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
\subsubsection{Motor de Videojuegos}
|
||||||
|
El motor de videojuegos es, en pocas palabras, un conjunto de rutinas de programación que tiene como objetivo proveer facilidad en la utilización de elementos gráficos, sonidos, físicas, redes y varios otros aspectos que ayudan en el desarrollo de un videojuego.
|
||||||
|
El motor que se utilizará en este proyecto tiene por nombre ''Godot''. \cite{Desarrollo-de-Videojuegos,Game-Mechanics,Godot-Projects}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.2\textwidth, height=0.2\textheight, keepaspectratio]{figures/godot.png}
|
||||||
|
\caption{Godot Engine}
|
||||||
|
\label{fig:godot_engine}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
El motor Godot tiene un 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 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.
|
||||||
|
|
||||||
|
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, siendo estos capaces de compilar código a lenguaje máquina. Lo anterior posee especial importancia para el proyecto, puesto que permite implementar otro lenguaje de programación que hará interacción con GDNative. \cite{Godot-24-Hours}
|
||||||
|
|
||||||
|
También la API permite que la Inteligencia Artificial tome decisiones con mayor rapidez dado que el código objeto de máquina se ejecuta con mayor velocidad que un lenguaje interpretado o que se compila a bytecode, como se puede notar en los siguientes gráficos que comparan GDScript(lenguaje interpretado similar a Python), C\# y C++.
|
||||||
|
|
||||||
|
\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}
|
||||||
|
|
||||||
|
En el caso de generación de datos voxel, existe un aumento de 8,846.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}
|
||||||
|
|
||||||
|
En la prueba de generación de mallas, GDNative tiene un aumento de 651.07\% en su rendimiento comparado con C\#.
|
13
sections/referencias.tex
Normal file
13
sections/referencias.tex
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
\phantomsection
|
||||||
|
\printbibliography[heading=bibintoc,title={Referencias}]
|
||||||
|
|
||||||
|
\phantomsection
|
||||||
|
\printbibliography[heading=subbibintoc,keyword={prolog},title={Prolog}]
|
||||||
|
\phantomsection
|
||||||
|
\printbibliography[heading=subbibintoc,keyword={ai},title={Inteligencia Artificial}]
|
||||||
|
\phantomsection
|
||||||
|
\printbibliography[heading=subbibintoc,keyword={llvm},title={LLVM}]
|
||||||
|
\phantomsection
|
||||||
|
\printbibliography[heading=subbibintoc,keyword={godot},title={Godot}]
|
||||||
|
\phantomsection
|
||||||
|
\printbibliography[heading=subbibintoc,keyword={videojuegos},title={Videojuegos}]
|
Reference in New Issue
Block a user