theJSZ / tiralabra-luolastogeneraattori

0 stars 0 forks source link

Vertaisarviointi #1

Open 2laJ2 opened 2 years ago

2laJ2 commented 2 years ago

Hei!

Kloonasin projektin 23.4.2022 klo 13.00. Projektin aihepiiri on itselleni vieras. Tutustuin ohjelmaan ajamalla sen useampaan kertaan omalla koneella. Pohdin seuraavia asioita:

Miksi visualisoinnissa vaihtoehdoissa 2 (bsp huoneet) ja 5 (erillisten alueiden yhdistäminen) on käynnissä sama visualisointi moninkertaisesti yhtäaikaa päällekkäin?

Kun olin luonut bsp huoneet vaihtoehdolla 2 ja sen jälkeen valitsin vaihtoehdon 3 (drunkard’s walk), niin kaivaja kulki jatkuvasti BSP:n luomien käytävien yli, mutta tällä ei ollut mitään vaikutusta ainakaan visualisointiin, eli käytävän kohta pysyi harmaana palkkina.

Sama tilanne, kun ajoin vaihtoehdon 4 (basic directional dungeon) – vaikka ajaa käytävän yli, niin että o-kirjainrivi varmasti menee käytävän yli, niin käytävä pysyy harmaana palkkina.

Kuitenkin, jos luon luolaston drunkard’s walkilla ja sen jälkeen yhdistän huoneet vaihtoehdolla 5, niin käytävät piirtyvät siististi omille paikoilleen.

Miksi vaihtoehto 5 (huoneiden yhdistäminen) tulee näkyviin vasta, kun luolasto on luotu drunkard’s walkilla ja luolat ovat erillään toisistaan? Kun luolat ovat yhteydessä toisiinsa, tämä vaihtoehto ei tule näkyviin. Vaihtoehto 5 ei siis ole näkyvissä aloitusvalikossa. Kokeilin, tuleeko vaihtoehto 5 näkyviin, jos drunkard's walk piirtää valmiiksi yhtenäisen luolaston. Valitsin kohdasta 1 labyrintin maksimikoon leveys 77 ja korkeus 19. Sitten drunkard’s walk, kaivetaan 80% luolastosta, elinikä 100. Luolasto piirtyi loppuun asti ja oli yhtenäinen, joten vaihtoehto 5 ei tullut näkyviin.

Kun tein uuden luolaston vaihtoehdolla 1, koko 77 ja 19, kaivajan elinikä 100, valinnalla 90%, niin loppuvaiheessa oli vain yksi seinä jäljellä keskellä luolaa, mutta ohjelma ilmoitti kuitenkin, että kaivamatta on 42. Kun kaivaja oli lopulta löytänyt sen viimeisenkin seinän, kaivamatta oli vielä 41 ja kaivaja jatkoi edelleen kulkemista. Tässä on varmaan joku bugi.

Screenshot from 2022-04-23 14-59-49

Ohjelmaa ei voi pysäyttää kuin sulkemalla terminaalin. Voisi olla hyvä ajatus lisätä jokin pysäytysvaihtoehto valikkoon, siltä varalta, että käyttäjä haluaa pysäyttää generoinnin kesken kaiken.

Miksi drunkard’s walkilla isoa luolastoa generoitaessa visualisointi aika ajoin menee hetkellisesti mustaksi ja tulee jälleen näkyviin? Kuva ikäänkuin “välähtää”.

Projektissa ei ollut vielä tässä vaiheessa testejä tai pylint-tarkistusta. Koodi oli kohtalaisen selkeää ja luokat oli fiksusti jaoteltu. Projektin juureen kannattaa lisätä vielä .gitignore-tiedosto repositorion siistimiseksi, kannattaa lisätä sinne ainakin pycache-kansiot.

Minusta tämä on oikein mielenkiintoinen ja hieno projekti, joka kannattaa ehdottomaksi tehdä valmiiksi asti.

theJSZ commented 2 years ago

Mahtavaa saada näin perusteelliset kommentit, kiitos siitä!

Algoritmisesti kiinnostavinta tässä on ollut huoneet luova BSP ja käytävien luomiseen käytettävä A*-algoritmi. 'Drunkard' ja 'Basic directional dungeon' ovat hyvin kevyitä enkä ole pahemmin keskittynyt niihin muuta kuin alussa kun halusin saada projektin jotenkin alulle. Niillä saa kuitenkin kiinnostavan näköistä jälkeä joten olen pitänyt niitä mukana. Drunkardissa oli tosiaan bugi, en ollut huomioinut että luolaston reunoja ei saa kaivaa ja ne pitää siis vähentää kaivamistavoitteesta.

Käytävien yli "kaivaminen" on tavallaan erityistapaus, toinen vaihtoehto olisi tietty muuttaa ne ruudut lattiaruuduiksi (joita merkitään pisteellä) tai tehdä kuten Nethackissa jossa kaivettu kallio muuttuu käytäväruuduksi. En ole kauheesti miettinyt tätä, luolaston rakenteen kannalta sillä ei ole merkitystä.

Komponenttien yhdistäminen on mahdollista valita vain jos luolasto koostuu useammasta kuin yhdestä yhtenäisestä komponentista, muussa tapauksessa se ei tekisikään mitään. Visualisointeja voi varmasti vielä siistiä, esim saman asian moneen kertaan päällekkäin näkyminen johtuu siitä että terminaalia ei tyhjennetä tulostuskertojen välissä.. olin itse jo ihan tottunut siihen mutta olisi varmasti hyvä että se olisi paremmin toteutettu.

Testipolitiikka onkin ollut mulle ongelma koska en keksi miten tätä testaisi automatisoidusti. Kysyin Telegramissa ideoita, Hannu sanoi esimerkiksi että luolaston yhtenäisyyttä voi testata. Nyt se on osa itse ohjelmaa, se huomaa aina jos luolasto ei ole yhtenäinen ja tarjoutuu yhdistämään eri osat. Ehkä olen rakentanut ohjelman väärällä tavalla, olisi varmaan pitänyt pitää testattavuus mielessä alusta asti.