From df975053a04c27196b852fe6ba23da7d8781ee59 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Thu, 2 Jan 2025 15:38:42 +0200 Subject: [PATCH] feat: add activity diagrams --- assets/images/fork.svg | 3 + diagrams.typ | 1 + main.typ | 266 +++++++++++++++++++++++------------------ 3 files changed, 153 insertions(+), 117 deletions(-) create mode 100644 assets/images/fork.svg diff --git a/assets/images/fork.svg b/assets/images/fork.svg new file mode 100644 index 0000000..3d881d5 --- /dev/null +++ b/assets/images/fork.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/diagrams.typ b/diagrams.typ index 9368a70..98f3c56 100644 --- a/diagrams.typ +++ b/diagrams.typ @@ -34,6 +34,7 @@ text, corner-radius: 4pt, stroke: default-node-stroke, + shape: rect, ) } diff --git a/main.typ b/main.typ index 22fd366..08eee45 100644 --- a/main.typ +++ b/main.typ @@ -69,10 +69,12 @@ nodrošina, ka: - Labirinta sarežģītību var dinamiski pielāgot spēlētājam progresējot. - Uzglabāšanas prasības tiek samazinātas līdz minimumam, ģenerējot labirintus reāllaikā. -Spēlētāju uzdevums ir pārvietoties pa šiem procesuāli ģenerētajiem labirintiem, -lai sasniegtu katra līmeņa beigas. Turpinot progresēt, spēlētāji saskaras ar -arvien sarežģītākiem labirintiem, kuros nepieciešama stratēģiskā domāšana, -izpēte un papildu prasmju izmantošana. +#indent-par[ + Spēlētāju uzdevums ir pārvietoties pa šiem procesuāli ģenerētajiem labirintiem, + lai sasniegtu katra līmeņa beigas. Turpinot progresēt, spēlētāji saskaras ar + arvien sarežģītākiem labirintiem, kuros nepieciešama stratēģiskā domāšana, + izpēte un papildu prasmju izmantošana. +] Spēlētājam progresējot, tie sastopas ar dažādiem uzlabojumiem un papildspējām, kas stratēģiski izvietoti labirintos. Šī funkcija padziļina spēlēšanas @@ -1446,139 +1448,168 @@ Spēle izmanto vairākus resursus globālās konfigurācijas un stāvokļa pārv #figure( caption: "Stāva pārejas diagramma", kind: image, - diagram( - terminal-node((0, 0)), - std-edge(), + diagram({ - action-node((0, 1), [Pārbaudīt stāva\ pārejas notikumu]), - std-edge(), + terminal-node((0, 0)) + std-edge() - decision-node((0, 2), [Vai stāvi\ kustās?]), - std-edge("l,d", [jā]), - std-edge("r,d", [nē]), + action-node((0, 1), [Pārbaudīt stāva\ pārejas notikumu]) + std-edge() - terminal-node((-1, 3), extrude: (0, 3)), + decision-node((0, 2), [Vai stāvi\ kustās?]) + std-edge("l,d", [jā]) + std-edge("r,d", [nē]) - action-node((1, 3), [Iegūt pašreizējo\ stāvu]), - std-edge(), + terminal-node((-1, 3), extrude: (0, 3)) - decision-node((1, 4), [Stāva\ notikuma\ tips?]), - std-edge("d", [Pacelties]), - std-edge("r,d,d", [Nolaisties]), + action-node((1, 3), [Iegūt pašreizējo\ stāvu]) + std-edge() - decision-node((1, 5), [Vai nākamais\ stāvs eksistē?]), - std-edge("d", [jā]), - std-edge("l,d", [nē]), + decision-node((1, 4), [Stāva\ notikuma\ tips?]) + std-edge("d", [Pacelties]) + std-edge("r,dd", [Nolaisties]) - action-node((0, 6), [Izsaukt jauna stāva\ izveides notikumu]), - std-edge("d,d,r"), + decision-node((1, 5), [Vai nākamais\ stāvs eksistē?]) + std-edge("d", [jā]) + std-edge("l,d", [nē]) - action-node((1, 6), [Aprēķināt katra stāva\ jaunās $Y$ koordinātas]), - std-edge("d"), + action-node((0, 6), [Izsaukt jauna stāva\ izveides notikumu]) + std-edge("dd,r") - action-node((1, 7), [Pārvieto visus stāvus\ uz jaunajām $Y$ koordinātām]), - std-edge("d"), + action-node((1, 6), [Aprēķināt katra stāva\ jaunās $Y$ koordinātas]) + std-edge("d") - decision-node((2, 6), [Pašreizējais\ stāvs $== 1$?]), - std-edge("d,d,l", [jā]), - std-edge("l", [nē]), + action-node((1, 7), [Pārvieto visus stāvus\ uz jaunajām $Y$ koordinātām]) + std-edge("d") - terminal-node((1, 8), extrude: (0, 3)), - ), + 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)) + }), ) #figure( - caption: "Spēlētaja pārejas diagramma", + caption: "Labirinta ģenerēšanas pārejas diagramma", kind: image, diagram( - terminal-node((0, 0)), - std-edge(), + spacing: (0em, 3em), + { - action-node((0, 1), [Pārbaudīt stāva\ pārejas notikumu]), - std-edge(), + terminal-node((0, 0)) + std-edge() - decision-node((0, 2), [Vai stāvi\ kustās?]), - std-edge("l,d", [jā]), - std-edge("r,d", [nē]), + action-node((0, 1), [Izveido labirinta būvētāju]) + std-edge() - terminal-node((-1, 3), extrude: (0, 3)), + decision-node((0, 2), [Vai rādius\ ir norādīts?]) + std-edge("ll,d", [nē]) + std-edge("d", [jā]) - action-node((1, 3), [Iegūt pašreizējo\ stāvu]), - std-edge(), + action-node((-2, 3), [Nav rādiusa kļūda]) + std-edge() + terminal-node((-2, 4), extrude: (0, 3)) - decision-node((1, 4), [Stāva\ notikuma\ tips?]), - std-edge("d", [Pacelties]), - std-edge("r,d,d", [Nolaisties]), + action-node((0, 3), [Izveido labirinta glabātuvi]) + std-edge() - decision-node((1, 5), [Vai nākamais\ stāvs eksistē?]), - std-edge("d", [jā]), - std-edge("l,d", [nē]), + decision-node((0, 4), [Starta pozīcija\ ir norādīta?]) + std-edge("l,d", [jā]) + std-edge("r,d", [nē]) - action-node((0, 6), [Izsaukt jauna stāva\ izveides notikumu]), - std-edge("d,d,r"), + decision-node((1, 5), [Izmanto noklusējuma\ sākuma pozīciju\ (0, 0)]) + std-edge("d,l") - 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((-1, 5), [Pozīcija\ ir derīga?]) + std-edge("l,d", [nē]) + std-edge("r,d", [jā]) - decision-node((2, 6), [Pašreizējais\ stāvs $== 1$?]), - std-edge("d,d,l", [jā]), - std-edge("l", [nē]), + action-node((-2, 6), [Nepareiza starta pozīcija kļūda]) + std-edge() + terminal-node((-2, 7), extrude: (0, 3)) - terminal-node((1, 8), extrude: (0, 3)), + action-node( + (0, 6), + [ + #place( + top + right, + image("assets/images/fork.svg"), + ) + \ + \ + Dziļuma meklēšanas\ + labirinta ģenerēšanas\ + algoritms + ], + ) + std-edge() + + action-node((0, 7), [Atgriež izveidotu labirintu]) + std-edge() + + terminal-node((0, 8), extrude: (0, 3)) + }, ), -) +) +#figure( + caption: "Meklēšanas dziļumā labirinta ģenerēšanas algoritms (apakšaktivitāte)", + kind: image, + diagram( + spacing: (0em, 3em), + { + terminal-node((0, 0)) + std-edge() -// ```pintora -// activityDiagram -// start -// partition "Ievades apstrāde" { -// :Pārbaudīt spēlētāja ievadi; -// if (Vai ir mērķpozīcija?) then (jā) -// :Skip Movement; -// else (nē) -// :Saņemt virzienu no ievades; -// if (Vai ir pareizs virziens?) then (jā) -// if (Vai ir siena virzienā?) then (jā) -// :Skip Movement; -// else (nē) -// :Iestata mērķpozīciju; -// endif -// else (nē) -// :Skip Movement; -// endif -// endif -// } -// -// partition "Movement Processing" { -// :Calculate Movement Speed; -// if (Has Target?) then (yes) -// :Calculate Target Position; -// if (Reached Target?) then (yes) -// :Update Current Position; -// :Clear Target; -// else (no) -// :Update Position; -// endif -// endif -// } -// partition "Floor Transition" { -// :Check Player Position; -// if (At End Position?) then (yes) -// :Send Ascend Event; -// else (no) -// if (At Start Position?) then (yes) -// if (Floor > 1?) then (yes) -// :Send Descend Event; -// endif -// endif -// endif -// } -// stop -// ``` + 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), + ), + ) + }, + ), +) === Plākšņu pārvaldas sistēma @@ -1748,7 +1779,7 @@ Izmantojot "tokei" rīku @tokei, tika veikta detalizēta projekta koda analīze, kas parādija, ka "Maze Ascension" projekts satur $1927$ koda rindiņas, bet saistītā "hexlab" bibliotēka -- $979$ rindiņas, kopā veidojot $2906$ loģiskās koda rindiņas, neiekļaujot tukšās rindiņas un komentārus (sk. @fig:tokei-maze-ascension[] -un @fig:tokei-hexlab). +un @fig:tokei-hexlab[pielukumus]). Saskaņā ar QSM etalontabulu "Business Systems Implementation Unit (New and Modified IU) Benchmarks", pirmās kvartiles projekti ($25%$ mazākie no $550$ @@ -1774,15 +1805,6 @@ Turklāt jāņem vērā projekta papildu sarežģītības faktori: koda rakstīšanu, bet arī izpēti, dokumentēšanu un optimizāciju. ] -#figure( - caption: [Tokei rīka rezultāts "Maze Ascension" spēlei], - image("assets/images/tokei/maze-ascension.png"), -) - -#figure( - caption: [Tokei rīka rezultāts "hexlab" bibliotēkai], - image("assets/images/tokei/hexlab.png"), -) = Secinājumi #todo("uzrakstīt secinājumus") @@ -1793,6 +1815,16 @@ Turklāt jāņem vērā projekta papildu sarežģītības faktori: ) #heading("Pielikumi", numbering: none) +#figure( + caption: [Tokei rīka rezultāts "Maze Ascension" spēlei], + image("assets/images/tokei/maze-ascension.png"), +) + +#figure( + caption: [Tokei rīka rezultāts "hexlab" bibliotēkai], + image("assets/images/tokei/hexlab.png"), +) + // #include "code.typ" #include "doc.typ"