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

Jak skrócić warunek sprawdzający wygraną w grze kółko i krzyżyk ?

Object Storage Arubacloud
0 głosów
1,646 wizyt
pytanie zadane 6 stycznia 2016 w C i C++ przez Munvik Dyskutant (9,350 p.)

Otóż mam tablice [3][3] - standardowo do kółko i krzyżyk.

 

I mam boola sprawdzającego czy 3x są w rzędzie poziomym albo pionowym.

bool Xwrzedzie(char plansza[][3])
{
    if(((plansza[0][0]=='X')&&(plansza[0][1]=='X')&&(plansza[0][2]=='X'))
    ||((plansza[0][0]=='X')&&(plansza[1][0]=='X')&&(plansza[2][0]=='X'))
    ||((plansza[0][0]=='X')&&(plansza[0][1]=='X')&&(plansza[0][2]=='X'))
    ||((plansza[1][0]=='X')&&(plansza[1][1]=='X')&&(plansza[1][2]=='X'))
    ||((plansza[2][0]=='X')&&(plansza[2][1]=='X')&&(plansza[2][2]=='X'))
    ||((plansza[0][1]=='X')&&(plansza[1][1]=='X')&&(plansza[2][1]=='X'))
    ||((plansza[0][2]=='X')&&(plansza[1][2]=='X')&&(plansza[2][2]=='X')))
    {
        return true;
    }
    return false;
}

 

Jak skrócić taki warunek if ? 

6 odpowiedzi

+2 głosów
odpowiedź 6 stycznia 2016 przez Muminek Dyskutant (8,650 p.)
Użyj pętli i zmiennych by odnieść się do wartości tablicy. W pętli je odpowiednio zwiększasz.
komentarz 6 stycznia 2016 przez Munvik Dyskutant (9,350 p.)
Może się to uda :D
0 głosów
odpowiedź 6 stycznia 2016 przez Józef Mądrala (5,200 p.)
Można warunek wrzucić do pętli for i za każdym razem sprawdzać, czy jest on prawdziwy dla danego numeru. To jednak sprawi, że program będzie musiał wielokrotnie powtarzać tę samą czynność - trochę bez sensu.
komentarz 6 stycznia 2016 przez Muminek Dyskutant (8,650 p.)
Tak, w ten sposób bez sensu jest... Ale wystarczy pomyśleć i użyć funkcji... Munvik dobrze kombinuję z funkcją, zmieni tylko odniesienia do tablicy i da radę.
komentarz 6 stycznia 2016 przez Munvik Dyskutant (9,350 p.)
Już wykombinowałem tylko muszę się zbierać do Kościoła więc potem dam rozwiązanie :)
0 głosów
odpowiedź 6 stycznia 2016 przez arek01996 Stary wyjadacz (12,100 p.)
Musisz zrobić pętlę w pętli.
0 głosów
odpowiedź 6 stycznia 2016 przez Nostalgiczny Obywatel (1,180 p.)
Mam gotowy algorytm sprawdzania czegoś takiego, ale bardzo długi bo on działał dla planszy o dowolnym rozmiarze (nawet 100x100 by sprawdził), ale jeżeli ci pomoże to mogę podrzucić
komentarz 6 stycznia 2016 przez Munvik Dyskutant (9,350 p.)
Nie dzięki :)

Nie potrzebuje gotowych algorytmów :D
0 głosów
odpowiedź 6 stycznia 2016 przez event15 Szeryf (93,790 p.)
Wykorzystaj magiczny kwadrat ;) TO chyba najszybsze i najbardziej optymalne rozwiązanie dla 3x3. Jak dowolna ilość pól w grze to jeszcze wygenerować liczbę klucz i tyle.
komentarz 6 stycznia 2016 przez nouveu Bywalec (2,560 p.)
Sprytne, ale i tak musisz kontrolnie przelecieć całą planszę sumując po wierszach, kolumnach, ukosie. W przeciwnym razie (korzystam z kwadratu jaki jest na wiki) 4+8+1+2=15 oszukałem system. Czy może źle zrozumiałem ideę?
komentarz 6 stycznia 2016 przez event15 Szeryf (93,790 p.)
komentarz 6 stycznia 2016 przez nouveu Bywalec (2,560 p.)
Ok, zrozumiałem, tylko czy jest jakiś sprytny sposób żeby NIE sprawdzać wszystkich możliwych kombinacji trójek? Przykładowa plansza:
2 7 6
9 5 1
4 3 8

Jak X wstawisz w miejsce 7 to dostaniesz sumę tylko dla: 2+7+6=15 oraz 7+5+3=15, reszty nie ma co sprawdzać o czym pisałem w osobnej odpowiedzi poniżej. Niby nic, to tylko macierz 3x3, ale w takim razie nie mamy co mówić o optimum.
0 głosów
odpowiedź 6 stycznia 2016 przez nouveu Bywalec (2,560 p.)
edycja 6 stycznia 2016 przez nouveu
Hm, a co z funkcją która sprawdza tylko te pozycje które 'krzyżują' się z dopiero co wstawionym x-em?

Jeśli wstawiony x ma indeks [1][0] to sprawdzamy tylko indeksy [0][0] && [2][0] lub [1][1] && [1][2], inne nie dadzą wygranej i nie ma sensu ich sprawdzać. Wystarczą dwa for-y.

Myślę też że funkcja powinna przyjmować jako drugi argument 'X' lub 'O', wtedy można ją stosować dla obu graczy.

Edit: Skos można sprawdzać gdy x[i][j] spełnia if(i==j) a drugi skos gdy if(i+j==2).

Podobne pytania

0 głosów
1 odpowiedź 340 wizyt
pytanie zadane 21 stycznia 2016 w HTML i CSS przez Vorex444 Dyskutant (9,610 p.)
0 głosów
3 odpowiedzi 157 wizyt
pytanie zadane 14 stycznia 2016 w C i C++ przez timrh Mądrala (6,030 p.)
0 głosów
1 odpowiedź 414 wizyt
pytanie zadane 9 marca 2017 w JavaScript przez Kamil Słapek Początkujący (260 p.)

92,596 zapytań

141,446 odpowiedzi

319,720 komentarzy

61,980 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!

...