WUT_Computer_Science/projectConcept/main.tex

141 lines
6.7 KiB
TeX
Raw Normal View History

2022-05-09 16:48:44 +02:00
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{graphicx}
\lstdefinestyle{sharpc}{language=[Sharp]C, frame=lr, rulecolor=\color{blue!80!black}}
\title{EOPSY Lab 5, 6, 7 project concept}
\author{Maciej Domański, Krzysztof Rudnicki, Gabriel Skowron-Rodriguez}
\date{\today}
\begin{document}
\maketitle
\section{Introduction}
\subsection{Goal of project}
Creating an analogy in form of a real time strategy game to operating system processes and how they function. \\
Each soldier in our game will represent a process which can receive and send signals from and to "the general" (player), soldiers communicate with each other, exchange information, divide resources among themselves and work together to achieve a goal or set of goals. \\
We will focus mainly on the parts of the game which represent how processes work in operating systems first, then on how the game actually looks and works
\subsection{Tools}
We will use Unity Game Engine, for simplicity sake we will use Mono-behaviours on prefabs of the soldiers. This is not the most optimal solution but it is easy enough to implement in realistic (one month) time. \\
When it comes to more detailed usage of different tools to accomplish different goals all of them will come up as the project progresses and we will actually work on the tasks.
\subsection{Dividing Tasks}
Every week our group will meet on Monday at 12:00 and work for approximately 3 hours. This ensures that everybody does similar amount of work. \\
Dividing tasks will be done using trello before or at the beginning of the weekly meeting.
\newpage
\subsection{Workflow}
We use gitlab hosted on studia elka servers. There are 3 types of branches in our project:
\begin{enumerate}
\item Main - Rarely used, hosting only stable versions of the game
\item Development - Branch where we merge all individual branches and actively change on weekly basis.
\item Individual branches - Created for each task and merged when this task is finished
\end{enumerate}
We also use separate scenes on which we will work for each member of the project. \\
Branching and separate scenes minimize the risk of corrupted gitlab project and simplifies merging and management of the project.
\section{Goals}
\subsection{Minimum Viable Product}
This is a minimum goal we want to achieve in order to consider this project as finished \\
\paragraph{Goal of the game} Destroying enemy base, for sake of simplicity enemy base is just enemy "soldier" without option to attack, move and bigger health points. Destroying means reducing health points to zero.
\paragraph{Realization of goal} Attacking the base with our soldiers.
\paragraph{Map}
Map is divided into tiles
2022-05-09 16:48:44 +02:00
\subsubsection{Soldiers}
Exactly one type of soldiers \\
Exactly one squad \\
Exactly one formation (Rectangle or any other that we find the easiest to implement) \\
New soldiers spawn (appear) every \textit{x} seconds in the squad \\
Soldiers have following attributes:
\begin{itemize}
\item Health Points
\item Range of Attack
\item Range of View
\item Damage per attack
\item Speed of attack
\end{itemize}
We decided to split range of attack and range of view since combining them can lead to difficult code problems to entangle should we reach higher level of our project. \\
Soldiers take physical space - a tile \\
\subsubsection{Soldiers Communication}
Soldiers receive global orders from the player but they use their local vision to fulfill those orders. (For example by looking at where their neighbours stand and adjust to that. Used to simulate communication between operating system and processes. \\
In order to communicate something to the whole squad (like killing enemy soldier), the soldier sends communicate to neighbours soldiers which further distribute this info to the whole squad. This is used to simulate processes communicating with each other. \\
Every action of soldier is done every tick, which simulates processor time. \\
Every soldier has its own "stack" of actions, each tick he does one action from the top of the stack \\
There are process interrupts send by the player which force the soldier to do something regardless of what he has on stack.
\subsection{Squads}
Exactly one squad on map \\
\begin{lstlisting}[caption={Pseudo-code for Squad class}]
class Squad{
List<Soldier> soldiers
Queue<Order> orders
}
\end{lstlisting}
\subsection{Fighting}
If the enemy is in rage of attack we attack \\
Attack means that the closest enemy to the soldier, receives damage (which means that his health gets decreased) accordingly to the soldier stats)
\subsubsection{Player}
Player orders are first in priority for soldiers, (like interrupt signals) \\
Player sees everything on map
\subsubsection{Enemy}
One stationary squad of enemy soldiers \\
Enemy base \\
No AI \\
\subsection{Expansion 1}
This is what we would like to introduce should we finish MVP. We mostly focused
on operating systems and processes related features. \\
Expansion 1 eeans that those are first features in prority we would like to
implement after finishing minimum viable product.
2022-05-09 16:48:44 +02:00
\subsubsection{Fighting}
Priority points regarding who should soldier attack based on distance from the
enemy, how many friendly soldiers are near or the enemy health. \\
2022-05-09 16:48:44 +02:00
Soldiers automatically get in fighting distance to enemy soldiers \\
When soldier sees enemy he communicates so to the squad and the whole squad goes towards enemy
\subsubsection{Squads}
More than one squad \\
We can transfer soldiers between squads
\subsubsection{Commander panel}
Commander panel with all info regarding soldiers and squads, amount of enemy soldiers killed, where they are, whether they exist, ability to remove squads which do not send those statistics. \\
If there is at least one living soldier in a squad he will send every \textit{x} ticks statistics:
\begin{itemize}
\item How many soldiers are in the squad
\item Squad position
\item How many enemy soldiers does he see
\end{itemize}
\subsubsection{Player}
Symbolically player sees different color outlines of the squads based on whether they send statistics or not
\subsection{Expansion 2}
Expansion 2 means that those are second features in prority we would like to
implement after finishing minimum viable product AND expansion 1
2022-05-09 16:48:44 +02:00
Creating soldiers in the main base and spawning them near the base in a new squad. \\
Soldiers have limited resources (as in limited memory and CPU power) \\
More soldier types with different communication and attributes \\
Player sees exactly and only what the soldiers send him. \\
Resources with stable generation of \textit{x} resources per minute \\
Resource points to make generation faster \\
Physical, realistic placement of soldiers on map instead of tiles \\
\end{document}