mirror of
https://github.com/kristoferssolo/Qualification-Thesis.git
synced 2025-10-21 20:10:37 +00:00
feat: add partial functions
This commit is contained in:
parent
df975053a0
commit
a2c0e4499d
@ -7,12 +7,12 @@ typst:
|
|||||||
- Haug
|
- Haug
|
||||||
- Martin
|
- Martin
|
||||||
- Typst Projekta Izstrādātāji
|
- Typst Projekta Izstrādātāji
|
||||||
url: {value: "https://typst.app/", date: 2024-12-02}
|
url: {value: "https://typst.app/", date: 2024-12-20}
|
||||||
hex-grid:
|
hex-grid:
|
||||||
type: Web
|
type: Web
|
||||||
title: Hexagonal Grids
|
title: Hexagonal Grids
|
||||||
author: Red Blob Games
|
author: Red Blob Games
|
||||||
url: {value: "https://www.redblobgames.com/grids/hexagons/", date: 2024-09-15}
|
url: {value: "https://www.redblobgames.com/grids/hexagons/", date: 2024-12-20}
|
||||||
bevy-examples:
|
bevy-examples:
|
||||||
type: Web
|
type: Web
|
||||||
title: Bevy Examples
|
title: Bevy Examples
|
||||||
|
|||||||
351
main.typ
351
main.typ
@ -20,12 +20,12 @@
|
|||||||
)
|
)
|
||||||
#set heading(numbering: none)
|
#set heading(numbering: none)
|
||||||
= Apzīmējumu saraksts
|
= Apzīmējumu saraksts
|
||||||
|
/ Šūna:
|
||||||
|
|
||||||
/ Audio: Skaņas komponentes, kas ietver gan skaņas efektus, gan fona mūziku;
|
/ Audio: Skaņas komponentes, kas ietver gan skaņas efektus, gan fona mūziku;
|
||||||
/ CI/CD: nepārtraukta integrācija un nepārtraukta izvietošana;
|
/ CI/CD: nepārtraukta integrācija un nepārtraukta izvietošana;
|
||||||
/ DPD: datu plūsmas diagramma;
|
/ DPD: datu plūsmas diagramma;
|
||||||
/ ECS: entitāšu komponenšu sistēma (angl. Entity-Component-System)@ecs;
|
/ ECS: entitāšu komponenšu sistēma (angl. Entity-Component-System)@ecs;
|
||||||
/ GitHub#footnote[https://en.wikipedia.org/wiki/GitHub]: izstrādātāju platforma, kas ļauj izstrādātājiem izveidot, glabāt, pārvaldīt un kopīgot savu kodu;
|
|
||||||
/ Interpolācija: starpvērtību atrašana pēc funkcijas doto vērtību virknes;
|
/ Interpolācija: starpvērtību atrašana pēc funkcijas doto vērtību virknes;
|
||||||
/ Jaucējtabula#footnote[https://lv.wikipedia.org/wiki/Jauc%C4%93jtabula]: jeb heštabula (angl. hash table)#footnote[https://en.wikipedia.org/wiki/Hash_table] ir datu struktūra, kas saista identificējošās vērtības ar piesaistītajām vērtībām;
|
/ Jaucējtabula#footnote[https://lv.wikipedia.org/wiki/Jauc%C4%93jtabula]: jeb heštabula (angl. hash table)#footnote[https://en.wikipedia.org/wiki/Hash_table] ir datu struktūra, kas saista identificējošās vērtības ar piesaistītajām vērtībām;
|
||||||
/ Laidiens: Programmatūras versija, kas ir gatava izplatīšanai lietotājiem un satur īpašas funkcijas, uzlabojumus vai labojumus;
|
/ Laidiens: Programmatūras versija, kas ir gatava izplatīšanai lietotājiem un satur īpašas funkcijas, uzlabojumus vai labojumus;
|
||||||
@ -35,8 +35,10 @@
|
|||||||
/ Pirmkods: Cilvēkam lasāmas programmēšanas instrukcijas, kas nosaka programmatūras darbību;
|
/ Pirmkods: Cilvēkam lasāmas programmēšanas instrukcijas, kas nosaka programmatūras darbību;
|
||||||
/ Procedurāla ģenerēšana: datu algoritmiskas izstrādes metode, kurā tiek kombinēts cilvēka radīts saturs un algoritmi, kas apvienoti ar datora ģenerētu nejaušību;
|
/ Procedurāla ģenerēšana: datu algoritmiskas izstrādes metode, kurā tiek kombinēts cilvēka radīts saturs un algoritmi, kas apvienoti ar datora ģenerētu nejaušību;
|
||||||
/ Renderēšana: Process, kurā tiek ģenerēts vizuāla izvade;
|
/ Renderēšana: Process, kurā tiek ģenerēts vizuāla izvade;
|
||||||
|
/ Režģis: Strukturēts šūnu izkārtojums, kas veido spēles pasaules pamata struktūru;
|
||||||
/ Spēlētājs: lietotāja ieraksts vienas virtuālās istabas kontekstā;
|
/ Spēlētājs: lietotāja ieraksts vienas virtuālās istabas kontekstā;
|
||||||
/ Sēkla: Skaitliska vērtība, ko izmanto nejaušo skaitļu ģeneratora inicializēšanai;
|
/ Sēkla: Skaitliska vērtība, ko izmanto nejaušo skaitļu ģeneratora inicializēšanai;
|
||||||
|
/ Šūna: Sešstūraina režģa viena pozīcija, kas definē telpu, kuru var aizņemt viena plāksne;
|
||||||
|
|
||||||
= Ievads
|
= Ievads
|
||||||
== Nolūks
|
== Nolūks
|
||||||
@ -49,7 +51,7 @@ procedurālu labirintu ģenerēšanu, spēlētāju navigācijas sistēmu, papild
|
|||||||
integrāciju un vertikālās progresijas mehāniku, vienlaikus ievērojot minimālisma
|
integrāciju un vertikālās progresijas mehāniku, vienlaikus ievērojot minimālisma
|
||||||
dizaina filozofiju.
|
dizaina filozofiju.
|
||||||
|
|
||||||
// Spēles pamatā ir sešstūra formas plāksnes, kas, savukārt, veido sešstūra
|
// Spēles pamatā ir sešstūra formas šūnas, kas, savukārt, veido sešstūra
|
||||||
// formas labirintus, kuri rada atšķirīgu vizuālo un navigācijas izaicinājumu.
|
// formas labirintus, kuri rada atšķirīgu vizuālo un navigācijas izaicinājumu.
|
||||||
// Spēlētāju uzdevums ir pārvietoties pa šiem labirintiem, lai sasniegtu katra
|
// Spēlētāju uzdevums ir pārvietoties pa šiem labirintiem, lai sasniegtu katra
|
||||||
// līmeņa beigas. Spēlētājiem progresējot, tie sastopas ar arvien sarežģītākiem
|
// līmeņa beigas. Spēlētājiem progresējot, tie sastopas ar arvien sarežģītākiem
|
||||||
@ -634,17 +636,19 @@ un nākamo stāvu, reaģējot uz "TransitionFloor" notikumu (sk. @tbl:events-flo
|
|||||||
|
|
||||||
=== Labirinta ģenerēšanas modulis
|
=== Labirinta ģenerēšanas modulis
|
||||||
|
|
||||||
Apakšnodaļa ietver labirinta moduļa funkcijas. Moduļa funkcionalitāte ir
|
Moduļa funkcionalitāte ir izmantota sešstūraina labirinta ģenerēšanai,
|
||||||
izmantota sešstūraina labirinta ģenerēšanai.
|
balstoties uz Amit Patel's "Hexagonal Grids"
|
||||||
Moduļa funkciju datu
|
rakstu @hex-grid, kas jau ir
|
||||||
plūsmas ir parādītas 2. līmeņa datu plūsmas diagrammā (sk. @fig:dpd-2-hexlab)
|
kļuvis par _de facto_ standartu sešstūrainu režģu matemātikas un algoritmu
|
||||||
Labirinta būvēšanas funkcija ir aprakstītas atsevišķā tabulā (sk. @tbl:hexlab-F01)
|
implementācijai izstrādē.
|
||||||
|
Moduļa funkciju datu plūsmas ir parādītas 2. līmeņa datu plūsmas diagrammā (sk. @fig:dpd-2-hexlab).
|
||||||
|
Labirinta būvēšanas funkcija ir aprakstītas atsevišķā tabulā (sk. @tbl:hexlab-F01).
|
||||||
|
|
||||||
Modularitātes un atkārtotas lietojamības apsvērumu dēļ, labirinta ģenerēšanas
|
Modularitātes un atkārtotas lietojamības apsvērumu dēļ, labirinta ģenerēšanas
|
||||||
funkcionalitāte ir izveidota kā ārēja bibliotēka
|
funkcionalitāte ir izveidota kā ārēja bibliotēka
|
||||||
"hexlib".#footnote[https://crates.io/crates/hexlab]<hexlab> Šis lēmums
|
"hexlib".#footnote[https://crates.io/crates/hexlab]<hexlab>
|
||||||
ļauj labirinta ģenerēšanas loģiku atkārtoti izmantot dažādos projektos un
|
Šis lēmums ļauj labirinta ģenerēšanas loģiku atkārtoti izmantot dažādos
|
||||||
lietojumprogrammās, veicinot atkārtotu koda izmantošanu.
|
projektos un lietojumprogrammās, veicinot atkārtotu koda izmantošanu.
|
||||||
Iekapsulējot labirinta ģenerēšanu atsevišķā bibliotēkā, to ir vieglāk pārvaldīt
|
Iekapsulējot labirinta ģenerēšanu atsevišķā bibliotēkā, to ir vieglāk pārvaldīt
|
||||||
un atjaunināt neatkarīgi no galvenās lietojumprogrammas, nodrošinot, ka
|
un atjaunināt neatkarīgi no galvenās lietojumprogrammas, nodrošinot, ka
|
||||||
labirinta ģenerēšanas algoritma uzlabojumus vai izmaiņas var veikt, neietekmējot
|
labirinta ģenerēšanas algoritma uzlabojumus vai izmaiņas var veikt, neietekmējot
|
||||||
@ -756,9 +760,9 @@ saglabājot to pašu stāva numuru un pozīciju telpā nemainot entitātes ID.
|
|||||||
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.
|
||||||
+ Izveido jaunas entitātes, kas pārstāv labirinta plāksnes, kā bērnu
|
+ Izveido jaunas entitātes, kas pārstāv labirinta šūnas, kā bērnu
|
||||||
elementus labirinta entitātei.
|
elementus labirinta entitātei.
|
||||||
+ Katrai labirinta plāksnei atbilstoši labirinta konfigurācijai, izveido
|
+ Katrai labirinta šūnai atbilstoši labirinta konfigurācijai, izveido
|
||||||
sienas bērnu entitātes.
|
sienas bērnu entitātes.
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -784,9 +788,9 @@ saglabājot to pašu stāva numuru un pozīciju telpā nemainot entitātes ID.
|
|||||||
+ Ja neeksistē, parāda 1. paziņojumu un iziet no sistēmas.
|
+ Ja neeksistē, parāda 1. paziņojumu un iziet no sistēmas.
|
||||||
+ Ģenerē jaunu labirintu balstoties uz doto konfigurāciju.
|
+ Ģenerē jaunu labirintu balstoties uz doto konfigurāciju.
|
||||||
+ Izdzēš visus labirinta entitātes pēcnācēju entitātes.
|
+ 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
|
+ Izveido jaunas entitātes, kas pārstāv labirinta šūnas, kā bērnu
|
||||||
elementus labirinta entitātei.
|
elementus labirinta entitātei.
|
||||||
+ Katrai labirinta plāksnei atbilstoši labirinta konfigurācijai, izveido
|
+ Katrai labirinta šūnai atbilstoši labirinta konfigurācijai, izveido
|
||||||
sienas bērnu entitātes.
|
sienas bērnu entitātes.
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -927,7 +931,7 @@ punktiem, funkcija izsauc atbilstošu pārejas notikumu.
|
|||||||
#function-table(
|
#function-table(
|
||||||
"Spēlētāja ievades apstrāde",
|
"Spēlētāja ievades apstrāde",
|
||||||
"SPMF02",
|
"SPMF02",
|
||||||
"Apstrādā spēlētāja tastatūras ievadi un aprēķina nākamo kustības plāksi.",
|
"Apstrādā spēlētāja tastatūras ievadi un aprēķina nākamo kustības šūnu.",
|
||||||
[
|
[
|
||||||
+ Tastatūras ievade.
|
+ Tastatūras ievade.
|
||||||
+ Pašreizējā pozīcija.
|
+ Pašreizējā pozīcija.
|
||||||
@ -942,14 +946,14 @@ punktiem, funkcija izsauc atbilstošu pārejas notikumu.
|
|||||||
+ Aprēķina nākamo pozīciju.
|
+ Aprēķina nākamo pozīciju.
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
+ Kustības mērķa plāksnes pozīcija.
|
+ Kustības mērķa šūnas pozīcija.
|
||||||
],
|
],
|
||||||
) <player-F02>
|
) <player-F02>
|
||||||
|
|
||||||
#function-table(
|
#function-table(
|
||||||
"Spēlētāja kustība",
|
"Spēlētāja kustība",
|
||||||
"SPMF03",
|
"SPMF03",
|
||||||
"Atjaunina spēlētāja pozīciju, veicot plūstošu pārvietošanos uz mērķa plāksnes pozīciju.",
|
"Atjaunina spēlētāja pozīciju, veicot plūstošu pārvietošanos uz mērķa šūnas pozīciju.",
|
||||||
[
|
[
|
||||||
+ Kustības mērķis.
|
+ Kustības mērķis.
|
||||||
+ Kustības ātrums.
|
+ Kustības ātrums.
|
||||||
@ -1301,7 +1305,7 @@ labirinta izveidi un uzturēšanu.
|
|||||||
"Galvenais labirinta marķieris",
|
"Galvenais labirinta marķieris",
|
||||||
"Identificē labirinta entitāti un pieprasa nepieciešamās atkarības.",
|
"Identificē labirinta entitāti un pieprasa nepieciešamās atkarības.",
|
||||||
`Tile`,
|
`Tile`,
|
||||||
"Apzīmē labirinta sešstūra plāksnes",
|
"Apzīmē labirinta sešstūra šūnu",
|
||||||
"Identificē labirinta vietas, pa kurām var staigāt.",
|
"Identificē labirinta vietas, pa kurām var staigāt.",
|
||||||
`Wall`,
|
`Wall`,
|
||||||
"Apzīmē labirinta sienas",
|
"Apzīmē labirinta sienas",
|
||||||
@ -1421,7 +1425,7 @@ sistēma.
|
|||||||
Atšķirībā no komponentiem, kas ir piesaistīti konkrētām entitātēm, resursi
|
Atšķirībā no komponentiem, kas ir piesaistīti konkrētām entitātēm, resursi
|
||||||
nodrošina spēles mēroga datus un konfigurāciju.
|
nodrošina spēles mēroga datus un konfigurāciju.
|
||||||
Tie ir īpaši noderīgi kopīgu stāvokļu un iestatījumu pārvaldībai, kas var
|
Tie ir īpaši noderīgi kopīgu stāvokļu un iestatījumu pārvaldībai, kas var
|
||||||
ietekmē vairākas sistēmas@bevy-cheatbook[nod. ~14.6].
|
ietekmē vairākas sistēmas @bevy-cheatbook[nod. ~14.6].
|
||||||
Spēle izmanto vairākus resursus globālās konfigurācijas un stāvokļa pārvaldībai
|
Spēle izmanto vairākus resursus globālās konfigurācijas un stāvokļa pārvaldībai
|
||||||
(sk. @tbl:resources)
|
(sk. @tbl:resources)
|
||||||
|
|
||||||
@ -1443,173 +1447,222 @@ Spēle izmanto vairākus resursus globālās konfigurācijas un stāvokļa pārv
|
|||||||
|
|
||||||
== Daļējs funkciju projektējums
|
== Daļējs funkciju projektējums
|
||||||
|
|
||||||
#todo("pievienot funkciju projektējumu +diagrammas")
|
Labirinta ģenerēšanas process ir realizēts, izmantojot meklēšanas dziļumā
|
||||||
|
algoritmu (angl. Depth-First Search, DFS)
|
||||||
|
#footnote[https://en.wikipedia.org/wiki/Depth-first_search], kas ir viens no
|
||||||
|
populārākajiem labirintu ģenerēšanas algoritmiem @maze-generation.
|
||||||
|
Labirinta ģenerēšanas process ir attēlots aktivitāšu diagrammā (sk.
|
||||||
|
@fig:hexlab-activity-diagram), kas parāda algoritma galvenos soļus, sākot ar
|
||||||
|
labirinta būvētāja inicializāciju un beidzot ar gatava labirinta atgriešanu.
|
||||||
|
|
||||||
#figure(
|
DFS algoritma implementācija (sk. @fig:dfs-diagram) izmanto
|
||||||
caption: "Stāva pārejas diagramma",
|
rekursīvu pieeju, kur katrs rekursijas solis apstrādā vienu labirinta šūnu.
|
||||||
kind: image,
|
Algoritms sākas ar sākotnējās pozīcijas atzīmēšanu kā apmeklētu un turpina ar
|
||||||
diagram({
|
nejaušu, neapmeklētu kaimiņu izvēli.
|
||||||
|
Kad nejaušs kaimiņš ir izvēlēts, algoritms noņem sienu starp pašreizējo un
|
||||||
|
izvēlēto šūnu, tad rekursīvi turpina procesu no jaunās pozīcijas.
|
||||||
|
Šī pieeja nodrošina, ka izveidotais labirints ir pilnībā savienots un katrai
|
||||||
|
šūnai var piekļūt no jebkuras citas šūnas.
|
||||||
|
|
||||||
terminal-node((0, 0))
|
Algoritma īpatnība ir tāda, ka tas veido labirintus ar zemu sazarošanās faktoru
|
||||||
std-edge()
|
un gariem koridoriem, jo tas izpēta katru zaru pēc iespējas tālāk, pirms
|
||||||
|
atgriežas un mēģina citu ceļu.
|
||||||
|
|
||||||
action-node((0, 1), [Pārbaudīt stāva\ pārejas notikumu])
|
|
||||||
std-edge()
|
|
||||||
|
|
||||||
decision-node((0, 2), [Vai stāvi\ kustās?])
|
|
||||||
std-edge("l,d", [jā])
|
|
||||||
std-edge("r,d", [nē])
|
|
||||||
|
|
||||||
terminal-node((-1, 3), extrude: (0, 3))
|
|
||||||
|
|
||||||
action-node((1, 3), [Iegūt pašreizējo\ stāvu])
|
|
||||||
std-edge()
|
|
||||||
|
|
||||||
decision-node((1, 4), [Stāva\ notikuma\ tips?])
|
|
||||||
std-edge("d", [Pacelties])
|
|
||||||
std-edge("r,dd", [Nolaisties])
|
|
||||||
|
|
||||||
decision-node((1, 5), [Vai nākamais\ stāvs eksistē?])
|
|
||||||
std-edge("d", [jā])
|
|
||||||
std-edge("l,d", [nē])
|
|
||||||
|
|
||||||
action-node((0, 6), [Izsaukt jauna stāva\ izveides notikumu])
|
|
||||||
std-edge("dd,r")
|
|
||||||
|
|
||||||
action-node((1, 6), [Aprēķināt katra stāva\ jaunās $Y$ koordinātas])
|
|
||||||
std-edge("d")
|
|
||||||
|
|
||||||
action-node((1, 7), [Pārvieto visus stāvus\ uz jaunajām $Y$ koordinātām])
|
|
||||||
std-edge("d")
|
|
||||||
|
|
||||||
decision-node((2, 6), [Pašreizējais\ stāvs $== 1$?])
|
|
||||||
std-edge("dd,l", [jā])
|
|
||||||
std-edge("l", [nē])
|
|
||||||
|
|
||||||
terminal-node((1, 8), extrude: (0, 3))
|
|
||||||
}),
|
|
||||||
) <floor-transition-diagram>
|
|
||||||
|
|
||||||
#figure(
|
#figure(
|
||||||
caption: "Labirinta ģenerēšanas pārejas diagramma",
|
caption: "Labirinta ģenerēšanas pārejas diagramma",
|
||||||
kind: image,
|
kind: image,
|
||||||
diagram(
|
scale(
|
||||||
spacing: (0em, 3em),
|
75%,
|
||||||
{
|
reflow: true,
|
||||||
|
diagram(
|
||||||
|
spacing: (0em, 3em),
|
||||||
|
{
|
||||||
|
|
||||||
terminal-node((0, 0))
|
terminal-node((0, 0))
|
||||||
std-edge()
|
std-edge()
|
||||||
|
|
||||||
action-node((0, 1), [Izveido labirinta būvētāju])
|
action-node((0, 1), [Izveido labirinta būvētāju])
|
||||||
std-edge()
|
std-edge()
|
||||||
|
|
||||||
decision-node((0, 2), [Vai rādius\ ir norādīts?])
|
decision-node((0, 2), [Vai rādius\ ir norādīts?])
|
||||||
std-edge("ll,d", [nē])
|
std-edge("ll,d", [nē])
|
||||||
std-edge("d", [jā])
|
std-edge("d", [jā])
|
||||||
|
|
||||||
action-node((-2, 3), [Nav rādiusa kļūda])
|
action-node((-2, 3), [Nav rādiusa kļūda])
|
||||||
std-edge()
|
std-edge()
|
||||||
terminal-node((-2, 4), extrude: (0, 3))
|
terminal-node((-2, 4), extrude: (0, 3))
|
||||||
|
|
||||||
action-node((0, 3), [Izveido labirinta glabātuvi])
|
action-node((0, 3), [Izveido labirinta glabātuvi])
|
||||||
std-edge()
|
std-edge()
|
||||||
|
|
||||||
decision-node((0, 4), [Starta pozīcija\ ir norādīta?])
|
decision-node((0, 4), [Starta pozīcija\ ir norādīta?])
|
||||||
std-edge("l,d", [jā])
|
std-edge("l,d", [jā])
|
||||||
std-edge("r,d", [nē])
|
std-edge("r,d", [nē])
|
||||||
|
|
||||||
decision-node((1, 5), [Izmanto noklusējuma\ sākuma pozīciju\ (0, 0)])
|
decision-node((1, 5), [Izmanto noklusējuma\ sākuma pozīciju\ (0, 0)])
|
||||||
std-edge("d,l")
|
std-edge("d,l")
|
||||||
|
|
||||||
|
|
||||||
decision-node((-1, 5), [Pozīcija\ ir derīga?])
|
decision-node((-1, 5), [Pozīcija\ ir derīga?])
|
||||||
std-edge("l,d", [nē])
|
std-edge("l,d", [nē])
|
||||||
std-edge("r,d", [jā])
|
std-edge("r,d", [jā])
|
||||||
|
|
||||||
action-node((-2, 6), [Nepareiza starta pozīcija kļūda])
|
action-node((-2, 6), [Nepareiza starta pozīcija kļūda])
|
||||||
std-edge()
|
std-edge()
|
||||||
terminal-node((-2, 7), extrude: (0, 3))
|
terminal-node((-2, 7), extrude: (0, 3))
|
||||||
|
|
||||||
action-node(
|
action-node(
|
||||||
(0, 6),
|
(0, 6),
|
||||||
[
|
[
|
||||||
#place(
|
#place(
|
||||||
top + right,
|
top + right,
|
||||||
image("assets/images/fork.svg"),
|
image("assets/images/fork.svg"),
|
||||||
)
|
)
|
||||||
\
|
\
|
||||||
\
|
\
|
||||||
Dziļuma meklēšanas\
|
Dziļuma meklēšanas\
|
||||||
labirinta ģenerēšanas\
|
labirinta ģenerēšanas\
|
||||||
algoritms
|
algoritms
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
std-edge()
|
std-edge()
|
||||||
|
|
||||||
action-node((0, 7), [Atgriež izveidotu labirintu])
|
action-node((0, 7), [Atgriež izveidotu labirintu])
|
||||||
std-edge()
|
std-edge()
|
||||||
|
|
||||||
terminal-node((0, 8), extrude: (0, 3))
|
terminal-node((0, 8), extrude: (0, 3))
|
||||||
},
|
},
|
||||||
|
),
|
||||||
),
|
),
|
||||||
) <hexlab-activity-diagram>
|
) <hexlab-activity-diagram>
|
||||||
|
|
||||||
#figure(
|
#figure(
|
||||||
caption: "Meklēšanas dziļumā labirinta ģenerēšanas algoritms (apakšaktivitāte)",
|
caption: "Meklēšanas dziļumā labirinta ģenerēšanas algoritms (apakšaktivitāte)",
|
||||||
kind: image,
|
kind: image,
|
||||||
diagram(
|
scale(
|
||||||
spacing: (0em, 3em),
|
75%,
|
||||||
{
|
reflow: true,
|
||||||
|
diagram(
|
||||||
|
spacing: (0em, 3em),
|
||||||
|
{
|
||||||
|
terminal-node((0, 0))
|
||||||
|
std-edge()
|
||||||
|
|
||||||
|
action-node((0, 1), [Atzīmē pašreizējo pozīciju\ kā apmeklētu])
|
||||||
|
std-edge()
|
||||||
|
|
||||||
|
decision-node((0, 2), [Vai eksistē\ neapmeklēti\ kaimiņi?])
|
||||||
|
std-edge("l,d", [jā])
|
||||||
|
std-edge("r,d", [nē])
|
||||||
|
|
||||||
|
action-node((-1, 3), [Nejauši izvēlas\ neapmeklētu kaimiņu])
|
||||||
|
std-edge()
|
||||||
|
|
||||||
|
decision-node((-1, 4), [Kaimiņš eksistē\ un ir neapmeklēts?])
|
||||||
|
std-edge("l,d", [jā])
|
||||||
|
std-edge("d", [nē])
|
||||||
|
|
||||||
|
action-node((-1, 5), [Pārbauda nākamo\ virzienu])
|
||||||
|
std-edge("r,uuu")
|
||||||
|
|
||||||
|
action-node(
|
||||||
|
(-2, 5),
|
||||||
|
[Noņem sienas starp pašreizējo\ un kaimiņa pozīcijām],
|
||||||
|
)
|
||||||
|
std-edge()
|
||||||
|
|
||||||
|
action-node((-2, 6), [Izpilda doto algoritmu\ kaimiņa pozīcijai])
|
||||||
|
std-edge()
|
||||||
|
|
||||||
|
action-node((-2, 7), [Atgriežas uz\ iepriekšējo pozīciju])
|
||||||
|
std-edge()
|
||||||
|
|
||||||
|
action-node((-2, 8), [Pārvietojas uz šī\ kaimiņa pozīciju])
|
||||||
|
std-edge("rr,uuuuuu")
|
||||||
|
|
||||||
|
terminal-node((1, 3), extrude: (0, 3))
|
||||||
|
node(
|
||||||
|
snap: false,
|
||||||
|
stroke: black,
|
||||||
|
inset: 1em,
|
||||||
|
enclose: (
|
||||||
|
(0, 0),
|
||||||
|
(1, 3),
|
||||||
|
(-2, 8),
|
||||||
|
(-2, 5),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
) <dfs-diagram>
|
||||||
|
|
||||||
|
#indent-par[
|
||||||
|
Stāva kustības aktivitāšu diagramma (sk. @fig:floor-transition-diagram) attēlo
|
||||||
|
divus procesus stāvu pārvaldībai.
|
||||||
|
Kreisajā pusē ir attēlota stāvu kustības loģika, kas sākas ar kustības
|
||||||
|
stāvokļa pārbaudi.
|
||||||
|
Ja kāds stāvs kustās, sistēma aprēķina kustības attālumu, balstoties uz ātrumu
|
||||||
|
un laika deltu, un atjaunina stāva $Y$ pozīciju. Šis process turpinās, līdz
|
||||||
|
tiek sasniegts mērķis, pēc kā tiek noņemta stāva galamērķa komponente.
|
||||||
|
Labajā pusē ir attēlota stāvu pārejas loģika, kas tiek izpildīta, kad neviens
|
||||||
|
stāvs nekustās.
|
||||||
|
Šī daļa aprēķina jaunās $Y$ koordinātes visiem stāviem, pievieno tiem
|
||||||
|
galamērķa komponentes un atjaunina pašreizējā un nākamā stāva marķierus.
|
||||||
|
]
|
||||||
|
#figure(
|
||||||
|
caption: "Stāva kustības sistēma",
|
||||||
|
kind: image,
|
||||||
|
scale(
|
||||||
|
75%,
|
||||||
|
reflow: true,
|
||||||
|
diagram({
|
||||||
terminal-node((0, 0))
|
terminal-node((0, 0))
|
||||||
std-edge()
|
std-edge()
|
||||||
|
|
||||||
action-node((0, 1), [Atzīmē pašreizējo pozīciju\ kā apmeklētu])
|
action-node((0, 1), [Pārbauda stāvu\ kustību])
|
||||||
std-edge()
|
std-edge()
|
||||||
|
|
||||||
decision-node((0, 2), [Vai eksistē\ neapmeklēti\ kaimiņi?])
|
decision-node((0, 2), [Vai kāds stāvs\ kustās?])
|
||||||
std-edge("l,d", [jā])
|
std-edge("l,d", [jā])
|
||||||
std-edge("r,d", [nē])
|
std-edge("r,d", [nē])
|
||||||
|
|
||||||
action-node((-1, 3), [Nejauši izvēlas\ neapmeklētu kaimiņu])
|
|
||||||
std-edge()
|
|
||||||
|
|
||||||
decision-node((-1, 4), [Kaimiņš eksistē\ un ir neapmeklēts?])
|
|
||||||
std-edge("l,d", [jā])
|
|
||||||
std-edge("d", [nē])
|
|
||||||
|
|
||||||
action-node((-1, 5), [Pārbauda nākamo\ virzienu])
|
|
||||||
std-edge("r,uuu")
|
|
||||||
|
|
||||||
action-node(
|
action-node(
|
||||||
(-2, 5),
|
(-1, 3),
|
||||||
[Noņem sienas starp pašreizējo\ un kaimiņa pozīcijām],
|
[Aprēķināt kustības attālumu\ ($"ātrums" times Delta"laiks"$)],
|
||||||
)
|
)
|
||||||
std-edge()
|
std-edge()
|
||||||
|
|
||||||
action-node((-2, 6), [Izpilda doto algoritmu\ kaimiņa pozīcijai])
|
action-node((-1, 4), [Atjaunina stāva $Y$ pozīciju])
|
||||||
std-edge()
|
std-edge()
|
||||||
|
|
||||||
action-node((-2, 7), [Atgriežas uz\ iepriekšējo pozīciju])
|
decision-node((-1, 5), [Vai sasniegts\ mērķis?])
|
||||||
|
std-edge("ld", [nē])
|
||||||
|
std-edge("d", [jā])
|
||||||
|
|
||||||
|
action-node((-2, 6), [Turpināt kustību])
|
||||||
|
std-edge("uu,r")
|
||||||
|
|
||||||
|
action-node((-1, 6), [Noņemt stāva\ galamērķa komponenti])
|
||||||
std-edge()
|
std-edge()
|
||||||
|
|
||||||
action-node((-2, 8), [Pārvietojas uz šī\ kaimiņa pozīciju])
|
terminal-node((-1, 7))
|
||||||
std-edge("rr,uuuuuu")
|
|
||||||
|
|
||||||
terminal-node((1, 3), extrude: (0, 3))
|
|
||||||
node(
|
action-node((1, 3), [Aprēķina jaunās $Y$\ koordinātes visiem stāviem])
|
||||||
snap: false,
|
std-edge()
|
||||||
stroke: black,
|
|
||||||
inset: 1em,
|
action-node((1, 4), [Pievienot stāva galamērķa\ komponenti katram stāvam])
|
||||||
enclose: (
|
std-edge()
|
||||||
(0, 0),
|
|
||||||
(1, 3),
|
action-node((1, 5), [Atjaunina pašreizējā un\ nākamā stāvu marķierus])
|
||||||
(-2, 8),
|
std-edge("l,uu,l")
|
||||||
(-2, 5),
|
|
||||||
),
|
}),
|
||||||
)
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
) <dfs-diagram>
|
) <floor-transition-diagram>
|
||||||
|
|
||||||
|
|
||||||
=== Plākšņu pārvaldas sistēma
|
=== Plākšņu pārvaldas sistēma
|
||||||
|
|
||||||
@ -1623,8 +1676,8 @@ projekta lietojuma gadījumam sekojošu iemeslu dēļ:
|
|||||||
procedurāli ģenerēti labirinti, tāpēc šī pieeja nav īsti piemērota.
|
procedurāli ģenerēti labirinti, tāpēc šī pieeja nav īsti piemērota.
|
||||||
+ Elastības ierobežojumi: bibliotēkas plākšņu datu struktūra nav viegli
|
+ Elastības ierobežojumi: bibliotēkas plākšņu datu struktūra nav viegli
|
||||||
pielāgojama nepieciešamajai datu struktūrai, kurai ir nepieciešama
|
pielāgojama nepieciešamajai datu struktūrai, kurai ir nepieciešama
|
||||||
sarežģītākām telpiskām attiecībām starp plāksnēm.
|
sarežģītākām telpiskām attiecībām starp šūnām.
|
||||||
+ Prasības attiecībā uz sienu veidošanu: katrai sistēmas labirinta plāksnei
|
+ Prasības attiecībā uz sienu veidošanu: katrai sistēmas labirinta šūnai
|
||||||
var būt 0-6 sienas, kas tiek ģenerētas nejauši. Šādu dinamisku sienu ģenerēšanas
|
var būt 0-6 sienas, kas tiek ģenerētas nejauši. Šādu dinamisku sienu ģenerēšanas
|
||||||
līmeni nav viegli sasniegt izmantojot "`bevy_ecs_tilemap`".
|
līmeni nav viegli sasniegt izmantojot "`bevy_ecs_tilemap`".
|
||||||
|
|
||||||
@ -1720,10 +1773,14 @@ funkcionalitāti pēc katras koda izmaiņas.
|
|||||||
|
|
||||||
= Programmas projekta organizācija
|
= Programmas projekta organizācija
|
||||||
|
|
||||||
Kvalifikācijas darba prasības paredz, ka programmatūru un dokumentāciju autors
|
Kvalifikācijas darba izstrāde ir individuāls process, kur autors uzņemas pilnu
|
||||||
veido patstāvīgi, vadoties pēc darba vadītāja norādījumiem.
|
atbildību par programmatūras izveidi un dokumentāciju.
|
||||||
|
|
||||||
#todo("uzrakstīt projekta organizāciju")
|
Individuālā darba pieeja ļauj izvairīties no daudzām tipiskām projektu vadības
|
||||||
|
problēmām.
|
||||||
|
Tā kā nav nepieciešama koordinācija starp vairākiem izstrādātājiem, lēmumu
|
||||||
|
pieņemšana ir tiešāka un ātrāka.
|
||||||
|
Tas ir īpaši svarīgi, ņemot vērā kvalifikācijas darba ierobežoto laika periodu.
|
||||||
|
|
||||||
== Kvalitātes nodrošināšana
|
== Kvalitātes nodrošināšana
|
||||||
Augstas koda kvalitātes nodrošināšana ir jebkura projekta būtisks aspekts.
|
Augstas koda kvalitātes nodrošināšana ir jebkura projekta būtisks aspekts.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user