AIUTO CON PROGETTO C#

di il
22 risposte

AIUTO CON PROGETTO C#

Ciao a tutti vi scrivo perchè ho un problema con un progetto universitario. Ho scritto con visual C# 2010 express un programma che riproduce il gioco del tresette. Funziona correttamente finchè mi rendo conto che questo gioco ha la regola che se il primo giocatore gioca una carta di un determinato seme il secondo deve essere obbligato a rispondere con una carta dello stesso seme salvo che non ne abbia nessuna in mano. Io ho pensato di aggiungere questo pezzo di codice nella funzione giocaCarta che mi permette appunto di giocare la carta.

if (partita.carteGiocate == 1)
                {
                    for (int i = 10; i > 1; i--)
                    {
                        this.carteDaGiocare.Remove(carteDaGiocare[i]);

                    }

                    for (int i = 0; i < 10; i++)
                    {
                        if (carteGiocatore[i].Seme == cartaGiocata.Seme)
                        {
                            carteDaGiocare.Add(carteGiocatore[i]);
                             
                        }
                        
                    }

                    //gioco una carta dentro la lista a meno che non sia vuota
                    if (carteDaGiocare[0] == null)
                    {
                        cartaGiocata = carteGiocatore[indiceCartaDaGiocare];
                        carteGiocatore.Remove(carteGiocatore[indiceCartaDaGiocare]);
                    }
                    else
                    {
                        cartaGiocata = carteDaGiocare[indiceCartaDaGiocare];
                        carteDaGiocare.Remove(carteDaGiocare[indiceCartaDaGiocare]);
                    }

                }
                else
                {
                    // gioco la carta
                    cartaGiocata = carteGiocatore[indiceCartaDaGiocare];
                    carteGiocatore.Remove(carteGiocatore[indiceCartaDaGiocare]);
                }
Solo che quando lancio il debug mi da questo errore NullReferenceException non è stata gestita.
Non riesco a capire cosa significhi e cosa devo fare per sistemarlo.
Grazie in anticipo!!!

