การบ้านครั้งที่ 3 (Project Prince Dragon Game)
CODE
#include <cdx_app_wiz.h>// CDX Objects
// ------------------------------------------------------------------
CDXScreen *Screen = 0; // The screen object, every program must have one
FPSmanager *Fps = 0;
int x,y = 0;
#define map_1 1
#define moveleft 1
this->unit = unit;
void duration( unsigned int a = 1, unsigned int b = 2, unsigned int delay = 0, bool loop = true ) {
void shuffle(unsigned int f) {
unsigned int play() {
} else {
}
this->unit->SetFrame(this->c_frame);
return this->c_frame;
~Animation();
private:
unsigned int a;
typedef struct
CDXSprite *img;
Animation *animate;
int hp;
mySprite *j=new mySprite();
bool active;
} MON;
MON monster[$_mon];
POINT pos;
int u;
CDXSprite *missile;
POINT pos, di, vel;
bool active;
}Missile_info;
irr::core::array <Missile_info*> mlist;
Missile_info* minfo = new Missile_info( );
minfo->vel.x = 7;
//boss->hp -= 20;
minfo->pos.y = pos.y + 25;
minfo->animate = new Animation(minfo->missile);
} else {
minfo->vel.x = 3;
//boss->hp -= 50;
minfo->pos.y = pos.y + 5;
minfo->animate = new Animation(minfo->missile);
}
minfo->active = true;
return true;
void UpdateMis(void)
for( irr::u32 i = 0; i != mlist.size(); i++ )
mlist[i]->pos.x += mlist[i]->di.x * mlist[i]->vel.x;
mlist[i]->pos.y += mlist[i]->di.y * mlist[i]->vel.y;
mlist[i]->missile->SetPos( mlist[i]->pos.x+80, mlist[i]->pos.y- 10 );
if (mon1->img->SpriteHit(mlist[i]->missile) && mlist[i]->active && mon1->active) {
}
if (mon2->img->SpriteHit(mlist[i]->missile) && mlist[i]->active && mon2->active) {
}
if (mon3->img->SpriteHit(mlist[i]->missile) && mlist[i]->active && mon3->active) {
}
if (mon4->img->SpriteHit(mlist[i]->missile) && mlist[i]->active && mon4->active) {
}
if (mon5->img->SpriteHit(mlist[i]->missile) && mlist[i]->active && mon5->active) {
}
if (mlist[i]->missile->SpriteHit(boss->img) && mlist[i]->active && boss->active) {
mlist[i]->active = false;
}
if (mlist[i]->active) {
}
}
}
void RemoveMis(void)
for( irr::u32 i = 0; i != mlist.size(); ++i )
if( mlist[i]->pos.x < 0 ||
mlist[i]->pos.y < 0 ||
mlist[i]->pos.y > 272 )
{
SAFEDELETE( mlist[i]->missile );
SAFEDELETE( mlist[i] );
mlist.erase( i );
--i;
}
}
}
// ------------------------------------------------------------------
// cdx_Init - handles initialization of the CDX objects
// ------------------------------------------------------------------
BOOL cdx_Init()
{
Screen = new CDXScreen();
Screen->CreateWindowed( 480, 272, 32, SDL_DOUBLEBUF | SDL_HWSURFACE | SDL_INIT_TIMER );
Input = new CDXInput( );
Fps = new FPSmanager( );
SDL_setFramerate( Fps, 30 );
// TODO: Initialize your own CDX objects here
boss->hp = 1000;
boss->active = false;
mon1->img = new CDXSprite();
mon1->active = true;
mon2->img = new CDXSprite();
mon2->active = true;
mon3->img = new CDXSprite();
mon3->active = true;
mon4->img = new CDXSprite();
mon4->active = true;
mon5->img = new CDXSprite();
mon5->active = true;
kk->img = new CDXSprite();
kk->animate = new Animation(kk->img);
kk->active = true;
j->hp = 200;
j->active = true;
BG1->img = new CDXSprite();
BG->img = new CDXSprite();
// ------------------------------------------------------------------
// cdx_DeInit - handles cleanup of CDX objects
// ------------------------------------------------------------------
void cdx_DeInit( void )
// TODO: Destroy your CDX objects here
for( irr::u32 i = 0; i != mlist.size(); ++i )
SAFEDELETE( mlist[i]->missile );
SAFEDELETE( mlist[i] );
mlist.erase( i );
--i;
}
SAFEDELETE( boss->img );
SAFEDELETE( mon1->img );
SAFEDELETE( mon2->img );
SAFEDELETE( mon3->img );
SAFEDELETE( mon4->img );
SAFEDELETE( mon5->img );
SAFEDELETE( j->img );
SAFEDELETE( kk->img );
SAFEDELETE( BG->img );
SAFEDELETE( mon1->img );
SAFEDELETE( mon2->img );
SAFEDELETE( mon3->img );
SAFEDELETE( mon4->img );
SAFEDELETE( mon5->img );
SAFEDELETE( Fps );
SAFEDELETE( Input );
SAFEDELETE( Screen );
}
// ------------------------------------------------------------------
// cdx_DoFrame - performs drawing of the current frame
// ------------------------------------------------------------------
void cdx_DoFrame()
Input->Update( );
Screen->GetBackEx()->Fill(x);
// TODO: Add code to draw your objects during each frame
}
if (state == map_1){
BG1->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
if (backgroundX > 0) { backgroundX = 0; }
Bg->img->SetPos(backgroundX,0);
Bg->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
BG->img->SetPos(backgroundX,0);
BG->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
// blogmap info
int hi = j->img->GetBlockHeight();
(posx + wi < 475 && pos.y + hi <= 205) ||
(posx + wi < 755 && pos.y + hi <= 175) ||
((posx + wi < 790 && posx + wi > 755) && pos.y +hi <= 275) ||
(posx + wi < 927 && pos.y + hi <= 125) ||
((posx + wi < 1102 && posx + wi > 988) && pos.y + hi <= 155) ||
((posx + wi < 967 && posx + wi > 925) && pos.y +hi <= 275) ||
((posx + wi < 1102 && posx + wi > 965) && pos.y + hi <= 160) ||
((posx + wi < 1135 && posx + wi > 1100) && pos.y + hi <= 275) ||
((posx + wi < 1280 && posx + wi > 1130) && pos.y + hi <= 205) ||
((posx + wi < 1395 && posx + wi > 1273) && pos.y + hi <= 275) ||
((posx + wi < 1993 && posx + wi > 1390) && pos.y + hi <= 240) ||
((posx + wi < 2520 && posx + wi > 1990) && pos.y + hi <= 175) ||
((posx + wi < 2461 && posx + wi > 2449) && pos.y + hi <= 275) ||
((posx + wi < 2600 && posx + wi > 2459) && pos.y + hi <= 215) ||
((posx + wi < 2535 && posx + wi > 2510) && pos.y + hi <= 275) ||
((posx + wi < 2672 && posx + wi > 2530) && pos.y + hi <= 215) ||
((posx + wi < 2593 && posx + wi > 2570) && pos.y + hi <= 275) ||
((posx + wi < 2620 && posx + wi > 2602) && pos.y + hi <= 215) ||
((posx + wi < 2630 && posx + wi > 2618) && pos.y + hi <= 275) ||
((posx + wi < 2695 && posx + wi > 2668) && pos.y + hi <= 215) ||
((posx + wi < 2737 && posx + wi > 2693) && pos.y + hi <= 275) ||
((posx + wi < 2767 && posx + wi > 2734) && pos.y + hi <= 215) ||
((posx + wi < 2816 && posx + wi > 2766) && pos.y + hi <= 215) ||
((posx + wi < 3001 && posx + wi > 2815) && pos.y + hi <= 195) ||
((posx + wi < 3500 && posx + wi > 3000) && pos.y + hi <= 195)
) {
if ((posx + wi) < 3000){
}
}
if (
) {
if(Input->GetKeyState(SDLK_LEFT)||Input->GetKeyState(CDXKEY_JOYBUTN7)) {
backgroundX += 5;
}
}
}
if (posx + wi >= 3000){
}
if (
(posx + wi < 475 && pos.y + hi <= 200) ||
(posx + wi < 755 && pos.y + hi <= 170) ||
((posx + wi < 790 && posx + wi > 755) && pos.y +hi <= 270) ||
(posx + wi < 927 && pos.y + hi <= 120) ||
((posx + wi < 1102 && posx + wi > 988) && pos.y + hi <= 150) ||
((posx + wi < 967 && posx + wi > 925) && pos.y +hi <= 270) ||
((posx + wi < 1102 && posx + wi > 965) && pos.y + hi <= 155) ||
((posx + wi < 1135 && posx + wi > 1100) && pos.y + hi <= 270) ||
((posx + wi < 1280 && posx + wi > 1130) && pos.y + hi <= 200) ||
((posx + wi < 1395 && posx + wi > 1273) && pos.y + hi <= 270) ||
((posx + wi < 1993 && posx + wi > 1390) && pos.y + hi <= 235) ||
((posx + wi < 2520 && posx + wi > 1990) && pos.y + hi <= 170) ||
((posx + wi < 2461 && posx + wi > 2449) && pos.y + hi <= 270) ||
((posx + wi < 2512 && posx + wi > 2459) && pos.y + hi <= 210) ||
((posx + wi < 2535 && posx + wi > 2510) && pos.y + hi <= 270) ||
((posx + wi < 2672 && posx + wi > 2530) && pos.y + hi <= 210) ||
((posx + wi < 2593 && posx + wi > 2570) && pos.y + hi <= 270) ||
((posx + wi < 2620 && posx + wi > 2602) && pos.y + hi <= 210) ||
((posx + wi < 2670 && posx + wi > 2618) && pos.y + hi <= 270) ||
((posx + wi < 2695 && posx + wi > 2668) && pos.y + hi <= 210) ||
((posx + wi < 2737 && posx + wi > 2693) && pos.y + hi <= 270) ||
((posx + wi < 2767 && posx + wi > 2734) && pos.y + hi <= 210) ||
((posx + wi < 2816 && posx + wi > 2766) && pos.y + hi <= 210) ||
((posx + wi < 3000 && posx + wi > 2815) && pos.y + hi <= 190)
) {
pos.y += 5;
}
if (pos.y >= 0) {
}
}
if (pos.y<0)pos.y=0;
j->img->SetPos( pos.x, pos.y );
j->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
// detail position
}
UpdateMis( );
RemoveMis( );
if( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN0) == CDXKEY_PRESS ) {
} else {
}
}
// monster control
mon1->img->SetPos( mon1x, 170);
mon1->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
mon1x = backgroundX+400;
mon1x += velx;
if (state1 == moveright)
if (state1 == moveleft)//
if (mon1x == backgroundX+400)
if (mon1x == backgroundX+350)
if (mon2->active){
mon2->img->SetPos( backgroundX+600, mon2y);
mon2->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
mon2y = 150;
// mon2y = ((20*(vely))- ((9.8)*((vely)^2)));
// if (state1 == moveup)
// {vely++;}/
// if(mon2y == 250 )state1 = moveup;
// if(mon2y == 90){vely -= 3;}
// printf ("%d",mon2y);
if (mon3->active){
mon3->img->SetPos( backgroundX+1000, 140);
mon3->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
if (mon4->active){
mon4->img->SetPos( backgroundX+2000, 140);
mon4->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
if (mon5->active){
mon5->img->SetPos( backgroundX+1300, 170);
mon5->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
}// Okay End State Here
BG1->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
if (backgroundX > 0) { backgroundX = 3000; }
Bg->img->SetPos(backgroundX,0);
Bg->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
BG->img->SetPos(backgroundX,0);
BG->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
if(Input->GetKeyState(SDLK_RIGHT)||Input->GetKeyState(CDXKEY_JOYBUTN9)){
if(Input->GetKeyState(SDLK_LEFT)||Input->GetKeyState(CDXKEY_JOYBUTN7)) {
}
pos.y += 5;
if( Input->GetKeyState(SDLK_UP)||Input->GetKeyState(CDXKEY_JOYBUTN8)) {
}
j->img->SetPos(pos.x,pos.y);
j->img->Draw(Screen->GetBack(),0,0,CDXBLT_TRANS);
if (pos.y>=150)pos.y = 150;
}
UpdateMis( );
RemoveMis( );
if( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN0) == CDXKEY_PRESS ) {
} else {
}
}
//boss control
boss->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
if (boss->hp <= 0) {
// Screen->GetBackEx()->Fill(0);
// TextXY(Screen->GetBack(), 0, 130, 255, 255, 255, 255, ETA_CENTER, "You're The Winner !!!!!");
/////////////////////////////////////
j->hp -= 10;
kk->img->SetPos( pos.x, pos.y );
kk->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
}
/////////////////////////////
j->img->SetPos( pos.x=0, pos.y=135 );
j->img->Draw( Screen->GetBack(), 0, 135, CDXBLT_TRANS );
}
//////////////////////////
j->active = false;
TextXY( Screen->GetBack(), 0, 130, 255, 255, 255, 255, ETA_CENTER,"GAME OVER");
}
} // Okay Boss State End Here
bg3_1->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
//backgroundX = 0;
if (backgroundX > 0) { backgroundX = 0; }
bg3->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
bg3_block->img->SetPos(backgroundX,0);
bg3_block->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
// blogmap info
int hi = j->img->GetBlockHeight();
(posx + wi < 755 && pos.y + hi <= 175) ||
((posx + wi < 790 && posx + wi > 755) && pos.y +hi <= 275) ||
(posx + wi < 927 && pos.y + hi <= 125) ||
((posx + wi < 1102 && posx + wi > 988) && pos.y + hi <= 155) ||
((posx + wi < 967 && posx + wi > 925) && pos.y +hi <= 275) ||
((posx + wi < 1102 && posx + wi > 965) && pos.y + hi <= 160) ||
((posx + wi < 1135 && posx + wi > 1100) && pos.y + hi <= 275) ||
((posx + wi < 1280 && posx + wi > 1130) && pos.y + hi <= 205) ||
((posx + wi < 1395 && posx + wi > 1273) && pos.y + hi <= 275) ||
((posx + wi < 1993 && posx + wi > 1390) && pos.y + hi <= 240) ||
((posx + wi < 2520 && posx + wi > 1990) && pos.y + hi <= 175) ||
((posx + wi < 2461 && posx + wi > 2449) && pos.y + hi <= 275) ||
((posx + wi < 2600 && posx + wi > 2459) && pos.y + hi <= 215) ||
((posx + wi < 2535 && posx + wi > 2510) && pos.y + hi <= 275) ||
((posx + wi < 2672 && posx + wi > 2530) && pos.y + hi <= 215) ||
((posx + wi < 2593 && posx + wi > 2570) && pos.y + hi <= 275) ||
((posx + wi < 2620 && posx + wi > 2602) && pos.y + hi <= 215) ||
((posx + wi < 2630 && posx + wi > 2618) && pos.y + hi <= 275) ||
((posx + wi < 2695 && posx + wi > 2668) && pos.y + hi <= 215) ||
((posx + wi < 2737 && posx + wi > 2693) && pos.y + hi <= 275) ||
((posx + wi < 2767 && posx + wi > 2734) && pos.y + hi <= 215) ||
((posx + wi < 2816 && posx + wi > 2766) && pos.y + hi <= 215) ||
((posx + wi < 3001 && posx + wi > 2815) && pos.y + hi <= 195) ||
((posx + wi < 3500 && posx + wi > 3000) && pos.y + hi <= 195)*/
) {
if ((posx + wi) < 3000){
}
}
if (
) {
if(Input->GetKeyState(SDLK_LEFT)||Input->GetKeyState(CDXKEY_JOYBUTN7)) {
backgroundX += 5;
}
}
}
if (posx + wi >= 3000){
}
if (posx + wi < 3000
(posx + wi < 755 && pos.y + hi <= 170) ||
((posx + wi < 790 && posx + wi > 755) && pos.y +hi <= 270) ||
(posx + wi < 927 && pos.y + hi <= 120) ||
((posx + wi < 1102 && posx + wi > 988) && pos.y + hi <= 150) ||
((posx + wi < 967 && posx + wi > 925) && pos.y +hi <= 270) ||
((posx + wi < 1102 && posx + wi > 965) && pos.y + hi <= 155) ||
((posx + wi < 1135 && posx + wi > 1100) && pos.y + hi <= 270) ||
((posx + wi < 1280 && posx + wi > 1130) && pos.y + hi <= 200) ||
((posx + wi < 1395 && posx + wi > 1273) && pos.y + hi <= 270) ||
((posx + wi < 1993 && posx + wi > 1390) && pos.y + hi <= 235) ||
((posx + wi < 2520 && posx + wi > 1990) && pos.y + hi <= 170) ||
((posx + wi < 2461 && posx + wi > 2449) && pos.y + hi <= 270) ||
((posx + wi < 2512 && posx + wi > 2459) && pos.y + hi <= 210) ||
((posx + wi < 2535 && posx + wi > 2510) && pos.y + hi <= 270) ||
((posx + wi < 2672 && posx + wi > 2530) && pos.y + hi <= 210) ||
((posx + wi < 2593 && posx + wi > 2570) && pos.y + hi <= 270) ||
((posx + wi < 2620 && posx + wi > 2602) && pos.y + hi <= 210) ||
((posx + wi < 2670 && posx + wi > 2618) && pos.y + hi <= 270) ||
((posx + wi < 2695 && posx + wi > 2668) && pos.y + hi <= 210) ||
((posx + wi < 2737 && posx + wi > 2693) && pos.y + hi <= 270) ||
((posx + wi < 2767 && posx + wi > 2734) && pos.y + hi <= 210) ||
((posx + wi < 2816 && posx + wi > 2766) && pos.y + hi <= 210) ||
((posx + wi < 3000 && posx + wi > 2815) && pos.y + hi <= 190) */
) {
//
if( Input->GetKeyState(SDLK_DOWN)||Input->GetKeyState(CDXKEY_JOYBUTN6)) {
}
}
if (
) {
if( Input->GetKeyState(SDLK_UP)||Input->GetKeyState(CDXKEY_JOYBUTN8)) {
}
}
if (pos.y<0)pos.y=0;
j->img->SetPos( pos.x, pos.y );
j->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
// detail position
TextXY( Screen->GetBack(), 430, 40, 100, 100, 255, 255, "Y : %d", mon1->hp );
if( Input->GetKeyState(SDLK_z) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN3) == CDXKEY_PRESS ) {
}
UpdateMis( );
RemoveMis( );
if( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN0) == CDXKEY_PRESS ) {
} else {
}
}
// monster control
mon1->img->SetPos( mon1x, 170);
mon1->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
mon1x = backgroundX+400;
mon1x += velx;
if (state1 == moveright)
if (state1 == moveleft)
if (mon1x == backgroundX+400)
if (mon1x == backgroundX+350)
if (mon2->active){
mon2->img->SetPos( backgroundX+600, 250);
mon2->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
if (mon3->active){
mon3->img->SetPos( backgroundX+1000, 140);
mon3->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
if (mon4->active){
mon4->img->SetPos( backgroundX+2000, 140);
mon4->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
if (mon5->active){
mon5->img->SetPos( backgroundX+1300, 170);
mon5->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
}
////////////////////
Screen->Flip( 0, 0, 1 );
SDL_framerateDelay( Fps );
}
int main( int argc, char* args[] )
#ifdef _PSP
#endif
#endif
while(1)
#ifdef WIN32
}
cdx_DeInit();
return 0;