Accueil > > > [C++] [WIN32] JEUX DE SHOOT ( SPACE SHOOT )
[C++] [WIN32] JEUX DE SHOOT ( SPACE SHOOT )
Information sur la source
Description
Voila un petit jeux vidéo. C'est très simple, il faut shooter le max d'aliens. J'ai crée ce jeux pour tester mon moteur 2D. Donc, les sources, en plus du jeux, sont un moteur de jeux 2D entièrement écrit avec l'API Win32 et en C++. J'utilise aussi la bibliothèque Fmod ( qui est gratuite tant que 'elle n'est pas utilisée pour un usage commercial). Je met en exemple la class Sprite ci dessous.
Source
- //------------------------------
- // sprites.cpp
- //------------------------------
-
- #include <windows.h>
- #include <fstream>
- #include "sprites.h"
-
- namespace G2D
- {
-
- //bool cSprite::mCollision = false;
-
- cSprite::cSprite(HDC hdc, bool nodes)
- {
-
- mBitmap = new cBitmap(hdc);
- mNextSprite = NULL;
- mHdc = hdc;
-
- mPosX = 0;
- mPosY = 0;
- mWidth = 0;
- mHeight = 0;
- mNumFrame = 0;
- mNumColumn = 0;
- mFrameDelay = 0;
- mNodes = nodes;
- mVisible = true;
- mAlive = true;
- mLastDisplay = true;
- }
-
-
- cSprite::cSprite(HDC hdc, RECT rect, eReaction reaction, bool nodes)
- {
- mBitmap = new cBitmap(hdc);
- mNextSprite = NULL;
- mHdc = hdc;
- mLimiteRect = rect;
- mReaction = reaction;
- mNodes = nodes;
- mVisible = true;
- mAlive = true;
- mLastDisplay = true;
-
- mPosX = 0;
- mPosY = 0;
- mWidth = 0;
- mHeight = 0;
- mNumFrame = 0;
- mNumColumn = 0;
- mFrameDelay = 0;
- }
-
-
- cSprite::~cSprite()
- {
-
- delete mBitmap;
- if(mNextSprite)
- delete mNextSprite;
- }
-
-
- void cSprite::LoadSprite(std::string name, int x, int y, int frame, int column , int delay )
- {
-
- if(!mNodes)
- {
- mPosX = x;
- mPosY = y;
- mNumFrame = frame;
- mNumColumn = column;
- mFrameDelay = delay;
- mCurrentFrame = 0;
- mCountFrameDelay = 0;
- mCurrentColumn = 0;
-
- mBitmap->LoadBitmap(name.c_str());
- mWidth = mBitmap->GetBitmapWidth();
- mHeight = mBitmap->GetBitmapHeight();
-
- static_cast<int>(mFrameWidth) = (mWidth/mNumFrame);
- static_cast<int>(mFrameHeight) = (mHeight/mNumColumn);
-
- // for pixel perfect collision
- //------------------------------------------------------
- mT = new bool*[mWidth];
- for(int i=0;i<mWidth;i++)
- mT[i] = new bool[mHeight];
-
- for(int i=0;i<mWidth;i++)
- for(int j=0;j<mHeight;j++)
- {
- if(GetPixel(mBitmap->GetMemHdc(), i, j) == RGB(255, 0, 255))
- mT[i][j] = false;
- else
- mT[i][j] = true;
- }
- //-------------------------------------------------------
-
- SetRect(&mCollisionRect,x, y, x+mWidth, y+mHeight);
- mNextSprite = new cSprite(mHdc, true);
- return;
- }
-
- if(!mNextSprite)
- {
- mPosX = x;
- mPosY = y;
- mNumFrame = frame;
- mNumColumn = column;
- mFrameDelay = delay;
- mCurrentFrame = 0;
- mBitmap->LoadBitmap(name.c_str());
- mWidth = mBitmap->GetBitmapWidth();
- mHeight = mBitmap->GetBitmapHeight();
-
- // for pixel perfect collision
- //------------------------------------------------------
- mT = new bool*[mWidth];
- for(int i=0;i<mWidth;i++)
- mT[i] = new bool[mHeight];
-
- for(int i=0;i<mWidth;i++)
- for(int j=0;j<mHeight;j++)
- {
- if(GetPixel(mBitmap->GetMemHdc(), i, j) == RGB(255, 0, 255))
- mT[i][j] = false;
- else
- mT[i][j] = true;
- }
- //-------------------------------------------------------
-
- SetRect(&mCollisionRect,x, y, x+mWidth, y+mHeight);
- mNextSprite = new cSprite(mHdc, mLimiteRect, mReaction, true);
- return;
- }
- else
- mNextSprite->LoadSprite(name, x, y, frame, column, delay);
- }
-
-
- //--------------------------------------------
- // Display a sprite
- //--------------------------------------------
- void cSprite::DisplaySprite()
- {
- if(mNextSprite)
- {
- if(mAlive)
- {
- if(mVisible || (!mVisible && mLastDisplay))
- {
- mBitmap->DisplayBitmap(mPosX, mPosY);
- SetRect(&mCollisionRect,mPosX, mPosY, mPosX+mWidth, mPosY+mHeight);
- if(!mVisible)
- mLastDisplay = false;
- }
- mNextSprite->DisplaySprite();
- }
- }
- }
-
-
- //----------------------------------------------
- // Display a transparent sprite
- //----------------------------------------------
- void cSprite::DisplaySprite(int R, int G, int B)
- {
- if(mNextSprite)
- {
- if(mAlive)
- {
- if(mVisible || (!mVisible && mLastDisplay))
- {
- mBitmap->DisplayBitmap(mPosX, mPosY, R, G, B);
- SetRect(&mCollisionRect,mPosX, mPosY, mPosX+mWidth, mPosY+mHeight);
- if(!mVisible)
- mLastDisplay = false;
- }
- mNextSprite->DisplaySprite();
- }
- }
- }
-
-
- //-----------------------------------------------------------
- // Display a transparent sprite with a BYTE[] as argument
- //-----------------------------------------------------------
- void cSprite::DisplaySprite(BYTE color[])
- {
- if(this)
- {
- if(mNextSprite)
- {
- if(mAlive)
- {
- if(mVisible || (!mVisible && mLastDisplay))
- {
- if(mNumFrame == 1)
- {
- mBitmap->DisplayBitmap(mPosX, mPosY, color);
- SetRect(&mCollisionRect,mPosX, mPosY, mPosX+mWidth, mPosY+mHeight);
- if(!mVisible)
- mLastDisplay = false;
- }
- else
- {
- mBitmap->DisplayPartBitmap(mPosX, mPosY, (mFrameWidth*mCurrentFrame), (mFrameHeight*mCurrentColumn),
- mFrameWidth, mFrameHeight, color);
-
- if(mCountFrameDelay == mFrameDelay)
- {
- if((mCurrentFrame++) == (mNumFrame+1))
- mCurrentFrame = 0;
-
- mCountFrameDelay = 0;
- }
- else
- mCountFrameDelay++;
- }
- }
- }
- }
- mNextSprite->DisplaySprite();
- }
- }
-
- void cSprite::MooveSprite(int x, int y)
- {
- if(mNextSprite)
- {
- if(mReaction == SR_NOREACTIONS)
- {
- mPosX += x;
- mPosY += y;
- SetRect(&mCollisionRect,mPosX, mPosY, mPosX+mWidth, mPosY+mHeight);
- return;
- }
-
- if(mReaction == SR_STOP)
- {
- if(mLimiteRect.top<(mPosX+x) && mLimiteRect.bottom>(mPosX+x+mWidth) &&
- mLimiteRect.left<(mPosY+y) && mLimiteRect.right>(mPosY+y+mHeight))
- {
- mPosX += x;
- mPosY += y;
- SetRect(&mCollisionRect,mPosX, mPosY, mPosX+mWidth, mPosY+mHeight);
- return;
- }
- }
-
- if(mReaction == SR_DELETE)
- {
- if(mLimiteRect.top<(mPosX+x) && mLimiteRect.bottom>(mPosX+x+mWidth) &&
- mLimiteRect.left<(mPosY+y) && mLimiteRect.right>(mPosY+y+mHeight))
- {
- mPosX += x;
- mPosY += y;
- SetRect(&mCollisionRect,mPosX, mPosY, mPosX+mWidth, mPosY+mHeight);
- }
- else
- mVisible = false;
- }
-
-
- mNextSprite->MooveSprite(x, y);
- }
- }
-
- void cSprite::UpdateFrame()
- {
-
-
- }
-
-
- INIT CreateSpriteObject(HDC hdc, bool nodes, cSprite** sprite)
- {
-
- *sprite = new cSprite(hdc, nodes);
-
- if(*sprite!= NULL)
- return G2D_OK;
- else
- return G2D_FAILED;
- }
-
- INIT CreateSpriteObject(HDC hdc, RECT rect_limite, eReaction reaction, bool nodes, cSprite** sprite)
- {
- *sprite = new cSprite(hdc, rect_limite, reaction, nodes);
-
- if(*sprite!=NULL)
- return G2D_OK;
- else
- return G2D_FAILED;
- }
-
-
- } //namespace G2D
//------------------------------
// sprites.cpp
//------------------------------
#include <windows.h>
#include <fstream>
#include "sprites.h"
namespace G2D
{
//bool cSprite::mCollision = false;
cSprite::cSprite(HDC hdc, bool nodes)
{
mBitmap = new cBitmap(hdc);
mNextSprite = NULL;
mHdc = hdc;
mPosX = 0;
mPosY = 0;
mWidth = 0;
mHeight = 0;
mNumFrame = 0;
mNumColumn = 0;
mFrameDelay = 0;
mNodes = nodes;
mVisible = true;
mAlive = true;
mLastDisplay = true;
}
cSprite::cSprite(HDC hdc, RECT rect, eReaction reaction, bool nodes)
{
mBitmap = new cBitmap(hdc);
mNextSprite = NULL;
mHdc = hdc;
mLimiteRect = rect;
mReaction = reaction;
mNodes = nodes;
mVisible = true;
mAlive = true;
mLastDisplay = true;
mPosX = 0;
mPosY = 0;
mWidth = 0;
mHeight = 0;
mNumFrame = 0;
mNumColumn = 0;
mFrameDelay = 0;
}
cSprite::~cSprite()
{
delete mBitmap;
if(mNextSprite)
delete mNextSprite;
}
void cSprite::LoadSprite(std::string name, int x, int y, int frame, int column , int delay )
{
if(!mNodes)
{
mPosX = x;
mPosY = y;
mNumFrame = frame;
mNumColumn = column;
mFrameDelay = delay;
mCurrentFrame = 0;
mCountFrameDelay = 0;
mCurrentColumn = 0;
mBitmap->LoadBitmap(name.c_str());
mWidth = mBitmap->GetBitmapWidth();
mHeight = mBitmap->GetBitmapHeight();
static_cast<int>(mFrameWidth) = (mWidth/mNumFrame);
static_cast<int>(mFrameHeight) = (mHeight/mNumColumn);
// for pixel perfect collision
//------------------------------------------------------
mT = new bool*[mWidth];
for(int i=0;i<mWidth;i++)
mT[i] = new bool[mHeight];
for(int i=0;i<mWidth;i++)
for(int j=0;j<mHeight;j++)
{
if(GetPixel(mBitmap->GetMemHdc(), i, j) == RGB(255, 0, 255))
mT[i][j] = false;
else
mT[i][j] = true;
}
//-------------------------------------------------------
SetRect(&mCollisionRect,x, y, x+mWidth, y+mHeight);
mNextSprite = new cSprite(mHdc, true);
return;
}
if(!mNextSprite)
{
mPosX = x;
mPosY = y;
mNumFrame = frame;
mNumColumn = column;
mFrameDelay = delay;
mCurrentFrame = 0;
mBitmap->LoadBitmap(name.c_str());
mWidth = mBitmap->GetBitmapWidth();
mHeight = mBitmap->GetBitmapHeight();
// for pixel perfect collision
//------------------------------------------------------
mT = new bool*[mWidth];
for(int i=0;i<mWidth;i++)
mT[i] = new bool[mHeight];
for(int i=0;i<mWidth;i++)
for(int j=0;j<mHeight;j++)
{
if(GetPixel(mBitmap->GetMemHdc(), i, j) == RGB(255, 0, 255))
mT[i][j] = false;
else
mT[i][j] = true;
}
//-------------------------------------------------------
SetRect(&mCollisionRect,x, y, x+mWidth, y+mHeight);
mNextSprite = new cSprite(mHdc, mLimiteRect, mReaction, true);
return;
}
else
mNextSprite->LoadSprite(name, x, y, frame, column, delay);
}
//--------------------------------------------
// Display a sprite
//--------------------------------------------
void cSprite::DisplaySprite()
{
if(mNextSprite)
{
if(mAlive)
{
if(mVisible || (!mVisible && mLastDisplay))
{
mBitmap->DisplayBitmap(mPosX, mPosY);
SetRect(&mCollisionRect,mPosX, mPosY, mPosX+mWidth, mPosY+mHeight);
if(!mVisible)
mLastDisplay = false;
}
mNextSprite->DisplaySprite();
}
}
}
//----------------------------------------------
// Display a transparent sprite
//----------------------------------------------
void cSprite::DisplaySprite(int R, int G, int B)
{
if(mNextSprite)
{
if(mAlive)
{
if(mVisible || (!mVisible && mLastDisplay))
{
mBitmap->DisplayBitmap(mPosX, mPosY, R, G, B);
SetRect(&mCollisionRect,mPosX, mPosY, mPosX+mWidth, mPosY+mHeight);
if(!mVisible)
mLastDisplay = false;
}
mNextSprite->DisplaySprite();
}
}
}
//-----------------------------------------------------------
// Display a transparent sprite with a BYTE[] as argument
//-----------------------------------------------------------
void cSprite::DisplaySprite(BYTE color[])
{
if(this)
{
if(mNextSprite)
{
if(mAlive)
{
if(mVisible || (!mVisible && mLastDisplay))
{
if(mNumFrame == 1)
{
mBitmap->DisplayBitmap(mPosX, mPosY, color);
SetRect(&mCollisionRect,mPosX, mPosY, mPosX+mWidth, mPosY+mHeight);
if(!mVisible)
mLastDisplay = false;
}
else
{
mBitmap->DisplayPartBitmap(mPosX, mPosY, (mFrameWidth*mCurrentFrame), (mFrameHeight*mCurrentColumn),
mFrameWidth, mFrameHeight, color);
if(mCountFrameDelay == mFrameDelay)
{
if((mCurrentFrame++) == (mNumFrame+1))
mCurrentFrame = 0;
mCountFrameDelay = 0;
}
else
mCountFrameDelay++;
}
}
}
}
mNextSprite->DisplaySprite();
}
}
void cSprite::MooveSprite(int x, int y)
{
if(mNextSprite)
{
if(mReaction == SR_NOREACTIONS)
{
mPosX += x;
mPosY += y;
SetRect(&mCollisionRect,mPosX, mPosY, mPosX+mWidth, mPosY+mHeight);
return;
}
if(mReaction == SR_STOP)
{
if(mLimiteRect.top<(mPosX+x) && mLimiteRect.bottom>(mPosX+x+mWidth) &&
mLimiteRect.left<(mPosY+y) && mLimiteRect.right>(mPosY+y+mHeight))
{
mPosX += x;
mPosY += y;
SetRect(&mCollisionRect,mPosX, mPosY, mPosX+mWidth, mPosY+mHeight);
return;
}
}
if(mReaction == SR_DELETE)
{
if(mLimiteRect.top<(mPosX+x) && mLimiteRect.bottom>(mPosX+x+mWidth) &&
mLimiteRect.left<(mPosY+y) && mLimiteRect.right>(mPosY+y+mHeight))
{
mPosX += x;
mPosY += y;
SetRect(&mCollisionRect,mPosX, mPosY, mPosX+mWidth, mPosY+mHeight);
}
else
mVisible = false;
}
mNextSprite->MooveSprite(x, y);
}
}
void cSprite::UpdateFrame()
{
}
INIT CreateSpriteObject(HDC hdc, bool nodes, cSprite** sprite)
{
*sprite = new cSprite(hdc, nodes);
if(*sprite!= NULL)
return G2D_OK;
else
return G2D_FAILED;
}
INIT CreateSpriteObject(HDC hdc, RECT rect_limite, eReaction reaction, bool nodes, cSprite** sprite)
{
*sprite = new cSprite(hdc, rect_limite, reaction, nodes);
if(*sprite!=NULL)
return G2D_OK;
else
return G2D_FAILED;
}
} //namespace G2D
Conclusion
Dîtes moi ce que vous en pensez.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Win32(control) [ par NitRic ]
Bonjour, pour mon premier prog Win32 en C++ j'ai décider de faire un petit NotPad sauf que la j'ai un problème:J'ai fais des menu et dans le menu Édi
Où trouver le Win32 SDK ? [ par PierreP ]
... avec un help ou qqchose de ce genre qui explique comment on utilise les fonctions.Impossible de le trouver sur Le site de Microsoft !
changé curseur dans application Win32 [ par Stoomm ]
Bonjour, j'aimerais chargé un curseur autre que celui par défault dans une appli Win32.Quelqu'un peut il me donner la marche à suivre svp.Merci d'avan
changé curseur dans application Win32 [ par Stoomm ]
Bonjour, j'aimerais chargé un curseur autre que celui par défault dans une appli Win32.Quelqu'un peut il me donner la marche à suivre svp.Merci d'avan
jeux d'echecs en c++ [ par ptitlouis68 ]
Je dois realiser un projet de jeu d'echecs en c++ avec microsoft visual studio c++.Je recherche un code source de ce jeux ayant comme bibliotheque gra
demande librairie gtk pour win32 [ par francky ]
quelqu'un pourrait-il me donner la librairie gtk.h?ou alors des liens vers des exemples d'interface graphique réaliséemerci d'avance.
jeux de dame en language C++ (TURBO C) avis aux pros!!!!! [ par saitek ]
salut a toi si tu es 1 pro du C++ pourrais tu faire ce programme je suis trop mauvais pour le faire alors si tu te sens capable de le faire je ne dema
lien vers librairie glut pour win32 [ par francky ]
m'étant fait déja passé pour un con ne sachant pas lire,pour tout ceux qui débutent et ne trouve pas la librairie glut pour windows permettant de cree
gtk & win32 & Visual C++ [ par Paisible ]
je vais peut être me faire jeter, mais bon...j'ai cherché dans le forum... et impossible de trouver la trace d'un quelconque post concernant la config
win32 et sous-classement [ par mozert ]
hi.mmm... mwai.. voila mon probleme..le sous-classement (subclassing)..est-il possible de sous-classer une fenetre appartenant à un processus differen
|
Derniers Blogs
ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0 par Philess
L'extensibilité du Team Web Access
Le Web Access (site d'équipe) de Team Foundation Server a été complètement réécrit dans la version 2012 avec pas moins de 400.000 lignes de JavaScript. Ce nouveau modèle a été pensé pour offrir de grandes...
Cliquez pour lire la suite de l'article par Philess SIMULER FACILEMENT L'ENVOI DE MAILSIMULER FACILEMENT L'ENVOI DE MAIL par JeremyJeanson
il m'a été demandé, à plusieurs reprises, comment je faisais pour simuler l'envoi de mail lors de mes démos de Workflow Foundation. Ma solution est plutôt simple : j'utilise la configuration par défaut du SmtpClient et j'oriente les mails vers un dossier ...
Cliquez pour lire la suite de l'article par JeremyJeanson VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES !VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES ! par Patrick Guimonet
Si ce n'est déjà fait (comme plus de 600 personnes déjà), il est encore temps de voter pour le concours TOP 10 des influenceurs SharePoint francophones ! Il est organisé par harmon.ie et accessible ici : http://harmon.ie/top-...
Cliquez pour lire la suite de l'article par Patrick Guimonet [CONF'SHAREPOINT] DERNIER RAPPEL ! :-)[CONF'SHAREPOINT] DERNIER RAPPEL ! :-) par Patrick Guimonet
La Conf'SharePoint en chiffres c'est : 3 jours de SharePoint ! 4 parcours et 60 sessions 17 partenaires représentant toutes les fac...
Cliquez pour lire la suite de l'article par Patrick Guimonet
Forum
PB PACMAN C++PB PACMAN C++ par garfield95
Cliquez pour lire la suite par garfield95
Logiciels
Easy-Planning (4.5.0.11)EASY-PLANNING (4.5.0.11)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté a... Cliquez pour télécharger Easy-Planning CVEasy (3.1.0.51)CVEASY (3.1.0.51)PHMSD-CVEasy est un logiciel d'aide à la rédaction de CV d'une simplicité déconcertante.
PHMSD-C... Cliquez pour télécharger CVEasy LettresFaciles 2011 (8.6.0.31)LETTRESFACILES 2011 (8.6.0.31)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011 sDEVIS-FACTURES vlPRO (8.4.2.62)SDEVIS-FACTURES VLPRO (8.4.2.62)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO Devis-Factures PHMSD (2.1.0.11)DEVIS-FACTURES PHMSD (2.1.0.11)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD
|