feat: add activity diagrams

This commit is contained in:
Kristofers Solo 2025-01-02 15:38:42 +02:00
parent 58fc131f38
commit df975053a0
3 changed files with 153 additions and 117 deletions

3
assets/images/fork.svg Normal file
View File

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="26px" height="29px" viewBox="-0.5 -0.5 26 29"><defs/><g><g/><g><path d="M 0 13 L 22.67 13" fill="none" stroke="#000000" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 11.33 25.5 L 11.33 0.5" fill="none" stroke="#000000" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 0 25.5 L 0 13" fill="none" stroke="#000000" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 22.67 25.5 L 22.67 13" fill="none" stroke="#000000" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -34,6 +34,7 @@
text, text,
corner-radius: 4pt, corner-radius: 4pt,
stroke: default-node-stroke, stroke: default-node-stroke,
shape: rect,
) )
} }

266
main.typ
View File

@ -69,10 +69,12 @@ nodrošina, ka:
- Labirinta sarežģītību var dinamiski pielāgot spēlētājam progresējot. - 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ā. - 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, #indent-par[
lai sasniegtu katra līmeņa beigas. Turpinot progresēt, spēlētāji saskaras ar Spēlētāju uzdevums ir pārvietoties pa šiem procesuāli ģenerētajiem labirintiem,
arvien sarežģītākiem labirintiem, kuros nepieciešama stratēģiskā domāšana, lai sasniegtu katra līmeņa beigas. Turpinot progresēt, spēlētāji saskaras ar
izpēte un papildu prasmju izmantošana. 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 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 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( #figure(
caption: "Stāva pārejas diagramma", caption: "Stāva pārejas diagramma",
kind: image, kind: image,
diagram( diagram({
terminal-node((0, 0)),
std-edge(),
action-node((0, 1), [Pārbaudīt stāva\ pārejas notikumu]), terminal-node((0, 0))
std-edge(), std-edge()
decision-node((0, 2), [Vai stāvi\ kustās?]), action-node((0, 1), [Pārbaudīt stāva\ pārejas notikumu])
std-edge("l,d", [jā]), std-edge()
std-edge("r,d", [nē]),
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]), terminal-node((-1, 3), extrude: (0, 3))
std-edge(),
decision-node((1, 4), [Stāva\ notikuma\ tips?]), action-node((1, 3), [Iegūt pašreizējo\ stāvu])
std-edge("d", [Pacelties]), std-edge()
std-edge("r,d,d", [Nolaisties]),
decision-node((1, 5), [Vai nākamais\ stāvs eksistē?]), decision-node((1, 4), [Stāva\ notikuma\ tips?])
std-edge("d", [jā]), std-edge("d", [Pacelties])
std-edge("l,d", [nē]), std-edge("r,dd", [Nolaisties])
action-node((0, 6), [Izsaukt jauna stāva\ izveides notikumu]), decision-node((1, 5), [Vai nākamais\ stāvs eksistē?])
std-edge("d,d,r"), std-edge("d", [jā])
std-edge("l,d", [nē])
action-node((1, 6), [Aprēķināt katra stāva\ jaunās $Y$ koordinātas]), action-node((0, 6), [Izsaukt jauna stāva\ izveides notikumu])
std-edge("d"), std-edge("dd,r")
action-node((1, 7), [Pārvieto visus stāvus\ uz jaunajām $Y$ koordinātām]), action-node((1, 6), [Aprēķināt katra stāva\ jaunās $Y$ koordinātas])
std-edge("d"), std-edge("d")
decision-node((2, 6), [Pašreizējais\ stāvs $== 1$?]), action-node((1, 7), [Pārvieto visus stāvus\ uz jaunajām $Y$ koordinātām])
std-edge("d,d,l", [jā]), std-edge("d")
std-edge("l", [nē]),
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))
}),
) <floor-transition-diagram> ) <floor-transition-diagram>
#figure( #figure(
caption: "Spēlētaja pārejas diagramma", caption: "Labirinta ģenerēšanas pārejas diagramma",
kind: image, kind: image,
diagram( diagram(
terminal-node((0, 0)), spacing: (0em, 3em),
std-edge(), {
action-node((0, 1), [Pārbaudīt stāva\ pārejas notikumu]), terminal-node((0, 0))
std-edge(), std-edge()
decision-node((0, 2), [Vai stāvi\ kustās?]), action-node((0, 1), [Izveido labirinta būvētāju])
std-edge("l,d", [jā]), std-edge()
std-edge("r,d", [nē]),
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]), action-node((-2, 3), [Nav rādiusa kļūda])
std-edge(), std-edge()
terminal-node((-2, 4), extrude: (0, 3))
decision-node((1, 4), [Stāva\ notikuma\ tips?]), action-node((0, 3), [Izveido labirinta glabātuvi])
std-edge("d", [Pacelties]), std-edge()
std-edge("r,d,d", [Nolaisties]),
decision-node((1, 5), [Vai nākamais\ stāvs eksistē?]), decision-node((0, 4), [Starta pozīcija\ ir norādīta?])
std-edge("d", [jā]), std-edge("l,d", [jā])
std-edge("l,d", [nē]), std-edge("r,d", [nē])
action-node((0, 6), [Izsaukt jauna stāva\ izveides notikumu]), decision-node((1, 5), [Izmanto noklusējuma\ sākuma pozīciju\ (0, 0)])
std-edge("d,d,r"), 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]), decision-node((-1, 5), [Pozīcija\ ir derīga?])
std-edge("d"), std-edge("l,d", [nē])
std-edge("r,d", [jā])
decision-node((2, 6), [Pašreizējais\ stāvs $== 1$?]), action-node((-2, 6), [Nepareiza starta pozīcija kļūda])
std-edge("d,d,l", [jā]), std-edge()
std-edge("l", [nē]), 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))
},
), ),
) <player-activity-diagram> ) <hexlab-activity-diagram>
#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 action-node((0, 1), [Atzīmē pašreizējo pozīciju\ kā apmeklētu])
// activityDiagram std-edge()
// start
// partition "Ievades apstrāde" { decision-node((0, 2), [Vai eksistē\ neapmeklēti\ kaimiņi?])
// :Pārbaudīt spēlētāja ievadi; std-edge("l,d", [jā])
// if (Vai ir mērķpozīcija?) then (jā) std-edge("r,d", [nē])
// :Skip Movement;
// else (nē) action-node((-1, 3), [Nejauši izvēlas\ neapmeklētu kaimiņu])
// :Saņemt virzienu no ievades; std-edge()
// if (Vai ir pareizs virziens?) then (jā)
// if (Vai ir siena virzienā?) then (jā) decision-node((-1, 4), [Kaimiņš eksistē\ un ir neapmeklēts?])
// :Skip Movement; std-edge("l,d", [jā])
// else (nē) std-edge("d", [nē])
// :Iestata mērķpozīciju;
// endif action-node((-1, 5), [Pārbauda nākamo\ virzienu])
// else (nē) std-edge("r,uuu")
// :Skip Movement;
// endif action-node(
// endif (-2, 5),
// } [Noņem sienas starp pašreizējo\ un kaimiņa pozīcijām],
// )
// partition "Movement Processing" { std-edge()
// :Calculate Movement Speed;
// if (Has Target?) then (yes) action-node((-2, 6), [Izpilda doto algoritmu\ kaimiņa pozīcijai])
// :Calculate Target Position; std-edge()
// if (Reached Target?) then (yes)
// :Update Current Position; action-node((-2, 7), [Atgriežas uz\ iepriekšējo pozīciju])
// :Clear Target; std-edge()
// else (no)
// :Update Position; action-node((-2, 8), [Pārvietojas uz šī\ kaimiņa pozīciju])
// endif std-edge("rr,uuuuuu")
// endif
// } terminal-node((1, 3), extrude: (0, 3))
// partition "Floor Transition" { node(
// :Check Player Position; snap: false,
// if (At End Position?) then (yes) stroke: black,
// :Send Ascend Event; inset: 1em,
// else (no) enclose: (
// if (At Start Position?) then (yes) (0, 0),
// if (Floor > 1?) then (yes) (1, 3),
// :Send Descend Event; (-2, 8),
// endif (-2, 5),
// endif ),
// endif )
// } },
// stop ),
// ``` ) <dfs-diagram>
=== Plākšņu pārvaldas sistēma === 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 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 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[] 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 Saskaņā ar QSM etalontabulu "Business Systems Implementation Unit (New and
Modified IU) Benchmarks", pirmās kvartiles projekti ($25%$ mazākie no $550$ 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. 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"),
) <tokei-maze-ascension>
#figure(
caption: [Tokei rīka rezultāts "hexlab" bibliotēkai],
image("assets/images/tokei/hexlab.png"),
) <tokei-hexlab>
= Secinājumi = Secinājumi
#todo("uzrakstīt secinājumus") #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) #heading("Pielikumi", numbering: none)
#figure(
caption: [Tokei rīka rezultāts "Maze Ascension" spēlei],
image("assets/images/tokei/maze-ascension.png"),
) <tokei-maze-ascension>
#figure(
caption: [Tokei rīka rezultāts "hexlab" bibliotēkai],
image("assets/images/tokei/hexlab.png"),
) <tokei-hexlab>
// #include "code.typ" // #include "code.typ"
#include "doc.typ" #include "doc.typ"