[C++] Element tablicy jako warunek w if
Ostatnio zmodyfikowano 2015-12-02 16:07
vancarek Temat założony przez niniejszego użytkownika |
[C++] Element tablicy jako warunek w if » 2015-12-02 12:49:03 Mam taki warunek. Chcę aby po zamianie znaków i indexów (03-09 oraz 15-25) następowało sprawdzenie czy znak (w tym przypadku x) znajduje się na końcu/w ostatnim wierszu tablicy [8][8]. Jeżeli znak po przemieszczeniu albo biciu znajduje się w wierszu, gdzie i==7, ma on się zamienić na duży znak, który będzie miał większe możliwości w poruszaniu się (patrz linia 01). Próbowałem w warunku if (linie 10 oraz 26) wstawiać P.tab[8][0], P.tab[8], P.tab[8][], jednak kompilator zawsze wskazywał jakiś błąd. Czy istnieje jakieś rozwiązanie tego problemu ? 01 if( P.tab[ i ][ j ].index != P.tab[ i + 1 ][ j + 1 ].index &&( P.tab[ i ][ j ].znak == "x" || P.tab[ i ][ j ].znak == "X" ) ) { 02 if( P.tab[ i + 1 ][ j + 1 ].index == "wolne" ) { 03 buf = P.tab[ i ][ j ].znak; 04 P.tab[ i ][ j ].znak = P.tab[ i + 1 ][ j + 1 ].znak; 05 P.tab[ i + 1 ][ j + 1 ].znak = buf; 06 07 bufin = P.tab[ i ][ j ].index; 08 P.tab[ i ][ j ].index = P.tab[ i + 1 ][ j + 1 ].index; 09 P.tab[ i + 1 ][ j + 1 ].index = bufin; 10 if( i == 7 ) { 11 P.tab[ i + 1 ][ j + 1 ].znak = "X"; 12 P.tab[ i + 1 ][ j + 1 ].index = "KRZYZYK"; 13 } 14 return 1; 15 } else if( P.tab[ i + 1 ][ j + 1 ].index == "kolko" || P.tab[ i + 1 ][ j + 1 ].index == "KOLKO" ) { 16 P.tab[ i + 1 ][ j + 1 ].znak = " "; 17 P.tab[ i + 1 ][ j + 1 ].index = "wolne"; 18 19 buf = P.tab[ i ][ j ].znak; 20 P.tab[ i ][ j ].znak = P.tab[ i + 2 ][ j + 2 ].znak; 21 P.tab[ i + 2 ][ j + 2 ].znak = buf; 22 23 bufin = P.tab[ i ][ j ].index; 24 P.tab[ i ][ j ].index = P.tab[ i + 2 ][ j + 2 ].index; 25 P.tab[ i + 2 ][ j + 2 ].index = bufin; 26 if( P.tab[ i + 2 ][ j + 2 ].index == "wolne" && i + 2 == 7 ) { 27 P.tab[ i + 2 ][ j + 2 ].znak = "X"; 28 P.tab[ i + 2 ][ j + 2 ].index = "KRZYZYK"; 29 } 30 return 1; 31 } 32 } else { 33 cout << "ZLY RUCH. SPROBUJ PONOWNIE." << endl; 34 return 0; 35 } 36
|
|
carlosmay |
» 2015-12-02 14:30:47 Jaki błąd?
Jeśli tablica jest 8x8 to dla i > 5 , oraz j > 5 warunek z linii 26 wychodzi poza tablicę. |
|
vancarek Temat założony przez niniejszego użytkownika |
» 2015-12-02 15:31:34 Dla : 1. if( P.tab[ i ][ j ].index == "wolne" && P.tab[8][0]==P.tab[ i ][ j ] ) 2. if( P.tab[ i ][ j ].index == "wolne" && P.tab[8][0]==P.tab[ i ][ j ] ) Występuje błąd - error: no match for 'operator==' in P->poleGry::tab[8][0] == P->poleGry::tab[j].
poleGry to struktura zawierająca tablicę ze znakami i indexami.
Jak w takim razie powinno być to poprawnie zapisane ? |
|
carlosmay |
» 2015-12-02 16:07:33 P.tab[ 8 ][ 0 ] == P.tab[ i ][ j ]
W porównaniu nie uwzględniasz składowych 'indeks' i 'znak'. Nie można porównać tych obiektów Jeśli bardzo pragniesz tak porównać te obiekty musisz napisać metodę, która prawidłowo porówna te obiekty, np. #include <iostream> using namespace std;
struct A { int a; int b; };
struct B { A tab[ 2 ][ 2 ]; bool porownaj( A tab, A tab2 ) { return tab.a == tab2.b; } };
int main() { B bb; if( bb.porownaj( bb.tab[ 0 ][ 1 ], bb.tab[ 1 ][ 0 ] ) ) cout << "rowne" << endl; system( "pause" ); }
edit: Inicjalizacja tablicy usunięta, wprowadzała w błąd. |
|
« 1 » |