Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przeszukanie wypełnionej tablicy.

Ostatnio zmodyfikowano 2013-12-10 17:26
Autor Wiadomość
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:

C/C++
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:

C/C++
if( remis() == 'R' )
{
    // instrukcje
}

Mógłby mi ktoś powiedzieć, co jest w niej nie tak? :)
P-98897
kubawal
» 2013-12-10 16:50:51
Może coś takiego?

C/C++
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;
P-98901
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?
P-98904
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'.
C/C++
char remis()
{
    for( int i = 0; i < 3; i++ )
    for( int j = 0; j < 3; j++ )
         if( tab[ i ][ j ] == ' ' ) return 'X';
   
    return 'R';
}
P-98905
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.
P-98907
pekfos
» 2013-12-10 17:19:29
Pokaż kod.
P-98908
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.

C/C++
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:

C/C++
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 :).
P-98909
« 1 »
  Strona 1 z 1