[C++] wypisywanie znaku w danym polu
Ostatnio zmodyfikowano 2014-11-25 23:18
kevindurant95 Temat założony przez niniejszego użytkownika |
[C++] wypisywanie znaku w danym polu » 2014-11-24 00:00:53 Witam, mam problem związany z wypisaniem znaku w polu planszy. Jedynym możliwym wypisywalnym znakiem jest pojedynczy hasz '#', podczas gdy chciałbym,by było to: ### ### oto mój kod: #include <cstdlib> #include <iostream> #include <iomanip>
using namespace std; const int MAX_WIERSZ = 6; const int MAX_KOLUMNA = 6; char board[ MAX_WIERSZ ][ MAX_KOLUMNA ]; int numer_wiersza; int numer_kolumny;
void inicjuj_plansze() { for( int i = 0; i < MAX_WIERSZ; i++ ) { for( int j = 0; j < MAX_KOLUMNA; j++ ) board[ i ][ j ] = ' '; } } void rysuj_plansze() { for( int i = 0; i < MAX_WIERSZ; i++ ) { cout << " +-----+-----+-----+-----+-----+-----+" << endl; cout << " |"; for( int j = 0; j < MAX_KOLUMNA; j++ ) cout << " " << board[ i ][ j ] << " |"; cout << endl; cout << i + 1 << "|" << setw( 6 ) << "|" << setw( 6 ) << "|" << setw( 6 ) << "|" << setw( 6 ) << "|" << setw( 6 ) << "|" << setw( 6 ) << "|" << endl; } cout << " +-----+-----+-----+-----+-----+-----+" << endl; cout << " A B C D E F " << endl; cout << endl << endl; }
void wybierz_pole() { char znak; cout << "podaj wiersz: "; cin >> numer_wiersza; cout << "podaj kolumne (A=1, B=2, C=3, D=4, E=5, F=6): "; cin >> numer_kolumny; if( numer_kolumny == 1 ) { znak = 'A'; } if( numer_kolumny == 2 ) { znak = 'B'; } if( numer_kolumny == 3 ) { znak = 'C'; } if( numer_kolumny == 4 ) { znak = 'D'; } if( numer_kolumny == 5 ) { znak = 'E'; } if( numer_kolumny == 6 ) { znak = 'F'; } if( numer_wiersza >= 1 and numer_wiersza <= 6 and numer_kolumny >= 1 and numer_kolumny <= 6 ) cout << "wybrane pole to: " << numer_wiersza << znak << endl; else cout << "takie pole nie istnieje" << endl; }
void rysuj_kamien() { board[ numer_wiersza - 1 ][ numer_kolumny - 1 ] = '#'; cout << board[ MAX_WIERSZ ][ MAX_KOLUMNA ]; }
int main() { inicjuj_plansze(); rysuj_plansze(); wybierz_pole(); rysuj_kamien(); system( "cls" ); rysuj_plansze(); wybierz_pole(); rysuj_kamien(); system( "cls" ); rysuj_plansze(); system( "pause" ); return 0; }
|
|
darko202 |
» 2014-11-24 08:16:51 ponieważ stworzyłeś board jako tablicę char nie możesz do niej pisać wielu znaków
zmień na klasę string board[][] i w miejscach wywołania wpisz board[x][y].c_str()
|
|
kevindurant95 Temat założony przez niniejszego użytkownika |
» 2014-11-24 11:53:27 Miejsce wywołania, czyli gdzie? |
|
darko202 |
» 2014-11-24 14:18:28 zmień tablicę na typu string a kompilator pokaże Ci miejsca wywołania tablicy board tam popraw
U mnie pokazały i program rysuje "###" |
|
Tomek_z_W11 |
» 2014-11-24 14:40:13 Widzę, że drugi temat założyłeś, tu też Ci odpisze :) W funkcji rysuj_kamien piszesz cout << board[ max ][ max ] , czyli board[6][6], a takie pole nie istnieje, jeżeli masz na myśli pole "ostatnie" zarówno w pionie i poziomie, to napisz board[ 5 ][ 5 ] , co do wpisywania wartości, napisz na przykład board[ 2 ][ 3 ] = 'A' , pamiętaj, żeby ta linijka znajdowała się za funkcją inicjuj_plansze, bo z tego co widze, to w tej funkcji pod każdą komórkę tablicy przypisujesz spację. Na przykład: int main() { inicjuj_plansze(); board[ 0 ][ 0 ] = 'Z'; board[ 0 ][ 1 ] = 'A'; rysuj_plansze(); wybierz_pole(); rysuj_kamien(); system( "pause" ); return 0; }
|
|
kevindurant95 Temat założony przez niniejszego użytkownika |
» 2014-11-24 19:31:09 Poradziłem sobie już w ten sposób: #include <cstdlib> #include <iostream> #include <iomanip>
using namespace std; const int MAX_WIERSZ = 6; const int MAX_KOLUMNA = 6; char board[ MAX_WIERSZ ][ MAX_KOLUMNA ]; int numer_wiersza; int numer_kolumny;
void inicjuj_plansze() { for( int i = 0; i < MAX_WIERSZ; i++ ) { for( int j = 0; j < MAX_KOLUMNA; j++ ) board[ i ][ j ] = ' '; } } void rysuj_plansze() { for( int i = 0; i < MAX_WIERSZ; i++ ) { cout << " +-----+-----+-----+-----+-----+-----+" << endl; cout << i + 1 << "|"; for( int j = 0; j < MAX_KOLUMNA; j++ ) if( board[ i ][ j ] == '#' ) cout << " ### |"; else cout << " |"; cout << endl; cout << " |"; for( int j = 0; j < MAX_KOLUMNA; j++ ) if( board[ i ][ j ] == '#' ) cout << " ### |"; else cout << " |"; cout << endl; } cout << " +-----+-----+-----+-----+-----+-----+" << endl; cout << " A B C D E F " << endl; cout << endl << endl; } void wybierz_pole() { char litera; cout << "podaj wiersz: "; cin >> numer_wiersza; cout << "podaj kolumne (A=1, B=2, C=3, D=4, E=5, F=6): "; cin >> numer_kolumny; if( numer_kolumny == 1 ) { litera = 'A'; } if( numer_kolumny == 2 ) { litera = 'B'; } if( numer_kolumny == 3 ) { litera = 'C'; } if( numer_kolumny == 4 ) { litera = 'D'; } if( numer_kolumny == 5 ) { litera = 'E'; } if( numer_kolumny == 6 ) { litera = 'F'; } if( numer_wiersza >= 1 and numer_wiersza <= MAX_WIERSZ and numer_kolumny >= 1 and numer_kolumny <= MAX_KOLUMNA ) cout << "wybrane pole to: " << numer_wiersza << litera << endl; else cout << "takie pole nie istnieje" << endl << "podaj inne pole: "; }
void rysuj_kamien() { if( numer_wiersza >= 1 and numer_wiersza <= MAX_WIERSZ and numer_kolumny >= 1 and numer_kolumny <= MAX_KOLUMNA ) board[ numer_wiersza - 1 ][ numer_kolumny - 1 ] = '#'; cout << board[ MAX_WIERSZ ][ MAX_KOLUMNA ]; }
int main() { inicjuj_plansze(); rysuj_plansze(); wybierz_pole(); rysuj_kamien(); system( "cls" ); rysuj_plansze(); wybierz_pole(); rysuj_kamien(); system( "cls" ); rysuj_plansze(); system( "pause" ); return 0; }
Teraz moje pytanie brzmi: co powinienem zrobić, aby nie wywoływać za każdym razem w 'mainie' funkcji, tylko żeby jakoś skrócić ten zapis? I jak sprawić, żeby komputer losowo dobierał pole, ale żeby to pole nie było już zajęte? |
|
Tomek_z_W11 |
» 2014-11-24 21:02:25 Człowieku! Program nie będzie działać poprawnie! void rysuj_kamien() { board[ numer_wiersza - 1 ][ numer_kolumny - 1 ] = '#'; cout << board[ MAX_WIERSZ ][ MAX_KOLUMNA ]; }
Nie mozesz pisac cout << board[ MAX_WIERSZ ][ MAX_KOLUMNA ]
bo taki element nie istnieje, jak masz coś takiego: to elementy będą wyglądać tak: tablica[ 0 ][ 0 ] tablica[ 0 ][ 1 ] tablica[ 0 ][ 2 ] ... tablica[ 0 ][ 5 ]
tablica[ 1 ][ 0 ] tablica[ 1 ][ 2 ] ... tablica[ 1 ][ 5 ] tablica[ 2 ][ 0 ] tablica[ 2 ][ 1 ] . . . . tablica[ 5 ][ 5 ] - ostatni element, a ty piszesz [ cpp ] cout << board[ MAX_WIERSZ ][ MAX_KOLUMNA ]
|
|
kevindurant95 Temat założony przez niniejszego użytkownika |
» 2014-11-24 22:31:03 Racja, moja głupota. Jednakże, gdy zmieniam na void rysuj_kamien() { if( numer_wiersza >= 1 and numer_wiersza <= MAX_WIERSZ and numer_kolumny >= 1 and numer_kolumny <= MAX_KOLUMNA ) board[ numer_wiersza - 1 ][ numer_kolumny - 1 ] = '#'; cout << board[ MAX_WIERSZ - 1 ][ MAX_KOLUMNA - 1 ]; }
to nadal nie działa, a MAX_WIERSZ - 1, to po prostu 5. Przepraszam za moje dyletanctwo, ale średnio ogarniam programowanie. |
|
« 1 » 2 |