tworzenie obiektów w Windows Forms

0

Byłbym wdzięczny gdyby ktoś mi wytłumaczył to dokładnie bo nadal mi się to myli.Robię projekt w Windows Forms Application - grę Milionerzy. Mam 3 klasy.

    public partial class OknoGry : Form
    {
        public Pytania pytania = new Pytania();

        public Metody metody = new Metody();

        public PoprawnaOdpowiedz poprawnaOdp = new PoprawnaOdpowiedz();

        public ZlaOdpowiedz zlaOdp = new ZlaOdpowiedz();

        public OknoGry()
        {
            InitializeComponent();

         ....................
        }
        private void btnOdpA_Click(object sender, EventArgs e)
        {
            Button button = (Button)sender;

            Metody metody = new Metody();

            metody.sprawdzOdpowiedz(button);
        }
         ......................
      }
    public class Pytania
    {
        public Random x1;
        public int x2;

        public int obecnaTura = 1;

        public string[] TrescPytania = new string[15];

        public string[] OdpA = new string[15];

        public string[] OdpB = new string[15];

        public string[] OdpC = new string[15];

        public string[] OdpD = new string[15];

        public string[] PoprawnaOdp = new string[15];

        public int[] PoziomTrudnosci = new int[15];

        public Pytania()
        {
            x1 = new Random();
            x2 = x1.Next(0, 14);

            TrescPytania[0] = "Którą planetą od Słońca jest Saturn?";
            TrescPytania[1] = "Które miasto jest stolicą Białorusi?";
            TrescPytania[2] = "Najcięższym z poniższych zwierząt jest?";
            TrescPytania[3] = "W którym roku był pierwszy rozbiór Polski?";
         ..................................
        }
      }
    public class Metody
    {


        //public PoprawnaOdpowiedz poprawnaOdp = new PoprawnaOdpowiedz();
        //public ZlaOdpowiedz zlaOdp = new ZlaOdpowiedz();
        public OknoGry oknoGry;

        int pytanieNumer1;
        int pytanieNumer2;
        int pytanieNumer3;
        int pytanieNumer4;
        int pytanieNumer5;
        int pytanieNumer6;
        int pytanieNumer7;
        int pytanieNumer8;
        int pytanieNumer9;
        int pytanieNumer10;
        int pytanieNumer11;

        public void sprawdzOdpowiedz(Button button)  //sprawdza czy zaznaczona odpowiedź jest poprawna
        {

            pytanieNumer1 = oknoGry.pytania.x2;

            // 1 tura
            if (oknoGry.pytania.obecnaTura == 1)
            {
                if (button.Text == oknoGry.pytania.PoprawnaOdp[oknoGry.pytania.x2])
                {
                    oknoGry.poprawnaOdp.Show();
                    oknoGry.timer1.Enabled = true;

                    oknoGry.pytania = new Pytania();

                    while (oknoGry.pytania.x2 == pytanieNumer1)  // losujemy x2 na kolejną turę, czyli 2
                    {
                        oknoGry.pytania = new Pytania();
                    }

                    oknoGry.pytania.obecnaTura = 2;

                    oknoGry.labelPytanie2.Text = oknoGry.pytania.TrescPytania[oknoGry.pytania.x2];
             ...................................
              }
         }

Problem jest w tym, że to nie działa poprawnie. Pierwszy problem pojawia się bodajrze przy sprawdzaniu czy odpowiedź jest poprawna.
Będę wdzięczny za wskazanie mi co robię tutaj źle oraz w którym miejscu tworzyć obiekty poszczególnych klas tak aby wszystko było OK + jakieś uniwersalne porady z tym związane.

0

Koszmarnie duplikujesz kod. Użyj pętli, tablic itp. Nigdy nie duplikuj kodu. Nie losuj do skutku, bo teoretycznie możesz losować do końca świata. Nazywaj sensownie zmienne, a nie jakieś x1, x2 i to jeszcze publiczne; zamiast x2 powinno być coś w stylu properAnswerRandom, ewentualnie random. Random warto zainicjować jakąś inną w miarę losową liczbą (np. bieżącym czasem), inaczej będziesz za każdym uruchomieniem aplikacji otrzymywać identyczne sekwencje liczb. Nie udostępnia się na zewnątrz (public, internal, czy nawet protected) bebechów klasy.
Pewnie to słabe nazewnictwo i udostępnianie na zewnątrz szczegółów wewnętrznej implementacji (vide publiczne x2) spowodowało problem, bo w pętli porównujesz obiekt klasy Random z obiektem zupełnie innej klasy, one nigdy nie będą równe, bo nie są tą samą instancją tej samej klasy, nie są nawet.innymi instancjami tej samej klasy.

Napisz to od początku nie duplikując kodu, nie udostępniając na zewnątrz żadnych właściwości klasy, nazywając zmienne zgodnie z tym, do czego będą służyć. Jeśli coś nie działa, to użyj debugera (F5, F9, F10, F11), na naszym serwisie znajdziesz artykuł opisujący podstawy użycia debugera w visual studio, i samodzielnie rozwiąż problem.

0

uzyj
Dictionary<string, string>
gdzie pierwszy string to pytanie a druga to porawna odpowiedz (a,b,c,d)
Wszystkie Twoje pytania1, pytania2 zrob po prostu List<string> i trzymaj swoje pytania
pozniej proste mapowanie za pomoca Dictionary i juz wiesz jaka odpowiedz jest poprawna

0

OK. Dziękuje za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1