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

Soyez le premier à donner votre avis sur cette source.

Vue 43 279 fois - Téléchargée 1 181 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
zorque Messages postés 12 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 12 mars 2002
15 janv. 2002 à 18:10
|| ( pas openGL, c Nul )

ben non s'est pas nul s'est meme tres bien s'est plus facile ke directx
le seule probleme s'est k'il na pas evoluer depuis un moment et ke directx est devenue meilleur
cs_CyraX Messages postés 20 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 12 avril 2002
15 janv. 2002 à 20:39
Votre avis et/ou suggestion(s) pour ce code : "bravo"
jia2812 Messages postés 57 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 10 janvier 2003
24 janv. 2002 à 11:16
Là suis sur le cul!! (__|__)
;-P
BRAVO!!
Euh cé où pour mettre la note???? => 9/10

Allez bonne prog'!!!!!!!

Gogogogogogogogooooooooooooooo
cs_Geff Messages postés 192 Date d'inscription vendredi 2 mars 2001 Statut Membre Dernière intervention 10 janvier 2006
25 janv. 2002 à 09:41
Bah alors la! Felicitation, ca nous change des convertiisseurs euro! (Rhha)
Continu kom ca! (Je fait surement faire un projet du meme type mais en opengl, 3D vue du dessus!)
cs_Lightness1024! Messages postés 162 Date d'inscription jeudi 15 mars 2001 Statut Membre Dernière intervention 1 avril 2005
13 juin 2002 à 22:44
aie aie aie meme remarke ke pour le loup ! il faut surtout pas utiliser cette methode et ce code affreux bourré de repetition pour detecter je sais pas koi surement les collisions.

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.