kurz ne Frage zu Klassen



  • hi,
    dies ist mal meine erste Frage (Anfängerfrage XD ) zum Thema c++...
    Also bitte nicht hauen 😉

    Also,ich will mithilfe von allegro einen Bombermanklon progammieren.
    Die Map-Kolli klappt schon,sowie der Level Editor.Nun mache ich mich an den Bomben ran...
    Da hab ich dann mal glatt ne Klasse erstellt:

    class bomb{
    
    public:
        bool bomb_enabled;
        int bomb_tilex;
        int bomb_tiley;
        int countdown;
        int bomb_x;
        int bomb_y;
        bool bomb_layer[15][15];
    
    void create_bomb(int x, int y){
    
        bomb_enabled = true;
        bomb_x = x*16;
        bomb_y = y*16;
        countdown = 3;
        bomb_layer[x][y] = true;
    
    }
    };
    

    So,nun kommt mein Problem....
    Wenn ich die Space taste drücke,dann soll der mir ne Bombe erstellen.
    Nur wenn ich die Space taste drücke,dann beendet sich das Programm 😕
    hier mal der Code:

    if (key[KEY_SPACE]){
        coll_layer[player1_tilex][player1_tiley] = true;
        bomben->bomb_layer[player1_tilex][player1_tiley] = true;
        bomben->create_bomb(player1_tilex,player1_tiley);
    }
    

    Hoffe ihr könnt mir helfen,der Compiler (MinGW) gibt mir keinen Fehler aus....
    THX!



  • Zeig mal deine Spieleschleife.

    PS: Wieso setzt du eigentlich zweimal den Bomben-Layer ?
    Das macht das schon die Methode create_bomb...



  • while(!key[KEY_ESC]){
    
    acquire_bitmap(buffer);
    clear(buffer); 
    
    //Bewgung des Spielers 1
    if (key[KEY_W] && coll_layer[player1_tilex][player1_tiley-1]==false){
        player1_tiley = player1_tiley-1;
    }
    if (key[KEY_S] && coll_layer[player1_tilex][player1_tiley+1]==false){
        player1_tiley = player1_tiley+1;
    }
    if (key[KEY_A] && coll_layer[player1_tilex-1][player1_tiley]==false){
        player1_tilex = player1_tilex-1;
    }
    if (key[KEY_D] && coll_layer[player1_tilex+1][player1_tiley]==false){
        player1_tilex = player1_tilex+1;
    }
    
    if (key[KEY_SPACE]){
        coll_layer[player1_tilex][player1_tiley] = true;
        bomben->bomb_layer[player1_tilex][player1_tiley] = true;
        //bomben->create_bomb(player1_tilex,player1_tiley);
    }
    
    //Zeichnen der Map+bomben
    for(int x=0; x<=max_tiles_x; x++){
         for(int y=0; y<=max_tiles_y; y++)
            blit(tileset,buffer,tilematrix[x][y]*tilewidth,0,x*tilewidth,y*tileheight,tilewidth,tileheight);      
         } 
    
    if (bomben->bomb_enabled == true){
        blit(bombe_gfx,buffer,0,0,5*tilewidth,5*tileheight,tilewidth,tileheight);
    }  
    
    blit(player_1_gfx,buffer,0,0,player1_tilex*tilewidth,player1_tiley*tileheight,player_1_gfx->w,player_1_gfx->h);
    
    release_bitmap(buffer);
    blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);
    
    }
    

    PS: Jaja ich weiß...
    der Player selber kommt noch in eine neue Klasse sowie es für die Map auch ne klasse geben wird,aber alles zu seiner zeit 😉

    achja:
    ein neues objekt der bombenklasse hab ich so initialisiert:

    bomb *bomben;
    

    das befindet sich in der main function und nach der allegro initialisiation und vor den variablen deklinationen.



  • Rambo256 schrieb:

    bomb *bomben;
    

    Damit erstellst du einen Pointer auf ein bomb - Objekt.
    Aber erstellst du auch ein bomb-Object bzw. Speicher dafür ???



  • Ne...
    wie macht man das 😕
    bin noch nich so weit. 😞



  • du musst einfach den stern vor dem namen des objektes weglassen (oder irr ich mich?)

    den speicher kannst du mit malloc() oder new() allokieren.



  • Jo jetzt klappts,musste nur noch die "->" gegen einen simplen "." ersetzen.
    Danke!


Anmelden zum Antworten