Exemplo n.º 1
0
        // Miettimisaika, vain minuutit, esim. "5" tai "90"
        // Oltava kokonaisluku ja vähintään 1 minuutti
        private Vakiot.Miettimisaika_enum SelvitaMiettimisaikaCSV(string s)
        {
            Vakiot.Miettimisaika_enum aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_MAARITTELEMATON;
            int temp; // define here instead of "out int temp" for Visual Studio 2015 compatibility

            if (int.TryParse(s, out /*int*/ temp) == true)
            {
                if (temp < 1)
                {
                    // ei voida pelata ilman miettimisaikaa
                    // jo asetettu aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_MAARITTELEMATON;
                }
                else if (temp <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN)
                {
                    aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN;
                }
                else if (temp <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_11_59MIN)
                {
                    aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_11_59MIN;
                }
                else if (temp <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_60_89MIN)
                {
                    aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_60_89MIN;
                }
                else
                {
                    aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN;
                }
            }
            return(aika);
        }
Exemplo n.º 2
0
        public void TarkistaOttelulistaErillisinTuloksin()
        {
            // input
            Vakiot.Miettimisaika_enum aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN;
            string selo        = "1525";
            string pelimaara   = "";
            string vastustajat = "+1525 +1441 -1973 +1718 -1784 -1660 -1966 =1234 1555";

            Vakiot.OttelunTulos_enum tulos = Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON;


            Syotetiedot s = new Syotetiedot(aika, selo, pelimaara, vastustajat, tulos);

            //
            // Check that the input was stored correctly!
            //
            Assert.AreEqual(aika, s.Miettimisaika);
            Assert.AreEqual(selo, s.AlkuperainenSelo_str);
            Assert.AreEqual(pelimaara, s.AlkuperainenPelimaara_str);
            Assert.AreEqual(vastustajat, s.VastustajienSelot_str);
            Assert.AreEqual(tulos, s.OttelunTulos);

            //
            // parse strings into numbers, create an array of opponents
            //
            int status = so.TarkistaSyote(s);

            Assert.AreEqual(Vakiot.SYOTE_STATUS_OK, status);

            int seloInt;

            if (int.TryParse(selo, out seloInt) == false)
            {
                Assert.AreEqual("Illegal test data (number)", selo);
            }

            Assert.AreEqual(seloInt, s.AlkuperainenSelo);
            Assert.AreEqual(Vakiot.PELIMAARA_TYHJA, s.AlkuperainenPelimaara);

            //
            // Tarkista ottelulista, ensin lukumäärä
            //
            string[] vastustajatStr = vastustajat.Split(' ');
            Assert.AreEqual(vastustajatStr.Length, s.Ottelut.Lukumaara);

            // Käy sitten tallennetut ottelut läpi

            int         i     = 0;
            Ottelulista lista = s.Ottelut;

            var ottelu = lista.HaeEnsimmainen(); // vastustajanSelo, ottelunTulos

            while (ottelu.Item2 != Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON)
            {
                Assert.AreEqual(MuodostaOttelu(ottelu.Item1, ottelu.Item2), vastustajatStr[i]);
                ottelu = lista.HaeSeuraava();
                i++;
            }
        }
Exemplo n.º 3
0
        // ************ TARKISTA MIETTIMISAIKA ************
        //
        // Nämä miettimisajan valintapainikkeet ovat omana ryhmänään paneelissa
        // Aina on joku valittuna, joten ei voi olla virhetilannetta.
        private static int TarkistaMiettimisaika(Vakiot.Miettimisaika_enum aika)
        {
            int tulos = Vakiot.SYOTE_STATUS_OK;

            if (aika == Vakiot.Miettimisaika_enum.MIETTIMISAIKA_MAARITTELEMATON)
            {
                tulos = Vakiot.SYOTE_VIRHE_MIETTIMISAIKA_CSV;
            }
            return(tulos);
        }
Exemplo n.º 4
0
        // --------------------------------------------------------------------------------
        // Parametrien tarkistuksen ja laskennan testauksen apurutiinit
        //
        // Näissä kaikissa on string selo ja string vastustajat
        // Muiden parametrien puuttumisen varalta on useita versioita
        // --------------------------------------------------------------------------------

        // Use old Tuple, because Visual Studio Community 2015 has older C#
        public Tuple <int, Selopelaaja> Testaa(Vakiot.Miettimisaika_enum aika, string selo, string pelimaara, string vastustajat, Vakiot.OttelunTulos_enum tulos)
        {
            Syotetiedot syotetiedot = new Syotetiedot(aika, selo, pelimaara, vastustajat, tulos, /*trim input strings*/ true);
            int         status;
            Selopelaaja tulokset = null;

            if ((status = so.TarkistaSyote(syotetiedot)) == Vakiot.SYOTE_STATUS_OK)
            {
                // If the input was OK, continue and calculate
                // If wasn't, then tulokset is left null and error status will be returned
                tulokset = so.SuoritaLaskenta(syotetiedot);
            }
            return(Tuple.Create(status, tulokset));
        }
Exemplo n.º 5
0
        // Eri miettimisajoilla voi olla omia kertoimia
        private static float MaaritaLisakerroin(int selo, Vakiot.Miettimisaika_enum aika)
        {
            float f = 1.0F;

            // Tämä ei vaikuta uuden pelaajan SELOn laskentaan
            if (aika == Vakiot.Miettimisaika_enum.MIETTIMISAIKA_60_89MIN)
            {
                f = 0.5F;
            }
            else if (aika == Vakiot.Miettimisaika_enum.MIETTIMISAIKA_11_59MIN)
            {
                f = (selo < 2300) ? 0.3F : 0.15F;
            }
            return(f);
        }
Exemplo n.º 6
0
        public IActionResult OnPostLaskeVahvuusluku()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            //
            // HAE SYÖTTEET LOMAKKEELTA
            //
            Vakiot.Miettimisaika_enum aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN;

            if (miettimisaika_radiobutton_in <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN)
            {
                aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN;
            }
            else if (miettimisaika_radiobutton_in <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_11_59MIN)
            {
                aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_11_59MIN;
            }
            else if (miettimisaika_radiobutton_in <= (int)Vakiot.Miettimisaika_enum.MIETTIMISAIKA_60_89MIN)
            {
                aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_60_89MIN;
            }
            else
            {
                aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN;
            }

            string selo        = selo_in;
            string pelimaara   = pelimaara_in;
            string vastustajat = vastustajat_in;

            // Virhetilanne, jos vastustajat on tyhjä (jatketaan silti vielä)
            if (selo == null)
            {
                selo = "";
            }
            if (pelimaara == null)
            {
                pelimaara = "";
            }
            if (vastustajat == null)
            {
                vastustajat = "";
            }

            //
            // KÄSITTELE JA TARKISTA SYÖTE
            //
            vastustajat = vastustajat.Trim();
            if (string.IsNullOrWhiteSpace(vastustajat) == false)
            {
                // poista ylimääräiset välilyönnit, korvaa yhdellä
                // poista myös välilyönnit pilkun molemmilta puolilta, jos on CSV-formaatti
                vastustajat = so.SiistiVastustajatKentta(vastustajat); // .Trim jo tehty

                // näytölle siistitty versio (tämä ei toimikaan näin helposti, Ajax?)
                vastustajat_in = vastustajat;
            }

            Syotetiedot syotetiedot = new Syotetiedot(aika, selo, pelimaara, vastustajat, Vakiot.OttelunTulos_enum.TULOS_EI_ANNETTU);

            int status;

            if ((status = so.TarkistaSyote(syotetiedot)) == Vakiot.SYOTE_STATUS_OK)
            {
                //
                // LASKE
                //
                Selopelaaja tulokset = so.SuoritaLaskenta(syotetiedot);

                //// jos on CSV, voidaan ottaa sieltä oikeasti käytetty miettimisaika
                //// tosin se ei päivity näytölle näin
                //if (aika != tulokset.Miettimisaika)
                //{
                //    miettimisaika_radiobutton_in = (int)tulokset.Miettimisaika;
                //}

                // Viimeksi lasketut tulokset talteen
                HttpContext.Session.SetInt32("laskettu selo", tulokset.UusiSelo);
                if (tulokset.UusiPelimaara > 0)
                {
                    HttpContext.Session.SetInt32("laskettu uusi pelimaara", tulokset.UusiPelimaara);
                }
                else
                {
                    HttpContext.Session.SetInt32("laskettu uusi pelimaara", 0);
                }
                HttpContext.Session.SetInt32("miettimisaika", miettimisaika_radiobutton_in);


                //
                // NÄYTÄ TULOKSET
                //
                // XXX: järjestä tulokset näytölle paremmin!
                //
                ViewData["TULOKSET"] = "Tulokset";

                ViewData["uusi_selo_nimi"] = "Uusi vahvuusluku (" + (tulokset.Miettimisaika == Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN ? "PELO" : "SELO") + "): ";
                ViewData["uusi_selo"]      = tulokset.UusiSelo;

                //// Muista viimeisimmät arvot lomakkeen piilotetuilla kentillä
                //ViewData["viimeksi_laskettu_selo"] = tulokset.UusiSelo.ToString();
                //if (tulokset.UusiPelimaara > 0)
                //    ViewData["viimeksi_laskettu_pelimaara"] = tulokset.UusiPelimaara.ToString();
                //else
                //    ViewData["viimeksi_laskettu_pelimaara"] = "";

                ViewData["selomuutos"] = "    Muutos: " + (tulokset.UusiSelo - tulokset.AlkuperainenSelo).ToString("+#;-#;0")
                                         + ((tulokset.MinSelo < tulokset.MaxSelo) ? "    Vaihteluväli: " + tulokset.MinSelo.ToString() + " - " + tulokset.MaxSelo.ToString() : "");

                if (tulokset.UusiPelimaara > 0)
                {
                    ViewData["uusi_pelimaara_nimi"] = "Uusi pelimäärä: ";
                    ViewData["uusi_pelimaara"]      = tulokset.UusiPelimaara;
                }

                if (tulokset.UudenPelaajanLaskenta || tulokset.UudenPelaajanPelitLKM > 0)
                {
                    ViewData["odotustulos"]           = "";
                    ViewData["uudenpelaajanlaskenta"] = (tulokset.UudenPelaajanPelitLKM > 0) ? " (uuden pelaajan laskentaa " + tulokset.AlkuperainenPelimaara + "+" + tulokset.UudenPelaajanPelitLKM + " peliä)" : " (uuden pelaajan laskenta) ";
                }
                else
                {
                    ViewData["odotustulos"]           = "Odotustulos: " + (tulokset.Odotustulos / 100F).ToString("0.00");
                    ViewData["uudenpelaajanlaskenta"] = "";
                }

                ViewData["turnauksentulos"] = "Turnauksen tulos: " + (tulokset.TurnauksenTulos2x / 2F).ToString("0.0") + " / " + tulokset.VastustajienLkm;

                // Keskivahvuus ja piste-ero
                // Vastustajien vahvuuslukujen keskiarvo. Kumpi, ei desimaaleja vai yksi desimaali?
                // oman vahvuusluvun piste-ero turnauksen keskivahvuuteen nähden
                // näytetään etumerkki miinus, jos turnaus on heikompi
                //ViewData["keskivahvuus"] = "Keskivahvuus: " + (tulokset.TurnauksenKeskivahvuus10x / 10F).ToString("0.0") + " Piste-ero: " + (Math.Abs(10*tulokset.AlkuperainenSelo - tulokset.TurnauksenKeskivahvuus10x)/10F).ToString("0.0");
                ViewData["keskivahvuus"] = "Keskivahvuus: " + tulokset.TurnauksenKeskivahvuus.ToString() + " Piste-ero: " + /*Math.Abs*/ (tulokset.TurnauksenKeskivahvuus - tulokset.AlkuperainenSelo).ToString("+#;-#;0");

                if (tulokset.VastustajienLkm > 1)
                {
                    ViewData["vastustajat_alue"] = "Vastustajat (min-max): " + tulokset.VastustajaMin + " - " + tulokset.VastustajaMax;
                }

                ViewData["suoritusluku"]            = "Suoritusluku: " + tulokset.Suoritusluku;
                ViewData["suorituslukuFIDE"]        = " Suoritusluku FIDE: " + tulokset.SuorituslukuFIDE;
                ViewData["suorituslukuLineaarinen"] = "Suoritusluku lineaarinen: " + tulokset.SuorituslukuLineaarinen;
            }
            else
            {
                //// Muista viimeisimmät arvot lomakkeen piilotetuilla kentillä
                //if (HttpContext.Session.GetInt32("laskettu selo") != null)
                //    ViewData["viimeksi_laskettu_selo"] = HttpContext.Session.GetInt32("laskettu selo").ToString();
                //if (HttpContext.Session.GetInt32("laskettu uusi pelimaara") != null)
                //    ViewData["viimeksi_laskettu_pelimaara"] = HttpContext.Session.GetInt32("laskettu uusi pelimaara").ToString();

                // virhestatus on negatiivinen luku, hae virheteksti
                if (Vakiot.SYOTE_STATUS_OK >= status && status >= Vakiot.SYOTE_VIRHE_MAX)
                {
                    // requires <div asp-validation-summary... >
                    ModelState.AddModelError(string.Empty, Vakiot.SYOTE_VIRHEET_text[Math.Abs(status)]);
                }
            }

            return(Page());
        }
Exemplo n.º 7
0
        public void TarkistaOttelulistaTurnauksenTuloksella()
        {
            // input
            Vakiot.Miettimisaika_enum aika = Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN;
            string selo        = "1525";
            string pelimaara   = "";
            string vastustajat = "1.5 1525 1441 1973 1718 1784 1660 1966";

            Vakiot.OttelunTulos_enum tulos = Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON;

            Syotetiedot s = new Syotetiedot(aika, selo, pelimaara, vastustajat, tulos);

            //
            // Check that the input was stored correctly!
            //
            Assert.AreEqual(aika, s.Miettimisaika);
            Assert.AreEqual(selo, s.AlkuperainenSelo_str);
            Assert.AreEqual(pelimaara, s.AlkuperainenPelimaara_str);
            Assert.AreEqual(vastustajat, s.VastustajienSelot_str);
            Assert.AreEqual(tulos, s.OttelunTulos);

            //
            // parse strings into numbers, create an array of opponents
            //
            int status = so.TarkistaSyote(s);

            Assert.AreEqual(Vakiot.SYOTE_STATUS_OK, status);

            int seloInt;

            if (int.TryParse(selo, out seloInt) == false)
            {
                Assert.AreEqual("Illegal test data (number)", selo);
            }

            Assert.AreEqual(seloInt, s.AlkuperainenSelo);
            Assert.AreEqual(Vakiot.PELIMAARA_TYHJA, s.AlkuperainenPelimaara);

            //
            // Tarkista ottelulista, ensin lukumäärä
            //
            // Huom! Nyt vastustajatStr sisältää myös turnauksen tuloksen, joten vähennettävä lukumäärää yhdellä
            //
            string[] vastustajatStr = vastustajat.Split(' ');
            Assert.AreEqual(vastustajatStr.Length - 1, s.Ottelut.Lukumaara);

            // Käy sitten tallennetut ottelut läpi

            // Huom! Koska vastustajatStr sisältää myös turnauksen tuloksen, aloitetaan indeksistä 1
            int         i     = 1;
            Ottelulista lista = s.Ottelut;

            var ottelu = lista.HaeEnsimmainen(); // vastustajanSelo, ottelunTulos

            while (ottelu.Item2 != Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON)
            {
                // Koska käytetty turnauksen tulosta, niin listaan tallennettuihin otteluihin ei ole annettu tulosta
                Assert.AreEqual(MuodostaOttelu(ottelu.Item1, ottelu.Item2), vastustajatStr[i]);
                ottelu = lista.HaeSeuraava();
                i++;
            }
        }
Exemplo n.º 8
0
 // Jos tulosta ei annettu, oletus TULOS_MAARITTELEMATON
 public Tuple <int, Selopelaaja> Testaa(Vakiot.Miettimisaika_enum aika, string selo, string pelimaara, string vastustajat)
 {
     return(Testaa(aika, selo, pelimaara, vastustajat, Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON));
 }
Exemplo n.º 9
0
        //  - TESTATTAESSA (UnitTest1.cs)
        //     Syotetiedot ottelu =
        //        new Syotetiedot(Vakiot.Miettimisaika_enum.MIETTIMISAIKA_VAH_90MIN, "1725", "1", "1441", Vakiot.OttelunTulos_enum.TULOS_VOITTO, /*doTrim*/true);
        // Testattaessa doTrim=true, koska välilyöntien poistoa ei tehdä yksikkötestauksessa vaan
        // poiston jättäminen tänne on osa testausta.
        public Syotetiedot(Vakiot.Miettimisaika_enum aika1, string selo1, string pelimaara1, string vastustajat1, Vakiot.OttelunTulos_enum tulos1, bool doTrim)
        {
            // XXX: Could check arguments everywhere: arg == null or sometimes string.IsNullOrEmpty(arg)
            if (selo1 == null)
            {
                throw new ArgumentNullException(nameof(selo1));
            }
            if (pelimaara1 == null)
            {
                throw new ArgumentNullException(nameof(pelimaara1));
            }
            if (vastustajat1 == null)
            {
                throw new ArgumentNullException(nameof(vastustajat1));
            }


            // Copy arguments, might be modified
            Vakiot.Miettimisaika_enum aika = aika1;
            string selo        = String.Copy(selo1);
            string pelimaara   = String.Copy(pelimaara1);
            string vastustajat = String.Copy(vastustajat1);

            Vakiot.OttelunTulos_enum tulos = tulos1;


            // If CSV format, values there will override other parameters
            if (vastustajat.Contains(','))
            {
                List <string> tmp = vastustajat.Split(',').ToList();

                if (tmp.Count != 2 || (tmp.Count == 2 && tmp[0].Trim().Length >= 4))
                {
                    //vastustajat = so.SiistiVastustajatKentta(vastustajat.Trim());
                    List <string> data = vastustajat.Split(',').ToList();

                    if (data.Count == 5)
                    {
                        aika        = this.SelvitaMiettimisaikaCSV(data[0]);
                        selo        = data[1];
                        pelimaara   = data[2];
                        vastustajat = data[3];
                        tulos       = this.SelvitaTulosCSV(data[4]);
                    }
                    else if (data.Count == 4)
                    {
                        // viimeinen osa voi sisältää vastustajat tuloksineen tai jos alkuperäinen pelimäärä on enintään 10,
                        // niin ensin lasketaan uuden pelaajan kaavalla ja loput "/"-merkin jälkeen menevät normaalilaskentaan
                        //  "90,1525,0,+1525 +1441 -1973 +1718 -1784 -1660 -1966 +1321 -1678 -1864 -1944 / -1995 +1695 -1930 1901",
                        aika        = this.SelvitaMiettimisaikaCSV(data[0]);
                        selo        = data[1];
                        pelimaara   = data[2];
                        vastustajat = data[3];
                        tulos       = Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON;
                    }
                    else if (data.Count == 3)
                    {
                        //aika = aika;
                        selo        = data[0];
                        pelimaara   = data[1];
                        vastustajat = data[2];
                        tulos       = Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON;
                    }
                    else if (data.Count == 2)
                    {
                        //aika = aika;
                        selo        = data[0];
                        pelimaara   = "";
                        vastustajat = data[1];
                        tulos       = Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON;
                    }
                    else
                    {
                        // XXX: CHECK WHAT HAPPENS HERE
                        // XXX: Virheen pitää olla Vakiot.SYOTE_VIRHE_CSV_FORMAT

                        //aika = aika;
                        selo        = "";
                        pelimaara   = "";
                        vastustajat = "";
                        tulos       = Vakiot.OttelunTulos_enum.TULOS_MAARITTELEMATON;
                    }
                    // The thinking time might be needed from the form if there are 2 or 3 values in CSV format
                    //return so.SelvitaCSV(aika, vastustajat);
                }
            }

            Miettimisaika = aika;
            // if doTrim -> remove leading and trailing white spaces
            AlkuperainenSelo_str      = doTrim ? selo.Trim() : selo;
            AlkuperainenPelimaara_str = doTrim ? pelimaara.Trim() : pelimaara;
            if (doTrim)
            {
                SelolaskuriOperations so = new SelolaskuriOperations();
                vastustajat = so.SiistiVastustajatKentta(vastustajat.Trim());
            }
            VastustajienSelot_str = vastustajat;
            OttelunTulos          = tulos;

            // Clear these too although not actually needed
            AlkuperainenSelo           = 0;
            AlkuperainenPelimaara      = 0;
            UudenPelaajanPelitEnsinLKM = 0;
            YksiVastustajaTulosnapit   = 0;

            // Create en empty list for matches (opponent's selo, match result)
            Ottelut = new Ottelulista();
        }
Exemplo n.º 10
0
        }                                                  // sis. vastustajien selot ja ottelutulokset


        // Konstruktorin käyttö:
        //  - Lomakkeelta (SelolaskuriForm.cs)
        //     return new Syotetiedot(HaeMiettimisaika(), selo_in.Text, pelimaara_in.Text, vastustajanSelo_comboBox.Text, HaeOttelunTulos());
        // Lomakkeella doTrim=false, koska ylimääräiset välilyönnit poistetaan jo ennen kutsua, jotta
        // ne saadaan päivitettyä myös lomakkeen kenttiin.
        public Syotetiedot(Vakiot.Miettimisaika_enum aika, string selo, string pelimaara, string vastustajat, Vakiot.OttelunTulos_enum tulos)
            : this(aika, selo, pelimaara, vastustajat, tulos, /*doTrim*/ false)
        {
        }