Example #1
0
        // --------------------------------------------------------------------------------
        // Lomakkeen tietojen käsittely, laskenta ja tuloksien näyttäminen
        // --------------------------------------------------------------------------------
        // Haetaan tiedot lomakkeelta
        // Tarkistataan ne
        // Lasketaan uusi vahvuusluku ja ottelumäärä sekä muut tulokset
        // Näytetään tulokset
        //
        // Virhetarkastus ja laskenta erillisessä luokassa SelolaskuriOperations,
        // jotta niitä voidaan kutsua myös yksikkötestauksesta
        //
        private bool LaskeOttelunTulosLomakkeelta()
        {
            bool status = true;
            int  tulos;

            // hakee syötetyt tekstit ja tehdyt valinnat, ei virhetarkastusta
            Syotetiedot syotteet = HaeSyotteetLomakkeelta();

            if (syotteet == null)
            {
                NaytaVirheilmoitus(Vakiot.SYOTE_VIRHE_CSV_FORMAT);
                status = false;
            }
            else if ((tulos = so.TarkistaSyote(syotteet)) != Vakiot.SYOTE_STATUS_OK)
            {
                NaytaVirheilmoitus(tulos);
                status = false;
            }
            else
            {
                Selopelaaja tulokset = so.SuoritaLaskenta(syotteet);

                // Tuloksissa näytetään myös selo-muutos
                NaytaTulokset(tulokset);
            }

            return(status);
        }
Example #2
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));
        }
Example #3
0
        // Lasketut tulokset lomakkeelle
        //   Uusi vahvuusluku ja sen muutos +/- NN pistettä
        //   uusi pelimäärä tai tyhjä
        //   piste-ero
        private void NaytaTulokset(Selopelaaja tulokset)
        {
            //   Uusi vahvuusluku ja sen muutos +NN, -NN tai 0 pistettä
            uusiSelo_out.Text   = tulokset.UusiSelo.ToString();
            selomuutos_out.Text = (tulokset.UusiSelo - tulokset.AlkuperainenSelo).ToString("+#;-#;0");

            //   uusi pelimäärä tai tyhjä
            if (tulokset.UusiPelimaara != Vakiot.PELIMAARA_TYHJA)
            {
                uusiPelimaara_out.Text = tulokset.UusiPelimaara.ToString();
            }
            else
            {
                uusiPelimaara_out.Text = "";
            }


            // Vastustajien vahvuuslukujen vaihtelualue (paitsi jos yksi vastustaja, niin ei vaihtele)
            //if (tulokset.VastustajaMin != tulokset.VastustajaMax)
            vastustajatMinMax_out.Text = tulokset.VastustajaMin + " - " + tulokset.VastustajaMax;

            // Vastustajien vahvuuslukujen keskiarvo. Kumpi, ei desimaaleja vai yksi desimaali?
            keskivahvuus_out.Text = tulokset.TurnauksenKeskivahvuus.ToString();
            //keskivahvuus_out.Text = (tulokset.TurnauksenKeskivahvuus10x / 10F).ToString("0.0");

            // oman vahvuusluvun piste-ero turnauksen keskivahvuuteen nähden
            // näytetään etumerkki miinus, jos turnaus on heikompi
            pisteEro_out.Text = /*Math.Abs*/ (tulokset.TurnauksenKeskivahvuus - tulokset.AlkuperainenSelo).ToString("+#;-#;0");

            // Turnauksen loppupisteet yhdellä desimaalilla / ottelujen lkm, esim.  2.5 / 6 tai 2.0 / 6
            turnauksenTulos_out.Text =
                (tulokset.TurnauksenTulos2x / 2F).ToString("0.0") + " / " + tulokset.VastustajienLkm;

            // Vahvuusluku on voinut vaihdella laskennan edetessä, jos vastustajat ovat olleet formaatissa "+1622 -1880 =1633"
            // Vaihteluväliä ei ole, jos laskenta on tehty yhdellä lausekkeella 1.5 1622 1880 1633 tai on ollut vain yksi vastustaja
            if (tulokset.MinSelo != tulokset.MaxSelo)
            {
                vaihteluvali_out.Text = tulokset.MinSelo + " - " + tulokset.MaxSelo;
            }
            else
            {
                vaihteluvali_out.Text = "";
            }

            // Odotustulosta tai sen summaa ei näytetä uudelle pelaajalle, koska vahvuusluku on vielä provisional
            // Uuden pelaajan laskennasta annetaan ilmoitusteksti
            // Jos vaihdettiin laskentaa (syötteessä '/'), niin myös uuden pelaajan laskennassa olleiden pelien lkm
            if (tulokset.UudenPelaajanLaskenta || tulokset.UudenPelaajanPelitLKM > 0)
            {
                odotustulos_out.Text                 = "";
                UudenPelaajanLaskenta_txt.Text       = (tulokset.UudenPelaajanPelitLKM > 0) ? "uuden pelaajan laskentaa " + tulokset.AlkuperainenPelimaara + "+" + tulokset.UudenPelaajanPelitLKM + " peliä" : "uuden pelaajan laskenta";
                UudenPelaajanLaskenta_txt.Visibility = Visibility.Visible;  // WinForms: .Visible = true;
            }
            else
            {
                odotustulos_out.Text = (tulokset.Odotustulos / 100F).ToString("0.00");
                UudenPelaajanLaskenta_txt.Visibility = Visibility.Hidden; // WInForms: .Visible = false;
            }


            // kerroin on laskettu alkuperäisestä omasta selosta (laskennan aputieto)
            //XXX: Poistettu lomakkeelta kerroin_out.Text = tulokset.Kerroin.ToString();

            // Jos ei käytetty tulospainikkeita, niin tuloksen valintanapit varmuuden vuoksi pois päältä
            // Tulospainikkeita käytettäessä yksi vastustajan selo, eikä tulosta annettu muodossa "1.0 1434" tai "+1434"
            if (!tulokset.KaytettiinkoTulospainikkeita)
            {
                tulosVoitto_btn.IsChecked   = false;    // WinForms:  Checked = false;
                tulosTasapeli_btn.IsChecked = false;
                tulosTappio_btn.IsChecked   = false;
            }

            // Jos käytetty CSV-formaattia, on voitu antaa eri miettimisaika kuin mitä valittu buttoneilla,
            // joten varmuuden vuoksi päivitetään SELO- ja PELO-tekstit (vaikka voivat jo olla oikein)
            // Turhan päivittämisen voisi estää lisäämällä flag syötetietoihin kertomaan, oliko csv:ssä miettimisaika.
            //
            // Ei riitä tarkistaa, onko valittu eri kuin näytöllä, koska tekstit on voitu vaihtaa välillä
            if (tulokset.Miettimisaika == Vakiot.Miettimisaika_enum.MIETTIMISAIKA_ENINT_10MIN)
            {
                VaihdaSeloPeloTekstit(Vakiot.VaihdaMiettimisaika_enum.VAIHDA_PELOKSI);
            }
            else
            {
                VaihdaSeloPeloTekstit(Vakiot.VaihdaMiettimisaika_enum.VAIHDA_SELOKSI);
            }

            // Suoritusluku
            // Näytä kolmella eri tavalla lasketut tulokset
            // Laskenta alun perin http://shakki.kivij.info/performance_calculator.shtml
            suoritusluku_out.Text            = tulokset.Suoritusluku.ToString();
            suorituslukuFIDE_out.Text        = tulokset.SuorituslukuFIDE.ToString();
            suorituslukuLineaarinen_out.Text = tulokset.SuorituslukuLineaarinen.ToString();
        }
Example #4
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());
        }