Exemple #1
0
        private void buttonCalcola_Click(object sender, EventArgs e)
        {
            Calculation calc = new Calculation();

            int nAttacks = listBox1.Items.Count;

            if (int.TryParse(textBox1.Text, out int HPconverted) && HPconverted > 0)
            {
                if (nAttacks > 1)
                {
                    List <int> previousRolls = new List <int> {
                        0
                    };
                    List <int> finalRolls = new List <int>();

                    for (int i = 0; i < nAttacks; i++)
                    {
                        List <int> rollsToSum = new List <int>();

                        string rolls = listBox1.Items[i].ToString().Trim(' ', '(', ')');

                        foreach (string roll in rolls.Split(','))
                        {
                            if (int.TryParse(roll.Trim(' '), out int convertedRoll) && convertedRoll > 0)
                            {
                                rollsToSum.Add(convertedRoll);
                            }
                        }

                        if (rollsToSum.Count == 0)
                        {
                            const string text    = "Almeno una lista di danni non è valida. Assicurati di inserire liste di numeri interi maggiori di zero separati tra loro da virgole, una lista per volta";
                            const string caption = "Errore nei dati inseriti";
                            _ = MessageBox.Show(text, caption,
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Error);

                            return;
                        }

                        calc.ListAttackRolls.Add(rollsToSum);

                        finalRolls.Clear();
                        foreach (int x in previousRolls)
                        {
                            foreach (int y in rollsToSum)
                            {
                                finalRolls.Add(x + y);
                            }
                        }

                        previousRolls.Clear();
                        foreach (int x in finalRolls)
                        {
                            previousRolls.Add(x);
                        }
                    }

                    calc.HP        = HPconverted;
                    calc.KOcounter = finalRolls.Where(x => x >= calc.HP).Count();
                    calc.Total     = finalRolls.Count;

                    if (calc.KOcounter == 0)
                    {
                        const string text = "Il Pokémon non va mai KO";
                        labelCalcoloBlando.Text = text;
                        if (!string.IsNullOrEmpty(labelCalcoloMin.Text))
                        {
                            labelCalcoloMin.Text = string.Empty;
                        }
                        if (!string.IsNullOrEmpty(labelCalcoloPreciso.Text))
                        {
                            labelCalcoloPreciso.Text = string.Empty;
                        }
                    }
                    else if (calc.KOcounter == calc.Total)
                    {
                        const string text = "Il Pokémon va KO sempre";
                        labelCalcoloBlando.Text = text;
                        if (!string.IsNullOrEmpty(labelCalcoloMin.Text))
                        {
                            labelCalcoloMin.Text = string.Empty;
                        }
                        if (!string.IsNullOrEmpty(labelCalcoloPreciso.Text))
                        {
                            labelCalcoloPreciso.Text = string.Empty;
                        }
                    }
                    else
                    {
                        if (calc.Total % calc.KOcounter == 0)
                        {
                            calc.SimplifiedKOcounter = 1;
                            calc.SimplifiedTotal     = calc.Total / calc.KOcounter;
                        }
                        else
                        {
                            int gcd = SimpleMath.GCD(calc.KOcounter, calc.Total);
                            calc.SimplifiedKOcounter = calc.KOcounter / gcd;
                            calc.SimplifiedTotal     = calc.Total / gcd;
                        }
                        calc.KOpercentage = calc.SimplifiedKOcounter * 100.0 / calc.SimplifiedTotal;
                        string text1 = $"Il Pokémon va KO {calc.KOcounter} volte su {calc.Total}";
                        string text2 = $"Rapporto semplificato: {calc.SimplifiedKOcounter}/{calc.SimplifiedTotal}";
                        string text3 = $"In percentuale: {calc.KOpercentage}%";
                        labelCalcoloBlando.Text  = text1;
                        labelCalcoloMin.Text     = text2;
                        labelCalcoloPreciso.Text = text3;
                    }

                    Calcs.Add(calc);

                    ViewModel.CalcsInMemory = Calcs.Count;

                    DidPrint = false;
                }
                else
                {
                    const string text    = "Inserisci almeno due liste di danni";
                    const string caption = "Liste danni insufficienti";
                    _ = MessageBox.Show(text, caption,
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Warning);
                }
            }
            else
            {
                const string text    = "Inserisci un numero intero maggiore di zero";
                const string caption = "HP non validi";
                _ = MessageBox.Show(text, caption,
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Warning);
            }
        }