Commit f89e9a4b authored by M1888's avatar M1888

readme

parent 0744a4d0
......@@ -2,5 +2,99 @@
Joeli Hokkanen / M1888@student.jamk.fi
Dokumentaatioon **[TÄSTÄ](doc/spec.md)**.
Speksiin **[TÄSTÄ](doc/spec.md)**.
![logo](Lottokone/Resources/lotto.png)
## Sisältö
1. [Asennus](#asennus)
2. [Tietoa ohjelmasta](#tietoa-ohjelmasta)
3. [Kuvankaappaukset + ohjeet](#kuvankaappaukset-ohjeet)
4. [Ohjelman mukana tulevat tiedostot](#ohjelman-mukana-tulevat-tiedostot)
5. [Opittua ja suurimmat haasteet](#opittua-ja-suurimmat-haasteet)
6. [Työmäärä](#tyomaara)
7. [Ehdotus arvosanaksi](#ehdotus-arvosanaksi)
## Asennus
[Release.zip](Release.zip) tiedostosta löytyy purkamisen jälkeen kaikki tarvittava. Käynnistä vain lottokone.exe.
.NET Frameworkin ulkopuolisia käytetyt kirjastot:
- [System.Data.SQLite](https://www.nuget.org/packages/System.Data.SQLite) (+ [EntityFramework](https://www.nuget.org/packages/EntityFramework/)): SQLite-tietokantaa varten
- [MedallionRandom](https://www.nuget.org/packages/MedallionRandom/): Thread-safe staattinen satunnaislukugeneraattori
## Tietoa ohjelmasta
Kyseessä on lottosimulaattori. Tarkoituksenasi on voittaa päävoitto lotossa. Ohjelma simuloi loton toimintaa melko pitkälle:
- Simuloituja pelaajia, jotka tekevät lottorivejä
- Joka kierrokselle arvotaan uusi lottorivi ja kaikki rivit tarkistetaan sitä vasten
- Kelvollinen suorituskyky jopa sadoilla tuhansilla lottoriveillä
- Joka kierroksen voitot jaetaan kierroksen potista. Päävoitto kasvaa, kunnes joku voittaa sen.
Lista speksissä olleista suunnitelluista toiminnoista, ja tila:
- [x] Yleinen käyttöliittymä
- [x] Rahan/pisteiden tarkastelu
- [x] Lottosimulaatiosta tulostetta ja statistiikkaa, jota näkee pelin aikana
- [x] Vakiorivejen syöttö
- [x] Arparivien määrittely
- [x] Lottosimulaation asetusten säätö
- [x] Scoreboard
- [ ] Pelitilanteen tallennus
- [ ] Aiemman tallennuksen lataaminen
Toiminnot, jotka toteutettiin, vaikka ne ei olleet speksissä:
- [x] Muuttuvat grafiikat isojen voittojen sattuessa
- [x] Simulaation rikkaimpien pelaajien listaus
## Kuvankaappaukset + ohjeet
Ohjelman käynnistyttyä näet pääikkunan:
![pääikkuna](lottokone.png)
Vasemmassa laidassa on napit, joilla ohjataan konetta. Voit edistää aikaa eteenpäin viikon kerrallaan, tai sitten käynnistä-napilla antaa viikkojen rullata itsestään.
Seuraavassa sarakkeessa näet yleisiä tietoja simulaatiosta: kuinka mones vuosi ja viikko on menossa, montako lottoriviä kierroksella on mukana, paljonko on päävoitosta jaossa ja viime kierroksen voittorivin.
Tämän vieressä on listaikkuna, johon tulee simulaation edetessä tietoa kierrosten kestosta ja kierroksella jaetuista voitoista.
Oikeassa laidassa on pelaajan tiedot. Tilin saldo näyttää tilisi saldon: joka rivi maksaa jotain, ja voitoista sinne kertyy rahaa. Jos haluat kuitenkin muistaa uhkapelatessasi vain hyvät hetket, näet myös pelkät voittosi tämän alapuoleta.
Asetukset-ikkunassa pääsee säätämään simulaation asetuksia tarkemmin.
![asetukset](asetukset.png)
Rikkaimmat-napin takaa löytyy sekä sillä hetkellä käynnissä olevan simulaation rikkaimpien pelaajien listaus, sekä SQLite-tietokannasta haettavat high scoret. Mikäli voitat päävoiton, tallentuu nimesi tälle listalle.
## Ohjelman mukana tulevat tiedostot
### **Resources/lotto.sqlite**
SQLite-tietokanta, joka sisältää pelaajan tallentamat vakiorivit, sekä high scoret.
### **Resources/etunimet.csv, Resources/sukunimet.csv**
CSV-formaatissa olevat listat etunimistä ja sukunimistä. Näitä käytetään simuloitujen pelaajien nimien arpomisessa. Lähde: https://www.avoindata.fi/data/fi/dataset/none
## Tiedossa olevat bugit ja jatkokehitysideat
Yritin ison osan bugeista eliminoida ennen julkaisua. Kuitenkin jos simulaatiolle asettaa hyvin vähän simuloituja pelaajia ja rivejä, sekä todella paljon omia arparivejä, voi kierrokset rullata niin nopeasti että pelaajan voitot listaava ikkuna jää kierroksissa "jälkeen". Tämä kuitenkin korjautuu, kun simulaation pysäyttää ja odottaa että voittolistaus ehtii takaisin ajan tasalle.
## Opittua ja suurimmat haasteet
Iso haaste projektia toteuttamaan lähtiessä oli suuri prosessointimäärä, joka joka kierroksella joudutaan tekemään. Parallelismi tuli tähän avuksi. Tämä oli ensimmäinen monisäikeinen tekemäni ohjelma, ja sitä kautta tulikin opittua paljon uutta. Kun UI ja pelilogiikka pyörivät eri threadeissa, oli niiden välisen viestinnän tekeminen haastavaa.
Yksi iso haaste oli myös tuo vakiorivien toteuttaminen. .NET antaa tallentaa Properiesiin haluttuja asetuksia, mutta sieltä ei löytynyt haluamiani tietotyyppejä. Olisin tarvinnut vähintäänkin taulukon, tai mielummin dynaamisen listan näitä taulukoita. Toteutin vakiorivit lopulta SQLiten avulla, mutta se teki tiedonsidonnasta haastavampaa ja päädyinkin koodaamaan paljon logiikasta Lottorivit.xaml.cs:ään käsin.
## Työmäärä
Aikaseurantani mukaan toteuttamiseen kului aikaa noin 34 tuntia. Tästä n. 4 tuntia oli alun suunnittelua, kunnes toteutus alkoi. Itse lottokoneen logiikan toimimaan saamisessa kului n. 15 h, vakiorivien tallennukseen n. 5h ja loput 10 tuntia kului käyttöliittymän muiden osien toteuttamiseen sekä viilailuun.
## Ehdotus arvosanaksi
Ehdotan arvosanaksi 5. Työ on kuitenkin melkoisen laaja, ja täyttää yksikkötestausta lukuunottamatta mielestäni kaikki harjoitustyön vaatimukset.
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment