예제 #1
0
        private readonly FormOperations fo        = new FormOperations(Vakiot.Selolaskuri_enum.WPF_XAML); // information and instruction windows etc.

        // --------------------------------------------------------------------------------
        // LOMAKKEEN KENTTIEN ARVOJEN HAKEMINEN
        // --------------------------------------------------------------------------------
        // Tietoja ei tarkisteta tässä
        // Miettimisaika on aina kelvollinen, mutta merkkijonot eivät välttämättä
        // Myös ottelun tulos voi/saa olla antamatta, joten silloin se on määrittelemätön
        //
        // Jos CSV-formaatti ja on liian monta arvoa, palauttaa null
        private Syotetiedot HaeSyotteetLomakkeelta()
        {
            // Remove all leading and trailing white spaces from the form
            selo_in.Text      = selo_in.Text.Trim();
            pelimaara_in.Text = pelimaara_in.Text.Trim();

            // NOTE! In Java version this comboBox could return also null, so there have to check for null value
            vastustajanSelo_comboBox.Text = vastustajanSelo_comboBox.Text.Trim();

            // trim opponents field -> updated on display
            if (string.IsNullOrWhiteSpace(vastustajanSelo_comboBox.Text) == false)
            {
                // poista ylimääräiset välilyönnit, korvaa yhdellä
                // poista myös välilyönnit pilkun molemmilta puolilta, jos on CSV-formaatti
                vastustajanSelo_comboBox.Text = so.SiistiVastustajatKentta(vastustajanSelo_comboBox.Text); // .Trim jo tehty
            }

            return(new Syotetiedot(HaeMiettimisaika(), selo_in.Text, pelimaara_in.Text, vastustajanSelo_comboBox.Text, HaeOttelunTulos()));
        }
예제 #2
0
        // Kopioi leikekirjasta Vastustajat-historiaan tekstirivit
        //
        // Ei tarkisteta, että ovatko vastustajat/tulokset oikeassa formaatissa.
        // Vain tarkistukset, että pituus on vähintään seloluvun pituus (eli 4), eikä tule kahta samaa riviä.
        // Ei saa olla myöskään liian pitkä rivi eikä liian montaa riviä.
        //
        // Osa syötteestä on tarkoitus ajaa CSV-formaatissa (silloin täydellinen tai vain miettimisaika otetaan lomakkeelta)
        // Ja osa on tarkoitettu käytettäväksi erillisesti annetun miettimisajan, oman vahvuusluvun ja pelimäärän kanssa.
        //
        // Tekstistä poistetaan ylimääräiset välilyönnit.
        private void PasteVastustajatToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Haetaan data leikekirjasta
            IDataObject           iData = Clipboard.GetDataObject();
            SelolaskuriOperations so    = new SelolaskuriOperations();

            string[] leikekirja   = null;
            int      lisatytRivit = 0;

            // jos leikekirjassa on tekstiä, niin poista aiemmat vastustajat,
            // käsittele riveittäin, tarkista ja tallenna vastustajanSelo-kenttään
            if (iData.GetDataPresent(DataFormats.Text))
            {
                // Tämä lisäisi kaikki rivit tarkistamatta: vastustajanSelo_comboBox.Items.AddRange(iData.GetData(DataFormats.Text).ToString().Split('\n'));
                //
                // Ei tallenneta liian pitkiä tai lyhyitä rivejä, eikä liian montaa riviä, eikä samaa riviä kahdesti.
                // Rivin on aloitettava numerolla (eli selo tai miettimisaika) tai ottelutuloksella (+, - tai =)
                leikekirja = iData.GetData(DataFormats.Text).ToString().Split('\n'); // Ei haittaa, jos on "\r\n", koska poistetaan tarkistuksessa
                foreach (string rivi in leikekirja)
                {
                    // poista ylimääräiset välilyönnit ennen tarkistusta ja mahdollista tallennusta
                    string rivi2 = so.SiistiVastustajatKentta(rivi.Trim());

                    if (rivi2.Length >= Vakiot.SELO_PITUUS && rivi2.Length <= Vakiot.LEIKEKIRJA_MAX_RIVINPITUUS &&
                        (rivi2[0] == '+' || rivi2[0] == '-' || rivi2[0] == '=' || (rivi2[0] >= '0' && rivi2[0] <= '9')) &&
                        !vastustajanSelo_comboBox.Items.Contains(rivi2))
                    {
                        // vanhat tiedot poistetaan vain, jos on kelvollista lisättävää
                        if (lisatytRivit == 0)
                        {
                            TyhjennaVastustajat();
                        }

                        // on poistanut ylimääräiset välilyönnit ennen tallennusta
                        vastustajanSelo_comboBox.Items.Add(rivi2);
                        if (++lisatytRivit >= Vakiot.LEIKEKIRJA_MAX_RIVIMAARA)
                        {
                            break;
                        }
                    }
                }
            }

            if (lisatytRivit > 0 && null != leikekirja)
            {
                MessageBox.Show(
                    "Vastustajiin lisätty " + lisatytRivit + (lisatytRivit == 1 ? " rivi." : " riviä.")
                    + " Leikekirjassa oli " + leikekirja.Length + (leikekirja.Length == 1 ? " rivi." : " riviä.")
                    + " Lisätään enintään " + Vakiot.LEIKEKIRJA_MAX_RIVIMAARA + " riviä."
                    + Environment.NewLine
                    + "Huom! Ei tarkistettu, onko kelvollista ottelutietoa. Tarkistettu vain, että rivi alkaa"
                    + Environment.NewLine
                    + "numerolla tai tuloksella  (+-=), rivin pituus on välillä 4 (seloluvun pituus) - " + Vakiot.LEIKEKIRJA_MAX_RIVINPITUUS
                    + Environment.NewLine
                    + "eikä lisätä samoja rivejä.");
            }
            else
            {
                MessageBox.Show("Paste: Leikekirjan sisältöä ei hyväksytty. Ei muutettu vastustajia/ottelutietoja.");
            }
        }
예제 #3
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());
        }