hakr1921 Temat założony przez niniejszego użytkownika |
» 2012-07-16 22:33:42 Zrobilem to bez tego ifa i również nie działa. I oto cały dylemat mojego dnia. Nie moje zrobić prostej gierki przez głupie strzelanie.. |
|
kampar |
» 2012-07-16 22:47:22 A czy gdzieś napisałem, że masz wywalić tego ifa? Po prostu musisz krok po kroku przeanalizować działanie swojego kodu i ustalić co nie działa. Pocisk się nie wyświetla? A może ma złą pozycje? Albo jego pozycja się nie zmienia? I wtedy zobacz na odpowiedni fragment i ustal dlaczego on się nie wykonuje właściwie. Musisz do tego dojść sam, nikomu się gotowca pisać nie chce.
Tak na marginesie takie coś nie jest dopuszczalne:
short int map[ 15 ][ 20 ] = { };
Nie powinno się operować na tablicy, której nie przypisaliśmy wartości |
|
hakr1921 Temat założony przez niniejszego użytkownika |
» 2012-07-16 23:11:48 Dobra, w miare ogarnąłem już kod tylko są dwa problemy. 1. Pocisk pojawia się na mapie, ja chce żeby leciał od postaci 2. Pocisk leci pod dobrym kątem, tylko przesuwa się on może o 10 pixeli KOD
#include <allegro.h> #include <cmath>
class Cpostac { public: int x,y; short int kierunek, klatka; }; // Zmienna naszej klasy Cpostac ludek;
// Inicjowanie timera volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION(increment_speed); LOCK_VARIABLE(speed); LOCK_FUNCTION(increment_speed);
// Zmienna int mapa_x = 0, mapa_y = 0; BITMAP *bufor = NULL; BITMAP *ludekb = NULL; BITMAP *teren = NULL; FONT * font_pcx = NULL; BITMAP *kursor = NULL; BITMAP *x = NULL; // DEFINICJA MAPY short int map[20][20] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, }; //kursor int mx = 0, my = 0, mb = 0; void myszka() { if( mx != mouse_x || my != mouse_y || mb != mouse_b ) { mx = mouse_x; my = mouse_y; mb = mouse_b; } }; //WYsiwetalnie mapy void wys_mape() { int licznik_x, licznik_y; for (licznik_x = 0; licznik_x < 100 ; licznik_x++) { for (licznik_y = 0; licznik_y < 100 ; licznik_y++) { blit(teren,bufor, (map[licznik_y + mapa_y][licznik_x + mapa_x]%4) * 32, (map[licznik_y + mapa_y][licznik_x + mapa_x]/4) * 32, licznik_x * 32,licznik_y * 32,32,32); } } };
// Funkcja G³ówna int main() { allegro_init(); install_keyboard(); set_color_depth(16); set_gfx_mode(GFX_AUTODETECT_FULLSCREEN,640,480,0,0); install_timer(); install_int_ex(increment_speed, BPS_TO_TIMER(80));
// Tworzenie bufora bufor = create_bitmap(640,480); // £adowanie grafiki ludekb = load_bmp("ludek1.bmp",default_palette); teren = load_bmp("teren.bmp",default_palette); font_pcx = load_font("arial_16.pcx",default_palette, NULL); x = load_bmp( "strzal.bmp", default_palette ); kursor = load_bitmap( "kursor.bmp", default_palette); //opcje myszki install_mouse(); set_mouse_sprite( kursor ); unscare_mouse(); // Ustalanie pocz¹tkowej pozycji ludzika int frame = 0; ludek.x = 100; ludek.y = 100; ludek.klatka = 0; ludek.kierunek = 0;
bool strzalv = false; double predkosc = 10; double kat; double deltaX, deltaY; double ix = ludek.x, iy = ludek.y; int celx = ix, cely = iy; while( !key[KEY_ESC]) { while( speed > 0) { if( strzalv == false ) { //to podzielilem tak jak uwazalem ale nie dziala if( mouse_b == 1 ) { celx = mx; cely = my; deltaX = ix - celx; deltaY = iy - cely; strzalv = true; } if( strzalv == true ) { if(( deltaY ) == 0 ) { kat = 0; } else { kat = atan(( deltaX ) /( deltaY ) ); //nie wiem co to do konca oznacza } //else
if( deltaY >= 0 ) { kat += M_PI; //nie wiem co to do konca oznacza } //if
}
if( iy != cely || ix != celx ) { ix += sin( kat ) * predkosc; iy += cos( kat ) * predkosc; } }
if( iy <- 20 ) ( strzalv = false );
ludek.kierunek = 0;
if( key[KEY_LEFT]) { ludek.kierunek = 4; ludek.x-=2; } if( key[KEY_RIGHT]) { ludek.kierunek = 2; ludek.x+=2; } if( key[KEY_UP]) { ludek.kierunek = 1; ludek.y-=2; } if( key[KEY_DOWN]) { ludek.kierunek = 3; ludek.y+=2; } if( key[KEY_A]) { ludek.kierunek = 4; ludek.x-=2; } if( key[KEY_D]) { ludek.kierunek = 2; ludek.x+=2; } if( key[KEY_W]) { ludek.kierunek = 1; ludek.y-=2; } if( key[KEY_S]) { ludek.kierunek = 3; ludek.y+=2; }
speed--;
frame++; if( frame > 40) frame=0; }
// Czyszczenie bufora clear_to_color(bufor, makecol(150,150,150));
//Wyswietl mape wys_mape();
// Sterowanie animacj¹ if( frame<20) { ludek.klatka = 0;} else if( frame>=20 && frame<40) { ludek.klatka = 1; }
//strtzal myszka(); masked_blit( x, bufor, 0, 0,( int ) ix,( int ) iy, 200, 200 ); textprintf_ex( bufor, font, 10, 10, makecol( 200, 200, 200 ), - 1, "deltaX = %d, deltaY = %d !",( int ) iy - cely,( int ) ix - celx );
//Wyœwietlanie ludzika masked_blit( ludekb, bufor, ludek.kierunek*32 ,ludek.klatka*32 ,ludek.x, ludek.y, 32,32);
//wyswietlanie kursora
masked_blit( kursor, bufor, 0, 0, mouse_x, mouse_y, kursor->w, kursor->h ); blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h ); } // Usuwanie wszystkiego z pamiêci. remove_int( increment_speed); destroy_bitmap(ludekb); destroy_bitmap( bufor ); destroy_bitmap( kursor ); allegro_exit(); return 0; } END_OF_MAIN();
|
|
DejaVu |
» 2012-07-17 01:03:35 Jeżeli nie potrafisz rozwiązywać takich prostych problemów to powinieneś wrócić do podstaw programowania. Sklejasz kod z tego co znajdziesz na necie, a nie piszesz go samodzielnie. |
|
hakr1921 Temat założony przez niniejszego użytkownika |
» 2012-07-17 02:22:27 Ja się uczę z przykładów, nie z tutoriali. PS. Dobra wszystko już mam prócz dwóch drobiazgów 1. Możliwość wystrzelenia kilkunastu pocisków jednocześnie 2. Zrobienie żeby pocisk leciał tylko w kierunku myszki, po następnym kliknięciu ma nie zmieniać toru Jak to zrobić? OBECNY KOD
#include <allegro.h> #include <cmath>
class Cpostac { public: int x,y; short int kierunek, klatka; }; Cpostac ludek;
// Inicjowanie timera volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION(increment_speed); LOCK_VARIABLE(speed); LOCK_FUNCTION(increment_speed);
// Zmienna int mapa_x = 0, mapa_y = 0; BITMAP *bufor = NULL; BITMAP *ludekb = NULL; BITMAP *teren = NULL; FONT * font_pcx = NULL; BITMAP *kursor = NULL; BITMAP *x = NULL; // DEFINICJA MAPY short int map[20][20] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, }; //kursor int mx = 0, my = 0, mb = 0; void myszka() { if( mx != mouse_x || my != mouse_y || mb != mouse_b ) { mx = mouse_x; my = mouse_y; mb = mouse_b; } };
//WYsiwetalnie mapy void wys_mape() { int licznik_x, licznik_y; for (licznik_x = 0; licznik_x < 100 ; licznik_x++) { for (licznik_y = 0; licznik_y < 100 ; licznik_y++) { blit(teren,bufor, (map[licznik_y + mapa_y][licznik_x + mapa_x]%4) * 32, (map[licznik_y + mapa_y][licznik_x + mapa_x]/4) * 32, licznik_x * 32,licznik_y * 32,32,32); } } };
// Funkcja G³ówna int main() { allegro_init(); install_keyboard(); set_color_depth(16); set_gfx_mode(GFX_AUTODETECT_FULLSCREEN,640,480,0,0); install_timer(); install_int_ex(increment_speed, BPS_TO_TIMER(80));
// Tworzenie bufora bufor = create_bitmap(640,480); // £adowanie grafiki ludekb = load_bmp("ludek1.bmp",default_palette); teren = load_bmp("teren.bmp",default_palette); font_pcx = load_font("arial_16.pcx",default_palette, NULL); x = load_bmp( "strzal.bmp", default_palette ); kursor = load_bitmap( "kursor.bmp", default_palette); //opcje myszki install_mouse(); set_mouse_sprite( kursor ); unscare_mouse(); // Ustalanie pocz¹tkowej pozycji ludzika int frame = 0; ludek.x = 200; ludek.y = 200; ludek.klatka = 0; ludek.kierunek = 0;
double predkosc = 5; double kat; double ix = ludek.x, iy = ludek.y; int celx = ix, cely = iy; while( !key[KEY_ESC]) { while( speed > 0) {
if( mb == 1 ) { celx = mx; cely = my; double deltaX = ix - celx; double deltaY = iy - cely;
if(( deltaY ) == 0 ) { kat = 0; } else { kat = atan(( deltaX ) /( deltaY ) ); } //else
if( deltaY >= 0 ) { kat -= M_PI; } //if
}
if( iy != cely || ix != celx ) { ix += sin( kat ) * predkosc; iy += cos( kat ) * predkosc; }
if( mouse_b == 1) kursor = load_bitmap( "kursor2.bmp", default_palette); else{ kursor = load_bitmap( "kursor.bmp", default_palette); }
ludek.kierunek = 0;
if( key[KEY_LEFT]) { ludek.kierunek = 4; ludek.x-=2; } if( key[KEY_RIGHT]) { ludek.kierunek = 2; ludek.x+=2; } if( key[KEY_UP]) { ludek.kierunek = 1; ludek.y-=2; } if( key[KEY_DOWN]) { ludek.kierunek = 3; ludek.y+=2; } if( key[KEY_A]) { ludek.kierunek = 4; ludek.x-=2; } if( key[KEY_D]) { ludek.kierunek = 2; ludek.x+=2; } if( key[KEY_W]) { ludek.kierunek = 1; ludek.y-=2; } if( key[KEY_S]) { ludek.kierunek = 3; ludek.y+=2; }
speed--;
frame++; if( frame > 40) frame=0; }
// Czyszczenie bufora clear_to_color(bufor, makecol(150,150,150));
//Wyswietl mape wys_mape();
//strtzal myszka(); masked_blit( x, bufor, 0, 0, ix, iy, 200, 200 ); textprintf_ex( bufor, font, 40, 40, makecol( 200, 200, 200 ), - 1, "deltaX = %d, deltaY = %d !",( int ) iy - cely,( int ) ix - celx );
// Sterowanie animacj¹ if( frame<20) { ludek.klatka = 0;} else if( frame>=20 && frame<40) { ludek.klatka = 1; }
//Wyœwietlanie ludzika masked_blit( ludekb, bufor, ludek.kierunek*32 ,ludek.klatka*32 ,ludek.x, ludek.y, 32,32);
//wyswietlanie kursora
masked_blit( kursor, bufor, 0, 0, mouse_x, mouse_y, kursor->w, kursor->h ); blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h ); clear_keybuf(); } // Usuwanie wszystkiego z pamiêci. remove_int( increment_speed); destroy_bitmap(ludekb); destroy_bitmap( bufor ); destroy_bitmap( kursor ); allegro_exit(); return 0; } END_OF_MAIN();
|
|
kampar |
» 2012-07-17 12:06:19 Ja się uczę z przykładów, nie z tutoriali. |
I dlatego nie rozumiesz co piszesz
Ad.1. Należy zrobić tablicę pocisków, najlepiej zeby to była tablica dynamiczna: list, ewentualnie vector Kontener tablicy (std::vector)
Ad.2. Kąt pocisku ustalasz tylko przy strzale, a dalej pozostaje stały
|
|
hakr1921 Temat założony przez niniejszego użytkownika |
» 2012-07-17 12:09:24 Okej, dzięki |
|
1 « 2 » |