thehespe Temat założony przez niniejszego użytkownika |
Przeszukanie wypełnionej tablicy. » 2013-12-10 16:39:20 Witam, jestem w trakcie pisania kółka i krzyżyka. Mam problem z napisaniem funkcji, która przejdzie po wszystkich elementach i jeżeli nie ma pustych ( w moim przypadku puste = spacja ), to zwróci mi literkę 'R'. Chodzi o funkcję, która sprawdzi, czy jest remis. Mam coś takiego: char remis() { char remis = 'R'; for( int i = 0; i < 3; i++ ) for( int j = 0; j < 3; j++ ) if( tab[ i ][ j ] != ' ' ) return remis; }
i potem chciałbym jej użyć dalej: Mógłby mi ktoś powiedzieć, co jest w niej nie tak? :) |
|
kubawal |
» 2013-12-10 16:50:51 Może coś takiego? bool r = true;
for( int i = 0; i < 3 && r; i++ ) for( int j = 0; j < 3 && r; j++ ) if( tab[ i ][ j ] == ' ' ) r = false;
return r;
|
|
thehespe Temat założony przez niniejszego użytkownika |
» 2013-12-10 17:01:12 Niestety również nie robi tego, czego chce, ale dzięki za szybką odpowiedź :). Ma ktoś może jeszcze jakieś pomysły? |
|
pekfos |
» 2013-12-10 17:04:17 przejdzie po wszystkich elementach i jeżeli nie ma pustych ( w moim przypadku puste = spacja ), to zwróci mi literkę 'R'. |
char remis() { for( int i = 0; i < 3; i++ ) for( int j = 0; j < 3; j++ ) if( tab[ i ][ j ] == ' ' ) return 'X'; return 'R'; }
|
|
thehespe Temat założony przez niniejszego użytkownika |
» 2013-12-10 17:14:46 Ehh, również nie... Kurczę, chyba muszę mieć gdzieś indziej źle, w innym miejscu gdzieś błąd, bo to jest chyba niemożliwe, żeby również było zero reakcji, jeśli wszystkie elementy są zapełnione. Wygraną mi dobrze sprawdza, gdy pojawią się gdzieś 3 takie same znaki, to od razu wyskakuje, że wygrał któryś tam gracz, itd. A jeśli zapełnię wszystkie pola, a wygranej nie będzie, to nic się nie dzieje... Mimo, że próbowałem już tymi trzema funkcjami. |
|
pekfos |
» 2013-12-10 17:19:29 Pokaż kod. |
|
thehespe Temat założony przez niniejszego użytkownika |
» 2013-12-10 17:26:01 Pokażę tylko funkcję odpowiadającą za poruszanie się, może wystarczy. Jeśli trzeba będzie więc, to powiedzcie. void poruszanie_sie() { skok: rozpoczecie(); char klik; cout << "Nacisnij dowolny klawisz..."; do { if( sprawdzenie() != 'X' && sprawdzenie() != 'O' ) { klik = getch(); switch( klik ) { case ARROW_UP: if( active_i != 0 ) active_i--; break; case ARROW_DOWN: if( active_i != 2 ) active_i++; break; case ARROW_RIGHT: if( active_j != 2 ) active_j++; break; case ARROW_LEFT: if( active_j != 0 ) active_j--; break; case 32: if( tab[ active_i ][ active_j ] == ' ' ) { if( wybor_rozpoczynajacego % 2 ) { tab[ active_i ][ active_j ] = 'X'; wybor_rozpoczynajacego++; } else { tab[ active_i ][ active_j ] = 'O'; zmien_znak( wybor_rozpoczynajacego ); wybor_rozpoczynajacego++; } } break; } } else { if( sprawdzenie() == 'X' ) { cout << gracz1 << " wygral!\n"; pkt_g1++; cout << "\nChesz zagrac jeszcze raz? [T/N]"; char powtorka; cin >> powtorka; if( powtorka == 'T' || powtorka == 't' ) { czyszczenie(); pozycja(); goto skok; } else( powtorka == 'N' || powtorka == 'n' ); pkt_g1 = 0; pkt_g2 = 0; break; } if( sprawdzenie() == 'O' ) { cout << gracz2 << " wygral!\n"; pkt_g2++; cout << "\nChesz zagrac jeszcze raz? [T/N]"; char powtorka; cin >> powtorka; if( powtorka == 'T' || powtorka == 't' ) { czyszczenie(); pozycja(); goto skok; } else( powtorka == 'N' || powtorka == 'n' ); pkt_g1 = 0; pkt_g2 = 0; break; } if( remis() == 'R' ) { cout << "Remis!\n"; cout << "\nChesz zagrac jeszcze raz? [T/N]"; char powtorka; cin >> powtorka; if( powtorka == 'T' || powtorka == 't' ) { czyszczenie(); pozycja(); goto skok; } else( powtorka == 'N' || powtorka == 'n' ); pkt_g1 = 0; pkt_g2 = 0; break; } } plansza(); } while( klik != 'q' ); czyszczenie(); system( "cls" ); pozycja(); }
gdzie: char remis() { for( int i = 0; i < 3; i++ ) for( int j = 0; j < 3; j++ ) if( tab[ i ][ j ] == ' ' ) return 'D'; return 'R'; }
wiem, że za użycie 'goto' powinienem się smażyć w piekle, ale niestety nie znalazłem innego sposobu, a dopiero zaczynam. @edit Poradziłem już sobie :). Dzięki za pomoc :). |
|
« 1 » |