Pelaaja.cs 4.25 KB
Newer Older
M1888's avatar
M1888 committed
1 2
using System;
using System.Collections.Generic;
M1888's avatar
M1888 committed
3
using System.ComponentModel;
M1888's avatar
M1888 committed
4
using System.Linq;
M1888's avatar
M1888 committed
5
using System.Runtime.CompilerServices;
M1888's avatar
M1888 committed
6 7 8 9 10
using System.Text;
using System.Threading.Tasks;

namespace Lottokone.Model
{
M1888's avatar
M1888 committed
11
    public class Pelaaja : INotifyPropertyChanged
M1888's avatar
M1888 committed
12
    {
M1888's avatar
M1888 committed
13 14
        public event PropertyChangedEventHandler PropertyChanged;

M1888's avatar
M1888 committed
15
        // Pelaajan nimi.
M1888's avatar
M1888 committed
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
        private string nimi;
        public string Nimi
        {
            get
            {
                return nimi;
            }
            set
            {
                nimi = value;
                RaisePropertyChanged();
            }
        }

        // Tilin saldo. Nollista lähdetään.
        private int saldo;
M1888's avatar
M1888 committed
32 33
        public int Saldo
        {
M1888's avatar
M1888 committed
34 35 36 37 38 39
            get
            {
                return saldo;
            }
            set
            {
M1888's avatar
M1888 committed
40 41 42 43 44
                // jos määrä oli positiivinen, lisätään se voittoihin
                if(value - saldo > 0)
                {
                    Voitot += (uint)(value - saldo);
                }
M1888's avatar
M1888 committed
45 46 47 48 49
                saldo = value;
                RaisePropertyChanged();
            }
        }

M1888's avatar
M1888 committed
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
        // Kaikki pelaajan saamat voitot. Pelkkää plussaa.
        private uint voitot;
        public uint Voitot
        {
            get
            {
                return voitot;
            }
            set
            {
                voitot = value;
                RaisePropertyChanged();
            }

        }

M1888's avatar
M1888 committed
66
        // Lista lottoriveistä
M1888's avatar
M1888 committed
67 68
        public List<Lottorivi> Rivit { get; set; }

M1888's avatar
M1888 committed
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
        // Määrä siitä, montako riviä pelaajalla pitäisi olla
        private int riveja;
        public int Riveja {
            get
            {
                return riveja;
            }
            set
            {
                riveja = value;
                RaisePropertyChanged();
            }
        }

        // Kuinka monta viikkoa pelaajan rivit on voimassa?
        public int RivitVoimassa { get; set; }


M1888's avatar
M1888 committed
87

M1888's avatar
M1888 committed
88 89 90
        public Pelaaja()
        {
            Saldo = 0;
M1888's avatar
M1888 committed
91
            Voitot = 0;
M1888's avatar
M1888 committed
92 93
            Rivit = new List<Lottorivi>();
            Riveja = 0;
M1888's avatar
M1888 committed
94 95 96 97 98 99
        }
        public Pelaaja(string nimi) : this()
        {
            Nimi = nimi;
        }

M1888's avatar
M1888 committed
100
        public Pelaaja(int riveja, int voimassa) : this()
M1888's avatar
M1888 committed
101 102
        {
            Riveja = riveja;
M1888's avatar
M1888 committed
103
            RivitVoimassa = voimassa;
M1888's avatar
M1888 committed
104
            for (int i = 0; i < Riveja; i++)
M1888's avatar
M1888 committed
105 106 107
            {
                Rivit.Add(new Lottorivi(RivitVoimassa));
            }
M1888's avatar
M1888 committed
108 109
        }

M1888's avatar
M1888 committed
110 111 112 113 114
        public Pelaaja(string nimi, int riveja, int voimassa) : this(riveja, voimassa)
        {
            Nimi = nimi;
        }

M1888's avatar
M1888 committed
115 116
        public void Tick()
        {
M1888's avatar
M1888 committed
117 118 119 120 121 122
            // Veloitetaan lottorivien hinta tililtä.
            // Tilin saldo on int, ja rivihinta on float, joten pyöristysvirheitä saattaa sattua.
            // Kerrotaan rivihinta kaikkien rivien määrällä, ja pyöristetään se, niin ei pitäisi mennä
            // liian kauas metsään.
            Saldo -= (int)Math.Round(Rivit.Count() * Properties.Settings.Default.Rivihinta);

M1888's avatar
M1888 committed
123 124
            // Käydään rivit takaperin läpi, niin voidaan tarvittaessa
            // poistaa indeksistä jossa ollaan ja jatkaa looppia turvallisesti.
M1888's avatar
M1888 committed
125
            for (int i = Rivit.Count() - 1; i >= 0; i--)
M1888's avatar
M1888 committed
126
            {
M1888's avatar
M1888 committed
127
                Lottorivi r = Rivit[i];
M1888's avatar
M1888 committed
128 129 130
                // jos rivi on tässä vaiheessa nolla viikkoa voimassa,
                // niin se on ikuinen rivi, jota ei arvota uudelleen.
                if (r.Voimassa != 0)
M1888's avatar
M1888 committed
131 132
                {
                    r.Voimassa--;
M1888's avatar
M1888 committed
133
                    if (r.Voimassa == 0)
M1888's avatar
M1888 committed
134 135
                        Rivit.Remove(r);
                }
M1888's avatar
M1888 committed
136
            }
M1888's avatar
M1888 committed
137

M1888's avatar
M1888 committed
138
            // Luodaan uusia arparivejä tarpeen mukaan
M1888's avatar
M1888 committed
139 140
            int ero = Riveja - Rivit.Count();
            if (ero > 0)
M1888's avatar
M1888 committed
141
            {
M1888's avatar
M1888 committed
142
                for (int i = 0; i < ero; i++)
M1888's avatar
M1888 committed
143 144 145 146 147 148 149 150 151
                {
                    Rivit.Add(new Lottorivi(RivitVoimassa));
                }
            }
        }
        protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
M1888's avatar
M1888 committed
152
        }
M1888's avatar
M1888 committed
153 154 155 156 157

        public override string ToString()
        {
            return $"{Saldo:C0}: {Nimi}";
        }
M1888's avatar
M1888 committed
158 159
    }
}