feat: removed logos

This commit is contained in:
Krzysztof Rudnicki 2023-08-28 22:27:07 +02:00
parent 7c82370f1a
commit ef1740f52b
15 changed files with 291 additions and 87 deletions

Binary file not shown.

View File

@ -5,7 +5,7 @@
% Pod rozdzialy do trzech poziomow -> domyslnie zalatwione przez latexa % Pod rozdzialy do trzech poziomow -> domyslnie zalatwione przez latexa
% Rozdzialy poziomu I od nowej strony -> domyslnie przez latexa % Rozdzialy poziomu I od nowej strony -> domyslnie przez latexa
% Wyliczenia -> tylko kropka lub myslnik -> tylko kropka domylsnie przez latexa % Wyliczenia -> tylko kropka lub myslnik -> tylko kropka domylsnie przez latexa
\usepackage{dirtree}
\usepackage{ulem} \usepackage{ulem}
\usepackage{fontspec} \usepackage{fontspec}
\usepackage{anyfontsize} \usepackage{anyfontsize}
@ -44,6 +44,7 @@
% Ciagła w całej pracy <----- % Ciagła w całej pracy <-----
% Kolejna w rozdziałach % Kolejna w rozdziałach
\usepackage{chngcntr} \usepackage{chngcntr}
\usepackage{tabularx}
\counterwithout{figure}{chapter} \counterwithout{figure}{chapter}
\counterwithout{table}{chapter} \counterwithout{table}{chapter}
@ -121,10 +122,10 @@
\newfontfamily{\helveticaLight}{HelveticaLTStd-Light} \newfontfamily{\helveticaLight}{HelveticaLTStd-Light}
\newfontfamily{\helvetica}{Helvetica} \newfontfamily{\helvetica}{Helvetica}
\newcommand{\tytul}{ \newcommand{\tytul}{
Creating multiplatform match three game engine Tworzenie aplikacji wieloplatformowych na przykładzie silnika gier z gatunku "match 3"
} }
\newcommand{\tytulEng}{ \newcommand{\tytulEng}{
Example of creation of multiplatform apps on basis of creating match-three game engine Creating multiplatform applications with creation of match three game engine as an example
} }
\begin{document} \begin{document}
\begin{titlepage} \begin{titlepage}
@ -181,12 +182,42 @@
\subsubsection{Streszczenie pracy} \subsubsection{Streszczenie pracy}
{\fontsize{12}{12} {\fontsize{12}{12}
\tytul \\ \tytul \\
\{SLOWA KLUCZOWE\} Rynek systemów operacyjnych na PC jest podzielony na trzech głównych graczy, tworzy to zapotrzebowanie na silniki do gier, które są wszechstronne i działają tak samo, niezależnie od platformy. Niniejsza praca inżynierska przedstawia projekt i implementację nowego silnika do gier opracowanego z myślą o grach typu "dopasuj 3", gatunku który jest zarówno popularny, jak i stosunkowo łatwy do wdrożenia, mimo to nadal nie ma wyspecjalizowanego silnika open-source pod gry "dopasuj 3". Silnik został zbudowany w oparciu o bibliotekę graficzną OpenGL i system zarządzania oknami glfw, zapewniając zaawansowane możliwości graficzne przy jednoczesnym zachowaniu kompatybilności między platformami. Silnikowi przyświecają dwa cele: prostota obsługi dla deweloperów i solidna wydajność. Architektura skupia się na wykorzystaniu dobrych praktyk, nowoczesnego kodu C++ i sprawieniu że czytanie kodu silnika będzie łatwe i zrozumiałem dla develiperów. W rezultacie twórcy gier mogą skupić się na tworzeniu gier typu "dopasuj 3" bez konieczności nauki programowania, umożliwiając artystom bez zaplecza technicznego, którzy chcą stworzyć wyjątkowe doświadczenie. Niniejsza praca opisuje motywacje, tło, dokumentację i przypadki użycia na trzech głównych platformach: Linux, Windows i MacOS. Silnik demonstruje użyteczność, możliwość dostosowania do różnych platform i zapewnia narzędzia niezbędne do tworzenia prostych gier typu "dopasuj 3". Niniejsza praca stara się wypełnić lukę w wyspecjalizowanych silnikach gier wideo open-source.
\{Multiplatformowość,
Gry,
Silniki do gier,
Gry "dopasuj 3"
OpenGL,
GLFW,
Grafika,
Design,
Prostota,
Linux,
Windows,
MacOS,
C++,
Dobre praktyki kodowania\}
} }
\newpage \newpage
\subsubsection{Thesis abstract} \subsubsection{Thesis abstract}
\fontsize{12}{12}{\tytulEng \\ \fontsize{12}{12}{\tytulEng \\
\{KEYWORDS\} With three major operating systems on PC, there exists a need for game engines that are versatile and platform-agnostic. This thesis introduces the design and implementation of a new game engine developed with match-three games in mind, which is a game genre that is both popular and relatively easy to implement, despite this there is still no specialized open-source match three game engine. The engine is built upon the foundations of the OpenGL graphics library and the glfw windowing system, ensuring advanced graphics capabilities while retaining platform compatibility. There are two goals for the engine: simplicity of use for developers, and robustness in performance. The architecture focuses on using good practices, modern C++ code and making the code developer friendly. As a result, game developers can focus on crafting match-three games without need to learn programming, empowering artists without technical background who want to create an unique experience. This work provides motivation, background, documentation and use-case across three major platforms: Linux, Windows, and MacOS. The engine demonstrates usability, adaptability to different platforms, and provides the tools necessary for creation of simple match-three games. This thesis is trying to fill the gap of specialized open-source video game engines.
\{Multiplatform,
Gaming,
Game engines,
Match-three games,
OpenGL,
GLFW,
Graphics,
Platform-agnostic,
Design,
Robustness,
Simplicity,
Linux,
Windows,
MacOS,
C++,
Good coding practices\}
} }
\tableofcontents \tableofcontents
@ -218,24 +249,10 @@ While game engines can be created for multiple game genres, this thesis focuses
Another important part of the thesis is multiplatform game development. We will focus on three major desktop operating systems: Windows, Mac, and GNU/Linux. The challenges associated with creating an uniform gaming experience across these platforms, taking into consideration differences in architecture, functionality and graphics. Another important part of the thesis is multiplatform game development. We will focus on three major desktop operating systems: Windows, Mac, and GNU/Linux. The challenges associated with creating an uniform gaming experience across these platforms, taking into consideration differences in architecture, functionality and graphics.
\begin{figure}[htp]
\centering
\includegraphics[scale=0.50]{platforms.png}
\caption{Logos of platforms we will be focusing on, from left: Windows, Mac and Linux \cite{platforms}}
\label{}
\end{figure}
\subsection{Tool and Library Integration} \subsection{Tool and Library Integration}
This thesis will make biggest use of OpenGL API together with libraries: GLFW, GLAD, FreeType, stb\_image, and ft2build. In order used for platform-independed creation of windows, context and handling inputs, loader for OpenGL, library for rendering text, library for loading images and library for building free type sources. Later in the thesis we will dvelfe deeper into those libraries This thesis will make biggest use of OpenGL API together with libraries: GLFW, GLAD, FreeType, stb\_image, and ft2build. In order used for platform-independed creation of windows, context and handling inputs, loader for OpenGL, library for rendering text, library for loading images and library for building free type sources. Later in the thesis we will dvelfe deeper into those libraries
\begin{figure}[htp]
\centering
\includegraphics[scale=1.00]{images/glfw.png}
\caption{GLFW project logo \cite{glfwLogo} }
\label{}
\end{figure}
\subsection{Theoretical and Practical Exploration} \subsection{Theoretical and Practical Exploration}
Main portion of this thesis is practical implementation, still we are going to explore theoretical concepts crucial for game engine development. Main portion of this thesis is practical implementation, still we are going to explore theoretical concepts crucial for game engine development.
@ -343,13 +360,6 @@ The gaming industry has seen rise of various game engines, each offering a uniqu
\subsection{Unity Game Engine} \subsection{Unity Game Engine}
\begin{figure}[htp]
\centering
\includegraphics[scale=0.25]{images/unity.png}
\caption{Unity engine logo \cite{unityLogo}}
\label{}
\end{figure}
Unity is one of the most popular game engines available today. It's known for its versatility, supporting a wide range of platforms, from PCs to consoles to mobile devices. Unity is one of the most popular game engines available today. It's known for its versatility, supporting a wide range of platforms, from PCs to consoles to mobile devices.
\begin{itemize} \begin{itemize}
@ -359,13 +369,6 @@ Unity is one of the most popular game engines available today. It's known for it
\subsection{Unreal Engine} \subsection{Unreal Engine}
\begin{figure}[htp]
\centering
\includegraphics[scale=0.10]{images/unreal.png}
\caption{Unreal engine logo \cite{unrealLogo}}
\label{}
\end{figure}
Epic Games' Unreal Engine stands out for its impressive graphical capabilities, often employed in AAA game titles. Epic Games' Unreal Engine stands out for its impressive graphical capabilities, often employed in AAA game titles.
Strengths: Strengths:
@ -382,12 +385,6 @@ Limitations:
\subsection{Godot} \subsection{Godot}
\begin{figure}[H]
\centering
\includegraphics[scale=0.05]{images/godot.png}
\caption{Godot game engine logo \cite{godotLogo}}
\label{}
\end{figure}
Godot is the biggest multipurpose game engine that is also free and open-source. Godot is the biggest multipurpose game engine that is also free and open-source.
@ -405,23 +402,6 @@ Strengths:
\subsection{RPG Maker and Ren'Py} \subsection{RPG Maker and Ren'Py}
\begin{figure}[htp]
\centering
\begin{minipage}{0.5\textwidth}
\centering
\includegraphics[scale=0.25]{images/renpy.png}
\caption{Ren'Py engine logo \cite{renpyLogo}}
\label{fig:renpylogo} % You might want to give a label for future referencing
\end{minipage}%
\begin{minipage}{0.5\textwidth}
\centering
\includegraphics[scale=0.25]{images/rpgMaker.jpg}
\caption{RPG Maker engine logo \cite{rpgMakerLogo}}
\label{fig:rpgmakerlogo} % You might want to give a label for future referencing
\end{minipage}
\end{figure}
RPG Maker and Ren'Py are examples of game engines focusing on one genre of games. RPG Maker and Ren'Py are examples of game engines focusing on one genre of games.
@ -633,6 +613,13 @@ GLFW proves useful to many game developers, especially those using OpenGL. Its a
\section{Role of GLAD in OpenGL Loading} \section{Role of GLAD in OpenGL Loading}
GLAD is a robust and flexible loader-generator designed for OpenGL. It ensures the dynamic loading of OpenGL functions based on the specific version and extensions a developer chooses. GLAD was developed to automate handling OpenGL extensions. GLAD is a robust and flexible loader-generator designed for OpenGL. It ensures the dynamic loading of OpenGL functions based on the specific version and extensions a developer chooses. GLAD was developed to automate handling OpenGL extensions.
\begin{figure}[htp]
\centering
\includegraphics[scale=0.50]{images/gladSite.png}
\caption{Glad website allowing for different configurations of OpenGL \cite{gladSite}}
\label{}
\end{figure}
\subsection{The Need for Loading OpenGL Extensions} \subsection{The Need for Loading OpenGL Extensions}
OpenGL's is an extensible API. With changes in hardware, new functionalities are introduced through extensions without changing the core API. This creates new challenges on their own. OpenGL's is an extensible API. With changes in hardware, new functionalities are introduced through extensions without changing the core API. This creates new challenges on their own.
@ -672,6 +659,13 @@ FreeType is an open-source software font engine, It offers ability to render tex
\item Font Metrics and Kerning: Rendering text isn't just about individual glyphs. The spacing between them (kerning) and their metrics are crucial for readability and aesthetics, and FreeType is able to deliver this functionality. \item Font Metrics and Kerning: Rendering text isn't just about individual glyphs. The spacing between them (kerning) and their metrics are crucial for readability and aesthetics, and FreeType is able to deliver this functionality.
\end{itemize} \end{itemize}
\begin{figure}[htp]
\centering
\includegraphics[scale=0.50]{images/freetypeInspect.png}
\caption{ftinspect showcasing capabilities of FreeType library \cite{freeTypeSite}}
\label{}
\end{figure}
\subsection{Understanding ft2build} \subsection{Understanding ft2build}
ft2build serves as an essential interface, allowing for the inclusion and deployment of FreeType headers in development projects. ft2build was created to ease the integration process of FreeType 2. ft2build serves as an essential interface, allowing for the inclusion and deployment of FreeType headers in development projects. ft2build was created to ease the integration process of FreeType 2.
@ -696,6 +690,13 @@ Specialized tools like FreeType and stb\_image elecate the visual experience of
\section{Game Loop and State Management} \section{Game Loop and State Management}
In the heart of every video game lies the game loop. This cycle dictates the game's pacing, ensuring that events, updates, and rendering processes all appear in a correct order. Game loop functions together with state management, which ensures the game behaves consistently in response to player actions and internal events. This section will focus on both the game loop and state management and how they influence our multiplatform Match Three game engine. In the heart of every video game lies the game loop. This cycle dictates the game's pacing, ensuring that events, updates, and rendering processes all appear in a correct order. Game loop functions together with state management, which ensures the game behaves consistently in response to player actions and internal events. This section will focus on both the game loop and state management and how they influence our multiplatform Match Three game engine.
\begin{figure}[htp]
\centering
\includegraphics[scale=0.50]{images/gameLoop}
\caption{Game loop flowchart representation}
\label{}
\end{figure}
\subsection{The Anatomy of a Game Loop} \subsection{The Anatomy of a Game Loop}
The game loop is a repetitive process that continues for the lifespan of the game session. It tries to: The game loop is a repetitive process that continues for the lifespan of the game session. It tries to:
@ -763,6 +764,13 @@ Game development consists of art and logic, where visual assets behave based on
\subsection{What are Game Assets?} \subsection{What are Game Assets?}
\begin{figure}[htp]
\centering
\includegraphics[scale=1.00]{images/gemMatchThree.png}
\caption{Exemplary assets for match three tiles \cite{assetsMatchThree} }
\label{}
\end{figure}
In the context of game development, assets refer to: In the context of game development, assets refer to:
\begin{itemize} \begin{itemize}
@ -850,6 +858,13 @@ Some of the distinctive features of OS architecture are:
\item File Systems: Windows primarily offers NTFS, MacOS stores files using APFS, and GNU/Linux has multiple options like ext4, Btrfs, and many, many more. \item File Systems: Windows primarily offers NTFS, MacOS stores files using APFS, and GNU/Linux has multiple options like ext4, Btrfs, and many, many more.
\begin{figure}[htp]
\centering
\includegraphics[scale=0.75]{images/fileSystems}
\caption{Windows file system consists of drives, which contain folders which contain subfolders and files, in Linux everything is a file}
\label{}
\end{figure}
\item APIs \& System Calls: Each OS provides developers with its own set of APIs and system calls, changing how software communicates with the system. \item APIs \& System Calls: Each OS provides developers with its own set of APIs and system calls, changing how software communicates with the system.
\end{itemize} \end{itemize}
@ -966,6 +981,56 @@ The engine's architecture is segmented into modules:
\item Texture Renderer: (texture.cpp) Renders textures \item Texture Renderer: (texture.cpp) Renders textures
\end{itemize} \end{itemize}
\subsection{File structure}
\dirtree{%
.1 engine\DTcomment{Main project folder}.
.2 build\DTcomment{Builded binary files of engine stored here}.
.2 includes\DTcomment{Used libraries}.
.3 freetype\DTcomment{Used to render text}.
.3 glad\DTcomment{Makes loading openGL easier}.
.3 ft2build.h\DTcomment{For building free type}.
.3 stb\_image.h\DTcomment{For loading images}.
.2 src\DTcomment{All of code is stored here}.
.3 constants.hpp.
.3 filesystem.h.
.3 game.cpp\DTcomment{Main game loop}.
.3 game.h.
.3 game\_level.cpp\DTcomment{Converts text files to game level}.
.3 game\_level.h.
.3 game\_object.cpp\DTcomment{Used for tiles}.
.3 game\_object.h.
.3 glad.c.
.3 post\_processing.fs.
.3 post\_processing.vs.
.3 post\_processor.cpp.
.3 post\_processor.h.
.3 power\_up.h.
.3 resource\_manager.cpp\DTcomment{For loading assets}.
.3 resource\_manager.h.
.3 shader.cpp.
.3 shader.h.
.3 sprite.fs.
.3 sprite.vs.
.3 sprite\_renderer.cpp\DTcomment{Transforms assets into sprites}.
.3 sprite\_renderer.h.
.3 stb\_image.cpp.
.3 text\_2d.fs.
.3 text\_2d.vs.
.3 text\_renderer.cpp.
.3 text\_renderer.h.
.3 text\_rendering.cpp.
.3 texture.cpp\DTcomment{Transforms sprites into textures}.
.3 texture.h.
.2 glad.c.
.2 stb\_image.cpp.
.2 configuration\DTcomment{Holds reference to root directory of project}.
.2 resources\DTcomment{Holds assets}.
.2 bin\DTcomment{Holds binary engine files}.
.2 cmake\DTcomment{Holds build artifacts}.
.2 CmakLists.txt\DTcomment{Holds instructions for how to build the engine}.
}
\subsection{Dependency Management} \subsection{Dependency Management}
There are several libraries: OpenGL, GLFW, stb\_image and freetype being integrated into engine, they are simply included at the top of any files that need them. There are several libraries: OpenGL, GLFW, stb\_image and freetype being integrated into engine, they are simply included at the top of any files that need them.
@ -991,46 +1056,23 @@ A Match Three game takes place on a grid, where each cell holds an item (tile):
\item Pattern Recognition: The engine monitors the grid, identifies patterns where three or more items align vertically or horizontally. \item Pattern Recognition: The engine monitors the grid, identifies patterns where three or more items align vertically or horizontally.
\item Combo Chains: Beyond the basic three-item match, the engine recognizes and rewards larger matches and cascading chain reactions. \item Combo Chains: Beyond the basic three-item match, the engine recognizes and rewards larger matches and cascading chain reactions.
\item NICE TO HAVE, TODO, REPLACE ME IN THE FINAL VERSION! \sout{Special Items: Some matches can generate special items with unique properties, such as the ability to clear an entire row or explode surrounding tiles.}
\end{itemize} \end{itemize}
\begin{figure}[htp]
\centering
\includegraphics[scale=0.5]{images/matchThreeSelect.png}
\caption{Selecting tile to swap in game engine}
\label{}
\end{figure}
\subsection{Player Interactions and Moves} \subsection{Player Interactions and Moves}
\begin{itemize} \begin{itemize}
\item Drag and Swap: The primary interaction method, where players drag items to swap positions and create matches. \item Drag and Swap: The primary interaction method, where players drag items to swap positions and create matches.
\item Move Validation: Not every swap leads to a match. The engine predicts potential matches before finalizing a move, ensuring players don't make invalid swaps. \item Move Validation: Not every swap leads to a match. The engine predicts potential matches before finalizing a move, ensuring players don't make invalid swaps.
\item NICE TO HAVE, TODO, REPLACE ME IN THE FINAL VERSION! \sout{Move Limitations: Some levels might introduce a maximum move count, adding a strategic layer to gameplay.}
\end{itemize} \end{itemize}
\subsection{Game Progression and Levels}
NICE TO HAVE, TODO, REPLACE ME IN THE FINAL VERSION!
\sout{
Keeping players engaged:
Dynamic Difficulty: As players advance, the game introduces larger grids, more item types, or challenging obstacles, ensuring a progressively challenging experience.
Level Objectives: Beyond mere matching, players might need to achieve specific objectives, such as reaching a certain score or clearing particular grid cells.
Reward System: Completing levels or achieving special combos can grant players rewards, from in-game currency to new levels or challenges.
}
\subsection{Challenges and Obstacles}
NICE TO HAVE, TODO, REPLACE ME IN THE FINAL VERSION!
\sout{
Introducing variety:
Static Blocks: Some grid cells might be occupied by immovable blocks, adding a puzzle element to gameplay.
Movable Obstacles: Items that shift position, grow, or change over time, forcing players to adapt their strategies.
Timed Challenges: Levels where players need to achieve objectives within a set time frame.
}
Our engine offers basic match three experience with couple of additional features added on the top. Our engine offers basic match three experience with couple of additional features added on the top.
\section{Integration of Libraries and Tools} \section{Integration of Libraries and Tools}
In this section we will explain rationality for choosing libraries and tools for our engine and how they were implemented In this section we will explain rationality for choosing libraries and tools for our engine and how they were implemented
@ -1062,6 +1104,21 @@ Out of these three it is recognized as the hardest one as
it is both complicated and newest. Similarly as OpenGL it is both complicated and newest. Similarly as OpenGL
it uses open source license, namely Apache License 2.0. it uses open source license, namely Apache License 2.0.
\\ \\
\begin{table}[H]
\centering
\caption{Comparison of Graphics APIs}
\begin{tabularx}{\textwidth}{|l|X|X|X|X|}
\hline
& \textbf{Developer} & \textbf{Platform Focus} & \textbf{Complexity} & \textbf{License} \\
\hline
\textbf{DirectX} & Microsoft & Windows, Xbox & Harder, requires understanding of underlying mechanisms & Non-free \\
\hline
\textbf{OpenGL} & Khronos Group & Windows, Linux, Mac OS, Android, iOS, major consoles (especially with OpenGL ES) & Easiest, lacks some advanced features & Open source (similar to BSD) \\
\hline
\textbf{Vulkan} & Khronos Group & Modern platforms, successor to OpenGL & Hardest, newest & Open source (Apache License 2.0) \\
\hline
\end{tabularx}
\end{table}
Considering all of those characteristics I decided to go with OpenGL API, Considering all of those characteristics I decided to go with OpenGL API,
specifically OpenGL ES subset with its focus on compatibility as specifically OpenGL ES subset with its focus on compatibility as
making a multiplatform application is one of the focues of this thesis. making a multiplatform application is one of the focues of this thesis.
@ -1235,7 +1292,7 @@ In order to overcome differences for different operating system, a lot of time w
Using multiple different libraries and integrating them with our game engine was a challenge, thanks to existing solutions like learnopengl repository which already overcame those difficulties and KDevelop easy approach to external libraries it was possible to implement all of libraries within our game engine. Using multiple different libraries and integrating them with our game engine was a challenge, thanks to existing solutions like learnopengl repository which already overcame those difficulties and KDevelop easy approach to external libraries it was possible to implement all of libraries within our game engine.
\subsection{Time management} \subsection{Time management}
Lastly, probably the biggest challenge was managing time for this thesis. Finishing it required a lot of determination, setting barriers and working every day to ensure that the thesis is finished on time. Thankfully past experiences helped in guiding through this task that could be compared to colos\textbf{sus}. Lastly, probably the biggest challenge was managing time for this thesis. Finishing it required a lot of determination, setting barriers and working every day to ensure that the thesis is finished on time. Thankfully past experiences helped in guiding through this task that could be compared to colossus.
\chapter{References} \chapter{References}
\chapter{Appendices} \chapter{Appendices}

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

View File

@ -0,0 +1,52 @@
<mxfile host="app.diagrams.net" modified="2023-08-26T11:07:35.873Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" etag="FfLHNZCJFcJDsv8QNkFy" version="21.6.9" type="device">
<diagram name="Page-1" id="g5Jzl1URDyoB9a3UllsU">
<mxGraphModel dx="671" dy="1076" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="NczNC9S316NE_w-kGZzZ-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="NczNC9S316NE_w-kGZzZ-1" target="NczNC9S316NE_w-kGZzZ-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="NczNC9S316NE_w-kGZzZ-1" value="Initialize Game" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="190" y="40" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="NczNC9S316NE_w-kGZzZ-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="NczNC9S316NE_w-kGZzZ-2" target="NczNC9S316NE_w-kGZzZ-3">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="130" y="190" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="NczNC9S316NE_w-kGZzZ-2" value="Poll Input" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="190" y="160" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="NczNC9S316NE_w-kGZzZ-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="NczNC9S316NE_w-kGZzZ-3" target="NczNC9S316NE_w-kGZzZ-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="NczNC9S316NE_w-kGZzZ-3" value="Update Game State" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="70" y="270" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="NczNC9S316NE_w-kGZzZ-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="NczNC9S316NE_w-kGZzZ-4" target="NczNC9S316NE_w-kGZzZ-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="NczNC9S316NE_w-kGZzZ-4" value="Render" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="310" y="270" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="NczNC9S316NE_w-kGZzZ-5" value="Shutdown" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="190" y="400" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="NczNC9S316NE_w-kGZzZ-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="NczNC9S316NE_w-kGZzZ-10" target="NczNC9S316NE_w-kGZzZ-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="NczNC9S316NE_w-kGZzZ-10" value="" style="swimlane;startSize=0;" vertex="1" parent="1">
<mxGeometry x="20" y="140" width="460" height="200" as="geometry">
<mxRectangle x="20" y="140" width="50" height="40" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="NczNC9S316NE_w-kGZzZ-13" value="The Game Loop" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="20" y="110" width="110" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

BIN
Thesis/images/gameLoop.pdf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 KiB

BIN
Thesis/images/gladSite.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 KiB

View File

@ -0,0 +1 @@
<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

BIN
Thesis/images/tux.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB

BIN
Thesis/images/windows.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@ -93,3 +93,27 @@
note = {Accessed: 2023-08-20} note = {Accessed: 2023-08-20}
organization = {PCMag} organization = {PCMag}
} }
@online{gladSite,
title = {Glad configuration site},
year = {2023}, % Adjust the year if you know the specific publication year.
url = {https://glad.dav1d.de/},
note = {Accessed: 2023-08-26}
author = {David Herberth}
}
@online{freeTypeSite,
title = {Free Type site},
year = {2023}, % Adjust the year if you know the specific publication year.
url = {https://freetype.org/},
note = {Accessed: 2023-08-26}
organization = {Free Type project}
}
@online{assetsMatchThree,
title = {Match three assets},
year = {2017}, % Adjust the year if you know the specific publication year.
url = {https://opengameart.org/content/gem-match-3-set},
note = {Accessed: 2023-08-26}
author = {Sylly}
}