inny1997 Temat założony przez niniejszego użytkownika |
» 2010-09-06 20:01:44 powtórzyłem wiadomości o wskaźnikach i wymyśliłem inną forme przekazywania danych między
obiektami .opiera się ona na podawaniu konstruktorowi pól obiektu z którym
się komunikuje z tym obiektem i znaleziu adresu tego pola. dzięki temu mogę w obiekcie wytworzyć wskaźnikna dane pole .
mam związku z tym pytanie jak zadeklarować niedomyślny konstruktor(taki w ,którym można wprowadzić jakieś dane). wymyśliłem własną wersje rozwiązanie tego problemu ,ale napewno jest niepoprawna ,a poza tym nie działa.
oto udoskonalony kod
include < allegro.h > #include <iostream> #include <math.h>
class kolizjie { private: BITMAP * kula; BITMAP * mapa; public: int x; int y; int x_2; int y_2; bool czy_kol_gora; bool czy_kol_lewo; bool czy_kol_dol; bool czy_kol_prawo; void spr_kol(); kolizjie() { kula = load_bmp( "kula.bmp", default_palette ); mapa = load_bmp( "mapa.bmp", default_palette ); x = 100; x_2 = 100 + kula->h; y = 100; y_2 = 100 + kula->w; czy_kol_dol = false; czy_kol_gora = false; czy_kol_lewo = false; czy_kol_prawo = false; } ~kolizjie() { destroy_bitmap( mapa ); destroy_bitmap( kula ); } }; void kolizjie::spr_kol() { if ( getpixel( mapa, x_2, y - 1 ) != makecol( 255, 0, 255 ) || getpixel( mapa, x, y - 1 ) != makecol( 255, 0, 255 ) || getpixel( mapa,( x + x_2 ) / 2, y - 1 ) != makecol( 255, 0, 255 ) ) { czy_kol_gora = true; } if ( getpixel( mapa, x_2 - 1, y ) != makecol( 255, 0, 255 ) || getpixel( mapa, x_2 - 1, y_2 ) != makecol( 255, 0, 255 ) || getpixel( mapa, x_2 - 1,( y_2 + y ) / 2 ) != makecol( 255, 0, 255 ) ) { czy_kol_prawo = true; } if ( getpixel( mapa, x_2, y_2 + 1 ) != makecol( 255, 0, 255 ) || getpixel( mapa, x, y_2 + 1 ) != makecol( 255, 0, 255 ) || getpixel( mapa,( x + x_2 ) / 2, y_2 + 1 ) != makecol( 255, 0, 255 ) ) { czy_kol_dol = true; } if ( getpixel( mapa, x + 1, y_2 ) != makecol( 255, 0, 255 ) || getpixel( mapa, x + 1, y ) != makecol( 255, 0, 255 ) || getpixel( mapa, x + 1,( y + y_2 ) / 2 ) != makecol( 255, 0, 255 ) ) { czy_kol_lewo = true; } }
class sterowanie { private: bool * kol_dol; bool * kol_lewo; bool * kol_prawo; int * x; int * x_2; public: bool prawo; bool lewo; bool skok; void spr_ste(); sterowanie() { }; void ste_konst( bool a, bool b, bool c, int d, int e ) { prawo = false; lewo = false; skok = false; kol_dol = & a; kol_lewo = & b; kol_prawo = & c; x = & d; x_2 = & e; } ~sterowanie() { } }; void sterowanie::spr_ste() { if( key[ KEY_LEFT ] && !* kol_lewo ) { lewo = true; * x--; * x_2--; } if( key[ KEY_RIGHT ] && !* kol_prawo ) { prawo = true; * x++; * x_2++; } if( key[ KEY_UP ] && * kol_dol ) { skok = true; } }
class grawitacja { private: float a; float t0; float t1; float roznica; float przed; bool czy_skok; bool * skok; bool * kol_dol; int * y; int * y_2; public: float v0; float v1; void grawituj(); grawitacja() { }; void grawitacja_konst( bool a_s, bool b_kd, int c_y, int d_y_2 ) { a = 10; t0 = 0; t1 = 0.1; roznica = 0; przed = 0; v0 = 0; v1 = 40; czy_skok = false; skok = & a_s; kol_dol = & b_kd; y = & c_y; y_2 = & d_y_2; } ~grawitacja() { } };
void grawitacja::grawituj() { if( * skok && !czy_skok ) { v0 = v1; czy_skok = true; } if( !* skok && !czy_skok && !* kol_dol ) { v0 = 0; czy_skok = true; } if( czy_skok ) { roznica =( v0 * t0 -( a *( t0 * t0 ) ) / 2 ) - przed; * y = * y + static_cast < int >( round( roznica ) ); * y_2 = * y_2 + static_cast < int >( round( roznica ) ); przed =( v0 * t0 -( a *( t0 * t0 ) ) / 2 ); t0 = t0 + t1; if( * kol_dol && roznica < 0 ) { while( roznica < 0 ) { roznica++; * y--; if( !* kol_dol ) { * y++; czy_skok = false; t0 = 0; break; } } } } }; volatile long pre = 0; void inc_pre() { pre++; } END_OF_FUNCTION( inc_pre );
LOCK_VARIABLE( pre ); LOCK_FUNCTION( inc_pre ); int main() { allegro_init(); install_timer(); install_keyboard(); set_color_depth( 32 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 ); int t2 = 10; install_int_ex( inc_pre, BPS_TO_TIMER( 100 ) ); BITMAP * ziemia; BITMAP * trawa; BITMAP * kula; BITMAP * tlo; BITMAP * bufor; ziemia = load_bmp( "ziemia.bmp", default_palette ); trawa = load_bmp( "trawa.bmp", default_palette ); kula = load_bmp( "kula.bmp", default_palette ); tlo = load_bmp( "tlo.bmp", default_palette ); bufor = create_bitmap( 800, 600 ); kolizjie koli; sterowanie ste; grawitacja graw; ste.ste_konst( koli.czy_kol_dol, koli.czy_kol_lewo, koli.czy_kol_prawo, koli.x, koli.x_2 ); graw.grawitacja_konst( ste.skok, koli.czy_kol_dol, koli.y, koli.y_2 ); while( !key[ KEY_A ] ) { blit( tlo, bufor, 0, 0, 0, 0, tlo->w, tlo->h ); blit( ziemia, bufor, 0, 0, 0, 600 -( ziemia->h ), ziemia->w, ziemia->h ); masked_blit( trawa, bufor, 0, 0, 0, 600 -( ziemia->h + trawa->h ), ziemia->w, trawa->h ); masked_blit( kula, bufor, 0, 0, koli.x, koli.y, kula->w, kula->h ); blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h ); ste.spr_ste(); koli.spr_kol(); if( pre % t2 < 6 ) { graw.grawituj(); } } destroy_bitmap( bufor ); destroy_bitmap( tlo ); destroy_bitmap( ziemia ); destroy_bitmap( trawa ); return 0; allegro_exit(); }; END_OF_MAIN()
|