diff --git a/abstract.typ b/abstract.typ index 8c74c92..fd80ffb 100644 --- a/abstract.typ +++ b/abstract.typ @@ -1,3 +1,4 @@ +#import "@preview/dashy-todo:0.0.1": todo #pagebreak() #heading( level: 1, @@ -8,6 +9,8 @@ #lorem(100) +#todo("Uzrakstīt anotāciju") + #par( first-line-indent: 0cm, [*Atslēgvārdi:*], diff --git a/assets/images/dpd/dpd1.jpg b/assets/images/dpd/dpd1.jpg deleted file mode 120000 index fbddb49..0000000 --- a/assets/images/dpd/dpd1.jpg +++ /dev/null @@ -1 +0,0 @@ -../placeholder.jpg \ No newline at end of file diff --git a/assets/images/dpd/dpd1.svg b/assets/images/dpd/dpd1.svg new file mode 100644 index 0000000..2cffe31 --- /dev/null +++ b/assets/images/dpd/dpd1.svg @@ -0,0 +1,4 @@ + + + +SpēlētājsSpēlētājamodulisLabirinta ģenerēšanas modulisLīmeņu pārvaldības modulisAudio modulisAtjaunotiespēlētāja datiOperatīvāAtmiņaNeapstrādāti ievadesierīces datiAtjaunotie spēlesstāvokļa datiLabirintaizkārtojuma datiLabirintakonfigurācijas datiIevadesapstrādesmodulisApstrādāti ievadesierīces datiSpēles stāvokļa pārvaldības modulisSpēlesstāvokļa datiRenderēšanas modulisSpēles datiVizuālāsizvades datiAudio izvades datiSpēles datiSpēlētāja dati \ No newline at end of file diff --git a/layout.typ b/layout.typ index e876818..9699aee 100644 --- a/layout.typ +++ b/layout.typ @@ -1,5 +1,4 @@ #import "@preview/i-figured:0.2.4" -#import "@preview/big-todo:0.2.0": * #import "@preview/tablex:0.0.9": tablex #let indent = 1cm @@ -144,12 +143,12 @@ /* Title page config end */ // WARNING: remove before sending - todo_outline + outline(title: "TODOs", target: figure.where(kind: "todo")) /* --- Figure/Table config start --- */ show heading: i-figured.reset-counters show figure: i-figured.show-figure.with(numbering: "1.1.") - set figure(placement: auto) + set figure(placement: none) show figure.where(kind: "i-figured-table"): set block(breakable: true) show figure.where(kind: "i-figured-table"): set figure.caption(position: top) diff --git a/main.typ b/main.typ index 6d24f7f..7de47d4 100644 --- a/main.typ +++ b/main.typ @@ -1,8 +1,9 @@ -#import "layout.typ": project +#import "@preview/dashy-todo:0.0.1": todo #import "@preview/i-figured:0.2.4" #import "@preview/tablex:0.0.9": tablex, rowspanx, colspanx, cellx -#import "utils.typ": * #import "@preview/wordometer:0.1.3": word-count, total-words +#import "layout.typ": project +#import "utils.typ": * #show: word-count #show: project.with( @@ -17,15 +18,19 @@ #set heading(numbering: none) = Apzīmējumu saraksts +/ Audio: #todo("add description") / CI/CD: nepārtraukta integrācija un nepārtraukta izvietošana; / DPD: datu plūsmas diagramma; / ECS: entitāšu komponentu sistēma (angl. Entity-Component-System#footnote[https://en.wikipedia.org/wiki/Entity_component_system]); -/ 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; / GitHub Release #footnote[https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases]: izvēršamas programmatūras iterācijas, ko varat iepakot un padarīt pieejamas plašākai auditorijai, lai lejupielādētu un izmantotu; +/ 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; +/ 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. / PPA: programmatūras projektējuma apraksts; / PPS: programmatūras prasību specifikācija; / Papildspēja: objekts, kas kā spēles mehānika spēlētājam piešķir īslaicīgas priekšrocības vai papildu spējas (angl. power-up#footnote[https://en.wikipedia.org/wiki/Power-up]); +/ Renderēšana: #todo("add description") / Spēlētājs: lietotāja ieraksts vienas virtuālās istabas kontekstā. +/ Sēkla: #todo("add description") /* Pēdējos gados spēļu izstrādes joma ir piedzīvojusi strauju popularitātes * pieaugumu, ko veicināja neatkarīgo spēļu skaita pieaugums un jaudīgu spēļu @@ -41,8 +46,6 @@ programmatūras prasības un izpētīt Bevy spēļu dzinēja iespējas. == Darbības sfēra -#todo("add first sentence") - Darba galvenā uzmanība ir vērsta uz būtisku spēles mehāniku ieviešanu, tostarp procedurālu labirintu ģenerēšanu, spēlētāju navigācijas sistēmu, papildspēju integrāciju un vertikālās progresijas mehāniku, vienlaikus ievērojot minimālisma @@ -153,7 +156,7 @@ Ar lietotājiem saistītās datu plūsmas ir attēlotas sistēmas nultā līmeņ (skat. @fig:dpd-0 att.) #figure( - caption: "0. līmeņa DPD", + caption: [\0. līmeņa DPD #todo("uzlabot diagrammu")], image("assets/images/dpd/dpd0.svg"), ) @@ -192,11 +195,142 @@ Ar lietotājiem saistītās datu plūsmas ir attēlotas sistēmas nultā līmeņ = Programmatūras prasību specifikācija == Funkcionālās prasības +\1. līmeņa datu plūsmas diagramma (skat. @fig:dpd-1 att.) ilustrē galvenos +procesus spēles "Maze Ascension" sistēmā. +Diagrammā attēloti septiņi galvenie procesi: +ievades apstrādātājs, +spēles stāvokļa pārvaldnieks, +labirinta ģenerators, +spēlētāja modulis, +spēles līmeņu pārvaldnieks, +atveidošanas jeb renderēšanas un skaņas jeb audio moduļi. +Šie procesi mijiedarbojas ar vienu datu krātuvi -- operatīvo atmiņu (RAM) -- un vienu +ārējo lietotāju -- spēlētājs. + +Ievades apstrādes modulis uztver un apstrādā spēlētāja ievades datus. +Spēles stāvokļa modulis pārrauga vispārējo spēles stāvokli. +Labirinta ģeneratora modulis izveido un pārvalda labirinta struktūras. +Spēlētāja modulis apstrādā visas ar spēlētāju saistītās kustības, sadursmes un papildspēju mijiedarbības. +Spēles līmeņu pārvaldnieks kontrolē līmeņu virzību un stāvokli. +Renderēšanas un audio moduļi pārvalda attiecīgi vizuālo un audio izvadi. + +// Visas datu plūsmas starp procesiem tiek nodrošinātas, izmantojot operatīvo +// atmiņu, ievērojot atbilstošas datu plūsmas diagrammas konvencijas. Šī +// arhitektūra nodrošina efektīvu datu pārvaldību un skaidru interešu nodalīšanu +// starp dažādām spēles sastāvdaļām. + #figure( - caption: "1. līmeņa DPD", - image("assets/images/dpd/dpd1.jpg"), + caption: [\1. līmeņa DPD #todo("uzlabot diagrammu")], + image("assets/images/dpd/dpd1.svg"), ) + +=== Funkciju sadalījums moduļos +Tabulā @tbl:function-modules ir sniegts visaptverošs spēles funkcionalitātes +sadalījums pa tās galvenajiem moduļiem. Katram modulim ir noteikti konkrēti +pienākumi, un tas ietver funkcijas, kas veicina kopējo spēles sistēmu. + +#figure( + caption: "Funkciju sadalījums pa moduļiem", + kind: table, + tablex( + columns: 3, + /* --- header --- */ + [*Modulis*], [*Funkcija*], [*Identifikators*], + /* -------------- */ + rowspanx(3)[Ievades apstrādes modulis], + [Ievades notikumu apstrāde], [], + [Ievades stāvokļa atjaunināšana], [], + [Ievades validācija], [], + + rowspanx(4)[Spēles stāvokļa pārvaldības modulis], + [Spēļu stāvokļa pārvaldība], [], + [Spēles cilpas pārvaldība], [], + [Stāvokļu pāreju apstrāde], [], + [Spēles notikumu apstrāde], [], + + rowspanx(4)[Spēlētāja modulis], + [Kustības vadība], [], + [Sadursmju apstrāde], [], + [Papildsēju pārvaldība], [], + [Spēlētāju stāvokļa atjaunināšana], [], + + rowspanx(3)[Labirinta ģenerēšanas modulis], + [Labirinta ģenerēšana], [#link()[LGMF01]], + [Objektu novietošana], [], + [Ceļa validācija], [], + + rowspanx(5)[Līmeņu pārvaldības modulis], + [Līmeņu ielāde], [], + [Progresa izsekošana], [], + [Pāreju apstrāde], [], + [Stāvokļa saglabāšana], [], + [Stāvokļa ielāde], [], + + rowspanx(4)[Renderēšanas modulis], + [Labirinta renderēšana], [], + [Spēlētāja renderēšana], [], + [Lietotājsaskarnes renderēšana], [], + [Vizuālo efektu renderēšana], [], + + rowspanx(3)[Audio modulis], + [Skaņas efektu atskaņošana], [], + [Mūzikas pārvaldība], [], + [Audio stāvokļu apstrāde], [], + ), +) + +=== Ievades apstrādes modulis +=== Spēles stāvokļa pārvaldības modulis +=== Spēlētāja modulis +=== Labirinta ģenerēšanas modulis + +#function-table( + "Labirinta ģenerēšana", + "LGMF01", + "Izveido sešstūrainu labirinta struktūru, izmantojot modificētu rekursīvo atpakaļsekošanas algoritmu.", + [ + + Rādiuss: `u32` -- Labirinta rādiuss. Obligāts parametrs, kas nosaka labirinta izmēru. + + Sēkla: `Option` -- Neobligāta sēkla nejaušo skaitļu ģeneratoram. Ja + norādīta, nodrošina reproducējamu labirinta ģenerēšanu ar vienādiem + parametriem. Ja nav norādīta, tiek izmantota nejauša sēkla. + + Sākuma pozīcija: `Option` -- Neobligāta sākotnējā pozīcija labirintā. + Ja norādīta, labirinta ģenerēšana sāksies no šīs pozīcijas. Ja nav norādīta, + tiek izvēlēta nejauša derīga sākuma pozīcija. + // + Ģeneratora tips: `GeneratorType` -- Algoritms, kas tiks izmantots + // labirinta ģenerēšanai. Pašlaik pieejams tikai RecursiveBacktracking. + ], + [ + + Validē ievades parametrus: + + Pārbauda rādiusa esamību un derīgumu; + + Validē sākuma pozīciju, ja tāda norādīta; + + Izveido sākotnējo heksagonālo režģi: + + Inicializē tukšu režģi ar norādīto rādiusu; + + Katrai šūnai iestata sākotnējās (visas) sienas; + + Ģenerē labirintu: + + Izvēlas sākuma pozīciju; + + Rekursīvi izveido ceļus, noņemot sienas starp šūnām; + + Izmanto atpakaļizsekošanu, kad sasniegts strupceļš; + + Pārbauda izveidotā labirinta korektumu. + ], + [ + + `HexMaze` struktūra, kas satur: + + Jaucējtabula ar sešstūra koordinātēm kā atslēgām; + + Sešstūra objekti ar: + + Pozīcijas koordinātēm ($x$, $y$); + + Sienu konfigurāciju (8-bitu maska). + ], + [ + + Lai izveidotu labirintu, ir jānorāda rādiuss. + + Sākuma pozīcija ir ārpus labirinta robežām. + + Neizdevās izveidot labirintu. + ], +) + +=== Līmeņu pārvaldības modulis +=== Renderēšanas modulis +=== Audio modulis + == Nefunkcionālās prasības === Veiktspējas prasības ==== Statiskā veiktspēja @@ -230,5 +364,5 @@ Ar lietotājiem saistītās datu plūsmas ir attēlotas sistēmas nultā līmeņ "bibliography.yml", ) -#pagebreak() -#todo[#total-words words] +// #pagebreak() +// #total-words words diff --git a/utils.typ b/utils.typ index 18ee9bb..8fca132 100644 --- a/utils.typ +++ b/utils.typ @@ -1,5 +1,4 @@ #import "@preview/tablex:0.0.9": tablex -#import "@preview/big-todo:0.2.0": todo as TODO #let custom-block( item, @@ -115,7 +114,7 @@ titles: ( "Funkcijas nosaukums", "Funkcijas identifikators", - "Ievads", + "Apraksts", "Ievade", "Apstrāde", "Izvade", @@ -180,17 +179,6 @@ ) } -#let todo( - ..body, -) = { - TODO( - ..body, - inline: true, - big_text: 14pt, - small_text: 12pt, - ) -} - #let hyperlink-source( author, title,