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

Kółko i krzyżyk - wykrywanie zwycięstw

Object Storage Arubacloud
+1 głos
1,393 wizyt
pytanie zadane 5 marca 2016 w C i C++ przez szym3ns Użytkownik (860 p.)
edycja 5 marca 2016 przez szym3ns

Witam wszystkich! Przed momentem na innym forum zostałem obrażony i kazano mi odpuścić sobie programowanie, z powodu mojego problemu, który zaraz wam przedstawię. Mam nadzieję, że nie zostanę przyjęty tak chłodno, jak przed chwilą smiley Do rzeczy - napisałem taki oto kod:

///////////////////

Kod jak kod, napisany "na szybko", więc nie ma cudów cheeky Gdy dokończę gierkę będę go doprowadzał do porządku za pomocą enumów, klas i tym podobnych. Wracając do tematu - nie trzeba go analizować całego, generalnie wszystko jest ok i wszystko działczy. Jednak mam "system" wykrywania zwycięstw zapisany w taki sposób:

if (PLANSZA[0][0]==PLANSZA[0][1] && PLANSZA[0][0]==PLANSZA[0][2])
        stangry = win;
 
    else if (PLANSZA[1][0]==PLANSZA[1][1] && PLANSZA[1][0]==PLANSZA[1][2])
        stangry = win;
 
    else if (PLANSZA[2][0]==PLANSZA[2][1] && PLANSZA[2][0]==PLANSZA[2][2])
        stangry = win;
 
    else if (PLANSZA[0][0]==PLANSZA[1][0] && PLANSZA[0][0]==PLANSZA[2][0])
        stangry = win;
 
    else if (PLANSZA[0][1]==PLANSZA[1][1] && PLANSZA[0][1]==PLANSZA[2][1])
        stangry = win;
 
    else if (PLANSZA[0][2]==PLANSZA[1][2] && PLANSZA[0][2]==PLANSZA[2][2])
        stangry = win;
 
    else if (PLANSZA[0][0]==PLANSZA[1][1]&& PLANSZA[0][0]==PLANSZA[2][2])
        stangry = win;
 
    else if (PLANSZA[0][2]==PLANSZA[1][1]&& PLANSZA[0][2]==PLANSZA[2][0])
        stangry = win;

No wiadomo, eleganckie to nie jest, i praktycznie jest to pójście po najmniejszej linii oporu.. Chciałbym was prosić o radę i pomoc, ponieważ chciałbym to zapisać elegancko w pętli for, ale nie mam pojęcia niestety jak się do tego zabrać. Wiem, że dobrze byłoby zdefiniować tablicę, w której będą już ustalone możliwości wygrania gry, co już zrobiłem (tablica WYGRANE[ ][3],  a następnie zrobienie pętli

for (int i=0; i<3; i++)
    {
        for (int j=0; j<3; j++)
        {
            //....
        }
    }

No i właśnie tutaj utknąłem..

2 odpowiedzi

+1 głos
odpowiedź 5 marca 2016 przez KubenQPL Maniak (62,820 p.)
wybrane 5 marca 2016 przez szym3ns
 
Najlepsza

Ja zrobiłem to na podstawie tablicy dwuwymiarowej tu masz samo sprawdzanie:

void sprawdz(){
	//Poziom
	for(int i=0;i<3;i++){
		if(tablica[i][0]+tablica[i][1]+tablica[i][2]==3) wygral="x";
		else if(tablica[i][0]+tablica[i][1]+tablica[i][2]==-3) wygral="y";
	}
	//Pion
	for(int i=0;i<3;i++){
		if(tablica[0][i]+tablica[1][i]+tablica[2][i]==3) wygral="x";
		else if(tablica[0][i]+tablica[1][i]+tablica[2][i]==-3) wygral="y";
	}
	//na ukos
	if(tablica[0][0]+tablica[1][1]+tablica[2][2]==3) wygral="x";
	else if(tablica[0][0]+tablica[1][1]+tablica[2][2]==-3) wygral="y";
	
	if(tablica[0][2]+tablica[1][1]+tablica[2][0]==3) wygral="x";
	else if(tablica[0][2]+tablica[1][1]+tablica[2][0]==-3) wygral="y";
	
}

A tu link do całości http://pastebin.com/aXUzCzD1

zamiast kółka i krzyżyka jest 1 i -1 ale to raczej nie problem żeby zamienić na x i o :)

