mirror of
https://github.com/kristoferssolo/Qualification-Thesis.git
synced 2025-10-21 20:10:37 +00:00
fix: typos
This commit is contained in:
parent
e71ddd761a
commit
7217cd110d
3
.github/workflows/typst.yml
vendored
3
.github/workflows/typst.yml
vendored
@ -32,7 +32,8 @@ jobs:
|
||||
with:
|
||||
name: PDF
|
||||
path: |
|
||||
*.pdf
|
||||
kval_darbs_kristians_cagulis_kc22015.pdf
|
||||
documentary_page.pdf
|
||||
- name: Get current date
|
||||
id: date
|
||||
run: echo "DATE=$(date +%Y-%m-%d-%H:%M)" >> $GITHUB_ENV
|
||||
|
||||
218
main.typ
218
main.typ
@ -20,23 +20,26 @@
|
||||
)
|
||||
#set heading(numbering: none)
|
||||
= Apzīmējumu saraksts
|
||||
/ 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;
|
||||
/ DPD: datu plūsmas diagramma;
|
||||
/ ECS: entitāšu-komponenšu sistēma (angl. Entity-Component-System)@ecs;
|
||||
/ Interpolācija: starpvērtību atrašana pēc funkcijas doto vērtību virknes;
|
||||
/ Entitāte: unikāls identifikators, kas apvieno saistītās komponentes;
|
||||
/ 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;
|
||||
/ Komponente: datu struktūra, kas satur tikai datus bez loģikas;
|
||||
/ Notikums: īslaicīga ziņojuma struktūra, kas tiek izmantota komunikācijai starp sistēmā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]<power-up>;
|
||||
/ 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;
|
||||
/ 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ā;
|
||||
/ 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.
|
||||
/ Pirmkods: cilvēkam lasāmas programmēšanas instrukcijas, kas nosaka programmatūras darbību;
|
||||
/ Procedurāla ģenerēšana: algoritmisks satura radīšanas process, kas automātiski ģenerē datus izpildes laikā, nevis izmanto manuāli, iepriekš veidotu saturu;
|
||||
/ Renderēšana: process, kurā tiek ģenerēta vizuāla izvade;
|
||||
/ Resurss: globāli pieejama datu struktūra, kas nav piesaistīta konkrētai entitātei;
|
||||
/ Režģis: strukturēts šūnu izkārtojums, kas veido spēles pasaules pamata struktūru;
|
||||
/ Sistēma: loģikas vienība, kas apstrādā entitātes ar specifiskām komponentēm;
|
||||
/ Spēlētājs: entitāte, kas reprezentē lietotāja vadāmo objektu spēlē;
|
||||
/ 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;
|
||||
/ WASM: WebAssembly -- zema līmeņa assemblera tipa kods, kas var darboties modernos tīmekļa pārlūkos.
|
||||
|
||||
= Ievads
|
||||
@ -64,7 +67,7 @@ nodrošina, ka:
|
||||
- uzglabāšanas prasības tiek samazinātas līdz minimumam, ģenerējot labirintus reāllaikā.
|
||||
|
||||
#indent-par[
|
||||
Spēlētāju uzdevums ir pārvietoties pa šiem procesuāli ģenerētajiem labirintiem,
|
||||
Spēlētāju uzdevums ir pārvietoties pa šiem procedurā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.
|
||||
@ -76,9 +79,9 @@ pieredzi, veicinot izpēti un eksperimentēšanu ar dažādām spēju kombināci
|
||||
radot dinamiskākus un aizraujošākus spēles scenārijus.
|
||||
|
||||
No tehniskā viedokļa darbā tiek pētīta šo funkciju īstenošana, izmantojot
|
||||
Bevy entitāšu-komponentu sistēmas (tuprmāk tekstā -- ECS) arhitektūru.
|
||||
Bevy entitāšu-komponenšu sistēmas (turpmāk tekstā -- ECS) arhitektūru.
|
||||
Tas ietver stabilu spēles vides sistēmu izstrādi, stāvokļa pārvaldības
|
||||
mehānismus un efektīvu Bevy iebūvēto funkcionalitāšu izmantošanu.
|
||||
mehānismus un efektīvu Bevy iebūvēto funkciju izmantošanu.
|
||||
|
||||
No darbības sfēras apzināti izslēgta daudzspēlētāju funkcionalitāte un sarežģīti
|
||||
grafiskie efekti, koncentrējoties uz pulētu viena spēlētāja pieredzi ar skaidru,
|
||||
@ -171,39 +174,25 @@ Spēle tiek izplatīta, izmantojot "GitHub
|
||||
releases"#footnote[https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases]<gh-release>
|
||||
un itch.io,#footnote[https://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
|
||||
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.
|
||||
|
||||
/* Lai gan spēle neizmanto mākoņpakalpojumus datu uzglabāšanai vai
|
||||
analīzei, CI/CD cauruļvads nodrošina, ka atjauninājumus un jaunas funkcijas var
|
||||
izvietot efektīvi un droši. Šāda konfigurācija ļauj ātri veikt iterāciju un
|
||||
nepārtraukti uzlabot spēli, nodrošinot, ka spēlētājiem vienmēr ir pieejama
|
||||
jaunākā versija ar jaunākajiem uzlabojumiem un kļūdu labojumiem. */
|
||||
|
||||
== Darījumprasības
|
||||
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:
|
||||
Sistēmas izstrādē tiek izvirzītas sekojošas darījumprasības, kas nodrošinās
|
||||
kvalitatīvu 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 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.
|
||||
- Līmeņu pārvaldība: Sistēma nodrošinās automātisku spēles līmeņu pārvaldību un
|
||||
vienmērīgu pāreju starp tiem, veidojot pakāpenisku grūtības pieaugumu.
|
||||
- Tieša piekļuve: Spēle būs pieejama bez lietotāja konta izveides vai
|
||||
autentifikācijas, nodrošinot tūlītēju piekļuvi spēles saturam.
|
||||
- Platformu atbalsts: Sistēma tiks izstrādāta ar daudzplatformu atbalstu,
|
||||
ietverot Linux, macOS, Windows un WebAssembly platformas.
|
||||
- Kopienas integrācija: Izmantojot itch.io@itch-io platformu, tiks nodrošināta
|
||||
spēlētāju atsauksmju apkopošana un kopienas atbalsts.
|
||||
- Nepārtraukta izstrāde: Izmantojot CI/CD risinājumus, tiks nodrošināta regulāra
|
||||
spēles atjaunināšana un uzturēšana.
|
||||
|
||||
== 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
|
||||
@ -212,9 +201,6 @@ Tā kā spēlei nav nepieciešami lietotāja konti vai autentifikācija, visiem
|
||||
spēlētājiem ir vienlīdzīga piekļuve spēles funkcijām un saturam no spēles sākuma
|
||||
brīža.
|
||||
|
||||
/* "Sistēma" lietotājs ir atbildīgs par notikumu apstrādātāju izsaukšanu, kas
|
||||
nepieciešams automātiskai spēles gaitas pārvaldībai. */
|
||||
|
||||
Ar lietotājiem saistītās datu plūsmas ir attēlotas sistēmas nultā līmeņa DPD
|
||||
(sk. @fig:dpd-0).
|
||||
|
||||
@ -236,10 +222,29 @@ Ar lietotājiem saistītās datu plūsmas ir attēlotas sistēmas nultā līmeņ
|
||||
) <dpd-0>
|
||||
|
||||
== Vispārējie ierobežojumi
|
||||
// + Izstrādes vides un tehnoloģijas ierobežojumi:
|
||||
// + Programmēšanas valodas un Bevy spēles dzinēja tehniskie ierobežojumi;
|
||||
// + Responsivitāte;
|
||||
// + Starpplatformu savietojamība: Linux, macOS, Windows un WebAssembly.
|
||||
|
||||
|
||||
+ Izstrādes vides un tehnoloģijas ierobežojumi:
|
||||
+ Programmēšanas valodas un Bevy spēles dzinēja tehniskie ierobežojumi;
|
||||
+ Responsivitāte;
|
||||
+ Starpplatformu savietojamība: Linux, macOS, Windows un WebAssembly.
|
||||
+ Bevy dzinēja tehniskie ierobežojumi:
|
||||
+ ECS arhitektūras specifika un tās ierobežojumi datu organizācijā;
|
||||
+ "Render Graph" sistēmas ierobežojumi grafisko elementu attēlošanā;
|
||||
+ atkarība no "wgpu"#footnote[https://wgpu.rs/] grafikas bibliotēkas iespējām.
|
||||
+ Rust programmēšanas valodas ierobežojumi:
|
||||
+ stingra atmiņas pārvaldība (angl. memory management) un īpašumtiesību (angl. ownership) sistēma;
|
||||
+ kompilācijas laika pārbaudes un to ietekme uz izstrādes procesu;
|
||||
+ WebAssembly kompilācijas specifika.
|
||||
+ Platformu atbalsta ierobežojumi:
|
||||
+ Nepieciešamība nodrošināt savietojamību ar:
|
||||
+ darbvirsmas platformām (Linux, macOS, Windows);
|
||||
+ tīmekļa pārlūkprogrammām caur WebAssembly.
|
||||
+ Platformu specifiskās prasības attiecībā uz:
|
||||
+ grafikas renderēšanu;
|
||||
+ ievades apstrādi;
|
||||
+ veiktspējas optimizāciju.
|
||||
|
||||
#indent-par[
|
||||
Dokumentācijas izstrādei ir izmantots Typst rīks, kas nodrošina efektīvu darbu
|
||||
@ -250,11 +255,11 @@ 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.
|
||||
- ierīcei jāatbalsta WebGL2 #footnote("https://registry.khronos.org/webgl/specs/latest/2.0/"),
|
||||
lai nodrošinātu pareizu atveidošanu @webgl2.
|
||||
- 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.
|
||||
palaist uz Bevy spēles dzinēja balstītas spēles;
|
||||
- ierīcei jāatbalsta WebGL2 #footnote("https://registry.khronos.org/webgl/specs/latest/2.0/");
|
||||
lai nodrošinātu pareizu atveidošanu @webgl2;
|
||||
- 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 $800 times 600$ pikseļi.
|
||||
- Veiktspējas atkarība:
|
||||
- Spēle ir atkarīga no Bevy spēles dzinēja (0.15).
|
||||
- Veiksmīga kompilēšana un izvietošana ir atkarīga no CI/CD darbplūsmai saderības ar:
|
||||
@ -499,7 +504,7 @@ pienākumi, un tas ietver funkcijas, kas veicina kopējo spēles sistēmu.
|
||||
|
||||
Dotais modulis ir izstrādes rīks, kas paredzēts lietotāja saskarnes elementu
|
||||
attēlošanai un apstrādei, lai konfigurētu labirinta parametrus.
|
||||
Šis modulis, izmantojot "egui"@bevy-egui un "inspector-egui"@bevy-inspector-egui
|
||||
Šis modulis, izmantojot "bevy_egui"@bevy-egui un "inspector-egui"@bevy-inspector-egui
|
||||
bibliotēkas, izveido logu "Maze Controls" (labirinta vadības
|
||||
elementi), kurā tiek parādītas dažādas
|
||||
konfigurācijas opcijas, piemēram, sēkla, rādiuss, augstums, labirinta izmērs,
|
||||
@ -513,12 +518,6 @@ Svarīgi atzīmēt, ka šis modulis ir paredzēts lietošanai spēles izstrādes
|
||||
Laidiena versijās šī lietotāja saskarne nebūs pieejama, nodrošinot, ka
|
||||
gala lietotāji nevar piekļūt šīm uzlabotajām konfigurācijas opcijām.
|
||||
|
||||
// Moduļa funkcionalitāti var vizualizēt, izmantojot datu plūsmas diagrammu (DFD),
|
||||
// kurā būtu parādītas ievades no spēles pasaules (piemēram, pašreizējā stāva un
|
||||
// labirinta konfigurācija), apstrāde lietotāja saskarnes sistēmā un izejas kā
|
||||
// atjauninātas labirinta konfigurācijas un respawn notikumi.
|
||||
|
||||
|
||||
#function-table(
|
||||
"Labirinta pārvadības saskarne",
|
||||
"IRMF01",
|
||||
@ -526,7 +525,7 @@ gala lietotāji nevar piekļūt šīm uzlabotajām konfigurācijas opcijām.
|
||||
[
|
||||
Ievades dati tiek saņemti no pasaules resursiem un komponentēm:
|
||||
+ Labirinta spraudņa resurss;
|
||||
+ "EguiContext" komponente;#footnote[https://docs.rs/bevy_egui/latest/bevy_egui/]<bevy_egui>
|
||||
+ "`EguiContext`" komponente;#footnote[https://docs.rs/bevy_egui/latest/bevy_egui/]<bevy_egui>
|
||||
+ Labirinta konfigurācija un stāva komponentes saistībā ar pašreizējā stāva
|
||||
komponenti;
|
||||
+ Globālais labirinta konfigurācijas resurss.
|
||||
@ -563,7 +562,7 @@ Modulis sastāv no divām galvenajām funkcijām (sk. @fig:dpd-2-floor):
|
||||
stāvu kustības (sk. @tbl:floor-F01) un stāvu
|
||||
pārejas apstrādes (sk. @tbl:floor-F02).
|
||||
Stāvu kustības sistēma nodrošina plūstošu vertikālo pārvietošanos starp
|
||||
līmeņiem, savukārt pārejas apstrādes sistema koordinē pārejas starp pašreizējo
|
||||
līmeņiem, savukārt pārejas apstrādes sistēma koordinē pārejas starp pašreizējo
|
||||
un nākamo stāvu, reaģējot uz "TransitionFloor" notikumu (sk. @tbl:events-floor).
|
||||
|
||||
#figure(
|
||||
@ -633,7 +632,7 @@ un nākamo stāvu, reaģējot uz "TransitionFloor" notikumu (sk. @tbl:events-flo
|
||||
=== Labirinta ģenerēšanas modulis
|
||||
|
||||
Moduļa funkcionalitāte ir izmantota sešstūraina labirinta ģenerēšanai,
|
||||
balstoties uz Amit Patel's "Hexagonal Grids"
|
||||
balstoties uz "Hexagonal Grids"
|
||||
rakstu @hex-grid, kas jau ir
|
||||
kļuvis par _de facto_ standartu sešstūrainu režģu matemātikas un algoritmu
|
||||
implementācijai izstrādē.
|
||||
@ -686,7 +685,7 @@ programmu.
|
||||
+ 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.
|
||||
+ Validē sākuma pozīciju, ja tāda norādīta.
|
||||
+ Ģenerē labirintu:
|
||||
+ Rekursīvi izveido ceļus, noņemot sienas starp šūnām;
|
||||
+ Izmanto atpakaļizsekošanu, kad sasniegts strupceļš.
|
||||
@ -718,7 +717,8 @@ Funkcija ģenerē jaunu labirintu, izmantojot norādīto konfigurāciju, un izvi
|
||||
to atbilstošā augstumā spēles pasaulē.
|
||||
|
||||
Labirinta atjaunošanas funkcija ļauj pārģenerēt esošā stāva labirintu,
|
||||
saglabājot to pašu stāva numuru un pozīciju telpā nemainot entitātes ID.
|
||||
saglabājot to pašu stāva numuru un pozīciju telpā nemainot entitātes
|
||||
identifikatoru.
|
||||
|
||||
#figure(
|
||||
caption: [Labirinta pārvaldības moduļa 2. līmeņa DPD],
|
||||
@ -808,7 +808,8 @@ Spēlētāja kustība tiek realizēta divās daļās: ievades apstrāde
|
||||
Ievades apstrādes funkcija pārbauda tastatūras ievadi
|
||||
un, ņemot vērā labirinta sienu izvietojumu, nosaka nākamo kustības mērķi.
|
||||
Kustības izpildes funkcija nodrošina plūstošu pārvietošanos uz mērķa pozīciju,
|
||||
izmantojot interpolāciju starp pašreizējo un mērķa pozīciju.
|
||||
izmantojot interpolāciju#footnote[Matemātiska metode, kas aprēķina starpvērtības
|
||||
starp diviem zināmiem punktiem.] starp pašreizējo un mērķa pozīciju.
|
||||
|
||||
Stāvu pārejas apstrāde (#link(<player-F04>)[SPMF04]) nepārtraukti uzrauga spēlētāja pozīciju
|
||||
attiecībā pret stāva izeju un sākumu. Kad spēlētājs sasniedz kādu no šiem
|
||||
@ -989,22 +990,23 @@ punktiem, funkcija izsauc atbilstošu pārejas notikumu.
|
||||
) <player-F04>
|
||||
|
||||
=== Spēles stāvokļa pārvaldības modulis
|
||||
|
||||
Spēles stāvokļa pārvaldības modulis nodrošina spēles dažādu stāvokļu pārvaldību
|
||||
un pārejas starp tiem. Modulis sastāv no trim galvenajām funkcijām: spēles
|
||||
sākšana (@tbl:screen-F01), atgriešanās uz sākumekrānu
|
||||
(@tbl:screen-F02) un sākumekrāna attēlošanas
|
||||
(@tbl:screen-F03). Katra no šīm funkcijām apstrādā specifiskus
|
||||
lietotāja ievades datus un atbilstoši atjaunina spēles stāvokli operatīvajā
|
||||
atmiņā.
|
||||
un pārejas starp tiem. Modulis sastāv no trim galvenajām funkcijām:
|
||||
spēles sākšana (@tbl:screen-F01),
|
||||
atgriešanās uz sākumekrānu (@tbl:screen-F02) un
|
||||
sākumekrāna attēlošanas (@tbl:screen-F03).
|
||||
Katra no šīm funkcijām apstrādā specifiskus lietotāja ievades datus un
|
||||
atbilstoši atjaunina spēles stāvokli.
|
||||
|
||||
Moduļa 2. līmeņa DPD diagramma (sk. @fig:dpd-2-screen) parāda, ka lietotājs
|
||||
mijiedarbojas ar sistēmu caur diviem galvenajiem ievades veidiem: pogu izvēli
|
||||
sākumekrānā un "Escape" taustiņa nospiešanu spēles laikā.
|
||||
|
||||
Spēles sākšanas funkcija inicializē nepieciešamos resursus un
|
||||
sistēmas, kad lietotājs izvēlas sākt jaunu spēli. Atgriešanās funkcija
|
||||
apstrādā lietotāja pieprasījumu pārtraukt aktīvo spēli un atgriežas uz
|
||||
sākumekrānu.
|
||||
sistēmas, kad lietotājs izvēlas sākt jaunu spēli.
|
||||
Atgriešanās funkcija apstrādā lietotāja pieprasījumu pārtraukt aktīvo spēli un
|
||||
atgriežas uz sākumekrānu.
|
||||
|
||||
#figure(
|
||||
caption: [Spēles stāvokļa pārvaldības moduļa 2. līmeņa DPD],
|
||||
@ -1218,12 +1220,13 @@ Uz sistēmas veiktspēju ir sekojošas prasības:
|
||||
- Jebkura izmēra labirintam jātiek uzģenerētam ātrāk kā 1 sekundē.
|
||||
- Spēlei jāstartējas ātrāk par 3 sekundēm.
|
||||
- Spēlei jādarbojas ar vismaz 60 kadriem sekundē.
|
||||
- Spēlētāja kustībām jātiek apstrādātām bez manāmas aizkaves ($<16$ms).
|
||||
- Spēlētāja kustībām jātiek apstrādātā 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.
|
||||
// - 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
|
||||
@ -1256,7 +1259,7 @@ ir noteiktas, lai nodrošinātu plašu pieejamību, vienlaikus saglabājot veikt
|
||||
== Datu struktūru projektējums
|
||||
|
||||
Spēle ir veidota, izmantojot Bevy spēles dzinēju, kas īstenu
|
||||
entitāšu komponenšu sistēmu (ECS) arhitektūras modeli.
|
||||
entitāšu-komponenšu sistēmu (ECS) arhitektūras modeli.
|
||||
Šis modelis sadala spēles loģiku trīs galvenajās daļās: entitātes jeb spēles
|
||||
objekti, komponentes jeb dati un sistēmas -- loģika, kas darbojas ar entitātēm
|
||||
ar konkrētām komponentēm @ecs @bevy-ecs @bevy-cheatbook[nod. ~14.7].
|
||||
@ -1666,14 +1669,14 @@ atgriežas un mēģina citu ceļu.
|
||||
) <floor-transition-diagram>
|
||||
|
||||
|
||||
=== Plākšņu pārvaldas sistēma
|
||||
=== Plākšņu pārvaldības sistēma
|
||||
|
||||
Projekta sākotnējā plānošanas posmā tika apsvēra iespēja labirinta elementu
|
||||
pārvaldībai izmantot
|
||||
"`bevy_ecs_tilemap`" bibliotēku.#footnote[https://crates.io/crates/bevy_ecs_tilemap]<bevy-ecs-tilemap>
|
||||
"bevy_ecs_tilemap" bibliotēku.#footnote[https://crates.io/crates/bevy_ecs_tilemap]<bevy-ecs-tilemap>
|
||||
Tomēr pēc rūpīgas izvērtēšanas tika secināts, ka tā neatbilst konkrētajam
|
||||
projekta lietojuma gadījumam sekojošu iemeslu dēļ:
|
||||
+ Uz failiem balstīta plākšņu ielāde: "`bevy_ecs_tilemap`" galvenokārt paļaujas uz
|
||||
+ Uz failiem balstīta plākšņu ielāde: "bevy_ecs_tilemap" galvenokārt paļaujas uz
|
||||
plākšņu ielādi no ārējiem failiem. Šajā projektā ir nepieciešami dinamiski,
|
||||
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
|
||||
@ -1681,14 +1684,14 @@ projekta lietojuma gadījumam sekojošu iemeslu dēļ:
|
||||
sarežģītākām telpiskām attiecībām starp šūnām.
|
||||
+ 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
|
||||
līmeni nav viegli sasniegt izmantojot "`bevy_ecs_tilemap`".
|
||||
līmeni nav viegli sasniegt izmantojot "bevy_ecs_tilemap".
|
||||
|
||||
#indent-par[
|
||||
Tā vietā, lai izmantotu "`bevy_ecs_tilemap`", tika izlemts izstrādāt pielāgotu
|
||||
Tā vietā, lai izmantotu "bevy_ecs_tilemap", tika izlemts izstrādāt pielāgotu
|
||||
risinājumu, kas tieši integrējas ar labirinta ģenerēšanas algoritmu. Šī
|
||||
pieeja ļauj:
|
||||
]
|
||||
- vienkāršāku integrācija ar procesuālo labirintu ģenerēšanu;
|
||||
- vienkāršāku integrācija ar procedurālo labirintu ģenerēšanu;
|
||||
- optimālāku veiktspēja projekta lietošanas gadījumam;
|
||||
- lielāku kontroli pār labirinta vizuālo attēlojumu.
|
||||
|
||||
@ -1726,7 +1729,7 @@ pogas.
|
||||
=== Spēles skats
|
||||
|
||||
Spēles skats apvieno pašu spēles pasauli ar minimālistisku lietotāja saskarni
|
||||
(sk, @fig:game-ui).
|
||||
(sk. @fig:game-ui).
|
||||
Centrālo daļu aizņem spēles pasaule ar sešstūra labirintu, kas veido spēles
|
||||
galveno interaktīvo elementu.
|
||||
Ekrāna kreisajā apakšējā stūrī ir izvietoti papildspēju statusa indikatori, kas
|
||||
@ -1741,7 +1744,7 @@ atjaunošanās laiku.
|
||||
|
||||
=== Izstrādes rīki
|
||||
Izstrādes rīki, kas redzami @fig:dev-tools-ui[attēlā], ir implementēti
|
||||
izmantojot "egui" bibliotēku @bevy_egui.
|
||||
izmantojot "bevy_egui" bibliotēku @bevy_egui.
|
||||
Pirmais "Bevy Inspector Egui" noklusētais skats @bevy-inspector-egui, kas
|
||||
nodrošina detalizētu piekļuvi spēles entitāšu hierarhijai, komponenšu
|
||||
inspektoram un resursu pārvaldniekam.
|
||||
@ -1763,21 +1766,12 @@ Statiskā testēšana ir svarīga daļa no projekta kvalitātes nodrošināšana
|
||||
"Clippy"
|
||||
tiek izmantots koda analīzei, meklējot potenciālas problēmas un
|
||||
neoptimālus risinājumus. Papildus noklusētajiem noteikumiem, tika aktivizēti
|
||||
stingrāki koda kvalitātes pārbaudes līmeņi: "`pedantic`" režīms nodrošina
|
||||
padziļinātu koda stila pārbaudi, "`nursery`" aktivizē eksperimentālās pārbaudes,
|
||||
un "`unwrap_used`" un "`expect_used`" brīdina par potenciāli nedrošu kļūdu
|
||||
stingrāki koda kvalitātes pārbaudes līmeņi: "pedantic" režīms nodrošina
|
||||
padziļinātu koda stila pārbaudi, "nursery" aktivizē eksperimentālās pārbaudes,
|
||||
un "unwrap_used" un "expect_used" brīdina par potenciāli nedrošu kļūdu
|
||||
apstrādi. Šie papildu noteikumi palīdz uzturēt augstāku koda kvalitāti un
|
||||
samazināt potenciālo kļūdu skaitu @clippy.
|
||||
|
||||
|
||||
/* Programmatūras statiskai testēšanai ir izmantots rīks „clang-tidy“, kas analizē
|
||||
programmatūru, meklējot kļūdas un problēmas pirmkodā. [12] Rīks satur vairākas specifiskas
|
||||
problēmu kopas, kas var tikt izmantotas analīzē. Tika izmantota „clang-analyzer“ problēmu
|
||||
kopa. Vieglākai statisko testu darbināšanai tika izmantots vienkāršs programmēšanas valodas
|
||||
„Python“ skripts, kas atlasa visus failus, kuru paplašinājums ir „cpp“ (valodas „C++“ pirmkoda
|
||||
fails) vai „h“ (galvenes fails) un darbina statiskās analīzes rīku ar katru failu atsevišķi (sk.
|
||||
izpildes rezultātu attēlā 4.3.). */
|
||||
|
||||
== Dinamiskā testēšana
|
||||
|
||||
Lai novērtētu programmatūras uzvedību darbības laikā, tika veikta dinamiskā
|
||||
@ -1950,8 +1944,8 @@ Automatizēto testu izpildes rezultātu kopsavilkums ir redzams
|
||||
pieejams @tests-hexlab-full[pielikumā].
|
||||
@fig:tests-hexlab[attēlā], savukārt detalizēts testu izpildes pārskats ir
|
||||
|
||||
Izmantojot "cargo-tarpaulin", testu pārklājums ir $81.69%$ (116 no 142
|
||||
iekļautajām rindiņām) (sk. @tarpaulin-hexlab[pielikumu]), tomēr šis rādītājs
|
||||
Izmantojot "cargo-tarpaulin", testu pārklājums ir $81.69%$ (sk.
|
||||
@tarpaulin-hexlab[pielikumu]), tomēr šis rādītājs
|
||||
pilnībā neatspoguļo faktisko pārklājumu, jo rīkam ir ierobežojumi attiecībā uz
|
||||
"inline"#footnote[https://doc.rust-lang.org/nightly/reference/attributes/codegen.html?highlight=inline]
|
||||
funkcijām un citi tehniski ierobežojumi @cargo-tarpaulin.
|
||||
@ -1994,9 +1988,8 @@ Viens no galvenajiem rīkiem, kas tiek izmantots ir "Clippy"@clippy, kas analiz
|
||||
iespējamās problēmas un iesaka uzlabojumus (sk. @static-tests nodaļu).
|
||||
|
||||
Kopā ar "Clippy" tiek arī izmantots "Rustfmt" @rustfmt, koda formatētājs, lai
|
||||
uzturētu vienotu koda formatējumu visā projektā. Šis rīks automātiski formatē
|
||||
kodu saskaņā ar Rust stila
|
||||
vadlīnijām @rust-style.
|
||||
uzturētu vienotu koda formatējumu visā projektā.
|
||||
Šis rīks automātiski formatē kodu saskaņā ar Rust stila vadlīnijām @rust-style.
|
||||
|
||||
Turklāt visas publiskās funkcijas un datu struktūras "hexlab" bibliotēkā ir
|
||||
dokumentētas#footnote[https://docs.rs/hexlab/latest/hexlab/]<hexlab-docs>.
|
||||
@ -2035,15 +2028,14 @@ Projekta darbietilpības novērtēšanai tika izmantota QSM (angl. Quantitative
|
||||
Software Management, latv. kvantitatīvā programmatūra vadība) metodoloģija, kas
|
||||
balstās uz $550$ verificētu programmatūras projektu datubāzi @QSM.
|
||||
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. @tokei-maze-ascension[]
|
||||
un @tokei-hexlab[pielikumus]).
|
||||
kas parādija, ka "Maze Ascension" projekts satur $1927$ koda rindiņas (sk. @tokei-maze-ascension), bet
|
||||
saistītā "hexlab" bibliotēka -- $979$ rindiņas (sk. @tokei-hexlab), kopā veidojot $2906$ loģiskās koda
|
||||
rindiņas, neiekļaujot tukšās rindiņas un komentārus .
|
||||
|
||||
Saskaņā ar QSM etalontabulu "Business Systems Implementation Unit (New and
|
||||
Modified IU) Benchmarks", pirmās kvartiles projekti ($25%$ mazākie no $550$
|
||||
biznesa sistēmu projektiem) vidēji ilgst $3.2$ mēnešus, ar vidēji $1.57$
|
||||
izstrādātājiem un mediāno projekta apjomu -- $1889$ koda rindiņas @QSM.
|
||||
izstrādātājiem un mediāna projekta apjomu -- $1889$ koda rindiņas @QSM.
|
||||
Ņemot vērā, ka projekta autors ir students ar ierobežotu pieredzi, tiek
|
||||
izmantota pirmās kvartiles $50%$ diapazona augšējā robeža -- $466$ rindiņas
|
||||
personmēnesī.
|
||||
@ -2051,11 +2043,11 @@ Tādējādi minimālais nepieciešamais koda apjoms trīs mēnešu darbam būtu
|
||||
= 1398$ rindiņas.
|
||||
|
||||
Projekta faktiskais koda apjoms ($2906$ rindiņas) vairāk nekā divkārt pārsniedz šo
|
||||
minimālo slieksni, kas nepārprotami apliecina projekta atbilstību trīs mēnešu
|
||||
darbietilpības prasībai.
|
||||
minimālo slieksni, kas apliecina projekta atbilstību trīs mēnešu darbietilpības
|
||||
prasībai.
|
||||
Turklāt jāņem vērā projekta papildu sarežģītības faktori:
|
||||
- Bevy dzinēja un ECS arhitektūras apgūšana;
|
||||
- Procesuālās ģenerēšanas algoritma izstrāde "hexlab" bibliotēkai;
|
||||
- Procedurālās ģenerēšanas algoritma izstrāde "hexlab" bibliotēkai;
|
||||
- "hexlab" bibliotēkas izstrāde ar plašu dokumentāciju, ieskaitot API
|
||||
dokumentāciju, lietošanas piemērus un integrācijas vadlīnijas.
|
||||
|
||||
@ -2082,7 +2074,7 @@ pāreju starp dažādiem labirinta līmeņiem.
|
||||
Bevy spēļu dzinēja izmantošana ļāva efektīvi implementēt entitāšu-komponenšu
|
||||
sistēmu (ECS), kas nodrošina labu veiktspēju un koda organizāciju.
|
||||
Tomēr tika konstatēts, ka Bevy ekosistēma joprojām ir aktīvās izstrādes stadijā,
|
||||
ko apliecina projekta izstrādes laikā iznākusī jaunā versija (0.15).
|
||||
ko apliecina darba izstrādes laikā iznākusī jaunā versija (0.15).
|
||||
Ši versija ieviesa vairākas būtiskas izmaiņas, piemēram, "Required Components"
|
||||
(latv. nepieciešamo komponentu) konceptu uzlabotu animāciju sistēmu un daudz ko
|
||||
citu, kas radīja nepieciešamību pielāgot esošo kodu @bevy-0.15.
|
||||
|
||||
@ -256,7 +256,7 @@
|
||||
let supplement_map = (
|
||||
i-figured-table: "tab.",
|
||||
i-figured-image: "att.",
|
||||
attachment: "pielikums",
|
||||
attachment: "pielikumu",
|
||||
)
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user