mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-11-10 19:47:32 +01:00
Running one directory (EADS) had already produced four bugs, so all of them
were run. 11 failed. Every one was real -- either in the coursework or in the
harness I had just written -- and the split was roughly even.
Coursework bugs:
- 15 .tex files use Polish ogonek characters with no fontenc, so pdflatex
dies with "Command \k unavailable in encoding OT1". Fixed where it was
actually needed, not blanket-applied.
- BSS had \documentclass{article}[12pt] -- options after the class name,
where they are not options at all.
- SDM's beamer deck had a stray } on an \item, which took out the frame.
- EOOP/Various/currency included "currency2.hpp"; the file is currency.hpp.
- ECRYPT_PROJECT had the SAME stdlib-shadowing bug as ECOTE: a package named
code/. Renamed to sieve/, and its 99 tests now run. With ECOTE's 26 that
is 125 tests that could not execute at all before today.
Harness bugs, which the run is what exposed:
- COURSE_ENTRY pointed at directories for PORR and ECRYPT_PROJECT, so python
looked for __main__.py and reported the wrong problem.
- main.py was auto-picked via find's first result. EARIN has six labs and
six main.py files, so that ran an arbitrary lab and called it the course.
Now only auto-picked when exactly one exists.
- Only the first requirements.txt was installed, which is why EARIN still
died on gymnasium after a venv was created for it. All of them now.
- The notebook probe accepted jupyter being on PATH. This machine's jupyter
is a pipx shim whose interpreter is gone, so "runnable" was a lie; it now
invokes jupyter --version and PBAD/twm_4 report blocked, honestly.
- Nothing ran a course's tests. Where a suite exists it is now the check,
which matters most for ECRYPT_PROJECT, whose program prompts on stdin and
cannot be run headlessly at all.
- Which directory pytest runs from is course-specific and unguessable, so
stubs pass --test-dir: ECOTE needs program/ for imports, ECRYPT_PROJECT
needs sieve/ because its fixtures open a CSV by relative path.
gates/known-incomplete.txt records the one file that genuinely cannot build:
EOOP/Various/set/set.cpp includes set.hpp, which `git log --all` shows has
never existed here. The course supplied it and only the .cpp was submitted.
That is a factual record with a stated check, not a lint allowlist -- and
fabricating the header would be inventing coursework.
Status is now 36 runnable / 5 no-code / 3 blocked.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0172dj34FDpao6wsix8ZuCzE
147 lines
7.0 KiB
TeX
147 lines
7.0 KiB
TeX
\documentclass{article}
|
|
\usepackage[utf8]{inputenc}
|
|
% T1 is required for Polish ogonek characters; without it pdflatex
|
|
% fails with "Command \k unavailable in encoding OT1".
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage{listings}
|
|
\usepackage{xcolor}
|
|
\usepackage{graphicx}
|
|
\usepackage{soul}
|
|
|
|
\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 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 the Unity Game Engine, for simplicity's sake we will use Mono-behaviours on prefabs to represent the soldiers. This is not the most performant solution but it is easy enough to implement in realistic (one month) timeframe.\\
|
|
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 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 will ensure that everybody does a similar amount of work. \\
|
|
Task division 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 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 corrupting the 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 simplicity's sake, the enemy base is just a "soldier" without the ability to attack or move, with more health points. "Base destruction" is accomplished by reducing its health points to zero.
|
|
\paragraph{Realization of the goal} Attacking the base with our soldiers.
|
|
|
|
\paragraph{Map}
|
|
Map is divided into tiles
|
|
|
|
\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 have decided to split range of attack and range of view since combining them may lead to difficult code problems to solve should we reach higher level(s) of our project. \\
|
|
Soldiers occupy 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 their position accordingly). Used to simulate communication between operating system and processes. \\
|
|
In order to communicate something to the whole squad (like killing of an enemy soldier), the soldiers sends a message to its neighbours, causing the info to be distributed to the whole squad immediately
|
|
\\ This is used to simulate processes communicating with each other. \\
|
|
Each soldier has its own Action "stack". Every tick a single (topmost) action from the Soldier's Action stack is executed
|
|
\\
|
|
There are process interrupts sent by the player which force the soldier to perform a special action instead of executing what is on the action 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 an enemy is within a Soldier's attack range, the Soldier will perform an "attack" action\\
|
|
"Attack" means that the closest enemy to the soldier, receives damage (which means that its 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 means that those are first priority features we would like to
|
|
implement after finishing minimum viable product.
|
|
\subsubsection{Fighting}
|
|
Priority points determining who the soldiers should attack based on distance from the
|
|
enemy, how many friendly soldiers are nearby or the enemy health. \\
|
|
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 priority features we would like to
|
|
implement after finishing minimum viable product AND expansion 1
|
|
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}
|