miszcz1298 Temat założony przez niniejszego użytkownika |
Program nie wykonuje się tak jak powinien » 2013-05-02 18:53:36 Napisałem skrypt, który powinien "wygenerować" mi planszę do gry w konsoli, ma być to gra typu memory. Kompiluje się bardzo dobrze ale gdy go wykonuję to nie chce mi zmienić wartości poszczególnych pól w tablicy "plansza". Proszę o rozwiązanie problemu. Kod źródłowy jest następujący: #include <iostream> #include <string> #include <windows.h> #include <time.h> #include <cstdlib> using namespace std; int plansza[ 4 ][ 4 ]; int plansza2[ 4 ][ 4 ]; class imiona { public: int imie( string & imie1 ) { do { system( "cls" ); cout << "Podaj imie: "; } while( wczytaj_imie( imie1 ) == false ); return( 0 ); } bool wczytaj_imie( string & imie1 ) { cin.clear(); cin.sync(); cin >> imie1; return cin.good(); } };
class generator_planszy { public: int liczba; int a = 0; int b = 0; int c = 0; int d = 0; int e = 0; int f = 0; int g = 0; int h = 0; int x = 0; int y = 0; int generator( int & x, int & y ) { liczba =( rand() % 8 ) + 1; for( x = 0; x < 4; x++ ) { for( y = 0; y < 4; y++ ) { plansza2[ x ][ y ] = 0; } } switch( liczba ) { case 1: { if( a == 2 ) { generator( x, y ); } else { if( plansza[ x ][ y ] == 0 ) { a++; plansza[ x ][ y ] = 1; break; } else { generator( x, y ); }; } } case 2: { if( b == 2 ) { generator( x, y ); } else { if( plansza[ x ][ y ] == 0 ) { b++; plansza[ x ][ y ] = 2; break; } else { generator( x, y ); }; } } case 3: { if( c == 2 ) { generator( x, y ); } else { if( plansza[ x ][ y ] == 0 ) { c++; plansza[ x ][ y ] = 3; break; } else { generator( x, y ); }; } } case 4: { if( d == 2 ) { generator( x, y ); } else { if( plansza[ x ][ y ] == 0 ) { d++; plansza[ x ][ y ] = 4; break; } else { generator( x, y ); }; } } case 5: { if( e == 2 ) { generator( x, y ); } else { if( plansza[ x ][ y ] == 0 ) { e++; plansza[ x ][ y ] = 5; break; } else { generator( x, y ); }; } } case 6: { if( f == 2 ) { generator( x, y ); } else { if( plansza[ x ][ y ] == 0 ) { f++; plansza[ x ][ y ] = 6; break; } else { generator( x, y ); }; } } case 7: { if( g == 2 ) { generator( x, y ); } else { if( plansza[ x ][ y ] == 0 ) { g++; plansza[ x ][ y ] = 7; break; } else { generator( x, y ); }; } } case 8: { if( h == 2 ) { generator( x, y ); } else { if( plansza[ x ][ y ] == 0 ) { h++; plansza[ x ][ y ] = 8; break; } else { generator( x, y ); }; } } } return( 0 ); } };
void pauza( int ms ) { clock_t target = clock() + ms; while( clock() < target ); }
int main() { srand( time( NULL ) ); int x; int y; string imie1; generator_planszy generator_planszy; imiona imiona; imiona.imie( imie1 ); pauza( 2000 ); for( x = 0; x < 4; x++ ) { for( y = 0; y < 4; y++ ) { generator_planszy.generator( x, y ); } } cout <<( rand() % 8 ) + 1 << endl; for( x = 0; x < 4; x++ ) { for( y = 0; y < 4; y++ ) { cout << plansza[ x ][ y ]; } cout << endl; } return( 0 ); }
|
|
usmiech |
» 2013-05-03 00:15:09 Nie sadze, zeby kompilowalo sie dobrze... inicjalizujesz zmienne wewnatrz klasy, nie wiem dlaczego. Wg zasad /moze sie myle/ tylko zmienne static i const moga byc tak definiowane. Pytanie dlaczego wlasnie tak chcesz to robic .... ? A tak , w ogole, to nie za bardzo rozumiem class imiona i jaka to ma byc tablica.....moze ciezko mi sie mysli po nocy ;) Sadze, ze klasy i funkcje moga miec inne zastosowania... pozwole sobie cos pokazac .. ot przykadowa tablice. Jest to czesc programu, umiescilem ja w main, zeby latwo dalo sie sprawdzic jej dzialanie. Zmienne int yMax i char xMax, oraz tablica podane tu sa tylko dlatego, zeby funkcja dzialala. W programie wielkosci te ustala uzytkownik /nie musi byc char.. to tylko przyklad/ , pozdrawiam :) #include "stdafx.h" #include <iostream> #include <array> using namespace std;
int main() { char xMax[ 11 ] = { ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' }; int yMax = 10; int tablica[ 10 ][ 10 ]; for( int y = 0; y < yMax + 1; y++ ) { for( int x = 0; x < 10 + 1; x++ ) { if( !x ) { if( y < 10 ) { if( y ) cout << " " << y << " "; else cout << " "; } else cout << " " << y; } else if( !y ) { if( x < 10 ) cout << " " << xMax[ x ] << " "; else cout << " " << xMax[ x ]; } else { if( !tablica[ x - 1 ][ y - 1 ] ) cout << " "; else cout << " "; } if( x < 10 ) cout << "|"; } cout << "\n"; for( int z = 0; z < 10 + 1; z++ ) { if( y < yMax + 1 ) { cout << "___"; if( z < 10 ) cout << "+"; } } cout << "\n"; } system( "pause" ); return 0; }
|
|
miszcz1298 Temat założony przez niniejszego użytkownika |
» 2013-05-03 14:20:42 Wyskoczyło parę warningów, to prawda, nawet by się zgadzało, że zwykłych zmiennych nie można. klasa imiona potrzebna mi jest to uporządkowania skryptu, bo później zamierzam tam dodać jeszcze kilka funkcji i tutaj mam pytanie:jak można w takim razie zdefiniować zmienne w funkcji, jeśli chcę, żeby funkcja była wykonywana w pętli a ich wartość była ustalana tylko raz, a potem żeby pozostawała niezmieniona i mogła być modyfikowana przez dalszą część funkcji. Jeśli chodzi to to, jaka to ma być tablica, to to ma być tablica plansz zdefiniowana jako globalna zaraz na początku skryptu. |
|
usmiech |
» 2013-05-03 14:48:08 Duzo pytan, postaram sie tylko pokrotce powiedziec co ja bym zrobil. Moja propozycja.. Poczytaj o klasach podstawowych, pochodnych i funkcjach zaprzyjaznionych.Zmienne okreslilbym jako private /maja do niech dostep tylko funkcje klasy, w ktorej sa zawarte lub pochodnych czy zaprzyjazninych klas, jesli tak zdecydujesz/. Najlepiej umiescic ta funkcje w klasie, ale jesli chcesz , zeby ta funkcja obslugiwala kilka klas to mozesz zrobic ja jako zaprzyjazniona z klasami i tez bedzie miala dostep do danych typu private../osobny temat do zmienne typu const/. Temat jest zbyt obszerny, dlatego tez zasugerowalem Ci lekture... Co do plansz , to uzylbym vectora.. i tablic dynamicznych , ale to tez dluzszy temat. Polecam ksiazki/wiesz czego szukac wiec powinno byc Ci latwiej/ lub google... Powodzenia :) |
|
usmiech |
» 2013-05-03 17:27:37 Jesli zobacze, ze poczytales I nadal masz jakis .. maly problem hahaha to moze postaram sie jakos pomoc. Pamietaj , prosze , jedno... Samo kodowanie nie jest najtrudniejsza strona programowania. Duzo trudniejsza jest dokladna analiza problemu I design, ale to tylko moje zdanie :) |
|
miszcz1298 Temat założony przez niniejszego użytkownika |
» 2013-05-03 17:54:19 Dzięki z podpowiedź. Zrobiłem tak jak poradziłeś i ... na razie działa :-). P.S. Znam się trochę na programowaniu, ale po prostu przygodę z C++ dopiero zaczynam więc jak będę miał jeszcze jakieś problemy to namiszę na forum :-)
Zamykam temat. |
|
« 1 » |