From d11b89ba2d131f0338fde292fdb72d89ce69d1bc Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 11 Nov 2024 19:50:44 +0200 Subject: [PATCH 1/3] create dpd0 --- assets/images/dpd/dpd0.jpg | 1 - assets/images/dpd/dpd0.svg | 3 +++ main.typ | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) delete mode 120000 assets/images/dpd/dpd0.jpg create mode 100644 assets/images/dpd/dpd0.svg diff --git a/assets/images/dpd/dpd0.jpg b/assets/images/dpd/dpd0.jpg deleted file mode 120000 index fbddb49..0000000 --- a/assets/images/dpd/dpd0.jpg +++ /dev/null @@ -1 +0,0 @@ -../placeholder.jpg \ No newline at end of file diff --git a/assets/images/dpd/dpd0.svg b/assets/images/dpd/dpd0.svg new file mode 100644 index 0000000..b451fb3 --- /dev/null +++ b/assets/images/dpd/dpd0.svg @@ -0,0 +1,3 @@ + + +
Spēles stāvokļu
dati
Ievades ierīces
dati
Spēlētājs
Spēle
\ No newline at end of file diff --git a/main.typ b/main.typ index 92bf33b..6d24f7f 100644 --- a/main.typ +++ b/main.typ @@ -9,7 +9,7 @@ university: "Latvijas Universitāte", faculty: "Eksakto zinātņu un tehnoloģiju fakultāte", type: "Kvalifikācijas darbs", - title: [Spēles izstrāde, izmantojot Bevy spēļu dzinēju], + title: [Spēles izstrāde, izmantojot\ Bevy spēļu dzinēju], authors: ("Kristiāns Francis Cagulis, kc22015",), advisor: "prof. Mg. dat. Jānis Iljins", date: "Rīga 2025", @@ -154,7 +154,7 @@ Ar lietotājiem saistītās datu plūsmas ir attēlotas sistēmas nultā līmeņ #figure( caption: "0. līmeņa DPD", - image("assets/images/dpd/dpd0.jpg"), + image("assets/images/dpd/dpd0.svg"), ) == Vispārējie ierobežojumi From 5142324ea3430737897aca6308934a109a1808a2 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 24 Nov 2024 17:12:00 +0200 Subject: [PATCH 2/3] add minimal SRS --- abstract.typ | 3 + assets/images/dpd/dpd1.jpg | 1 - assets/images/dpd/dpd1.svg | 4 + layout.typ | 5 +- main.typ | 154 ++++++++++++++++++++++++++++++++++--- utils.typ | 14 +--- 6 files changed, 154 insertions(+), 27 deletions(-) delete mode 120000 assets/images/dpd/dpd1.jpg create mode 100644 assets/images/dpd/dpd1.svg 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ājs
Spēlētāja
modulis
Labirinta ģenerēšanas modulis
Līmeņu pārvaldības modulis
Audio modulis
Atjaunotie
spēlētāja dati
Operatīvā
Atmiņa
Neapstrādāti ievades
ierīces dati
Atjaunotie spēles
stāvokļa dati
Labirinta
izkārtojuma dati
Labirinta
konfigurācijas dati
Ievades
apstrādes
modulis
Apstrādāti ievades
ierīces dati
Spēles stāvokļa pārvaldības modulis
Spēles
stāvokļa dati
Renderēšanas modulis
Spēles dati
Vizuālās
izvades dati
Audio
 izvades dati
Spēles dati
Spē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, From 081d6a5b3b1c65259bad1caf694a30d5228460e4 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 25 Nov 2024 18:25:58 +0200 Subject: [PATCH 3/3] add non-functional requirements --- abstract.typ | 4 +- assets/images/dpd/dpd0.svg | 3 +- bibliography.yml | 12 ++++ layout.typ | 2 +- main.typ | 137 ++++++++++++++++++++++++++----------- 5 files changed, 116 insertions(+), 42 deletions(-) diff --git a/abstract.typ b/abstract.typ index fd80ffb..a14ac15 100644 --- a/abstract.typ +++ b/abstract.typ @@ -9,7 +9,8 @@ #lorem(100) -#todo("Uzrakstīt anotāciju") +#todo("Uzrakstīt anotāciju (līdz 850 rakstzīmēm)") + #par( first-line-indent: 0cm, @@ -42,6 +43,7 @@ papilspējas. progressing vertically as they climb up through levels. The game includes power-ups and abilities hidden throughout the maze, and later introduces the ability to move between levels freely._ + #todo("līdz 850 rakstzīmēm") #par( first-line-indent: 0cm, [*Keywords:*], diff --git a/assets/images/dpd/dpd0.svg b/assets/images/dpd/dpd0.svg index b451fb3..8b9f3a2 100644 --- a/assets/images/dpd/dpd0.svg +++ b/assets/images/dpd/dpd0.svg @@ -1,3 +1,4 @@ + -
Spēles stāvokļu
dati
Ievades ierīces
dati
Spēlētājs
Spēle
\ No newline at end of file +
Vizuālās
izvades dati
Ievades ierīces
dati
Spēlētājs
Spēle
Audio
 izvades dati
