Problem w grze w oczko z listami


(H762146) #1

Witam

Generalnie nie mam pojęcia co jest źle ale listy mi się nie chcą wypełniać zapewne jakiś błąd mi się wkradł w klasie Talia :slight_smile:

Tutaj cały program zaznaczyłem koło miejsca gdzie się wysypuje komentarzem ( być może w dalszej części też gdzieś się wysypie nie obiecuje :smiley: ) :

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace SolutionDoZadanDomowych

{

    class Karta

    {

        public int wartosc { get; set; }

        public string nazwa { get; set; }


        public Karta(int wart, string naz) // konstruktor Karty

        {

            wartosc = wart;

            nazwa = naz;

        }


        public override string ToString() // zwaraca nazwe i wartosc 

        {

            return (nazwa + " " + wartosc);

        }

    }

    class Talia

    {

        private List talia;

        private List talia_potasowana;

        private List karty_w_grze;

        private int suma_punktow;


        public Talia(Listtal) // wypelnianie tali kartami 

        {

            talia = tal;

        }


        public void tasuj() // tasowanie 

        {

            Random generator = new Random();

            while (talia.Count > 0)

            {

                int i = generator.Next(talia.Count);

                talia_potasowana.Add(talia[i]); // tutaj program się wysypuje 

                talia.RemoveAt(i);

            }

        }


        public void pobierz_karte() // pobieranie karty 

        {

            Karta pobrana = talia_potasowana[0];

            talia_potasowana.RemoveAt(0);

            suma_punktow = suma_punktow + pobrana.wartosc;

            karty_w_grze.Add(pobrana);

        }


        public override string ToString() //To String ( wyswietlic karty w grze )

        {

            string w_grze = "";

            if (karty_w_grze != null)

            {

                if (karty_w_grze.Count() > 0)

                {

                    for (int i = 0; i < karty_w_grze.Count(); i++)

                    {

                        w_grze = w_grze + "" + karty_w_grze[i].nazwa.ToString();

                    }


                    return w_grze + " a Twoja suma punktów to : " + suma_punktow.ToString();

                }

                else

                {

                    return "Brak kart w grze";

                }

            }else

            {

                return " Jeszcze nie zagrales ";


            }

        }

    }

    class Program

    {

        static void Main(string[] args)

         {

            string[] tab_naz ={"2 trefl","3 trefl","4 trefl","5 trefl","6 trefl","7 trefl","8 trefl","9 trefl","10 trefl","Walet trefl","Dama trefl","Król trefl","As trefl",

				   "2 pik","3 pik","4 pik","5 pik","6 pik","7 pik","8 pik","9 pik","10 pik","Walet pik","Dama pik","Król pik","As pik",

				   "2 karo","3 karo","4 karo","5 karo","6 karo","7 karo","8 karo","9 karo","10 karo","Walet karo","Dama karo","Król karo","As karo",

				   "2 kier","3 kier","4 kier","5 kier","6 kier","7 kier","8 kier","9 kier","10 kier","Walet kier","Dama kier","Król kier","As kier"};


            int[] tab_wart ={2,3,4,5,6,7,8,9,10,2,3,4,11,

                            2,3,4,5,6,7,8,9,10,2,3,4,11,

                            2,3,4,5,6,7,8,9,10,2,3,4,11,

                            2,3,4,5,6,7,8,9,10,2,3,4,11};


            List list_talia = new List();


            for (int i = 0; i < tab_wart.Length; i++)

            {

                Karta tym = new Karta(tab_wart[i], tab_naz[i]);

                list_talia.Add(tym);

            }



            Talia t1 = new Talia(list_talia);

            t1.tasuj();

            t1.ToString();

            Console.ReadKey();

            //while(talia.suma<=22 $$ !koniec )

            //if(suma>21 && !perskieoczko(2asy)) return(przegrales ! ) ;

        }

    }

}

Wynik debugowania

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.dll'

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll'

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll'

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll'

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities.Sync\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll'

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll'

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\Admin\Desktop\SolutionDoZadanDomowych\SolutionDoZadanDomowych\bin\Debug\SolutionDoZadanDomowych.vshost.exe'

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll'

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll'

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll'

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll'

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll'

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll'

The thread 'vshost.NotifyLoad' (0x9dc) has exited with code 0 (0x0).

The thread 'vshost.LoadReference' (0x1054) has exited with code 0 (0x0).

'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\Admin\Desktop\SolutionDoZadanDomowych\SolutionDoZadanDomowych\bin\Debug\SolutionDoZadanDomowych.exe', Symbols loaded.

A first chance exception of type 'System.NullReferenceException' occurred in SolutionDoZadanDomowych.exe

An unhandled exception of type 'System.NullReferenceException' occurred in SolutionDoZadanDomowych.exe


Additional information: Object reference not set to an instance of an object.


'SolutionDoZadanDomowych.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll'

The program '[4020] SolutionDoZadanDomowych.vshost.exe: Program Trace' has exited with code 0 (0x0).

The program '[4020] SolutionDoZadanDomowych.vshost.exe: Managed (v4.0.30319)' has exited with code -1073741510 (0xc000013a).

Prosił bym o poprawienie kodu bo już próbuje na wszystkie sposoby to poprawić ale nie umiem :frowning: . Program musi być zrobiony w klasie niestety i przerzucenie list do maina nie wchodzi w grę bo gdy tak robię to mi śmiga ale w klasie robi się błąd nie wiem czemu :frowning:

Z góry dzięki za pomoc :slight_smile:


(Grzelix) #2

używasz zmiennej bez jej wcześniej inicjacji - błąd wyraźnie o tym mówi.

