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); } }