Tomek_z_W11 |
» 2014-11-24 23:18:58 Hmm, odpaliłem ten kod i wydaje się wszystko w porządku. Nie działa powiadasz? Co dokładnie? Jeżeli masz na myśli funkcje rysuj_kamien(), to wyświetlasz "ostatni" element tablicy, który niekoniecznie musi mieć przypisany znak, innymi słowy, jeżeli użytkownik nie wpisze, że wybiera wiersz 6 i kolumnę 6, to program będzie Ci wypisywał pusty znak ' ', a jeżeli użytkownik wybierze 6 wiersz i 6 kolumnę, to program wypisze '#' i od razu to wymaże z konsoli z powodu polecenia system("cls"), jeżeli chcesz sprawdzić, to co napisałem, to zakomentuj linijkę system("cls") i wklep w klawiature 6, 6; na konsoli powinien sie pokazać znak '#', który będzie się znajdować w lewym górnym rogu planszy. Jeżeli chodzi o skrócenie zapisu, to możesz to puścić w pętli, jeżeli chcesz, żeby wybieranie, jak i rysowanie, działo się 5 razy, to możesz napisać na przykład tak: int main() { int i; inicjuj_plansze(); for( i = 0; i < 5; i++ ) { rysuj_plansze(); wybierz_pole(); rysuj_kamien(); system( "cls" ); } rysuj_plansze(); system( "pause" ); return 0; }
|
|
kevindurant95 Temat założony przez niniejszego użytkownika |
» 2014-11-25 00:03:56 Gdy wpisuję w konsolę wiersz 5 i kolumnę 6, program wypisuje mi dwa symbole w polach F5 i A6. Nawet jak wypisze to w drugim ruchu, to pierwszy jakby zostaje skasowany i symbole mam tylko na F5 oraz A6. Mam jeszcze jedno pytanie... Mianowicie mój projekt nie może zawierać w sobie zmiennych, globalnych, co najwyżej stałe globalne. Jak powinienem to zmienić? |
|
Tomek_z_W11 |
» 2014-11-25 10:24:54 Masz jakiś inny kod niż ja, najprawdopodobniej wprowadzałeś jakieś zmiany i coś się skiepściło. U mnie działa jak należy, no może oprócz wychodzenia poza zakres, wtedy się zawiesza, a jest to spowodowane tym, że w ifie sprawdzającym zakres nie powinno być 'and' tylko '&&', w każdym miejscu.
Zmienne globalne możesz zamienić na wskaźniki, a tablicę charów, na dynamiczą tablicę dwuwymiarową. |
|
kevindurant95 Temat założony przez niniejszego użytkownika |
» 2014-11-25 22:15:42 Dobrze, zmieniłem na tamten co wcześniej i już ładnie działa. Jak zmienić te zmienne na wskaźniki i czy nie ma innego sposobu? |
|
Tomek_z_W11 |
» 2014-11-25 22:38:54 Tam gdzie używałeś zmiennych globalnych (tych nie const, bo const mogą według tego co napisałeś), musisz użyć wskaźników, czyli w funkcjach inicjuj_plansze(), rysuj_plansze(), rysuj_kamien - używałeś board, a w funkcji wybierz_pole() używałeś numer_wiersza i numer_kolumny. Teraz te zmienne i tablica board zostały zadeklarowane w mainie. Jednocześnie zaalokowałem dla nich pamięć, jeżeli chcesz ich użyć w jakiejś funkcji, "wrzucasz" wskaźnik jako argument, a w funkcji go odbierasz i na nim pracujesz. Inny sposób nie przychodzi mi na myśl, tzn. zawsze coś się znajdzie, ale nie mam pomysłu w tym momencie. Wszystko wygląda mniej więcej tak: #include <cstdlib> #include <iostream> #include <iomanip>
using namespace std; const int MAX_WIERSZ = 6; const int MAX_KOLUMNA = 6;
void inicjuj_plansze( char ** board ) { for( int i = 0; i < MAX_WIERSZ; i++ ) { for( int j = 0; j < MAX_KOLUMNA; j++ ) board[ i ][ j ] = ' '; } } void rysuj_plansze( char ** board ) { 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( int * numer_wiersza, int * numer_kolumny ) { 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 && * numer_wiersza <= MAX_WIERSZ && * numer_kolumny >= 1 && * 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( char ** board, int * numer_wiersza, int * numer_kolumny ) { 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 ]; }
int main() { int i; char ** board = new char *[ MAX_WIERSZ ]; for( i = 0; i < MAX_WIERSZ; i++ ) board[ i ] = new char[ MAX_KOLUMNA ]; int * numer_wiersza = new int; int * numer_kolumny = new int; inicjuj_plansze( board ); for( i = 0; i < 5; i++ ) { rysuj_plansze( board ); wybierz_pole( numer_wiersza, numer_kolumny ); rysuj_kamien( board, numer_wiersza, numer_kolumny ); system( "cls" ); } rysuj_plansze( board ); system( "pause" ); return 0; }
|
|
kevindurant95 Temat założony przez niniejszego użytkownika |
» 2014-11-25 22:54:30 OOO, dzięki bardzo. Naprawdę, bardzo mi pomagasz. A jakaś wskazówka co do tego, by sprawdzać, czy dane pole jest już zajęte, czy nie? |
|
Tomek_z_W11 |
» 2014-11-25 23:08:13 Zdaje się, że informacje o tym przechowujesz w tablicy char'ów board. Zresztą spójrz na swoją funkcję rysuj_plansze(), rysujesz '###', tam gdzie if( board[ i ][ j ] == '#' ) Ja bym to zrobił tak, że w funkcji wybierz_pole() robie dodatkowego ifa takiego jak w funkcji rysuj_planesz(). Tak szczerze, sam to wszystko napisałeś, tzn. te podstawowe funkcje i ogólnie Twoja to idea? O całości mówię. |
|
kevindurant95 Temat założony przez niniejszego użytkownika |
» 2014-11-25 23:18:56 Tak, z pomocą tego forum, jak i forum na innej stronie próbuję wszystko sklecić w spójną całość, analizując wszystko krok po kroku. Generalnie cały szablon i zarys jest mój, pytam się o dość konkretne rzeczy, a jak już zaznaczyłem, z programowania jestem raczej średnio ogarnięty. Jednak bardzo się staram :D |
|
1 « 2 » |