Bitmap
classi definite dall'utente


La pallina e la racchetta da rappresentare nel gioco vanno disegnati, codificati come bitmap e salvati in files di nome, rispettivamente, 'palla.bmp' e 'racchetta.bmp'.

A questo scopo si può usare qualunque programma del tipo 'Paint' di Windows, ma nel menù di C++Builder, alla voce Tools, è disponibile Image Editor che in modo abbastanza semplice e intuitivo serve alla bisogna. Produrre un cerchietto pieno di 33x33 pixels (del colore preferito) e un rettangolino (sempre del colore preferito) di 33x17 pixels e salvare questi disegni con i nomi indicati nella cartella 'Ping' del progetto.

Per potere usare questi disegni nel progetto, conviene dichiarare una classe apposita, che sarà chiamata Disegno per gestire gli aspetti più generali di una bitmap e derivare da essa due classi, Palla e Racchetta per gestire gli aspetti specifici di questi due oggetti.

A questo scopo, aprire il foglio UnitPing.h in cui al momento c'è solo la dichiarazione della classe TFrmPing prodotta da C++Builder

class TFrmPing : public TForm
{
__published:    // IDE-managed Components
private:        // User declarations
public:         // User declarations
        __fastcall TFrmPing(TComponent* Owner);
};

Prima di questa dichiarazione, scrivere le dichiarazioni delle classi Disegno, Palla e Racchetta.

class Disegno: public TObject
    {
public:
      int xg, yg;
      Graphics::TBitmap *img;
      Disegno(AnsiString bm);
    };

class Palla: public Disegno
    {
public:
      double x, y, v, theta, vx, vy;
      int xc, diametro;
      Palla();
    };
class Racchetta: public Disegno
    {
public:
      int larghezza, altezza;
      Racchetta();
    };

class TFrmPing : public TForm
{
__published:    // IDE-managed Components
private:        // User declarations
public:         // User declarations
        __fastcall TFrmPing(TComponent* Owner);
};

La classe Disegno ha le proprietà di tipo intero xg, yg, la proprietà di classe Graphics::TBitmap img e il costruttore Disegno().

Le classi Palla e racchetta ereditano tutti i membri della classe Disegno, aggiungono a questi alcune loro specifiche proprietà ed hanno il proprio costruttore.

A questo punto è possibile, nella classe TFrmPing, riferirsi ad oggetti generati dalle classi Palla e Racchetta.

Visto che si interviene su questa classe, si introduce in essa la proprietà sfondo di classe Graphics::TBitmap (definita nelle librerie di C++Builder) che sarà utile in seguito per la tecnica di animazione grafica che sarà proposta.

class Disegno: public TObject
    {
public:
      int xg, yg;
      Graphics::TBitmap *img;
      Disegno(AnsiString bm);
    };

class Palla: public Disegno
    {
public:
      double x, y, v, theta, vx, vy;
      int xc, diametro;
      Palla();
    };
class Racchetta: public Disegno
    {
public:
      int larghezza, altezza;
      Racchetta();
    };
class TFrmPing : public TForm
{
__published:    // IDE-managed Components
private:        // User declarations
public:         // User declarations
       Palla *palla;
        Racchetta *racchetta;
        Graphics::TBitmap *sfondo;

        __fastcall TFrmPing(TComponent* Owner);
};

Passare ora nel foglio UnitPing.cpp dove, al momento, appare solo il corpo del costruttore della classe TFrmPing

//---------------------------------------------------------------------------
__fastcall TFrmPing::TFrmPing(TComponent* Owner)
        : TForm(Owner)
{
}

Nel corpo di questo costruttore si possono costruire gli oggetti palla, racchetta e sfondo e sotto di esso vanno scritti i costruttori delle classi dichiarate

//---------------------------------------------------------------------------
__fastcall TFrmPing::TFrmPing(TComponent* Owner)
        : TForm(Owner)
{
palla = new Palla();
  racchetta = new Racchetta();
  sfondo = new Graphics::TBitmap();
  sfondo->Canvas->Brush->Color = clGreen;
}

//---------------------------------------------------------------------------
Disegno::Disegno(AnsiString bm):
TObject()
{
  img = new Graphics::TBitmap();
  img->LoadFromFile(bm);
}

//---------------------------------------------------------------------------
Palla::Palla():
Disegno("palla.bmp")
{
  img->Transparent = true;
  diametro = img->Width;
  v = 5;
}

//---------------------------------------------------------------------------
Racchetta::Racchetta():
Disegno("racchetta.bmp")
{
  larghezza = img->Width;
  altezza = img->Height;
}

Il costruttore di Disegno genera l'oggetto img e ne legge il contenuto dal file passato come argomento.

Il costruttore di Palla genera il suo particolare oggetto img tramite il costruttore di Disegno, la sua classe madre, ma specifica che la bitmap img deve essere trasparente (Transparent = true) per fare in modo che venga disegnata solo il cerchio della palla, non tutto il quadrato che lo contiene.

Il costruttore di Racchetta, come il costruttore di Palla, genera il suo particolare oggetto img tramite il costruttore di Disegno.

I due costruttori inizializzano alcune loro specifiche proprietà.


prontuario

ping1 ping3

Valid XHTML 1.0