malan |
» 2011-01-02 12:58:07 Oj chłopie...;p. Powiedz, jak chcesz żeby to wyglądało? Tzn. jak według Ciebie powinna wyglądać ta gra? /edit: Stwierdziłem, że nie ma sensu przerabiać Twojego kodu, więc napisałem go od nowa. Projekt podzieliłem na kilka plików. Levele wczytujesz z pliku, możesz mieć dowolną ilość kulek. Główna część programu wygląda tak: #include <allegro.h> #include <vector> #include "Ball.hpp" #include "Level.hpp" #include "Magazine.hpp"
const int MY_SCREEN_W = 1024; const int MY_SCREEN_H = 768;
BITMAP * const EMPTY_BITMAP = 0;
void allegroDeinit(); void allegroInit();
bool mouseInit( BITMAP ** newCursor );
int main() { BITMAP * ball = EMPTY_BITMAP; BITMAP * buffer = EMPTY_BITMAP; BITMAP * cursor = EMPTY_BITMAP; BITMAP * ground = EMPTY_BITMAP; bool mouseButton1Clicked = false; bool mouseButton2Clicked = false; int score; Magazine magazine( 25, 3 ); std::size_t maxScore = 0; std::vector < Ball > balls; std::vector < Ball >::iterator ballsIt; allegroInit(); if( !mouseInit( & cursor ) ) return - 1; buffer = create_bitmap( MY_SCREEN_W, MY_SCREEN_H ); if( buffer == EMPTY_BITMAP ) return - 2; ground = load_bmp( "bitmaps/ziemia.bmp", default_palette ); if( ground == EMPTY_BITMAP ) return - 3; ball = load_bmp( "bitmaps/kulka.bmp", default_palette ); if( ball == EMPTY_BITMAP ) return - 4; readLevel( "levels/level1.txt", balls ); for( ballsIt = balls.begin(); ballsIt != balls.end(); ++ballsIt ) ballsIt->setBitmap( ball ); maxScore = balls.size(); while( !key[ KEY_ESC ] ) { clear_to_color( buffer, makecol( 0, 0, 0 ) ); score = 0; for( ballsIt = balls.begin(); ballsIt != balls.end(); ++ballsIt ) { if( !mouseButton1Clicked && mouse_b == 1 ) { mouseButton1Clicked = true; magazine.shot(); } if( !mouseButton2Clicked && mouse_b == 2 ) { mouseButton2Clicked = true; magazine.reload(); } if( mouse_b == 0 ) { mouseButton1Clicked = false; mouseButton2Clicked = false; } if( mouseButton1Clicked ) if( ballsIt->shot() ) ballsIt->destroy(); if( !ballsIt->isDestroyed() ) { ballsIt->setX( ballsIt->getX() - 1 ); if( ballsIt->getX() < -( ball->w ) ) ballsIt->setToDefaultPossition(); masked_blit( ballsIt->getBitmap(), buffer, 0, 0, ballsIt->getX(), ballsIt->getY(), ballsIt->getW(), ballsIt->getH() ); } else score++; } masked_blit( ground, buffer, 0, 0, 0, 600, ground->w, ground->h ); masked_blit( cursor, buffer, 0, 0, mouse_x, mouse_y, cursor->w, cursor->h ); textprintf_ex( buffer, font, 100, 700, makecol( 0, 0, 0 ), - 1, "Wynik: %d / %d", score, maxScore ); textprintf_ex( buffer, font, 100, 725, makecol( 0, 0, 0 ), - 1, "Naboje: %d / %d", magazine.getCurrentCartridgesCount(), magazine.getCartridgesCount() ); textprintf_ex( buffer, font, 100, 750, makecol( 0, 0, 0 ), - 1, "Magazinki: %d", magazine.getMagazinesCount() ); blit( buffer, screen, 0, 0, 0, 0, buffer->w, buffer->h ); } destroy_bitmap( ball ); destroy_bitmap( buffer ); destroy_bitmap( cursor ); allegroDeinit(); return 0; }
void allegroDeinit() { allegro_exit(); }
void allegroInit() { allegro_init(); install_keyboard(); install_mouse(); set_mouse_sprite_focus( 16, 16 ); set_color_depth( 32 ); set_gfx_mode( GFX_AUTODETECT, MY_SCREEN_W, MY_SCREEN_H, 0, 0 ); clear_to_color( screen, makecol( 0, 0, 0 ) ); }
bool mouseInit( BITMAP ** newCursor ) { ( * newCursor ) = load_bmp( "bitmaps/celownik.bmp", default_palette ); return(( * newCursor ) != EMPTY_BITMAP ); }
END_OF_MAIN()
Tutaj możesz pobrać cały projekt: tutaj był link do projektu, który został już usunięty z serweraTak, nudziło mi się :). |
|
ison |
» 2011-01-02 17:50:29 @malan nie uwzględniłeś tego że można trzymać lewy przycisk myszy i jeździć po całym ekranie :) zestrzelisz wszystko kosztem jednego naboju
ujemna liczba magazynków dostępnych też tak trochę dziwnie wygląda - można przeładowywać bez końca
jakiś timer też by się przydał bo póki co to szybszy procek = szybciej lecące kulki |
|
SeaMonster131 |
» 2011-01-02 19:18:24 Że tak powiem....myślisz że On zrozumie choć połowe Twojego kodu? On go po prostu skopiuje, a jak będzie trzeba coś zmienić to zrobi tak:
włączy przeglądarke -> wejdzie na http://cpp0x.pl -> i napisze na forum.
Heh... to moje zdanie. Ale że znalazł sie ktoś kto w ogóle tą gre napisał od nowa hehe :) |
|
malan |
» 2011-01-02 19:34:33 @ison: nie uwzględniłeś tego że można trzymać lewy przycisk myszy i jeździć po całym ekranie :) zestrzelisz wszystko kosztem jednego naboju
ujemna liczba magazynków dostępnych też tak trochę dziwnie wygląda - można przeładowywać bez końca
jakiś timer też by się przydał bo póki co to szybszy procek = szybciej lecące kulki |
Wiem. To już jest robota dla Mazzira :). Całej gry mu nie napiszę przecież... |
|
Mazzir Temat założony przez niniejszego użytkownika |
» 2011-01-03 21:38:26 Nie mam zamiaru tego kopiować bo po co mam kopiować coś czego nie umiem nawet w teorii ? Proszę Was o pomoc jeszcze tylko z tym magazynkiem i levelami.. Co tam magazynek - to da sie przeżyć, ale najbardziej mnie gryzą te poziomy, których za nic nie moge naprawić ;/
Czy mógłby ktoś wyjaśnić gdzie jest błąd w tych warunkach przejścia do kolejnego poziomu ? Bo po pierwszym poziomie przeskakuje od razu do piątego, który jest na dodatek "pusty" ;/ Mój kod: http://wklej.org/hash/e2a051e932c/ |
|
kamillo121 |
» 2011-01-03 21:46:28 No to jedziesz z koksem, przed sprawdzaniem wartości obiektów kula może wartowałoby je wypełnić jakimiś danymi ?
Nie wiesz gdzie jest błąd? wypiernicz najpierw pierwsze ify i zobacz, jak będzie chodzić to znaczy, że to zawiniło jak nie to dalej a nie... |
|
Mazzir Temat założony przez niniejszego użytkownika |
» 2011-01-03 22:18:20 A będzie ktoś miły i mi to poprawi ? ;/ Bo mam to na jutro a nie chce kopiować całości od kogoś tylko ten błąd naprawić.. |
|
ison |
» 2011-01-03 23:45:24 rozwiązanie na szybko? obiekt kula[ 56 ]; deklaruj globalnie (poza funkcją main) następnie zadeklaruj sobie funkcję void CheckLevel() w której na początku zamieść ten kawałek z Twojego kodu: if( level == 1 ) { } if( level == 2 ) { } ...
a po tym: if( level == 1 ) if( kula[ 52 ].zniszczony == true || kula[ 52 ].x < - 100 ) level = 2;
if( level == 2 ) if( kula[ 50 ].zniszczony == true || kula[ 50 ].x > 1100 ) level = 3;
if( level == 3 ) if( kula[ 51 ].zniszczony == true || kula[ 51 ].x < - 100 ) level = 4;
if( level == 4 ) if( kula[ 53 ].zniszczony == true || kula[ 53 ].x > 1100 ) level = 5;
if( level == 5 ) if( kula[ 54 ].zniszczony == true || kula[ 54 ].x < - 100 ) level = 6;
if( level == 6 ) if( kula[ 55 ].zniszczony == true || kula[ 55 ].x > 1100 ) textprintf_ex( bufor, font, 400, 300, makecol( 0, 0, 0 ), - 1, "Koniec Gry!" ); textprintf_ex( bufor, font, 380, 320, makecol( 0, 0, 0 ), - 1, "Twoj wynik to: %d", punkty );
tę funkcję wywołuj za każdym obiegiem w pętli przed: blit( bufor, screen, 0, 0, 0, 0, 1024, 768 ); nie mogę aktualnie sprawdzić co jeszcze jest źle bo nie mam przy sobie na tym komputerze zainstalowanego allegro :p //popraw jeszcze te fory bo przy każdym levelu lecisz tylko do 49 for( i = 0; i <= 49; i++ )
|
|
1 « 2 » 3 |