feat: add maze module

This commit is contained in:
Kristofers Solo 2025-01-01 20:22:02 +02:00
parent 84cedbed37
commit 935343f7d2
2 changed files with 85 additions and 50 deletions

View File

@ -46,7 +46,15 @@ papilspējas.
numbering: none, numbering: none,
"Abstract", "Abstract",
) )
#todo("add english title") #align(
center,
heading(
level: 2,
outlined: false,
numbering: none,
text(13pt, "Game development using Bevy game engine"),
),
)
The qualification work includes the game "Maze Ascension", which offers The qualification work includes the game "Maze Ascension", which offers
players the challenge to pass through procedurally generated hexagons players the challenge to pass through procedurally generated hexagons
mazes. The game is built using the Rust programming language and Bevy mazes. The game is built using the Rust programming language and Bevy

125
main.typ
View File

@ -412,13 +412,11 @@ pienākumi, un tas ietver funkcijas, kas veicina kopējo spēles sistēmu.
[Labirinta būvētājs], [Labirinta būvētājs],
[#link(<hexlab-F01>)[LGMF01]], [#link(<hexlab-F01>)[LGMF01]],
rowspanx(3)[Labirinta pārvaldības modulis], // maze rowspanx(2)[Labirinta pārvaldības modulis], // maze
[Labirinta ielāde], [Labirinta ielāde],
[#link(<maze-F01>)[LPMF01]], [#link(<maze-F01>)[LPMF01]],
[Labirinta #red("pārlāde")], [Labirinta pārlāde],
[], [#link(<maze-F02>)[LPMF02]],
[Labirinta #red("izlāde")],
[],
rowspanx(4)[Spēlētāja modulis], // player rowspanx(4)[Spēlētāja modulis], // player
[Spēlētāja ielāde], [Spēlētāja ielāde],
@ -442,9 +440,6 @@ pienākumi, un tas ietver funkcijas, kas veicina kopējo spēles sistēmu.
), ),
) <function-modules> ) <function-modules>
// === Audio modulis
// #todo("uzrakstīt audio moduli")
=== Izstrādes rīku modulis === Izstrādes rīku modulis
#figure( #figure(
@ -599,30 +594,64 @@ programmu.
) <hexlab-F01> ) <hexlab-F01>
=== Labirinta pārvaldības modulis === Labirinta pārvaldības modulis
#todo("uzrakstīt labirinta pārvaldības moduli") Labirinta pārvaldības modulis ir atbildīgs par labirintu ģenerēšanu un
pārvaldību katrā spēles stāvā. Moduļa darbības plūsma ir attēlota 2. līmeņa datu
plūsmas diagrammā (sk. @fig:dpd-2-maze).
Modulis nodrošina divas galvenās funkcijas: labirinta izveidi
(#link(<maze-F01>)[LPMF01]) un labirinta atjaunošanu
(#link(<maze-F02>)[LPMF02]).
Labirinta izveides funkcija tiek izsaukta, kad nepieciešams izveidot jaunu
stāvu, pārbaudot, vai šāds stāvs jau neeksistē.
Funkcija ģenerē jaunu labirintu, izmantojot norādīto konfigurāciju, un izvieto
to atbilstošā augstumā spēles pasaulē.
Labirinta atjaunošanas funkcija ļauj pārģenerēt esošā stāva labirintu,
saglabājot to pašu stāva numuru un pozīciju telpā nemainot entitātes ID.
#figure(
caption: [Labirinta pārvaldības moduļa 2. līmeņa DPD],
diagram(
spacing: (8em, 4em),
{
process((-1, 0), [Labirinta\ ielāde])
dpd-edge("d,r,u", align(center)[Labirinta entitātes dati])
dpd-database((0, 0), [Operatīvā\ atmiņa])
dpd-edge("u,l,d", align(center)[Labirinta\ konfigurācijas dati])
dpd-edge("u,r,d", align(center)[Labirinta\ konfigurācijas dati])
dpd-edge("uu,r,dd", align(center)[Labirinta entitātes dati])
process((1, 0), [Labirinta\ pārlāde])
dpd-edge("d,l,u", align(center)[Atjaunotie labirinta\ entitātes dati])
},
),
) <dpd-2-maze>
#function-table( #function-table(
"Labirinta ielāde", "Labirinta ielāde",
"LPMF01", "LPMF01",
[ Izveidot jaunu labirinta stāvu spēles pasaulē. ], "Izveido jaunu labirinta stāvu spēles pasaulē.",
[ [
Ievades dati tiek saņemti no: + Labirinta konfigurācija.
+ SpawnMaze notikuma (saturoša stāva numuru un konfigurāciju) + Globālā konfigurācija.
+ Bevy ECS komponentiem un resursiem
], ],
[ [
+ Pārbauda, vai labirints šim stāvam jau eksistē. + Pārbauda, vai labirints šim stāvam jau eksistē.
+ Ja eksistē, parāda 1. paziņojumu un iziet no sistēmas. + Ja eksistē, parāda 1. paziņojumu un iziet no sistēmas.
+ Ģenerē jaunu labirintu balstoties uz nodoto konfigurāciju. + Ģenerē jaunu labirintu balstoties uz doto konfigurāciju.
+ Aprēķina vertikālo nobīdi jaunajam stāvam. + Aprēķina vertikālo nobīdi jaunajam stāvam.
+ Izveido jaunu entitāti, kas pārstāv labirinta stāvu, pievienojot tam + Izveido jaunu entitāti, kas pārstāv labirinta stāvu, pievienojot tam
atbilstošās komponente. atbilstošās komponente.
+ Atkarībā no tā, vai tas ir pašreizējais vai nākamais stāvs, pievieno + Atkarībā no tā, vai tas ir pašreizējais vai nākamais stāvs, pievieno
attiecīgo komponenti. attiecīgo komponenti.
+ Izsauc atsevišķu funkciju labirinta plākšņu izveidei. #todo("rework") + Izveido jaunas entitātes, kas pārstāv labirinta plāksnes, kā bērnu
elementus labirinta entitātei.
+ Katrai labirinta plāksnei atbilstoši labirinta konfigurācijai, izveido
sienas bērnu entitātes.
], ],
[ [
Izvades datu sistēmai nav. + Labirinta entitāte.
], ],
[ [
+ "Stāvs $x$ jau eksistē." + "Stāvs $x$ jau eksistē."
@ -630,6 +659,33 @@ programmu.
], ],
) <maze-F01> ) <maze-F01>
#function-table(
"Labirinta pārlāde",
"LPMF02",
"Izveido jaunu labirinta stāvu spēles pasaulē.",
[
+ Stāva numurs, kuru atjaunot.
+ Labirinta konfigurācija.
+ Globālā konfigurācija.
],
[
+ Pārbauda, vai labirints doto stāvu eksistē.
+ Ja neeksistē, parāda 1. paziņojumu un iziet no sistēmas.
+ Ģenerē jaunu labirintu balstoties uz doto konfigurāciju.
+ Izdzēš visus labirinta entitātes pēcnācēju entitātes.
+ Izveido jaunas entitātes, kas pārstāv labirinta plāksnes, kā bērnu
elementus labirinta entitātei.
+ Katrai labirinta plāksnei atbilstoši labirinta konfigurācijai, izveido
sienas bērnu entitātes.
],
[
+ Labirinta entitāte.
],
[
+ "Neizdevās atrast labirinta stāvu $x$."
],
) <maze-F02>
=== Spēlētāja modulis === Spēlētāja modulis
Spēlētāja modulis ir atbildīgs par spēlētāja entītijas pārvaldību, kas ietver Spēlētāja modulis ir atbildīgs par spēlētāja entītijas pārvaldību, kas ietver
tās izveidi, kustību apstrādi un mijiedarbību ar spēles vidi. Moduļa darbības tās izveidi, kustību apstrādi un mijiedarbību ar spēles vidi. Moduļa darbības
@ -751,10 +807,7 @@ punktiem, funkcija izsauc atbilstošu pārejas notikumu.
], ],
[ [
+ Iegūst sākuma pozīciju no labirinta konfigurācijas. + Iegūst sākuma pozīciju no labirinta konfigurācijas.
+ Izveido spēlētāja entitāti ar: + Izveido spēlētāja entitāti ar pašreizējās pozīcijas komponenti.
- pašreizējo pozīciju;
- tekstūru;
- krāsu.
], ],
[ [
+ Spēlētāja entitāte. + Spēlētāja entitāte.
@ -932,34 +985,8 @@ sākumekrānu.
], ],
) <screen-F03> ) <screen-F03>
/* #function-table(
"Mūzikas atskaņošana",
"SSPMF03",
"Sākt atskaņot spēles mūziku gameplay režīmā.",
[ Ievades dati: + GameplayMusic resurss + AudioSource resurss ],
[ + Izveido jaunu audio entitāšu + Pievieno AudioPlayer komponenti + Iestata atskaņošanas iestatījumus uz LOOP ],
[ + Aktīva audio atskaņošanas entitāte ],
[ Nav definēti specifiski kļūdu ziņojumi. ],
) <screen-F03> */
/* #function-table(
"Mūzikas apturēšana",
"SSPMF04",
"Apturēt spēles mūziku, izejot no gameplay režīma.",
[
+ GameplayMusic resurss ar entitāte ID
],
[
+ Pārbauda, vai eksistē mūzikas entitāte:
+ Ja neeksistē, ...
+ Ja eksistē, likvidē entitāte rekursīvi
],
[
Izvades datu sistēmai nav.
],
) <screen-F04> */
#todo("uzrakstīt papildspēju moduli")
== Nefunkcionālās prasības == Nefunkcionālās prasības
=== Veiktspējas prasības === Veiktspējas prasības
@ -1415,7 +1442,7 @@ Katrs testa scenārijs ir dokumentēta strukturētas tabulas formātā, ievēroj
būtisku informāciju, piemēram, test nosaukumu, unikālo identifikatoru, aprakstu, būtisku informāciju, piemēram, test nosaukumu, unikālo identifikatoru, aprakstu,
izpildes soļus, gaidāmo rezultātu un faktisko rezultātu (veiksmīga testa izpildes soļus, gaidāmo rezultātu un faktisko rezultātu (veiksmīga testa
gadījumā apzīmēts ar "Ok", bet neveiksmīgu -- ar "Err"). gadījumā apzīmēts ar "Ok", bet neveiksmīgu -- ar "Err").
Izvēlētie testu gadījumi ir detalizēti aprakstīti #todo("tab") tabulā. Izvēlētie testu gadījumi ir detalizēti aprakstīti #todo("attiecīgā tabula") tabulā.
#todo("add tests table") #todo("add tests table")
@ -1433,7 +1460,7 @@ pārklājumu, jo rīkam ir ierobežojumi attiecībā uz "inline"#footnote[https:
funkcijām un citi tehniski ierobežojumi @cargo-tarpaulin. funkcijām un citi tehniski ierobežojumi @cargo-tarpaulin.
#todo("double check which tests are actually impemented") #todo("double check which tests are actually imlemented")
Arī spēles kods saglabā stabilu testēšanas stratēģiju. Arī spēles kods saglabā stabilu testēšanas stratēģiju.
Dokumentācijas testi tiek rakstīti tieši koda dokumentācijā, kalpojot diviem Dokumentācijas testi tiek rakstīti tieši koda dokumentācijā, kalpojot diviem
mērķiem -- tie pārbauda koda pareizību un vienlaikus sniedz skaidrus lietošanas mērķiem -- tie pārbauda koda pareizību un vienlaikus sniedz skaidrus lietošanas