22 Risposte

  • Re: AIUTO CON PROGETTO C#

    Dovresti sapere in quale linea c'è quell'errore ... diccelo ...
  • Re: AIUTO CON PROGETTO C#

    Le righe che mi da errore sono quelle dove c'è la variabile che indica la lista carteDaGiocare
  • Re: AIUTO CON PROGETTO C#

    Okay ... e cosa è CartedaGiocare? Un oggetto di una certa classe? E' stato istanziato?
  • Re: AIUTO CON PROGETTO C#

    E' una lista della classe giocatore che raccoglie dopo un controllo le carte dello stesso seme ke ha in mano il giocatore utente e si trova nella classe giocatore utente
  • Re: AIUTO CON PROGETTO C#

    Ma è istanzanziata correttamente? Se non mostri tutto il codice in modo che si possa provare non si può dire molto.
  • Re: AIUTO CON PROGETTO C#

    Se c'è la possibilità di mandare un messaggio privato ti posso mandare il progetto così lo puoi provare.

    Grazie
  • Re: AIUTO CON PROGETTO C#

    Non puoi via forum? Non tutto il progetto ma il codice necessario ...
  • Re: AIUTO CON PROGETTO C#

    Ok questo è la classe che contiene la funzione
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Tresette
    {
        public class GiocatoreUtente : Giocatore
        {
            // istanza di giocatore utente
            private static GiocatoreUtente instance = null;
    
            // variabile utilizzata per memorizzare il valore dell'indice della carta da giocare
            public int indiceCartaDaGiocare;
    
            // metodo per creare una sola istanza di giocatore utente
            public static GiocatoreUtente Instance()
            {
                if (instance == null)
                    instance = new GiocatoreUtente();
                return instance;
            }
    
            // metodo per giocare una carta
            public override void GiocaCarta(Partita partita)
            {
                // controllo se è il turno del giocatore utente
                if (partita.giocatoreUtente.Turno == true)
                {
                    if (partita.carteGiocate == 1)
                    {
                        for (int i = 10; i > 1; i--)
                        {
                            this.carteDaGiocare.Remove(carteDaGiocare[i]);
    
                        }
    
                        for (int i = 0; i < 10; i++)
                        {
                            if (carteGiocatore[i].Seme == cartaGiocata.Seme)
                            {
                                carteDaGiocare.Add(carteGiocatore[i]);
                                 
                            }
                            
                        }
    
                        //gioco una carta dentro la lista a meno che non sia vuota
                        if (carteDaGiocare[0] == null)
                        {
                            cartaGiocata = carteGiocatore[indiceCartaDaGiocare];
                            carteGiocatore.Remove(carteGiocatore[indiceCartaDaGiocare]);
                        }
                        else
                        {
                            cartaGiocata = carteDaGiocare[indiceCartaDaGiocare];
                            carteDaGiocare.Remove(carteDaGiocare[indiceCartaDaGiocare]);
                        }
    
                    }
                    else
                    {
                        // gioco la carta
                        cartaGiocata = carteGiocatore[indiceCartaDaGiocare];
                        carteGiocatore.Remove(carteGiocatore[indiceCartaDaGiocare]);
                    }
    
                    // aggiorno lo stato delle variabili turno e carte giocate
                    partita.carteGiocate++;
                    Turno = false;
                    partita.giocatorePc.Turno = true;
                }
            }
    
    
            // metodo che controlla la possibilità da parte dell'utente di giocare una carta
            public void ControllaPossibilitàGiocata(int i, Partita partita)
            {
                // controllo il numero di carte a disposizione dell'utente e quelle nel mazzo
                if (carteGiocatore.Count < 10 && partita.dealer.mazzo.Count > 0)
                {
                    if (cartaGiocata != null)
                        // imposto la variabile errore
                        errore = "Hai già fatto la tua mossa!";
                    else
                        errore = "Devi prendere una carta cliccando sopra il mazzo!";
                }
                else
                    // controllo le carte dell'utente
                    if (carteGiocatore.Count >= (i + 1))
                    {
                        // gioco una carta di indice i
                        indiceCartaDaGiocare = i;
                        GiocaCarta(partita);
                    }
            }
    
            // metodo per prendere una carta dal mazzo
            public override void PrendiCarta(Partita partita)
            {
                // controllo se è il turno dell'utente
                if (Turno == true)
                {
                    // controllo il numero di carte dell'utente
                    if (carteGiocatore.Count < 10)
                    {
                        // controllo le carte nel mazzo e le carte giocate
                        if (partita.dealer.mazzo.Count > 0 && partita.carteGiocate == 0)
                        {
                            // invoco il metodo base per prendere le carte
                            base.PrendiCarta(partita);
    
                            // aggiorno lo stato delle variabili turno
                            Turno = false;
                            partita.giocatorePc.Turno = true;
    
                            // controllo se il giocatore pc ha tutte le carte
                            if (partita.giocatorePc.carteGiocatore.Count < 10)
                            {
                                partita.giocatorePc.PrendiCarta(partita);
                            }
                        }
                        else
                            errore = "Non puoi prendere una carta dal mazzo";
                    }
                    else
                        errore = "Hai già tutte le carte necessarie";
                }
                else
                    errore = "Non è il tuo turno! Attendi ...";
            }
    
            // metodo Tostring modificato
            public override string ToString()
            {
                return "Utente";
            }
        }
    }
    
    
  • Re: AIUTO CON PROGETTO C#

    Ma non c'è la dichiarazione della lista

    Cartedagiocare

    Dove esegui la new ?
  • Re: AIUTO CON PROGETTO C#

    La esegua nella classe giocatore
    
    public abstract class Giocatore
        {
            // attributi interni
    
            // carte del giocatore
            public List<Carta> carteGiocatore;
    
            // carte che può giocare
            public List<Carta> carteDaGiocare;
    
            // prese effettuate durante la partita
            public List<Carta> prese;
    
            // variabile punteggio
            public int punteggio;
    
            // variabile che indica il turno
            private Boolean turno;
    
            // carta giocata
            public Carta cartaGiocata;
    
            // variabile contenente eventuali messaggi di errore
            public string errore;
    
    
            // Metodo costruttore
            public Giocatore()
            {
                this.carteGiocatore = new List<Carta>(10);
                this.carteDaGiocare = new List<Carta>(10);
                this.prese = new List<Carta>();
                this.punteggio = 0;
                this.Turno = false;
            }
    
  • Re: AIUTO CON PROGETTO C#

    Così non ne usciamo ... passami un link da cui scaricare il progetto e dimmi come eseguirlo per ottenere l'errore ... (spero sia 2010 ...)
  • Re: AIUTO CON PROGETTO C#

    Ti ho mandato il link per messaggio privato
  • Re: AIUTO CON PROGETTO C#

    Scusa ma questa linea

    this.carteDaGiocare = new List<Carta>(10);

    non c'è ... quindi ?
  • Re: AIUTO CON PROGETTO C#

    Non so xk ma non me la presa ma in realtà ce l'ho nel metodo costruttore della classe giocatore
Devi accedere o registrarti per scrivere nel forum
22 risposte