Jeux démo d'avion avec directx (directdraw 2d)

Soyez le premier à donner votre avis sur cette source.

Vue 43 085 fois - Téléchargée 1 161 fois

Description

Ce programme permet d'approfondir vos connaissances sur

DirectX (DirectDraw 2D) avec un petit jeux sympa.

logiciel : Borland C++ Bulder V4

Source / Exemple :


#include <vcl.h>
#include <ddraw.h>
#include <mmsystem.h>

#include "Main.h"
#include "ddutil.h"
#include "Unit2.h"

#pragma hdrstop
#pragma resource "*.dfm"

TForm1 *Form1;
char szBackground[] = "C6401000";   //  BMP
      int ty=0;
int x=100;  int y=300;       // cordoné de l'avion
int times = 0;               // times du reacteur de l'avion
int arme=1; int NbrArme=1;   // arme désactivé
int AvionTouche=0;
AnsiString s; int ligne=0;  int colone=1;  // cordoné du decor
              int k=0;      int tmp=0;

int level=0;

int etoile0=0;  // etoile lente
int etoile1=0;  // etoile rapide

   //////////////////////////////////////////////////////

 int avion=0;               // Avion enemi
 int ViteseAvonEnemi=0;     // Vitese Avon Enemi
 int tempnb1=0;             // type avion 1
 int tempnb2=0;             // type avion 2
 int tempnb3=0;             // type avion 3
 int tempnb4=0;             // type avion 4
 int AvionTouchenb1=0;      // Avion Touché nb1
 int AvionTouchenb2=0;      // Avion Touché nb2
 int AvionTouchenb3=0;      // Avion Touché nb3
 int AvionTouchenb4=0;      // Avion Touché nb4
   int   NbrLigne=0;
   AnsiString lpo;       int sui=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)  : TForm(Owner)
{
    Timer1->Enabled = false;
    Form2 = new TForm2(Application);
    Form2->ShowModal();
    Start();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Start()
{

 HRESULT res = DirectDrawCreate(NULL, &pDD, NULL);
 pDD->SetCooperativeLevel(Handle,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);

 ddsd.dwSize = sizeof(ddsd);
 ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
 ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX;

 ddsd.dwBackBufferCount = 1;
 pDD->SetDisplayMode(640,480, 16);
 pDD->CreateSurface(&ddsd, &pDDSPrim, NULL);

 ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
 pDDSPrim->GetAttachedSurface(&ddscaps, &pDDSSec);

 pDDPal = DDLoadPalette(pDD, szBackground);

 pDDSImage = DDLoadBitmap(pDD, szBackground, 0, 0);
 DDSetColorKey(pDDSImage,RGB(0,0,0));  // Couleur de transparence

  pDDSPrim->Flip( NULL, 0 );

  MediaPlayer1->Play();

 Timer1->Enabled = true;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
            int   max=56;
               ///////// level ////////////
 if ((k>=(max*43)) && (level==0)) {k=0;level=1;}
 if ((k>=(max*43)) && (level==1)) {k=0;level=2;}
 if ((k>=(max*43)) && (level==2)) {k=0;level=3;}
 if ((k>=(max*43)) && (level==3)) {k=0;level=4;}
 if ((k>=(max*43)) && (level==4)) {Close();}

 if ((k==0) && (level==0)) {Memo1->Lines->LoadFromFile("Level0.txt");
                            Memo2->Lines->LoadFromFile("Avion.txt");}
 if ((k==0) && (level==1)) {Memo1->Lines->LoadFromFile("Level1.txt");
                            Memo2->Lines->LoadFromFile("Avion.txt"); }
 if ((k==0) && (level==2)) {Memo1->Lines->LoadFromFile("Level2.txt");
                            Memo2->Lines->LoadFromFile("Avion.txt"); }
 if ((k==0) && (level==3)) {Memo1->Lines->LoadFromFile("Level3.txt");
                            Memo2->Lines->LoadFromFile("Avion.txt"); }
 if ((k==0) && (level==4)) {Memo1->Lines->LoadFromFile("Level4.txt");
                            Memo2->Lines->LoadFromFile("Avion.txt"); }

              ///////////////////////////////
   k=k+tmp+12;

 ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
 pDDSPrim->GetAttachedSurface(&ddscaps, &pDDSSec);
 rc.left=0;   rc.top=0;   rc.right=640; rc.bottom=480;
 pDDSSec->BltFast(0,0,pDDSImage,&rc,DDBLTFAST_NOCOLORKEY);

            ////////////// etoiles ///////////
 rc.left=1;   rc.top=955;   rc.right=298; rc.bottom=997;
 for (int t=0; t<8; t++) {
 pDDSSec->BltFast(0,  43+43*2*t+etoile0-300,pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);
 pDDSSec->BltFast(100,43*2*t+etoile0-300,pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);}
 etoile0++;   if (etoile0>=300) {etoile0=43;}
 for (int t=0; t<8; t++) {
 pDDSSec->BltFast(20 ,43+43*2*t+etoile1-300,pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);
 pDDSSec->BltFast(120,43*2*t+etoile1-300,pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);}
 etoile1=etoile1+5;   if (etoile1>=300) {etoile1=43;}

                //////////////////////////////

for (ligne=0;  ligne<max;  ligne++) {
for (colone=1; colone<11; colone++) {
 s = Memo1->Lines->Strings[ligne];
 char c = s[colone];

                      //////// détect les obstacles
if ((c != char ('0')) &&
   ((y-35 <=  ligne*42+k-(max*42)) && (y+18 >=  ligne*42+k-(max*42)) ) &&
   ((x-25 <= colone*42-42)         && (x+25 >= colone*42-42)))

  {char const *Path = "Alert.wav";  avion=1;
   sndPlaySound(Path, SND_ASYNC | SND_FILENAME);    }

if (c == char ('0')) {rc.left=1+43*4;  rc.top=482     ; rc.right=43*4;      rc.bottom=524;     }
if (c == char ('1')) {rc.left=1+43*10; rc.top=482     ; rc.right=43+43*10;  rc.bottom=524;     }
if (c == char ('2')) {rc.left=1+43*11; rc.top=482     ; rc.right=43+43*11;  rc.bottom=524;     }
if (c == char ('3')) {rc.left=1+43*12; rc.top=482     ; rc.right=43+43*12;  rc.bottom=524;     }
if (c == char ('4')) {rc.left=1+43*13; rc.top=482     ; rc.right=43+43*13;  rc.bottom=524;     }
if (c == char ('5')) {rc.left=1+43*10; rc.top=482+43*1; rc.right=43+43*10;  rc.bottom=524+43*1;}
if (c == char ('6')) {rc.left=1+43*11; rc.top=482+43*1; rc.right=43+43*11;  rc.bottom=524+43*1;}
if (c == char ('7')) {rc.left=1+43*12; rc.top=482+43*1; rc.right=43+43*12;  rc.bottom=524+43*1;}
if (c == char ('8')) {rc.left=1+43*13; rc.top=482+43*1; rc.right=43+43*13;  rc.bottom=524+43*1;}
if (c == char ('9')) {rc.left=1+43*10; rc.top=482+43*2; rc.right=43+43*10;  rc.bottom=524+43*2;}
if (c == char ('A')) {rc.left=1+43*11; rc.top=482+43*2; rc.right=43+43*11;  rc.bottom=524+43*2;}
if (c == char ('B')) {rc.left=1+43*12; rc.top=482+43*2; rc.right=43+43*12;  rc.bottom=524+43*2;}
if (c == char ('C')) {rc.left=1+43*13; rc.top=482+43*2; rc.right=43+43*13;  rc.bottom=524+43*2;}
if (c == char ('D')) {rc.left=1+43*9;  rc.top=482+43*0; rc.right=43+43*9;   rc.bottom=524+43*0;}
if (c == char ('E')) {rc.left=1+43*9;  rc.top=482+43*1; rc.right=43+43*9;   rc.bottom=524+43*1;}
if (c == char ('F')) {rc.left=1+43*9;  rc.top=482+43*2; rc.right=43+43*9;   rc.bottom=524+43*2;}
if (c == char ('G')) {rc.left=1+43*9;  rc.top=482+43*3; rc.right=43+43*9;   rc.bottom=524+43*3;}
if (c == char ('H')) {rc.left=1+43*10; rc.top=482+43*3; rc.right=43+43*10;  rc.bottom=524+43*3;}
if (c == char ('I')) {rc.left=1+43*11; rc.top=482+43*3; rc.right=43+43*11;  rc.bottom=524+43*3;}
if (c == char ('J')) {rc.left=1+43*9;  rc.top=482+43*4; rc.right=43+43*9;   rc.bottom=524+43*4;}
if (c == char ('K')) {rc.left=1+43*10; rc.top=482+43*4; rc.right=43+43*10;  rc.bottom=524+43*4;}
if (c == char ('L')) {rc.left=1+43*12; rc.top=482+43*3; rc.right=43+43*12;  rc.bottom=524+43*3;}
if (c == char ('M')) {rc.left=1+43*12; rc.top=482+43*4; rc.right=43+43*12;  rc.bottom=524+43*4;}
if (c == char ('N')) {rc.left=1+43*9;  rc.top=482+43*5; rc.right=43+43*9;   rc.bottom=524+43*5;}
if (c == char ('O')) {rc.left=1+43*10; rc.top=482+43*5; rc.right=43+43*10;  rc.bottom=524+43*5;}
pDDSSec->BltFast(colone*42-42,ligne*42+k-(max*42),pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);

                 ///////////// avion touché /////////////////////////
}
}

 times++;
if (avion==0) {rc.left=1; rc.top=482; rc.right=43; rc.bottom=524;
               pDDSSec->BltFast(x,y,pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);}
if (avion==1) {rc.left=1+43; rc.top=482; rc.right=43+43; rc.bottom=524;
               pDDSSec->BltFast(x,y,pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);
               AvionTouche++;}

      if   (54+AvionTouche==231) {AvionTouche=0;}              // GameOver
      rc.left=457; rc.top=53; rc.right=474; rc.bottom=57;
      for (int gg=53; gg<=53+AvionTouche; gg++){
      pDDSSec->BltFast(457,gg,pDDSImage,&rc,DDBLTFAST_NOCOLORKEY);}

                   //////// reacteur de l'avion
 if (times >= 0) {
rc.left=1+43*2; rc.top=482; rc.right=43*3; rc.bottom=524;
pDDSSec->BltFast(x,y+43,pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);
}

if (times >= 5) {
rc.left=1+43*3; rc.top=482; rc.right=43*4; rc.bottom=524;
pDDSSec->BltFast(x,y+43,pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);
}

if (times >= 10) {  times=0;
rc.left=1+43*2; rc.top=482; rc.right=43*3; rc.bottom=524;
pDDSSec->BltFast(x,y+43,pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);
avion=0;}        /////////////////// arme /////////////////

if (arme==0) {
              rc.left=1+43*4; rc.top=482; rc.right=43*5; rc.bottom=524;
              pDDSSec->BltFast(x,y-(43*NbrArme),pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);
              NbrArme++;
              if (NbrArme == 2) {char const *Path = "laser.wav";
                                 sndPlaySound(Path, SND_ASYNC | SND_FILENAME);}
              if (NbrArme == 9) {arme=1; NbrArme=1;}
             }
                            ///////////////////////////////

                               // Avion enemi

for (int NbrLigne=0+sui; NbrLigne<=3+sui;NbrLigne++) {

     lpo = Memo2->Lines->Strings[NbrLigne];   //ligne
     Memo3->Lines->Clear();
     Memo3->Lines->Add(lpo);

 if ( ty == 8*15) {ty=0; }                // end

 AnsiString e1 (Memo3->Text.c_str()),e2;  // Nb graph
 AnsiString e3 (Memo3->Text.c_str()),e4;  // xn
 AnsiString e5 (Memo3->Text.c_str()),e6;  // yn

 e2 = e1.SubString(1,1);        int nb = e2.ToInt();
 e4 = e3.SubString(3+ty,3);     int xn = e4.ToInt();
 e6 = e5.SubString(7+ty,3);     int yn = e6.ToInt();

          ViteseAvonEnemi++;

 if ((NbrLigne == 0+sui) && (ViteseAvonEnemi>=10)) {ty=ty+8; ViteseAvonEnemi=0;}

if ((nb==1) && (AvionTouchenb1==0)) {tempnb1++;
     if (tempnb1 >= 0){rc.left=1;      rc.top=482+43*2; rc.right=43;      rc.bottom=524+43*2;}
     if (tempnb1 >= 3){rc.left=1+43*1; rc.top=482+43*2; rc.right=43+43*1; rc.bottom=524+43*2;}
     if (tempnb1 >= 6){rc.left=1+43*2; rc.top=482+43*2; rc.right=43+43*2; rc.bottom=524+43*2;}
     if (tempnb1 >= 9){rc.left=1;      rc.top=482+43*2; rc.right=43;      rc.bottom=524+43*2;
     tempnb1=0;}
     pDDSSec->BltFast(xn,yn,pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);    }

if ((nb==2) && (AvionTouchenb2==0)) {tempnb2++;
     if (tempnb2 >= 0) {rc.left=1;      rc.top=482+43*1; rc.right=43;      rc.bottom=524+43*1;}
     if (tempnb2 >= 3) {rc.left=1+43*1; rc.top=482+43*1; rc.right=43+43*1; rc.bottom=524+43*1;}
     if (tempnb2 >= 6) {rc.left=1+43*2; rc.top=482+43*1; rc.right=43+43*2; rc.bottom=524+43*1;}
     if (tempnb2 >= 9) {rc.left=1+43*3; rc.top=482+43*1; rc.right=43+43*3; rc.bottom=524+43*1;}
     if (tempnb2 >= 12){rc.left=1;      rc.top=482+43*1; rc.right=43;      rc.bottom=524+43*1;
     tempnb2=0;}
     pDDSSec->BltFast(xn,yn,pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);    }

if ((nb==3) && (AvionTouchenb3==0)) {tempnb3++;
    if (tempnb3 >= 0) {rc.left=1;      rc.top=482+43*3; rc.right=43;      rc.bottom=524+43*3;}
    if (tempnb3 >= 4) {rc.left=1+43*1; rc.top=482+43*3; rc.right=43+43*1; rc.bottom=524+43*3;}
    if (tempnb3 >= 16){rc.left=1;      rc.top=482+43*3; rc.right=43;      rc.bottom=524+43*3;
    tempnb3=0;}
    pDDSSec->BltFast(xn,yn,pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);    }

if ((nb==4) && (AvionTouchenb4==0)) {tempnb4++;
    if (tempnb4 >= 0) {rc.left=1;      rc.top=482+43*5; rc.right=43;      rc.bottom=524+43*5;}
    if (tempnb4 >= 4) {rc.left=1+43*1; rc.top=482+43*5; rc.right=43+43*1; rc.bottom=524+43*5;}
    if (tempnb4 >= 16){rc.left=1;      rc.top=482+43*5; rc.right=43;      rc.bottom=524+43*5;
    tempnb4=0;}
    pDDSSec->BltFast(xn,yn,pDDSImage,&rc,DDBLTFAST_SRCCOLORKEY);    }

                               // Avion enemi touché
if (((x-20 <= xn) && (x+20 >= xn)) &&  ((y-25 <= yn) && (y+20 >= yn)))
{
if ((NbrLigne==0+sui) && (AvionTouchenb1==0)) {AvionTouchenb1=1;avion=1; SonNbr0();}
if ((NbrLigne==1+sui) && (AvionTouchenb2==0)) {AvionTouchenb2=1;avion=1; SonNbr0();}
if ((NbrLigne==2+sui) && (AvionTouchenb3==0)) {AvionTouchenb3=1;avion=1; SonNbr0();}
if ((NbrLigne==3+sui) && (AvionTouchenb4==0)) {AvionTouchenb4=1;avion=1; SonNbr0();}
}

if (((x-20 <= xn) && (x+20 >= xn)) &&   ((y-(43*NbrArme)-20 <= yn)  && (y-(43*NbrArme)+20 >= yn)))
{
if ((NbrLigne==0+sui) && (AvionTouchenb1==0)) {AvionTouchenb1=1; SonNbr0();}
if ((NbrLigne==1+sui) && (AvionTouchenb2==0)) {AvionTouchenb2=1; SonNbr0();}
if ((NbrLigne==2+sui) && (AvionTouchenb3==0)) {AvionTouchenb3=1; SonNbr0();}
if ((NbrLigne==3+sui) && (AvionTouchenb4==0)) {AvionTouchenb4=1; SonNbr0();}
}

}

if ((sui==0)&&(AvionTouchenb1==1) && (AvionTouchenb2==1) && (AvionTouchenb3==1) && (AvionTouchenb4==1))
{     AvionTouchenb1=0;   AvionTouchenb2=0;  AvionTouchenb3=0;  AvionTouchenb4=0;
      sui=5; }

 pDDSPrim->Flip( NULL, 0 );

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
 if (char(Key) == VK_RIGHT)  { x=x+5; }
 if (char(Key) == VK_LEFT)   { x=x-5; }
 if (char(Key) == VK_DOWN)   { y=y+5; }
 if (char(Key) == VK_UP)     { y=y-5; }
 if (char(Key) == ' ')       { arme=0; }

     //       if (char(Key) == '+')  { tmp=tmp+1; }   // vitesse
     //       if (char(Key) == '-')  { tmp=tmp-1; }

 if (x>=380) {x=380;}
 if (x<=0)   {x=0;}
 if (y>=420) {y=420;}
 if (y<=0)   {y=0;}

if (char(Key)==(27))  { Close();  }    // Echap
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SonNbr0()
{
          char const *Path = "Protoss Exclamation.wav";
          sndPlaySound(Path, SND_ASYNC | SND_FILENAME);
}
//---------------------------------------------------------------------------

Conclusion :


Mon soft sera mis à jours , selon les modifications reçu.

pas de bugs connus sur mon PC.

(je cherche des programmes source pour DirectSound 3D, et DirectDraw 3D ( pas openGL, c Nul ) avec DirectX.)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
230
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
15 mai 2008

Même problème... En allant chercher les libs DirectX ça se règle, mais j'ai toujours une runtime error :

---------------------------
Notification d'une exception du débogueur
---------------------------
Le projet avion.exe a provoqué une classe d'exception EMCIDeviceError avec le message 'Impossible de trouver le fichier spécifié. Assurez-vous que le chemin d'accès et le nom du fichier sont corrects.'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
---------------------------
OK Aide
---------------------------

Je ne sais vraiment pas d'où vient ce bug... Quelqu'un sait m'aider ?
Messages postés
2
Date d'inscription
dimanche 12 septembre 2004
Statut
Membre
Dernière intervention
6 avril 2005

C'est top mais quand je le compile avec builder 6 j'ai cette erreur !?

[Lieur Erreur] Unresolved external 'DirectDrawCreate' referenced from Z:\C++\COURS_DDRAW\SHOOTTHEM_UP\MAIN.OBJ

Quelqu'un aurait une solution ?
Merci d'avance !
Messages postés
334
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
3 juillet 2010

Je voudrais bien, sauf que je n’ai droit à pas bcp de Ko.
Messages postés
20
Date d'inscription
lundi 22 mars 2004
Statut
Membre
Dernière intervention
12 septembre 2008

C'est bien
1000 fois bravo
Mais ce serait bien de mettre un fichier .exe dans le zip de telechargement.
Messages postés
5
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
29 octobre 2003

tu me fait peur JCpp mdr :]
no franchement on croirais d ela science fiction.. j'espere que l'IA ne prendra pa le dessus sur les hommes.. un jours.. lol :S
Afficher les 18 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.