Ageus Temat założony przez niniejszego użytkownika |
Problem ze strzelaniem. » 2013-08-27 23:49:22 Witam. Mam tu kilka problemów, ale podam tu najważniejszy. Wystrzelony z czołgu pocisk po dotarciu do krawędzi bufora miał wrócić na pozycję w pobliżu lufy. Zamiast tego wraca na pozycję jaką miał zaraz po włączeniu gry. Powstał z tego stacjonarny laser, a nie oto mi chodziło. Tu jest mój kod: #include <allegro.h> #include <cmath> #include <ctime> #include <cstdlib> BITMAP * bufor; BITMAP * czolg; BITMAP * lufa; BITMAP * pocisk; struct tank { double x; double y; double v; double kat; double katlufy; double xlufy; double ylufy; double xpocisku; double ypocisku; double katpocisku; }; inline void init() { allegro_init(); set_color_depth( 32 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 ); clear_to_color( screen, makecol( 0, 255, 0 ) ); install_timer(); install_keyboard(); install_mouse(); }
inline void deinit() { clear_keybuf(); allegro_exit(); }
int main() { init(); tank czolgi[ 2 ] = { 100, 400, 0, 0, 0, czolgi[ 0 ].x + 5, czolgi[ 0 ].y + 3, czolgi[ 0 ].xlufy, czolgi[ 0 ].ylufy + 2, 0, 400, 100, 0, 0, 0, czolgi[ 1 ].x + 5, czolgi[ 1 ].y + 3, czolgi[ 1 ].xlufy, czolgi[ 1 ].ylufy + 2, 0 }; bufor = create_bitmap( 800, 600 ); czolg = load_bmp( "czolg.bmp", 0 ); lufa = load_bmp( "lufa.bmp", 0 ); pocisk = create_bitmap( 2, 2 ); draw_sprite( bufor, czolg, czolgi[ 0 ].x, czolgi[ 0 ].y ); draw_sprite( bufor, lufa, czolgi[ 0 ].xlufy, czolgi[ 0 ].ylufy ); draw_sprite( bufor, czolg, czolgi[ 1 ].x, czolgi[ 1 ].y ); draw_sprite( bufor, lufa, czolgi[ 1 ].xlufy, czolgi[ 1 ].ylufy ); while( !key[ KEY_ESC ] ) { draw_sprite( screen, bufor, 0, 0 ); clear_to_color( bufor, makecol( 0, 255, 0 ) ); if( key[ KEY_W ] ) { while( czolgi[ 0 ].v < 1 ) { czolgi[ 0 ].v += 0.1; czolgi[ 0 ].y -= czolgi[ 0 ].v * cos(( czolgi[ 0 ].kat * M_PI ) / 180 ); czolgi[ 0 ].x -= czolgi[ 0 ].v * sin(( czolgi[ 0 ].kat * M_PI ) / 180 ); } } else { while( czolgi[ 0 ].v > 0 ) { czolgi[ 0 ].v--; } } if( key[ KEY_S ] ) { while( czolgi[ 0 ].v > - 0.5 ) { czolgi[ 0 ].v -= 0.1; czolgi[ 0 ].y -= czolgi[ 1 ].v * cos(( czolgi[ 0 ].kat * M_PI ) / 180 ); czolgi[ 0 ].x -= czolgi[ 1 ].v * sin(( czolgi[ 0 ].kat * M_PI ) / 180 ); } } else { while( czolgi[ 0 ].v < 0 ) { czolgi[ 0 ].v++; } } if( key[ KEY_A ] ) { czolgi[ 0 ].kat++; } if( key[ KEY_D ] ) { czolgi[ 0 ].kat--; } if( key[ KEY_SPACE ] ) { czolgi[ 0 ].katpocisku = - czolgi[ 0 ].katlufy; clear_to_color( pocisk, makecol( 255, 0, 0 ) ); draw_sprite( bufor, pocisk, czolgi[ 0 ].xpocisku, czolgi[ 0 ].ypocisku ); while( czolgi[ 0 ].ypocisku < 600 && czolgi[ 0 ].ypocisku > 0 && czolgi[ 0 ].xpocisku < 800 && czolgi[ 0 ].xpocisku > 0 ) { czolgi[ 0 ].ypocisku -= 1 * cos(( czolgi[ 0 ].katpocisku * M_PI ) / 180 ); czolgi[ 0 ].xpocisku -= 1 * sin(( czolgi[ 0 ].katpocisku * M_PI ) / 180 ); draw_sprite( bufor, pocisk, czolgi[ 0 ].xpocisku, czolgi[ 0 ].ypocisku ); } czolgi[ 0 ].ypocisku = czolgi[ 0 ].ylufy + 2; czolgi[ 0 ].xpocisku = czolgi[ 0 ].xlufy; } if( key[ KEY_Q ] ) { czolgi[ 0 ].katlufy--; } if( key[ KEY_E ] ) { czolgi[ 0 ].katlufy++; } if( czolgi[ 0 ].katlufy == 360 ) { czolgi[ 0 ].katlufy = 0; } czolgi[ 0 ].v *= 0.99; rotate_sprite( bufor, czolg, czolgi[ 0 ].x, czolgi[ 0 ].y, ftofix( - czolgi[ 0 ].kat * 256.0 / 360.0 ) ); rotate_sprite( bufor, lufa, czolgi[ 0 ].x + 5, czolgi[ 0 ].y + 3, ftofix( czolgi[ 0 ].katlufy * 256 / 360 ) ); } destroy_bitmap( lufa ); destroy_bitmap( czolg ); destroy_bitmap( bufor ); destroy_bitmap( pocisk ); deinit(); return 0; } END_OF_MAIN() |