\ No newline at end of file diff --git a/bibliography.yml b/bibliography.yml index 38bb556..7b90251 100644 --- a/bibliography.yml +++ b/bibliography.yml @@ -44,3 +44,15 @@ pipeline: title: "CI/CD: The what, why, and how" author: url: https://github.com/resources/articles/devops/ci-cd +backtracking: + type: Web + title: Backtracking + url: https://en.wikipedia.org/wiki/Backtracking +maze_generation: + type: Web + title: Maze Generation + url: https://rosettacode.org/wiki/Maze_generation +bevy_quickstart: + type: Web + title: Bevy New 2D + url: https://github.com/TheBevyFlock/bevy_new_2d diff --git a/layout.typ b/layout.typ index 9699aee..06b0896 100644 --- a/layout.typ +++ b/layout.typ @@ -56,7 +56,7 @@ ), ) } else { - it + text(12pt, it) } "" v(-1cm) diff --git a/main.typ b/main.typ index 7de47d4..afadc80 100644 --- a/main.typ +++ b/main.typ @@ -22,15 +22,16 @@ / 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 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; +/ 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; / 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. +/ 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]); +/ Pirmkods: #todo("add description") / 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") +/ Sēkla: _seed_ #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 @@ -115,11 +116,12 @@ ietvaros. integrācijas un nepārtrauktas izvietošanas (CI/CD) cauruļvadu@pipeline, lai vienkāršotu izstrādes un izplatīšanas procesu. Šis cauruļvads ir konfigurēts tā, lai kompilētu spēli vairākām platformām, -tostarp Linux, macOS, Windows un WebAssembly (Wasm). +tostarp Linux, MacOS, Windows un WebAssembly (Wasm). Tas nodrošina, ka spēle ir pieejama plašai auditorijai, nodrošinot konsekventu un saistošu pieredzi dažādās operētājsistēmās un vidēs. -Spēle tiek izplatīta, izmantojot GitHub releases un #link("http://itch.io/")[itch.io], kas ir populāra neatkarīgo spēļu +Spēle tiek izplatīta, izmantojot GitHub releases un +#link("http://itch.io/")[itch.io], kas ir populāra neatkarīgo spēļu platforma, kas ļauj viegli piekļūt un izplatīt spēles visā pasaulē. Izmantojot šīs platformas, datorspēle gūst dažādu maksājumu modeļu un kopienas iesasaistes funkcijas, tādējādi palielinot spēles sasniedzamību un atpazīstamību. @@ -134,13 +136,25 @@ jaunākā versija ar jaunākajiem uzlabojumiem un kļūdu labojumiem. */ Sistēmas izstrādē galvenā uzmanība tiks pievērsta sekojošu darījumprasību īstenošanai, lai nodrošinātu stabilu un saistošu lietotāja pieredzi: -+ Spēles progresēšana un līmeņu pārvaldība: Sistēma automātiski pārvaldīs spēlētāju virzību pa spēles līmeņiem, nodrošinot vienmērīgu pāreju, kad spēlētāji progresē un saskaras ar jauniem izaicinājumiem. - Progress tiks saglabāts lokāli spēlētāja ierīcē. -+ Nevainojama piekļuve spēlēm: Spēlētāji varēs piekļūt spēlei un spēlēt to bez nepieciešamības izveidot lietotāja kontu vai pieteikties. Tas nodrošina netraucētu piekļuvi spēlei, ļaujot spēlētājiem nekavējoties sākt spēlēt. -// + Paziņošanas sistēma: Spēlētāji saņems paziņojumus par svarīgiem spēles atjauninājumiem, sasniegumiem un citu svarīgu informāciju, lai saglabātu viņu iesaisti un informētību. -+ Savietojamība ar vairākām platformām: sistēma būs pieejama vairākās platformās, tostarp Linux, macOS, Windows un WebAssembly, nodrošinot plašu pieejamību un sasniedzamību. -+ Kopienas iesaiste: Spēle izmantos #link("http://itch.io/")[itch.io] kopienas funkcijas, lai sadarbotos ar spēlētājiem, apkopotu atsauksmes un veicinātu atbalstošu spēlētāju kopienu. -+ Regulāri atjauninājumi un uzturēšana: CI/CD cauruļvadu veicinās regulārus atjauninājumus un uzturēšanu, nodrošinot, ka spēle ir atjaunināta ar jaunākajām funkcijām un uzlabojumiem. ++ Spēles progresēšana un līmeņu pārvaldība: Sistēma automātiski pārvaldīs + spēlētāju virzību pa spēles līmeņiem, nodrošinot vienmērīgu pāreju, kad + spēlētāji progresē un saskaras ar jauniem izaicinājumiem. Progress tiks + saglabāts lokāli spēlētāja ierīcē. ++ Nevainojama piekļuve spēlēm: Spēlētāji varēs piekļūt spēlei un spēlēt to bez + nepieciešamības izveidot lietotāja kontu vai pieteikties. Tas nodrošina + netraucētu piekļuvi spēlei, ļaujot spēlētājiem nekavējoties sākt spēlēt. +// + Paziņošanas sistēma: Spēlētāji saņems paziņojumus par svarīgiem spēles +// atjauninājumiem, sasniegumiem un citu svarīgu informāciju, lai saglabātu viņu +// iesaisti un informētību. ++ Savietojamība ar vairākām platformām: sistēma būs pieejama vairākās + platformās, tostarp Linux, macOS, Windows un WebAssembly, nodrošinot plašu + pieejamību un sasniedzamību. ++ Kopienas iesaiste: Spēle izmantos #link("http://itch.io/")[itch.io] kopienas + funkcijas, lai sadarbotos ar spēlētājiem, apkopotu atsauksmes un veicinātu + atbalstošu spēlētāju kopienu. ++ Regulāri atjauninājumi un uzturēšana: CI/CD cauruļvadu veicinās regulārus + atjauninājumus un uzturēšanu, nodrošinot, ka spēle ir atjaunināta ar jaunākajām + funkcijām un uzlabojumiem. == Sistēmas lietotāji Sistēma ir izstrādāta, ņemot vērā vienu lietotāja tipu -- spēlētājs. Spēlētāji @@ -170,7 +184,8 @@ Ar lietotājiem saistītās datu plūsmas ir attēlotas sistēmas nultā līmeņ == Pieņēmumi un atkarības - Tehniskie pieņēmumi: - - Spēlētāja ierīcei jāatbilst minimālajām aparatūras prasībām, lai varētu palaist uz Bevy spēles dzinēja balstītas spēles. + - Spēlētāja ierīcei jāatbilst minimālajām aparatūras prasībām, lai varētu + palaist uz Bevy spēles dzinēja balstītas spēles. - ierīcei jāatbalsta OpenGL 3.3 vai WebGL 2.0, lai nodrošinātu pareizu atveidošanu. - tīmekļa spēļu spēlēšanai (WebAssembly versija) pārlūkprogrammai jābūt mūsdienīgai un saderīgai ar WebAssembly. - ekrāna izšķirtspējai jābūt vismaz 800x600 pikseļu, lai spēle būtu optimāla. @@ -234,7 +249,7 @@ pienākumi, un tas ietver funkcijas, kas veicina kopējo spēles sistēmu. caption: "Funkciju sadalījums pa moduļiem", kind: table, tablex( - columns: 3, + columns: (auto, 1fr, auto), /* --- header --- */ [*Modulis*], [*Funkcija*], [*Identifikators*], /* -------------- */ @@ -255,10 +270,8 @@ pienākumi, un tas ietver funkcijas, kas veicina kopējo spēles sistēmu. [Papildsēju pārvaldība], [], [Spēlētāju stāvokļa atjaunināšana], [], - rowspanx(3)[Labirinta ģenerēšanas modulis], + rowspanx(1)[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], [], @@ -284,11 +297,10 @@ pienākumi, un tas ietver funkcijas, kas veicina kopējo spēles sistēmu. === 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.", + [Izveido sešstūrainu labirintu ar norādītajiem parametriem.], [ + 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 @@ -304,18 +316,17 @@ pienākumi, un tas ietver funkcijas, kas veicina kopējo spēles sistēmu. + 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; + + Izveido sākotnējo labirinta struktūru: + + Inicializē tukšu labirintu ar norādīto rādiusu; + + Katrai šūnai iestata sākotnējās (visas) sienas. + + Validē stākuma prozīciju, ja tāda norādīta. + Ģ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. + + Izmanto atpakaļizsekošanu, kad sasniegts strupceļš. ], [ - + `HexMaze` struktūra, kas satur: - + Jaucējtabula ar sešstūra koordinātēm kā atslēgām; + + Jaucējtabulu, kas satur: + + Sešstūra koordinātes kā atslēgās; + Sešstūra objekti ar: + Pozīcijas koordinātēm ($x$, $y$); + Sienu konfigurāciju (8-bitu maska). @@ -327,42 +338,90 @@ pienākumi, un tas ietver funkcijas, kas veicina kopējo spēles sistēmu. ], ) + === Līmeņu pārvaldības modulis === Renderēšanas modulis === Audio modulis == Nefunkcionālās prasības === Veiktspējas prasības -==== Statiskā veiktspēja -==== Dinamiskā veiktspēja +Uz sistēmas veiktspēju ir sekojošas prasības: +- Labirinta ģenerēšana: Jebkura izmēra labirintam jātiek uzģenerētam ātrāk par 1 sekundi. +- Spēles ielāde: Spēlei jāstartējas ātrāk par 3 sekundēm. +- Kadru ātrums: Spēlei jādarbojas ar vismaz 60 kadriem sekundē. +- Ievades apstrāde: Spēlētāja kustībām jātiek apstrādātām bez manāmas aizkaves ($<16$ms). +=== Uzticamība +Uz sistēmas uzticamību ir sekojošas prasības: +- Kļūdu apstrāde: spēlei jāapstrādā kļūdas graciozi, bez sistēmas atteicēm. +- Saglabāšana: spēles progresam jātiek automātiski saglabātam pēc katra līmeņa. +- Atjaunošanās: spēlei jāspēj atjaunoties pēc negaidītas aizvēršanas. + === Atribūti ==== Izmantojamība -==== Mērogojamība +Uz sistēmas izmantojamību ir sekojošas prasības: +- $90%$ jaunu lietotāju jāspēj lietot visas tiem pieejamās funkcijas bez palīdzības. +- Teksta fonta izmēram datoru ekrāniem jābūt vismaz 14 pikseļiem, labas + salasāmības nodrošināšanai. + ==== Drošība +Uz drošību risinājumiem ir sekojošas prasības: +- Spēles pirmkods ir iekļauts kopā ar izpildāmo bināro failu; +- Spēle nemodificē un nelasa lietotāja vai operētājsistēmas failus, izņemot izmantoto bibliotēku + failus. + ==== Uzturamība +Pret sistēmas izstrādājamo programmatūras uzturamību tiek izvirzītas sekojošās prasības: +- API dokumentācijas pārklājumam jābūt vismaz 80%. +- Koda testēšanas pārklājumam jābūt vismaz 70%. + ==== Pārnesamība -=== Projekta ierobežojumi -==== Intelektuālā īpašuma tiesības -==== Aparatūras ierobežojumi -===== Atbalstītās ierīces -===== Serveris un mitināšana +- Platformas: spēlei jādarbojas uz 64 bitu Windows, Linux un MacOS. +- Prasības: spēlei jādarbojas uz datora ar vismaz: + - 4GB operatīvo atmiņa(RAM); + - Integrēto grafisko karti; + - Divu-kodolu procesoru. + +=== Paplašināmība +- Labirinta ģenerēšana: jābūt iespējai viegli pievienot jaunus ģenerēšanas + algoritmus, +- Līmeņu dizains: jābūt iespējai viegli pievienot jaunus līmeņus. +- Papildinājumi: koda arhitektūrai jāatbalsta jaunu funkciju pievienošana. + === Ārējās saskarnes prasības -==== Lietotāja saskarne -==== Sakaru saskarne + = Programmatūras projektējuma apraksts == Daļējs funkciju projektējums /* Apraksta svarīgākās, sarežģītākās funkcijas vai sistēmas darbības aspektus; * obligāti jālieto vismaz 4 dažādi diagrammu veidi, izņemot DPD un lietošanas * piemēru (use case) diagrammas */ +== Izmantotās bibliotēkas == Daļējs lietotāju saskarņu projektējums /* 5-7 lietotāja saskarnes un to apraksts */ -=== Navigācija -=== Ekrānskati + += Testēšanas dokumentācija +== Dinamiskā programmatūras testēšana +=== Manuālā integrācijas testēšana +=== Automatizēti testi +== Statiskā programmatūras testēšana + += Programmas projekta organizācija + += Kvalitātes nodrošināšana + += Konfigurācijas pārvaldība + += Darbietilpības novērtējums + += Secinājumi #bibliography( title: "Izmantotā literatūra un avoti", "bibliography.yml", ) +#heading("Pielikumi", numbering: none) + +// #include "doc.typ" + // #pagebreak() // #total-words words