Czy ten kod jest funkcjonalny ?
Ostatnio zmodyfikowano 2012-09-16 14:53
Nekronomik Temat założony przez niniejszego użytkownika |
Czy ten kod jest funkcjonalny ? » 2012-09-14 20:52:44 Witam,napisałem ostatnio w allegro teren w rzucie izometrycznym na którym znajdują się obiekty i nic po za tym. Chciałem dodać kod który będzie zmieniał kafel na danym obszarze w zależności jakie otrzyma uszkodzenia np: trawa-->ziemia-->kamień. Napisałem kod który wykonuje tą czynność ale czy jest funkcjonalny,tzn czy dalsze rozbudowywanie jego ma sens? Po prostu nie chciał bym podczas pisania dalej swojego projektu dojść do punktu w którym będę musiał usunąć polowe tego co napisałem. Kod ten napisałem w konsoli ponieważ dobrze tu się robi testy. #include<iostream> #include<conio.h> #include<string> using namespace std; class trawa { private: int kod; string nazwa; public: int wytrzymalosc; trawa() { wytrzymalosc = 10; kod = 100; nazwa = "trawa"; } int niszczenie( int ile ) { wytrzymalosc = wytrzymalosc - ile; if( wytrzymalosc <= 0 ) { wytrzymalosc = 0; } } int identyfikuj( int nr ) { kod == nr; } void sprawdz() { wytrzymalosc; } int informacje( int nr ) { cout << nr << " Rodzaj : " << nazwa << " .Wytrzymalosc : " << wytrzymalosc << endl; } }; class ziemia { private: int kod; string nazwa; public: int wytrzymalosc; ziemia() { wytrzymalosc = 20; kod = 200; nazwa = "ziemia"; } int niszczenie( int ile ) { wytrzymalosc = wytrzymalosc - ile; if( wytrzymalosc <= 0 ) { wytrzymalosc = 0; } } int identyfikuj( int nr ) { kod == nr; } int informacje( int nr ) { cout << nr << " Rodzaj : " << nazwa << " .Wytrzymalosc : " << wytrzymalosc << endl; } }; class kamien { private: int kod; string nazwa; public: int wytrzymalosc; kamien() { wytrzymalosc = 30; kod = 300; nazwa = "kamien"; } int niszczenie( int ile ) { wytrzymalosc = wytrzymalosc - ile; if( wytrzymalosc <= 0 ) { wytrzymalosc = 0; } } int identyfikuj( int nr ) { kod == nr; } void sprawdz() { wytrzymalosc; } int informacje( int nr ) { cout << nr << " Rodzaj : " << nazwa << " .Wytrzymalosc : " << wytrzymalosc << endl; } }; int dzialanie() { ziemia ziemia_kafel[ 4 ]; trawa trawa_kafel[ 4 ]; kamien kamien_kafel[ 4 ]; int kafel[ 4 ]; for( int x = 0; x < 4; x++ ) { kafel[ x ] = 100; } kafel[ 2 ] = 200; kafel[ 3 ] = 300; for( int x = 0; x < 4; x++ ) { if( kafel[ x ] == 100 ) { trawa_kafel[ x ].informacje( x ); } if( kafel[ x ] == 200 ) { ziemia_kafel[ x ].informacje( x ); } if( kafel[ x ] == 300 ) { kamien_kafel[ x ].informacje( x ); } } for(;; ) { for( int x = 0, z, c; x < 4; x++ ) { kafel[ x ]; cout << "Podaj kafel : "; cin >> z; if( kafel[ z ] == 100 ) { trawa_kafel[ z ].informacje( z ); cout << "Uszkodzenia : "; cin >> c; trawa_kafel[ z ].niszczenie( c ); trawa_kafel[ z ].informacje( z ); } if( kafel[ z ] == 200 ) { ziemia_kafel[ z ].informacje( z ); cout << "Uszkodzenia : "; cin >> c; ziemia_kafel[ z ].niszczenie( c ); ziemia_kafel[ z ].informacje( z ); } if( kafel[ z ] == 300 ) { kamien_kafel[ z ].informacje( z ); cout << "Uszkodzenia : "; cin >> c; kamien_kafel[ z ].niszczenie( c ); kamien_kafel[ z ].informacje( z ); } if( trawa_kafel[ z ].wytrzymalosc <= 0 ) { kafel[ z ] = 200; } if( ziemia_kafel[ z ].wytrzymalosc <= 0 ) { kafel[ z ] = 300; } } cout << endl << endl; for( int x = 0; x < 4; x++ ) { if( kafel[ x ] == 100 ) { trawa_kafel[ x ].informacje( x ); } if( kafel[ x ] == 200 ) { ziemia_kafel[ x ].informacje( x ); } if( kafel[ x ] == 300 ) { kamien_kafel[ x ].informacje( x ); } } } } int main() { dzialanie(); getch(); }
Jak co programistą nie jestem ani żadnym informatykiem. |
|
SeaMonster131 |
» 2012-09-14 21:19:52 1. Źle korzystasz z klas. Zrób klasę Kafelek, i następnie Kafelek ziemia,trawa,kamien (lub lepiej Kafelek kafel[3]). A nie 3 osobne klasy.. 2. int identyfikuj( int nr ) { kod == nr; }
== to operator porównania. = to operator przypisania. 3. Co to ma robić według Ciebie: kafel[ x ]; ? 4. I tak jak mówiłem w pkt 1. Wtedy zamiast: if( kafel[ z ] == 100 ) { trawa_kafel[ z ].informacje( z ); cout << "Uszkodzenia : "; cin >> c; trawa_kafel[ z ].niszczenie( c ); trawa_kafel[ z ].informacje( z ); } if( kafel[ z ] == 200 ) { ziemia_kafel[ z ].informacje( z ); cout << "Uszkodzenia : "; cin >> c; ziemia_kafel[ z ].niszczenie( c ); ziemia_kafel[ z ].informacje( z ); } if( kafel[ z ] == 300 ) { kamien_kafel[ z ].informacje( z ); cout << "Uszkodzenia : "; cin >> c; kamien_kafel[ z ].niszczenie( c ); kamien_kafel[ z ].informacje( z ); }
mógłbyś zrobić coś w tym stylu: kafel[ z ].informacje( z ); cout << "Uszkodzenia : "; cin >> c; kafel[ z ].niszczenie( c ); kafel[ z ].informacje( z );
|
|
kubawal |
» 2012-09-15 17:57:40 void sprawdz() { wytrzymalosc; }
|
Hmm... Co to niby ma robić? |
|
Nekronomik Temat założony przez niniejszego użytkownika |
» 2012-09-15 22:19:56 Właśnie te klasy też mi się nie podobały,ale posłuchałem ciebie SeaMonster131 i zmieniłem kod na taki: #include<iostream> #include<conio.h> #include<string> using namespace std; class kafel { private: int kod; int kod_trawa; int kod_ziemia; int kod_kamien; string rodzaj_trawa; string rodzaj_ziemia; string rodzaj_kamien; string rodzaj; public: int wytrzymalosc_trawa; int wytrzymalosc_ziemia; int wytrzymalosc_kamien; int wytrzymalosc; kafel() { kod_trawa = 100; kod_ziemia = 200; kod_kamien = 300; rodzaj_trawa = "trawa"; rodzaj_ziemia = "ziemia"; rodzaj_kamien = "kamien"; wytrzymalosc_trawa = 10; wytrzymalosc_ziemia = 20; wytrzymalosc_kamien = 30; } int uszkodzenia( int ile ) { wytrzymalosc = wytrzymalosc - ile; } void trawa() { rodzaj = rodzaj_trawa; wytrzymalosc = wytrzymalosc_trawa; kod = kod_trawa; } void ziemia() { rodzaj = rodzaj_ziemia; wytrzymalosc = wytrzymalosc_ziemia; kod = kod_ziemia; } void kamien() { rodzaj = rodzaj_kamien; wytrzymalosc = wytrzymalosc_kamien; kod = kod_kamien; } void sprawdz() { if( kod == kod_trawa ) { if( wytrzymalosc <= 0 ) { ziemia(); } } if( kod == kod_ziemia ) { if( wytrzymalosc <= 0 ) { kamien(); } } } int informacje( int nr ) { cout << "Kafel-" << nr << " .Rodzaj : " << rodzaj << " .Wytrzymalosc : " << wytrzymalosc << endl; } }; void dzialanie() { kafel typ[ 4 ]; for( int x = 0; x < 4; x++ ) { typ[ x ].trawa(); typ[ x ].informacje( x ); } for( int x = 0, k, u;; x++ ) { cout << "Podaj kafel : "; cin >> k; typ[ k ].informacje( k ); cout << "Uszkodzenia : "; cin >> u; typ[ k ].uszkodzenia( u ); typ[ k ].sprawdz(); typ[ k ].informacje( k ); cout << endl; if( x == 3 ) { for( int x = 0; x < 4; x++ ) { typ[ x ].informacje( x ); } x =- 1; } } } int main() { dzialanie(); getch(); }
Działa tak samo jak ten wcześniej. Co do tego kawałka kodu kafel[ x ]; miał to być lokalizator położenia kafla,nie wiem jak to wytłumaczyć. Na operatorach porównania i przypisania znam się,po prostu nie usunąłem tych zbędnych funkcji int identyfikuj( int nr ) i void sprawdz() |
|
yoogi |
» 2012-09-16 08:27:43 Każdy kod jest funkcjonalny. Dobrym wyjściem jest sprawdzenie szybkości obu kodów :) tak "o", żeby mieć lepsze pojęcie w razie czego co zmienić, aby zwiększyć szybkość gry |
|
Parodia0 |
» 2012-09-16 10:01:00 Pyry pyry pyry |
|
Mrovqa |
» 2012-09-16 14:53:19 @Parodia0 ehh... a jednak zachciało mu się założyć nowe konto... @mati1qazxsw2 przestań w końcu trollować :P @topic Jeśli chodzi o uniwersalny kod, który potem łatwo byłoby przenieść to radzę zacząć od kartki papieru i długopisu. Na początku może to być niezbyt przyjemne, ale zauważysz sporą różnicę na plus. Naprawdę warto wszystko (prawie wszystko :P) dobrze wcześniej zaprojektować ;) |
|
« 1 » |