• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Memory Game - Aplikacja WPF C#

Object Storage Arubacloud
0 głosów
538 wizyt
pytanie zadane 26 marca 2023 w C# przez Ultimate1991 Początkujący (260 p.)

Witam, próbowałem zrobić prostą grę Memory w Windows Form z poradnikiem. https://www.youtube.com/watch?v=frDKP-A71W0&list=PL3wErD7ZIp_Ah6d4--3JWQZ_x5lwrBQZi&index=10 . Jednak po przepisaniu połowy kodu i próbie kompilacji, losuję się wartość tylko dla jednego kwadratu. Gdzie może leżeć problem?.

namespace MemoryGame
{
    public partial class Form1 : Form
    {
        Random random = new Random();

        List<string> icons = new List<string>()
        {
            "!", "!", "N", "N", ",", ",", "k", "k",
            "b", "b", "v", "v", "w", "w", "z", "z"
        };

        Label firstClicked, secondClicked;

        public Form1()
        {
            InitializeComponent();
            AssignIconsToSquares();
        }

        private void AssignIconsToSquares()
        {
            Label label;
            int randomNumber;

            for (int i = 0; i < tableLayoutPanel1.Controls.Count; i++)
            {
                if (tableLayoutPanel1.Controls[i] is Label)
                    label = (Label)tableLayoutPanel1.Controls[i];
                else
                    continue;

                randomNumber = random.Next(0, icons.Count);
                label1.Text = icons[randomNumber];

                icons.RemoveAt(randomNumber);
            }
        }
    }
}

 

2 odpowiedzi

0 głosów
odpowiedź 26 marca 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)
Nie żeby coś, ale zastanowiłbym się, czy nie lepiej spróbować napisać coś nawet gorszego, ale coś co rozumiesz, bo przepisywanie kodu bez zastanowienia się, moim zdaniem może być lekko bez sensu.
komentarz 26 marca 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)
To że przepisujesz go wywnioskowałem po "Jednak po przepisaniu połowy kodu".
0 głosów
odpowiedź 29 marca 2023 przez VBService Ekspert (252,740 p.)

W pętli

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

są "pobierane" kolejne obiekty (kontrolki), które "znajdują się" w tableLayoutPanel1 i gdy kontrolka jest typu Label

if (tableLayoutPanel1.Controls[i] is Label)

jest przypisywana do

Label label;

...

label = (Label)tableLayoutPanel1.Controls[i];

więc musisz "używać" w zapisie też label

label.Text = icons[randomNumber];

 

w Twoim kodzie odwołujesz się "ciągle do" label1

label1.Text = icons[randomNumber];

 

sprawdź np. taki zapis

        private void AssignIconsToSquares()
        {
            // wykonujemy tzw. random shuffle na liście
            // https://stackoverflow.com/questions/12137127/how-to-shuffle-a-list
            icons = icons.OrderBy(x => random.Next()).ToList();

            label1.Text = icons[0];
            label2.Text = icons[1];
            label3.Text = icons[2];
            // ...
            label6.Text = icons[5];
            // ...
            label9.Text = icons[8];
            // ...
            label12.Text = icons[11];
            // ...
            label16.Text = icons[15];
        }

lub

        private void AssignIconsToSquares()
        {
            icons = icons.OrderBy(x => random.Next()).ToList();
            int index = 0;

            for (int i=0; i<tableLayoutPanel1.Controls.Count; i++)
            {
                if (tableLayoutPanel1.Controls[i] is Label)
                {
                    Label label = (Label)tableLayoutPanel1.Controls[i];
                    label.Text = icons[index++];
                }
            }
        }

 

jeżeli jesteśmy pewni, że tableLayoutPanel1 tylko zawiera Label-ki

        private void AssignIconsToSquares()
        {
            icons = icons.OrderBy(x => random.Next()).ToList();

            for (int i=0; i<tableLayoutPanel1.Controls.Count; i++)
            {
                Label label = (Label)tableLayoutPanel1.Controls[i];
                label.Text = icons[i];
            }
        }

 

Podobne pytania

0 głosów
2 odpowiedzi 421 wizyt
pytanie zadane 26 września 2018 w C# przez Sc4red Użytkownik (590 p.)
0 głosów
1 odpowiedź 947 wizyt
pytanie zadane 24 lipca 2018 w C# przez kubekszklany Gaduła (3,190 p.)
0 głosów
1 odpowiedź 921 wizyt
pytanie zadane 4 maja 2018 w C# przez kubekszklany Gaduła (3,190 p.)

92,552 zapytań

141,399 odpowiedzi

319,533 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...