Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Magazynek cz. 2

Ostatnio zmodyfikowano 2011-01-06 21:23
Autor Wiadomość
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:
C/C++
#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 serwera
Tak, nudziło mi się :).
P-26130
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
P-26134
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 :)
P-26144
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ż...
P-26147
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/
P-26194
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...
P-26195
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ć..
P-26196
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:
C/C++
if( level == 1 )
{
    //dużo podstawień
}
if( level == 2 )
{
    //dużo podstawień
}
...
a po tym:
C/C++
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
C/C++
for( i = 0; i <= 49; i++ )
P-26197
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona