Salve ragazzi, ho bisogno di qualche consiglio su come far funzionare perfettamente questo programmino.
In pratica volevo realizzare/simulare una specie di tombola, dove c'è il "dealer" o banco, il "player" ed una lista dinamica di giocatori .
Il codice è molto rudimentale perché è un mix di prove ecc ecc; comunque in pratica il programma ci chiede all'inizio quanti giocatori siamo ed ognuno di noi deve scegliere una cartella, da 1 a 6 (ogni cartella è composta da 15 numeri).
Finita questa prima fase, il bancone (dentro un while) inizierà a sorteggiare dei numeri random (1,90) ognuno diverso dall'altro fino a quando il giocatore[j-esimo] presente nella lista non farà tombola; uscito dal while il programma dovrà dirmi il giocatore x dopo quante estrazioni ha fatto tombola, in modo che alla fine si possa stabilire che realmente ha fatto per primo tombola.
Per quanto riguarda ambo, terna, quaterna e cinquina lo vedrò in seguito; per ora mi interessa farlo funzionare così.
il problema che riscontro è che una volta che il programma mi dice che il player x ha fatto tombola dopo ad esempio 80 numeri estratti, non riesco ad azzerargli correttamente i numeri estratti in modo che riparta da capo col giocatore [j-esimo] seguente, senza la presenza di " bug".
CODICE BANCO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tombola1Player
{/// <summary>
/// Banco has to generate random numbers from 1 to 90 each time he's called
/// </summary>
class Banco
{
public Banco() { }
List<int> listaEstrazioni = new List<int>();
Random rnd = new Random();
public int numeroGenerato=0;
public int estraiNumero()
{
for (; ; ) {
numeroGenerato = rnd.Next(1, 91);
if (!listaEstrazioni.Contains(numeroGenerato))
{
listaEstrazioni.Add(numeroGenerato);
return numeroGenerato;
}
}
}
}
}
CODICE GIOCATORE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tombola1Player
{
class Giocatore
{
int id = 0;
int count = 0;
Banco bancone = new Banco();
List<int> cartellaPlayer = new List<int> {21,19,17,31,14,6,12,71,22,10,2,57,37,4};
List<int> cartellaPlayer2 = new List<int> { 7,13,21,35,37,49,43,51,63,75,77,83,91,27 };
List<int> cartella1 = new List<int> { 8,30,41,62,71,14,24,39,54,82,19,25,44,59,89};
List<int> cartella2 = new List<int> { 1,20,40,55,81,16,36,65,75,87,3,18,21,69,78};
List<int> cartella3 = new List<int> { 11,35,50,60,70,6,42,53,79,83,28,37,48,68,86 };
List<int> cartella4 = new List<int> { 12,23,45,51,90,4,15,33,47,72,9,27,38,58,66 };
List<int> cartella5 = new List<int> { 22,34,56,61,80,2,13,29,43,76,7,17,63,77,85 };
List<int> cartella6 = new List<int> { 5,10,46,52,64,26,31,57,73,84,32,49,67,74,88 };
public Giocatore(int x)
{
id = x;
}
public Giocatore() { }
/// <summary>
/// Player checks the extract number and if he has that number
/// he will mark up the corrispondent one on his table.
/// </summary>
/// <returns></returns>
public void controllaNumero(int n)
{
if (cartellaPlayer.Contains(n))
{
count++;
}
}
/// <summary>
/// return true if player made Tombola!, false if not!
/// </summary>
/// <returns></returns>
public bool tombola()
{
if (count == 15)
{
return true;
}
else
{
return false;
}
}
public void verificaTombola()
{
Console.WriteLine("Player"+id+ ": Ecco i miei numeri-- > ");
for (int i = 0; i < cartellaPlayer.Count; i++)
{
Console.Write(cartellaPlayer[i]+" || ");
}
}
public int GetNomeGiocatore()
{
return id;
}
public void SetCartella(List <int>cartella)
{
cartellaPlayer = cartella;
}
/// <summary>
/// Questa funzione mi permette di far selezionare al giocatore la cartella con cui giocare
/// </summary>
/// <param name="x"></param>
public void SelezionaCartella(int x)
{
switch (x)
{
case 1:
SetCartella(cartella1);
Console.WriteLine("Hai selezionato la Cartella 1. ");
break;
case 2:
SetCartella(cartella2);
Console.WriteLine("Hai selezionato la Cartella 2. ");
break;
case 3:
SetCartella(cartella3);
Console.WriteLine("Hai selezionato la Cartella 3. ");
break;
case 4:
SetCartella(cartella4);
Console.WriteLine("Hai selezionato la Cartella 4. ");
break;
case 5:
SetCartella(cartella5);
Console.WriteLine("Hai selezionato la Cartella 5. ");
break;
case 6:
SetCartella(cartella6);
Console.WriteLine("Hai selezionato la Cartella 6. ");
break;
default:
Console.WriteLine("[ATTENZIONE, devi inserire un numero da 1 a 6!]");
break;
}
}
}
}
CODICE Program
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tombola1Player
{
class Program
{
static void Main(string[] args)
{
Banco dealer = new Banco();
Giocatore player = new Giocatore();
// Multigiocatore multiPlayer = new Multigiocatore();
List<Giocatore> ListaGiocatori = new List<Giocatore>();
int nmrCartella = 0;
int numeroGiocatori = 0;
Console.WriteLine("CIAO, Quanti giocatori siete?: ");
numeroGiocatori = Convert.ToInt32(Console.ReadLine());
for (int k = 1; k< numeroGiocatori+1; k++)
{
player = new Giocatore(k);
ListaGiocatori.Add(player);
}
for (int y = 0; y < numeroGiocatori; y++)
{
Console.Write("\nGiocatore "+ (y+1) +" quale cartella vuoi?: ");
nmrCartella = Convert.ToInt32(Console.ReadLine());
ListaGiocatori[y].SelezionaCartella(nmrCartella);
}
int i = 0;
for (int j = 0; j < ListaGiocatori.Count; j++)
{
while (i < 90 && !ListaGiocatori[j].tombola())
{
int num = dealer.estraiNumero();
// Console.WriteLine("Numero Estratto: " + num);
ListaGiocatori[j].controllaNumero(num);
i++;
}
Console.Write("\n\nIl giocatore " + ListaGiocatori[j].GetNomeGiocatore() + " ha fatto tombola dopo: ");
Console.WriteLine(i+ " numeri estratti");
ListaGiocatori[j].verificaTombola();
}
Console.ReadKey();
}
}
}
Aspetto un vostro riscontro