Tekstipõhine Conway Game of Life
Autorid: Osvald Nigola, Leo-Martin Pala
Conway Game of Life on matemaatiline mäng, kus on antud mängulaud, mis koosneb ruutudest, millest igaüks võib olla elus või surnud. Mängulaual tekib iga sammuga järgmine põlvkond, kus elusad ruudud jäävad ellu, kui neil on 2 või 3 elusat naabrit, muidu surevad. Surnud ruudud ärkavad ellu, kui neil on täpselt 3 elusat naabrit. Mängu "eesmärk" on leida algseis, mis tekitab huvitavaid mustreid.
Programmi käivitamisel saab vajutada ruutudel, et neid muuta elusaks või surnuks. Mängu alustamiseks tuleb vajutada nuppu Alusta ja selle peatamiseks nuppu Peata või vajutama klaviatuuril nuppu p. Mängulaua algseisu (ehk kõik on surnud) saab luua nupuga Lähtesta. Heleda ja tumeda režiimi vahel saab vahetada seadetes vastava linnukese märkimisega. All vasakus nurgas on tuluke, mis näitab, kas mäng parajasti jookseb (roheline) või on peatatud (punane). Ruudukeste aktiivseks muutmiseks võib nende peale vasaku hiireklahviga vajutada ja lohistada. Ruudukeste deaktiveerimiseks võib nende peale parema hiireklahviga vajutada ja lohistada. Pildi muutmiseks taustaks tuleb vajutada seadete alt nuppu vali taustapilt ja valida sobiv pilt. Seadete alt on võimalik veel mängulauda salvestada pildina, seda salvestatakse projekti kausta nimega "pilt.png".
Põhiklass, mis loob kõik komponendid ja panem mängu käima
vastutab mängu loogika ja kasutajaliidese juhtimise eest. See haldab mängu olekut, töötleb kasutaja sisendeid ja uuendab mängu ekraani.
Loob nuppudele kuulajad, mis haldavad nupuvajutusi
Käivitab mängu, uuendades mängu olekut ja ekraani vastavalt mängu seadetele
Peatab mängu, lõpetades mängu oleku uuendamise
Tegeleb ruudul vajutusega, muutes ruudu elusaks või surnuks
Vastutab mängu juhtpaneeli eest, kus on nupud mängu alustamiseks, peatamiseks, lähtestamiseks, valitud taustapildi taastamiseks ja seadete avamiseks
Vastutab mängulaua eest, kus on ruudud ja nende elusoleku olek
Initsialiseerib mängulaua
Uuendab mängulaua uute ruutudega
joonistab olemasolevad ruudud ekraanile
joonistab valitud pildi mängulauale
salvestab mängulaua pildi faili
Klass, mis käivitab mängu
Klass, mis vastutab mängu järgmise oleku arvutamise eest
Arvutab mängulaua järgmise oleku vastavalt eelmisele olekule ning tagastab selle
Klass, mis vastutab pildi importimise eest
Muudab sisseloetud pildi bitsetiks
Arvutab pildi keskmise heleduse
Klass, mis hoiab mängu seadeid
Klass, mis vastutab seadete akna eest, mis tuleb ette, kui kasutaja vajutab nupule Seaded
Loob seadekasti, kus on nupud seadete muutmiseks
Muudab heleda ja tumeda režiimi vahel
Avab pildi importimise akna
Erind, mis visatakse, kui kasutaja vajutab nuppu Alusta, kui mäng juba käib
Alustasime projekti mõeldes ülessande nõuetele, et saada arusaam oodatavast lõpptulemusest. Seejärel lõime Githubi repositooriumi, mille abil me koodi haldasime. Esimese sammuna arendasime välja mängu loogika ning siis algelise graafilise kasutajaliidese. Kui alus oli valmis, lisasime sinna juurde erinevaid funktsioone nagu pildi importimine taustaks, seaded, hele/tume režiim jne. Selle käigus muutus kood üha keerulisemaks ja vähem loetavaks. Seetõttu muutsime lõpuks koodi loetavamaks ja tegime viimaseid viimistlusi.
Mõlemad rühmaliikmed panustasid võrdselt koodi kirjutamisse ja mõtlemisse. Tegime tihedat koostööd, jagasime ülesandeid ja aitasime üksteist probleemide tekkimisel. Hinnanguline ajakulu projektile oli mõlemal ca 20h.
Lõpus muutus programm üsna keeruliseks. Kõik töötas, aga koodi oli palju ja oli keeruline aru saada, kus mingi viga võis peituda.
Meie arvates on lõpptulemus väga hea. Õnnestus luua mäng, mis sisaldab väga mitmeid erinevaid funktsioone, mis muudab mängimise huvitavaks ja nauditavaks.
Iga vähegi suurema muudatuse korral testisime, kas kõik programmi funktsionaalsused töötavad nii nagu nad peavad. Kui avastasime vigu, siis parandasime selle enne, kui jätkasime koodi edasiarendamist.