komentarz 5 marca 2016 przez szym3ns Użytkownik (860 p.)

O coś takiego mi chodziło! Skróciłem to znacznie i dostosowałem do swojego kodu i wyszło mi o 75% kodu mniej smiley dzięki!

0 głosów
odpowiedź 5 marca 2016 przez radek024 Szeryf (77,160 p.)
function znajdzWygrana() //znajduje ciag znakow
{
  var pole0i="";
  var pole1i="";
  var pole2i="";

  for(i=0; i<9; i+=3) // pionowo
  {
    pole0i=document.getElementById("p"+(0+i)).textContent;
    pole1i=document.getElementById("p"+(1+i)).textContent;
    pole2i=document.getElementById("p"+(2+i)).textContent;
    if(pole0i==pole1i&&pole0i==pole2i&&pole0i!="")
    {
      animuj("p"+(0+i),"p"+(1+i),"p"+(2+i));
      document.getElementById("output").innerHTML="WYGRANA!!!";
    }
  }

  for(i=0; i<3; i+=1) //poziomo
  {
    pole0i=document.getElementById("p"+(0+i)).textContent;
    pole1i=document.getElementById("p"+(3+i)).textContent;
    pole2i=document.getElementById("p"+(6+i)).textContent;
    if(pole0i==pole1i&&pole0i==pole2i&&pole0i!="")
    {
      animuj("p"+(0+i),"p"+(3+i),"p"+(6+i));
      document.getElementById("output").innerHTML="WYGRANA!!!";
    }
  }

  for(i=0; i<1;i++) // przekatna w prawo
  {
    pole0i=document.getElementById("p0").textContent;
    pole1i=document.getElementById("p4").textContent;
    pole2i=document.getElementById("p8").textContent;
    if(pole0i==pole1i&&pole0i==pole2i&&pole0i!="")
    {
      animuj("p0","p4","p8");
      document.getElementById("output").innerHTML="WYGRANA!!!";
    }
  }

  for(i=0; i<1;i++) //przektna w lewo
  {
    pole0i=document.getElementById("p2").textContent;
    pole1i=document.getElementById("p4").textContent;
    pole2i=document.getElementById("p6").textContent;
    if(pole0i==pole1i&&pole0i==pole2i&&pole0i!="")
    {
      animuj("p2","p4","p6");
      document.getElementById("output").innerHTML="WYGRANA!!!";
    }
  }

}

Tak wiem - to JavaScript, ale jeżeli przejrzysz pętle  z pewnością zrozumiesz jak można szybko i łatwo zrobić wyszukiwanie wygranej.

komentarz 5 marca 2016 przez szym3ns Użytkownik (860 p.)
edycja 5 marca 2016 przez szym3ns

Jeszcze więcej kodu... crying

Rozumiem o co chodzi, i to chyba jest identyczne do moich ifów, lecz niepotrzebnie chyba jest tutaj pętla.. a ja chciałbym to umieścić jedynie w dwóch pętlach i z jednym ifem albo dwoma, a tu są aż cztery pętle

komentarz 5 marca 2016 przez radek024 Szeryf (77,160 p.)
Też miałem z tym problem i byłem pewny, że można to zrobić tym sposobem o którym mówisz :D pewnie jest taka możliwość - jak uda Ci się to zrobić to nieźle, daj znać - ale to jest łatwiejsze i z pewnością szybsze do zrozumienia dla każdego, nawet laika ;)
komentarz 5 marca 2016 przez szym3ns Użytkownik (860 p.)
Dokładnie, wiem że istnieje taka możliwość, ale nie wiem jak ją "wpleść" w kod :D IF'ami wiadomo - prosto, zrozumiale i czytelnie :) Nie sądzę, abym teraz wpadł na rozwiązanie tego w pętli, ale może kiedyś..

Podobne pytania

0 głosów
1 odpowiedź 729 wizyt
0 głosów
1 odpowiedź 3,549 wizyt
pytanie zadane 25 listopada 2018 w C# przez Corson Początkujący (260 p.)
+4 głosów
4 odpowiedzi 6,694 wizyt
pytanie zadane 28 lutego 2016 w Offtop przez maciek061 Gaduła (4,490 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

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

...