1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
| #include <vcl.h>
#include <Math.hpp>
#pragma hdrstop
#include "HenwayIntegral_fm.h"
#include "PremiereDerivationSprites.h"
//---------------------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//---------------------------------------------------------------------------------------
TForm1 *Form1;
//---------------------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------------------
// ----------------------------- // Initialisation // -----------------------------------
//---------------------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TWrapSprite * pWrSpr;
TSprite * pSpr;
int iNbSpr;
int iInd;
// Pour valeurs aléatoires
Randomize();
// Init scores
m_iNbSucces = 0;
m_iNbEchecs = 0;
// Création d'un moteur de jeu
m_pSprEng = new TSpriteEngine();
// Création de la bitmap de fond
bmpFond = m_pSprEng->pBmpCreeEtCharge("Bmp_Route");
// Adaptation de la taille de la fenêtre à celle de l'image
ClientWidth = bmpFond->Width;
ClientHeight = bmpFond->Height;
// Paramétrages du moteur de jeu
m_pSprEng->setPtBmpFond(bmpFond);
m_pSprEng->setPtForm(this);
m_pSprEng->init();
m_pSprEng->BeforeTimerTimer = TraiterOnTimer;
// Pour le sprite piloté (le ballon)
// --------------------------------
m_pSpPoule = new TSprite;
m_pSprEng->initEtAjouterSprite // type, Code, x, y, dx, dy
( m_pSpPoule, "Bmp_Plumes", "Poulet", 0, 110, 0, 0);
m_pSprEng->ajouterBmp (m_pSpPoule, "Bmp_Poule");
m_pSprEng->ajouterBmp (m_pSpPoule, "Bmp_PouleRecul");
m_pSprEng->ajouterBmp (m_pSpPoule, "Bmp_Poule2");
m_pSprEng->ajouterBmp (m_pSpPoule, "Bmp_Poule2Recul");
m_pSpPoule->PfFinCptrPause = TraiterOnFinPause;
// Sprites Cars
pWrSpr = new TWrapSprite;
m_pSprEng->initEtAjouterSprite(pWrSpr, "Bmp_Car1", "Auto", 1, XVOIE1, 8, 0, 3);
pWrSpr = new TWrapSprite;
m_pSprEng->initEtAjouterSprite(pWrSpr, "Bmp_Car2", "Auto", 2, XVOIE2, 320, 0, 6);
pWrSpr = new TWrapSprite;
m_pSprEng->initEtAjouterSprite(pWrSpr, "Bmp_Car3", "Auto", 3, XVOIE3, 200, 0,-7);
pWrSpr = new TWrapSprite;
m_pSprEng->initEtAjouterSprite(pWrSpr, "Bmp_Car4", "Auto", 4, XVOIE4, 120, 0,-3);
iNbSpr = m_pSprEng->NombreSprites;
// Compléments pour tous sprites
for (iInd = 0; iInd < iNbSpr; iInd ++)
{ pSpr = m_pSprEng->pSprIndice(iInd);
//!!BGS pSprCrt->setSprEng(m_pSprEng);
pSpr->setDimensions( pSpr->getPtInstantImage() );
pSpr->RectBounds = ClientRect;
pSpr->PfOnBounds = TraiterOnBounds;
pSpr->PfOnChoc = TraiterOnChocs;
}
// Musique de fond
m_pSprEng->jouerSonMdi("Music.mid");
// Démarrage
m_pSprEng->runTimer(True);
}
//--------------------------------------------------------------------------------------
// ------------------- // Début de chaque cycle du moteur de jeu // --------------------
//--------------------------------------------------------------------------------------
void __fastcall TForm1::TraiterOnTimer(TObject *Sender)
{
// Remarque :
// Lecture du clavier par GetAsyncKey; plus rapide que récupération événement KeyDown
// Impulsions éventuelles sur m_pSpPilote
m_pSpPoule->Dx = 0;
m_pSpPoule->Dy = 0;
if ( (GetAsyncKeyState(VK_LEFT) < 0) && (m_pSpPoule->Dx > - 10) )
m_pSpPoule->Dx -= I_DEP_CHICKEN;
else if ( (GetAsyncKeyState(VK_RIGHT) < 0) && (m_pSpPoule->Dx < 10) )
m_pSpPoule->Dx += I_DEP_CHICKEN;
//
if ( (GetAsyncKeyState(VK_UP) < 0) && (m_pSpPoule->Dy > - 10) )
m_pSpPoule->Dy -= I_DEP_CHICKEN;
else if ( (GetAsyncKeyState(VK_DOWN) < 0) && (m_pSpPoule->Dx < 10) )
m_pSpPoule->Dy += I_DEP_CHICKEN;
}
//---------------------------------------------------------------------------------------
//////////////////////// Autres gestionnaires événements /////////////////////////////
//---------------------------------------------------------------------------------------
void TForm1::TraiterOnChocs(TSprite * pSprHter, TSprite * pSprHtee)
{
if ( pSprHter->Type == "Poulet")
{ if (pSprHter->CptrPause == 0)
{ pSprHter->CptrPause = I_PAUSE;
m_iNbEchecs ++;
m_pSprEng->jouerSonWav("Wav_Squish");
}
pSprHtee->progresser();
}
else
{ if (pSprHtee->CptrPause == 0)
{ pSprHtee->CptrPause = I_PAUSE;
m_iNbEchecs ++;
m_pSprEng->jouerSonWav("Wav_Squish");
}
pSprHter->progresser();
}
}
//--------------------------------------------------------------------------------------
void TForm1::TraiterOnFinPause(TSprite * pSprCrt)
{ if (pSprCrt->Type == "Poulet")
{ pSprCrt->init(0, 110, 0, 0);
}
}
//--------------------------------------------------------------------------------------
void TForm1::TraiterOnBounds(TSprite * pSprCrt)
{ String sMessage;
// Auto (par haut ou par bas)
if (pSprCrt->Type == "Auto")
{
if ( (pSprCrt->Dy > 0) && (pSprCrt->Dy <= 4) )
pSprCrt->Dy = RandomRange( 2, 4);
if ( (pSprCrt->Dy > 0) && (pSprCrt->Dy > 4) )
pSprCrt->Dy = RandomRange( 5, 8);
if ( (pSprCrt->Dy < 0) && (pSprCrt->Dy < -4) )
pSprCrt->Dy = RandomRange(-5, -8);
if ( (pSprCrt->Dy < 0) && (pSprCrt->Dy >= -4) )
pSprCrt->Dy = RandomRange(-4, -2);
}
// Poulet par la droite
else if ( (pSprCrt->Type == "Poulet") && (pSprCrt->X > 410) )
{
m_pSprEng->jouerSonWav("Wav_Celebrate");
// pSprCrt->setEnArret(True);
pSprCrt->X = 400;
m_iNbSucces ++;
sMessage = "Succès : "
+ IntToStr(m_iNbSucces)
+ " Echecs : "
+ IntToStr(m_iNbEchecs);
Application->MessageBox(sMessage.c_str(), "", MB_OK );
pSprCrt->init(0, 110, 0, 0);
// pSprCrt->setEnArret(False);
}
} |
Partager