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

namespace Lottokone.Model
{
    public class Rivi
    {
M1888's avatar
10.4.  
M1888 committed
11
        private Random rnd;
M1888's avatar
M1888 committed
12 13 14
        public short[] Numerot { get; set; }
        public Rivi()
        {
M1888's avatar
10.4.  
M1888 committed
15
            rnd = new Random();
M1888's avatar
M1888 committed
16 17 18
            Numerot = new short[7];
        }

M1888's avatar
10.4.  
M1888 committed
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
        public Rivi(short[] numerot)
        {
            if (numerot.Length != 7)
                throw new ArgumentException("Rivin pituus pitää olla 7 numeroa");
            Numerot = numerot;
        }

        public Rivi(Rivi r)
        {
            Numerot = r.Numerot;
        }

        public void ArvoRivi()
        {

            /*for(int i = 0; i < 7; i++)
            {
                Numerot[i] = (short)rnd.Next(1, 41);
            }*/

            Numerot = Array.ConvertAll(
                // otetaan numerot 1-40, järjestellään satunnaisesti, valitaan 7 ekaa, ja tehdään niistä taulukko
                Enumerable.Range(1, 40).OrderBy(x => rnd.Next()).Take(7).ToArray(),
                // Enumerable.Range tuottaa inttejä, jotka pitää sitten muuntaa shorteiksi
                Convert.ToInt16);

            // järjestellään rivi arpomisen jälkeen heti
            // suuruusjärjestykseen, niin vertailu on myöhemmin helpompaa
            Array.Sort(Numerot);
        }

        public short Oikein(object obj)
        {
            Rivi r = obj as Rivi;
            short osumia = 0;
            if (r == null)
                return 0;

            for(int i = 0; i < Numerot.Length; i++)
                if (Numerot[i] == r.Numerot[i])
                    osumia++;

            return osumia;
        }

M1888's avatar
M1888 committed
64 65 66 67 68 69
        public override bool Equals(object obj)
        {
            Rivi r = obj as Rivi;
            if (r == null)
                return false;

M1888's avatar
10.4.  
M1888 committed
70 71 72
            for (int i = 0; i < Numerot.Length; i++)
                if (Numerot[i] != r.Numerot[i])
                    return false;
M1888's avatar
M1888 committed
73

M1888's avatar
10.4.  
M1888 committed
74
            return true;
M1888's avatar
M1888 committed
75 76 77 78 79 80
        }

        public override int GetHashCode()
        {
            return 521069651 + EqualityComparer<short[]>.Default.GetHashCode(Numerot);
        }
M1888's avatar
10.4.  
M1888 committed
81 82 83 84 85 86 87 88 89 90 91

        public override string ToString()
        {
            string s = "[";

            foreach (short n in Numerot)
                s += $" {n} ";

            s += "]";
            return s;
        }
M1888's avatar
M1888 committed
92 93
    }
}