spec.md 4.24 KB
Newer Older
M1888's avatar
M1888 committed
1 2
# Lottokone

M1888's avatar
M1888 committed
3 4
TTOS0300 kurssin harjoitustyö.  
Kevät 2019  
M1888's avatar
M1888 committed
5
Joeli Hokkanen <m1888@student.jamk.fi>
M1888's avatar
M1888 committed
6

M1888's avatar
M1888 committed
7 8 9 10 11 12 13 14 15
## Sisällysluettelo

1. [Sovelluksen yleiskuvaus](#sovelluksen-yleiskuvaus)
2. [Pelin kulku](#pelin-kulku)
3. [Käyttöympäristö ja käytetyt teknologiat](#käyttöympäristö-ja-käytetyt-teknologiat)
4. [Käyttäjäroolit](#käyttäjäroolit)
5. [Toteutettavat toiminnot](#toteutettavat-toiminnot)
6. [Käyttötapauskaavio](#käyttötapauskaavio)
7. [Luokkakaavio](#luokkakaavio)
M1888's avatar
M1888 committed
16 17 18 19 20

## Sovelluksen yleiskuvaus

Tarkoituksena on tehdä peli, joka näyttää miten hölmöä lottoaminen käytännössä on. Pelin voittaa, kun voittaa lotossa päävoiton, ja pisteet tulevat siitä kuinka vähän olet saanut tilisi miinukselle.

M1888's avatar
M1888 committed
21
Tätä varten loton toimintaa tulisi siis simuloida mahdollisimman tarkasti - ehkä tätä voikin miettiä simulaattorina eikä pelinä. Tämä sisältää mm.:
M1888's avatar
M1888 committed
22 23

- 7 numeroa (1-40) per lottorivi, lisänumerot
M1888's avatar
M1888 committed
24
- simuloituja pelaajia (satoja tuhansia), joiden riveistä ja niiden hinnasta potti muodostuu
M1888's avatar
M1888 committed
25 26 27 28 29 30
- pelaajalle mahdollisuus valita omat vakiorivit, ja arpoa automaattisesti rivejä
- simuloitujen pelaajien voitot

Lisää pohdintaa ominaisuuksista:

- Asetukset ja pisteet tullaan tallentamaan paikalliseen SQLite-kantaan
M1888's avatar
M1888 committed
31 32 33 34
- Mahdollinen save-state? Tämän voisi tallentaa SQLiteen myös
- **Suorituskyky**: voiko simulaatio rullata sopivalla nopeudella, jos oikeasti tarkastetaan kaikkien muka-pelaajien arvotut lottorivit?
  - Kokeillaan multithreading-ratkaisua ja tarkastellaan sen suorituskykyä prototyypin avulla.
  - Jos käy liian hitaaksi, niin jätetään asetus silti koodiin ja toteutetaan simuloiduille pelaajille nopeampi todennäköisyyteen perustuva voittojen jako.
M1888's avatar
M1888 committed
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

## Pelin kulku

Peli mittaa vuosien ja viikkojen kulumista, joka viikko suoritetaan yksi lottoarvonta kuten oikeastikin. Alkupäivä voisi olla vaikka kuluvan vuoden alku. Pelaajalla on alussa tietty määrä *rahaa*, ja mahdollisuus syöttää *vakiorivejä*, jotka pysyvät viikosta toiseen samana. Lisäksi voi määritellä *arparivien* määrän, jotka ovat siis joka arvontaan uudelleen arvottavia rivejä.

Kun halutut rivit on syötetty, laitetaan peli käyntiin. Peli luo simuloituja pelaajia, jotka lottoavat oikean pelaajan kanssa. Jokainen lottorivi maksaa tietyn määrän (esim. 1€), ja peli pitää kirjaa lottoriveistä muodostuvasta voittopotista, sekä pelaajan tilin saldosta.

Tilin saldon meneminen miinukselle tulee olemaan luultavasti väistämätöntä. Peli ei kuitenkaan tähän pääty, vaan saat jatkaa tilin vinguttamista miinukselle rajattomasti. Tarkoituksena onkin voittaa lotossa päävoitto häviten ennen sitä mahdollisimman vähän rahaa.

Kun päävoitto osuu kohdalle, ilmoittaa peli siitä, ja ottaa pistesaldoksi tilin saldon ennen kuin sille on juuri kohdalle osunut päävoitto lisätty. Tästä saadaan pistetaululle pisteet.

## Käyttöympäristö ja käytetyt teknologiat

Peli tullaan toteuttamaan C# ja XAML -kielillä WPF:ää käyttäen. Kohdealustana on Windows sekä .NET Framework 4.6.

M1888's avatar
M1888 committed
50
Tietojen säilyttämiseen ohjelma tulee käyttämään SQLiteä, ja C#:n [System.Data.SQLite](https://www.nuget.org/packages/System.Data.SQLite) -pakettia.
M1888's avatar
M1888 committed
51 52 53 54 55 56 57 58 59 60 61 62

## Käyttäjäroolit

Peli on paikallinen yksinpeli, ja käyttäjärooleja on siten vain yksi: Pelaaja.

## Toteutettavat toiminnot

- [ ] Yleinen käyttöliittymä
- [ ] Rahan/pisteiden tarkastelu
- [ ] Lottosimulaatiosta tulostetta ja statistiikkaa, jota näkee pelin aikana
- [ ] Vakiorivejen syöttö
- [ ] Arparivien määrittely
M1888's avatar
M1888 committed
63 64 65 66
- [ ] Lottosimulaation asetusten säätö
- [ ] Scoreboard
- [ ] Pelitilanteen tallennus
- [ ] Aiemman tallennuksen lataaminen
M1888's avatar
M1888 committed
67 68 69

## Käyttötapauskaavio

M1888's avatar
M1888 committed
70
```plantuml
M1888's avatar
M1888 committed
71 72
left to right direction

M1888's avatar
M1888 committed
73 74 75 76 77 78 79 80 81 82 83
:Pelaaja: -left-> (Vakiorivien asetus)
:Pelaaja: -left-> (Arparivien määrän asetus)
:Pelaaja: -left-> (Simulaation käynnistys)
:Pelaaja: -left-> (Simulaation pysäytys)
:Pelaaja: -left-> (Simulaation edistäminen viikolla)
:Pelaaja: --> (Simulaation asetusten muuttaminen)
:Pelaaja: --> (Simulaation statistiikka ja tilannepäivitykset)
:Pelaaja: --> (Tilin saldon tarkastelu)
:Pelaaja: --> (Scoreboardin tarkastelu)
:Pelaaja: --> (Pelin tallennus)
:Pelaaja: --> (Aiemman tallennuksen lataus)
M1888's avatar
M1888 committed
84
```
M1888's avatar
M1888 committed
85

M1888's avatar
M1888 committed
86
## Luokkakaavio
M1888's avatar
M1888 committed
87 88 89 90

Alustava luokkakaavio ohjelman komponenteista:

![](luokkakaavio-v1.png)