skoro to jest lista to przed jej użyciem należy wywołać coś w tym stylu

talia_potasowana = new ClassName();

to jeden błąd jeszcze mi się rzuciło to:

public Talia(Listtal)

brak spacji między typem i nazwą (to się kompiluje ?)

popraw tę błędy.

wieczorem może zerknę na to dokładniej.


(H762146) #3

ok poprawiłem te błędy . Teraz nie ma błędu ale totalnie nic się nie dzieje :frowning:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace SolutionDoZadanDomowych

{

    class Karta

    {

        public int wartosc { get; set; }

        public string nazwa { get; set; }


        public Karta(int wart, string naz) // konstruktor Karty

        {

            wartosc = wart;

            nazwa = naz;

        }


        public override string ToString() // zwaraca nazwe i wartosc 

        {

            return (nazwa + " " + wartosc);

        }

    }

    class Talia

    {

        private List talia;

        private List talia_potasowana= new List();

        private List karty_w_grze=new List();

        private int suma_punktow;


        public Talia(List tal) // wypelnianie tali kartami 

        {

            talia = tal;

        }


        public void tasuj() // tasowanie 

        {

            Random generator = new Random();

            while (talia.Count > 0)

            {

                int i = generator.Next(talia.Count);

                talia_potasowana.Add(talia[i]); // tutaj program się wysypuje 

                talia.RemoveAt(i);

            }

        }


        public void pobierz_karte() // pobieranie karty 

        {

            Karta pobrana = talia_potasowana[0];

            talia_potasowana.RemoveAt(0);

            suma_punktow = suma_punktow + pobrana.wartosc;

            karty_w_grze.Add(pobrana);

        }


        public override string ToString() //To String ( wyswietlic karty w grze )

        {

            string w_grze = "";

            if (karty_w_grze != null)

            {

                if (karty_w_grze.Count() > 0)

                {

                    for (int i = 0; i < karty_w_grze.Count(); i++)

                    {

                        w_grze = w_grze + "" + karty_w_grze[i].nazwa.ToString();

                    }


                    return w_grze + " a Twoja suma punktów to : " + suma_punktow.ToString();

                }

                else

                {

                    return "Brak kart w grze";

                }

            }else

            {

                return " Jeszcze nie zagrales ";


            }

        }

    }

    class Program

    {

        static void Main(string[] args)

         {

            string[] tab_naz ={"2 trefl","3 trefl","4 trefl","5 trefl","6 trefl","7 trefl","8 trefl","9 trefl","10 trefl","Walet trefl","Dama trefl","Król trefl","As trefl",

				   "2 pik","3 pik","4 pik","5 pik","6 pik","7 pik","8 pik","9 pik","10 pik","Walet pik","Dama pik","Król pik","As pik",

				   "2 karo","3 karo","4 karo","5 karo","6 karo","7 karo","8 karo","9 karo","10 karo","Walet karo","Dama karo","Król karo","As karo",

				   "2 kier","3 kier","4 kier","5 kier","6 kier","7 kier","8 kier","9 kier","10 kier","Walet kier","Dama kier","Król kier","As kier"};


            int[] tab_wart ={2,3,4,5,6,7,8,9,10,2,3,4,11,

                            2,3,4,5,6,7,8,9,10,2,3,4,11,

                            2,3,4,5,6,7,8,9,10,2,3,4,11,

                            2,3,4,5,6,7,8,9,10,2,3,4,11};


            List list_talia = new List();


            for (int i = 0; i < tab_wart.Length; i++)

            {

                Karta tym = new Karta(tab_wart[i], tab_naz[i]);

                list_talia.Add(tym);

            }



            Talia t1 = new Talia(list_talia);

            t1.tasuj();

            t1.ToString();

            Console.ReadKey();

            //while(talia.suma<=22 $$ !koniec )

            //if(suma>21 && !perskieoczko(2asy)) return(przegrales ! ) ;

        }

    }

}

Wklejam poprawiony kodzik :slight_smile:


(Grzelix) #4

Dzieje się dokładnie to co jest napisane w programie.

  1. Tworzysz talię zmienna talia zostaję wypełniona (obiektami) Kartami.

  2. Tasujesz

a) losowo wybranymi kartami wypełnisasz talia_posortowana

b) usuwasz karty z Listy talia (- po tej operacji talia jest pusta)

  1. Wypisujesz przy użyciu metody ToString.

a) sprawdzasz zmienną karty_w_grze (która btw tutaj jest pierwszy raz używana czyli jest pusta) i wypisujesz jej zawartość (czyli nic nie wypisujesz).

Czytasz klawisz od usera

Kończysz program.


(H762146) #5

No ok ale nawet jeśli wykonam

t1.tasuj();

            t1.pobierz_karte();

            t1.pobierz_karte();

            t1.ToString();

To niestety program nic nie zwraca :frowning: a pobierałem 2 razy karte .Poza tym jeśli karty_w_grze są nullem to powinno wyświetlić że nikt nie zagrał a niestety tego nie wyświetla :frowning:


(Grzelix) #6

co robi ten kawełek kodu:

t1.ToString();

metoda ToString() zwraca napis dla danego obiektu.

jednak powyższe wywołanie tej metody na obiekcie t1 nie dalej poprawnie obsłużone. Ponieważ nic ze zwracaną wartością nie jest robione. Brak przypisania, wyświetlania, dalszego przetworzenie.


(H762146) #7

o kurcze ale głupi błąd :smiley: faktycznie zapomniałem o takiej głupocie .

Wielkie dzięki za pomoc :slight_smile:

Temat można zamknąć :slight_smile: