random w Windows forms

0

Witam, robie kółko i krzyzyk.
mam

 
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            if (gracz == true)
            {
                pictureBox1.Image = Properties.Resources.a;
                pictureBox1.Enabled = false;
                gracz = false;
                z1 = 1;

                pictureBox11.Image = Properties.Resources.b;
                Wygrana();
            }
            else
            {
                pictureBox1.Image = Properties.Resources.b;
                pictureBox1.Enabled = false;
                gracz = true;
                z1 = 2;

                pictureBox11.Image = Properties.Resources.a;
                Wygrana();
            }
        

i tam dalej kod.
działa mi dla gracz vs gracz. Na danych picturebox stawia sie odpowiednio krzyżyk albo kółko. Jak zrobic aby drugim graczem był komputer i stawiał kółko randomowo w dowolnym miejscu, oprócz tego gdzie gracz postawił juz krzyzyk?

1

Jeden picturebox to jedno kółko lub krzyżyk?
I masz pewnie

private void pictureBox1_Click(object sender, EventArgs e)
{
    robisz coś na pictureBox1
}
private void pictureBox2_Click(object sender, EventArgs e)
{
   robisz to samo na pictureBox2
}

? Czy jakoś inaczej to masz?

0

Mozesz zrobić tablice 3x3 ktora przechowuje informacje o planszy. Po kazdym wykonanym ruchu uaktualniasz odpowiednio tablice, a przed wykonaniem ruchu przez komputer sprawdzasz w tablicy czy mozesz taki ruch wykonac. Dodatkowo warto wprowadzic tu troche "inteligencji". Np jesli program wykryje, ze w tablicy sa 2 figury kolo siebie nastepne pole jest wolne, to zamiast losowac zaznacza to pole;)

0

rozwiązanie 1:
losujesz X, losujesz Y, sprawdzasz czy (X,Y) jest zajęte, jeśli tak to wróć.
— losowanie będzie trwało coraz dłużej w miarę ubywania wolnych miejsc. dla planszy 3x3 to nie będzie miało znaczenia.

rozwiązanie 2:
trzymasz kolekcję punktów (x,y) niezajętych. losujesz liczbę od 0 do n-1, gdzie n to ilość elementów kolekcji (czyli ilość pozostałych wolnych miejsc). wylosowana liczba jest indeksem do kolekcji. pobierasz współrzędne z kolekcji, po czym usuwasz ten element z kolekcji.

kolekcją może być zwykła tablica plus zmienna przechowująca ilość. usunięcie może polegać na przeniesieniu ostatniego elementu na miejsce usuwanego i zmniejszeniu licznika ilości.

problemu szukaj w google jako "losowanie bez powtórzeń".

0

Przerób kod tak aby jedna metoda mogła ustawić kółko lub krzyżyk.
Podpowiem że w

private void pictureBox1_Click(object sender, EventArgs e)

object sender to jest picturebox który wywołał event.
Czyli event we wszystkich pictureboxach powinien wywoływać jeden handler nie 9

private void pictureBox1_Click(object sender, EventArgs e)
        {
            UstawPole(sender as PictureBox);
            }

void UstawPole(PictureBox pictureBox1)
{
            if (gracz == true)
            {
                pictureBox1.Image = Properties.Resources.a;
                pictureBox1.Enabled = false;
                gracz = false;
                z1 = 1;
 
                pictureBox11.Image = Properties.Resources.b;
                Wygrana();
            }
            else
            {
                pictureBox1.Image = Properties.Resources.b;
                pictureBox1.Enabled = false;
                gracz = true;
                z1 = 2;
 
                pictureBox11.Image = Properties.Resources.a;
                Wygrana();
}

Później zostaje Ci tylko wylosować pole i użyć metody UstawPole

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