Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    [C++]errore nel main

    #include "allegro.h"

    BITMAP *buf, *sprite ;
    PALETTE colori;// l’inclusione delle librerie di allegro e con la definizione
    //della variabile delle palette.
    void doppiobuffering(){


    class Video{ //dichiarazione di una classe..
    //una classe è formata da un costruttore .. nome()
    //da un distruttore ~nome()
    //e poi da due metodi


    public:
    Video(){

    allegro_init();

    install_keyboard();

    };
    //alla creazione dell’oggetto di tipo Video, vengono chiamate le procedure
    //d’inizializzazione di allegro e quelle per l’installazione della tastiera.
    ~Video(){

    destroy_bitmap(buf);

    }//Il distruttore di Video permette il recupero della memoria attraverso la
    //funzione destroy_bitmap(buf) applicata al buffer.

    void Display(int Disp,int n,int m){
    set_color_depth(32);
    set_palette(colori);
    set_gfx_mode(GFX_AUTODETECT, n, m, 0, 0);
    buf = create_bitmap(n, m);
    clear(buf);
    }//Il metodo Display di Video fa si che un oggetto di questo tipo, attraverso
    //tale metodo sia in grado di settare la profondità del colore e la risoluzione
    // assegnando i valori disp (per la profondità del colore) a
    //set_color_depth(disp), settando le palette ed assegnando i valori n ed m a
    //set_gfx_mode(GFX_AUTODETECT, n, m, 0, 0), ed al range di creazione del buffer
    //con buf = create_bitmap(n, m) che viene pulito con clear (buf).

    void DB(int n,int m){
    vsync();
    blit(buf, screen, 0, 0, 0, 0, n, m);
    clear(buf);
    }//Il metodo DB non fa altro che attuare il doppio buffering di cui conosciamo
    //bene il funzionamento.

    };// compito della classe:
    //gestire le operazioni di messa a video delle immagini.
    //la classe è formata da, ha un costruttore, un distruttore e due metodi,
    //Display e DB che vedremo poi nello specifico.


    class Giocatore{ //dichiarazione di una classe

    int x,y; //membri privati

    public:
    Giocatore(){
    sprite = load_bmp("player.bmp",colori);
    x=10; y=30;
    }//Il costruttore di Giocatore fa si che un oggetto di questo tipo sia in grado
    //al nascere di caricare l’immagine bitmap dello sprite e di definire le sue
    //coordinate iniziali.

    ~Giocatore(){
    destroy_bitmap(sprite);
    } //distrugge la memoria utilizzata


    void Muovi(){

    if (key[KEY_LEFT])x-=2;if(x<=0)x=0;

    if (key[KEY_RIGHT])x+=2;if(x>=266)x=266;

    if (key[KEY_UP])y-=2;if(y<=0)y=0;

    if (key[KEY_DOWN])y+=2;if(y>=138)y=138;

    }
    int putx(){
    return x;
    }

    int puty(){
    return y;
    }
    void vedi(){
    draw_sprite(buf, sprite, putx(), puty());
    }//richiamare la procedura per il disegno dello sprite a schermo.

    //I metodi Put x ed y (che sono metodi pubblici) servono ad accedere ai
    //membri x ed y (privati e quindi inaccessibili dall’esterno se non
    //attraverso dei metodi appripriati) come una buona programmazione OO
    //richiede.


    //Compito della classe:
    //gestire le operazioni che riguardano il nostro sprite, che per adesso ha
    //un’unica funzione che è quella di comparire a video.


    //Nel main andremo a dichiarare due oggetti, uno per ogni classe implementata.
    //Quindi l’oggetto Game gestisce i problemi generali di messa a video delle
    //immagini e l’oggetto Nave rappresenta il nostro sprite.
    };
    }
    int main()
    {
    Video.Game;
    Giocatore.Nave;
    set_color_depth(32);//aggiorniamo le palette
    set_palette(colori);
    //Game ha un metodo Display che permette di settare la risoluzione video,
    //nel nostro caso a 320 per 200 e di dare una profondità di colore a 32 bit.

    Game.Display(32,320,200);
    //Con un ciclo while che termina quando viene premuto il tasto ESC l’oggetto
    // Game chiama il metodo DB che implementa il doppio buffering che noi già
    //conosciamo. L’oggetto nave compare a video attraverso il metodo Vedi.

    while (!key[KEY_ESC]) {

    Game.DB(320,200);
    Nave.Vedi();
    }


    }
    END_OF_MAIN ();

    mi dice che non ho dichiarato video game giocatore nave...
    ma non penso di doverle dichiarare.. potete aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non so perche' tu l'abbia scritto cosi'

    Video.Game;
    Giocatore.Nave;

    ma il punto non c'entra nulla ... deve essere

    Video Game;
    Giocatore Nave;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    grazie....

    comunque mi da ancora l'errore... come mai?

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    2 cose..

    1) usa i tag code perchè in questo modo senza rientro del codice non si capisce nulla di dove iniziano e dove finiscono dischiarazioni e implementazioni di classi e metodi..

    2) set_color_depth e set_palette dove sono dichiarati?

  5. #5
    Originariamente inviato da simop_075
    comunque mi da ancora l'errore... come mai?
    L'errore dobbiamo indovinarlo? Non puoi copia/incollarlo?

  6. #6
    `Video' undeclared (first use this function)

    (Each undeclared identifier is reported only once for each function it appears in.)
    `Giocatore' undeclared (first use this function)
    expected `;' before "Nave"
    `Game' undeclared (first use this function)
    `Nave' undeclared (first use this function)

    eccoli.. grazie.. xd

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Sicuramente mancano gli include delle classi nel file del main ... ma se non usi i tag CODE e non sistemi il codice, non si capisce nulla ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    codice:
    #include "allegro.h"
    
    BITMAP *buf, *sprite ;
    PALETTE colori;
    void doppiobuffering(){
    
    
    class Video{ 
    public:
    Video(){
    
    allegro_init();
    
    install_keyboard();
    
    };
    
    ~Video(){
    
    destroy_bitmap(buf);
    
    }
    
    void Display(int Disp,int n,int m){
    set_color_depth(32);
    set_palette(colori);
    set_gfx_mode(GFX_AUTODETECT, n, m, 0, 0);
    buf = create_bitmap(n, m);
    clear(buf);
    }
    
    void DB(int n,int m){
    vsync();
    blit(buf, screen, 0, 0, 0, 0, n, m);
    clear(buf);
    }
    
    };
    
    
    class Giocatore{ 
    
    int x,y; 
    
    public:
    Giocatore(){
    sprite = load_bmp("player.bmp",colori);
    x=10; y=30;
    }
    
    ~Giocatore(){
    destroy_bitmap(sprite);
    } 
    
    
    void Muovi(){
    
    if (key[KEY_LEFT])x-=2;if(x<=0)x=0;
    
    if (key[KEY_RIGHT])x+=2;if(x>=266)x=266;
    
    if (key[KEY_UP])y-=2;if(y<=0)y=0;
    
    if (key[KEY_DOWN])y+=2;if(y>=138)y=138;
    
    }
    int putx(){
    return x;
    }
    
    int puty(){
    return y;
    }
    void vedi(){
    draw_sprite(buf, sprite, putx(), puty());
    }
    
    };
    }
    int main()
    {
    Video Game;
    Giocatore Nave;
    set_color_depth(32);
    set_palette(colori);
    
    Game.Display(32,320,200);
    
    while (!key[KEY_ESC]) {
    
    Game.DB(320,200);
    Nave.Vedi();
    }
    
    
    }
    END_OF_MAIN ();
    gli errori...

    `Video' undeclared (first use this function)

    (Each undeclared identifier is reported only once for each function it appears in.)
    `Giocatore' undeclared (first use this function)
    expected `;' before "Nave"
    `Game' undeclared (first use this function)
    `Nave' undeclared (first use this function)

  9. #9

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se metti in ordine il codice (con una corretta indentazione) ti accorgi subito del perche' hai tutti quegli errori ... Per esempio, solo le righe iniziali

    codice:
    #include "allegro.h"
    
    BITMAP *buf, *sprite ;
    PALETTE colori;
    
    void doppiobuffering()
    {
    	class Video	
    	{ 
    public:
    	Video()
    ...
    ... mi spieghi cosa ci fa la class Video dentro la funzione doppiobuffering?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.