9/09/2011

Update#4 Final Project Prince Dragon Game



การบ้านครั้งที่ 4 (Final Project )
Project Prince Dragon Game
สั่งวันที่ 2 ก.ย. 54   
กำหนดส่ง 9 ก.ย. 54

1.ทำด่านให้เสร็จทั้ง 4 ด่าน
2.ให้Monsterแต่ละด่านเคลื่อนที่ต่างกัน
3.ทำองค์ประกอบทุกด่านให้ครบถ้วนสมบูรณ์
เล่นบน pc
เล่นบน psp 

รายงาน
Report Project Prince Dragon Game


อธิบายโค้ด
อธิบายโค้ดอันแรก



อธิบายโค้ดอันที่ 2


อธิบายโค้ดอันที่ 3

9/01/2011

Update#3 Prince Dragon Game


การบ้านครั้งที่ 3 (Project Prince Dragon Game)
สั่งวันที่ 26 ส.ค. 54   
กำหนดส่ง 2 ก.ย. 54

1.ให้ทำตัว Monster เพิ่ม
2.ให้สร้างฉากของด่านที่ 2
3
.ให้ทำการเชื่อมฉาก จากฉากที่ 1 ไปยังฉากที่ 2
CODE
#include <cdx_app_wiz.h>
#include <math.h>
// ------------------------------------------------------------------



// CDX Objects
// ------------------------------------------------------------------

CDXScreen *Screen = 0; // The screen object, every program must have one
CDXInput *Input = 0;



FPSmanager *Fps = 0;

int x,y = 0;
int backgroundX = 0;
int velx;
int vely;
int mon1x;
int mon2y;
int wi = 0;
//map




#define map_1 1
#define map_1_boss 2
#define map_3 3
#define map_3_boss 4
int state = map_1;
//mon




#define moveleft 1
#define moveright 2
#define moveup 3
#define movedown 4
int state1 = moveleft;
int test = 0;
class Animation {
public:
Animation( CDXSprite *unit ) {



this->unit = unit;
}



void duration( unsigned int a = 1, unsigned int b = 2, unsigned int delay = 0, bool loop = true ) {
this->a = a - 1;
this->b = b - 1;
this->delay = delay;
this->loop = loop;
}



void shuffle(unsigned int f) {
this->c_frame = rand() % f;
}



unsigned int play() {
if (!this->loop) {
if (this->c_frame < this->a) {
this->c_frame = this->a;
}



}
else {
if (this->c_frame > this->b || this->c_frame < this->a) {
this->c_frame = this->a;
}



}
this->unit->SetFrame(this->c_frame);
if (this->c_delay >= this->delay || !this->delay) {
this->c_delay = 0;
this->c_frame += (this->a < this->b) ? 1 : -1;
} else {
this->c_delay++;
}



return this->c_frame;
}



~Animation();

private:
CDXSprite *unit;



unsigned int a;
unsigned int b;
unsigned int delay;
bool loop;
unsigned int c_frame;
unsigned int c_delay;
};




typedef struct
{



CDXSprite *img;
Animation *animate;
int hp;
bool active;
}mySprite;



mySprite *j=
new mySprite();
mySprite *kk=new mySprite();
mySprite *boss=new mySprite();
mySprite *BG=new mySprite();
mySprite *BG1=new mySprite();
mySprite *Bg=new mySprite();
mySprite *bg3=new mySprite();
mySprite *bg3_1=new mySprite();
mySprite *bg3_block=new mySprite;
mySprite *mon1=new mySprite();
mySprite *mon2=new mySprite();
mySprite *mon3=new mySprite();
mySprite *mon4=new mySprite();
mySprite *mon5=new mySprite();
const int $_mon =20 ;
int active_weapon=0;
int score=0;
typedef struct {
int x, y;
int acceleration;
int size;
CDXSprite *src;



bool active;
Animation *animate;



} MON;
MON monster[$_mon];
POINT pos;

int u;
typedef struct
{



CDXSprite *missile;
POINT pos, di, vel;
bool active;
Animation *animate;



}Missile_info;
irr::core::
array <Missile_info*> mlist;
bool AddMis();
void UpdateMis(void);
void RemoveMis(void);
bool AddMis()
{



Missile_info* minfo =
new Missile_info( );
if (!active_weapon) {
minfo->missile = new CDXSprite();
minfo->missile->Create("fire spe2.png", 25, 30, 5);
minfo->di.x = 1;



minfo->vel.x = 7;
//boss->hp -= 20;
minfo->pos.x = pos.x;



minfo->pos.y = pos.y + 25;
minfo->animate =
new Animation(minfo->missile);
minfo->animate->duration(1, 5, 1);



}
else {
minfo->missile = new CDXSprite();
minfo->missile->Create("bigfire.png", 61, 60, 4);
minfo->di.x = 1;



minfo->vel.x = 3;
//boss->hp -= 50;
minfo->pos.x = pos.x;



minfo->pos.y = pos.y + 5;
minfo->animate =
new Animation(minfo->missile);
minfo->animate->duration(1, 4, 1);



}
minfo->active =
true;
mlist.push_back( minfo );



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) {
mon1->active = false;
mlist[i]->active = false;
score += 5;



}
if (mon2->img->SpriteHit(mlist[i]->missile) && mlist[i]->active && mon2->active) {
mon2->active = false;
mlist[i]->active = false;
score += 5;



}
if (mon3->img->SpriteHit(mlist[i]->missile) && mlist[i]->active && mon3->active) {
mon3->active = false;
mlist[i]->active = false;
score += 5;



}
if (mon4->img->SpriteHit(mlist[i]->missile) && mlist[i]->active && mon4->active) {
mon4->active = false;
mlist[i]->active = false;
score += 5;



}
if (mon5->img->SpriteHit(mlist[i]->missile) && mlist[i]->active && mon5->active) {
mon5->active = false;
mlist[i]->active = false;
score += 5;



}
if (mlist[i]->missile->SpriteHit(boss->img) && mlist[i]->active && boss->active) {
boss->hp -= 50;



mlist[i]->active =
false;
score += 10;



}
if (mlist[i]->active) {
if (mlist[i]->animate) mlist[i]->animate->play();
mlist[i]->missile->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );



}
}
}

void RemoveMis(void)
{



for( irr::u32 i = 0; i != mlist.size(); ++i )
{



if( mlist[i]->pos.x < 0 ||
mlist[i]->pos.x > 480 ||



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->Create( );



Screen->CreateWindowed( 480, 272, 32, SDL_DOUBLEBUF | SDL_HWSURFACE | SDL_INIT_TIMER );
Input =
new CDXInput( );
Input->Create( );



Fps =
new FPSmanager( );
SDL_initFramerate( Fps );



SDL_setFramerate( Fps, 30 );
// TODO: Initialize your own CDX objects here
boss->img = new CDXSprite();
boss->img->Create("boss2.png", 180, 143, 5);
boss->animate = new Animation(boss->img);
boss->animate->duration(1, 5, 5);



boss->hp = 1000;
boss->active =
false;
boss->img->SetPos( 300, 50 );



mon1->img =
new CDXSprite();
mon1->img->Create( "enemy.png", 30, 30, 3 );
mon1->animate = new Animation(mon1->img);
mon1->animate->duration(1, 2, 3);



mon1->active =
true;
mon1->hp = 200;



mon2->img =
new CDXSprite();
mon2->img->Create( "enemy.png", 30, 30, 3 );
mon2->animate = new Animation(mon2->img);
mon2->animate->duration(1, 2, 3);



mon2->active =
true;
mon2->hp = 200;




mon3->img =
new CDXSprite();
mon3->img->Create( "enemy.png", 30, 30, 3 );
mon3->animate = new Animation(mon1->img);
mon3->animate->duration(1, 2, 3);



mon3->active =
true;
mon3->hp = 200;



mon4->img =
new CDXSprite();
mon4->img->Create( "enemy.png", 30, 30, 3 );
mon4->animate = new Animation(mon1->img);
mon4->animate->duration(1, 2, 3);



mon4->active =
true;
mon4->hp = 200;



mon5->img =
new CDXSprite();
mon5->img->Create( "enemy.png", 30, 30, 3 );
mon5->animate = new Animation(mon1->img);
mon5->animate->duration(1, 2, 3);



mon5->active =
true;
mon5->hp = 200;



kk->img =
new CDXSprite();
kk->img->Create("player3.png", 75, 50, 12);
kk->img->SetPos(pos.x,pos.y);



kk->animate =
new Animation(kk->img);
kk->animate->duration(1, 12, 10);



kk->active =
true;
j->img = new CDXSprite();
j->img->Create( "player2.png", 75, 50, 2 );
j->animate = new Animation(j->img);
j->animate->duration(1, 2, 2);



j->hp = 200;
j->active =
true;




BG1->img =
new CDXSprite();
BG1->img->Create( "bgs1.pcx", 480, 272, 1 );
Bg->img = new CDXSprite();
Bg->img->Create( "bgmap1.png",3011, 272, 1);




BG->img =
new CDXSprite();
BG->img->Create( "2.png", 3500, 272, 1 );
bg3->img = new CDXSprite();
bg3->img->Create( "bg_sky2.png", 3000, 272, 1);
bg3_1->img = new CDXSprite();
bg3_1->img->Create( "bg_sky.pcx", 480, 272 ,1);
bg3_block->img = new CDXSprite();
bg3_block->img->Create( "block_sky.png", 3000, 272, 1);
return TRUE;
}




// ------------------------------------------------------------------



// 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(Input->GetKeyState(SDLK_SPACE)) {
state++;



}
if (state == map_1){
// blog map
BG1->img->SetPos(0,0);



BG1->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
if (backgroundX > 0) { backgroundX = 0; }
pos.x = 100;



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
if (x >= 435) { x = 435; }
if (x < 0) { x = 0; }
wi = j->img->GetBlockWidth();



int hi = j->img->GetBlockHeight();
int posx = (-1)*(backgroundX - 100);
TextXY( Screen->GetBack(), 100, 40, 100, 100, 255, 255, "X: %d, Y: %d", posx + wi, pos.y + hi );
if (
posx + wi < 263 ||



(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(Input->GetKeyState(SDLK_RIGHT)||Input->GetKeyState(CDXKEY_JOYBUTN9)){
backgroundX -= 5;



}
}
if (
posx >= 0



) {
if(Input->GetKeyState(SDLK_LEFT)||Input->GetKeyState(CDXKEY_JOYBUTN7)) {




backgroundX += 5;
}
}
}
if (posx + wi >= 3000){
state++;



}
if (
(pos.y + hi <225 && posx + wi <= 263) ||



(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( Input->GetKeyState(SDLK_UP)||Input->GetKeyState(CDXKEY_JOYBUTN8)) {
pos.y -= 10;



}
}
if (pos.y<0)pos.y=0;
if (pos.y>230)pos.y=230;
j->animate->play();



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 );
//TextXY( Screen->GetBack(), 360, 200, 100, 100, 66, 255, "bgscale : %d", backgroundX );
//TextXY( Screen->GetBack(), 200, 40, 100, 100, 255, 255, "surfacexscale : %d", surfaceX );
TextXY( Screen->GetBack(), 195, 20, 100, 100, 66, 255, "Score : %d", score );
TextXY( Screen->GetBack(), 50, 20, 150, 150, 66, 255, "Player : %d", j->hp );
TextXY( Screen->GetBack(), 360, 20, 200, 200, 66, 255, "Boss : %d", boss->hp );
// weapon control
if( Input->GetKeyState(SDLK_z) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN3) == CDXKEY_PRESS ) {
AddMis();



}
UpdateMis( );
RemoveMis( );
if( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN0) == CDXKEY_PRESS ) {
if (active_weapon < 1) {
active_weapon++;



}
else {
active_weapon = 0;



}
}
// monster control
if (mon1->active){
mon1->animate->play();



mon1->img->SetPos( mon1x, 170);
mon1->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
mon1x = backgroundX+400;
mon1x += velx;
if (state1 == moveright)
{velx++;}



if (state1 == moveleft)//
{velx--;}



if (mon1x == backgroundX+400)
{state1 = moveleft;}



if (mon1x == backgroundX+350)
{state1 = moveright;}




if (mon2->active){
mon2->animate->play();



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->animate->play();



mon3->img->SetPos( backgroundX+1000, 140);
mon3->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
if (mon4->active){
mon4->animate->play();



mon4->img->SetPos( backgroundX+2000, 140);
mon4->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
if (mon5->active){
mon5->animate->play();



mon5->img->SetPos( backgroundX+1300, 170);
mon5->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
}
// Okay End State Here
if (state == map_1_boss){
// blog map
BG1->img->SetPos(0,0);



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)){
pos.x += 7;}



if(Input->GetKeyState(SDLK_LEFT)||Input->GetKeyState(CDXKEY_JOYBUTN7)) {
pos.x -= 7;



}
pos.y += 5;
if( Input->GetKeyState(SDLK_UP)||Input->GetKeyState(CDXKEY_JOYBUTN8)) {
pos.y -= 10;



}
j->img->SetPos(pos.x,pos.y);
j->img->Draw(Screen->GetBack(),0,0,CDXBLT_TRANS);

if (pos.y>=150)pos.y = 150;
// weapon control
if( Input->GetKeyState(SDLK_z) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN3) == CDXKEY_PRESS ) {
AddMis();



}
UpdateMis( );
RemoveMis( );
if( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN0) == CDXKEY_PRESS ) {
if (active_weapon < 1) {
active_weapon++;



}
else {
active_weapon = 0;



}
}

//boss control
boss->active = true;
boss->animate->play();



boss->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
if (boss->hp <= 0) {
boss->active = false;
backgroundX = 0;



// Screen->GetBackEx()->Fill(0);
state++;



// TextXY(Screen->GetBack(), 0, 130, 255, 255, 255, 255, ETA_CENTER, "You're The Winner !!!!!");
}



/////////////////////////////////////
/////////ชนแล้วกระพริบ/////////////
if( j->img->SpriteHit(boss->img)){ //ชนกับบอส
kk->active = true;
j->active = true;
kk->animate->play();



j->hp -= 10;
kk->img->SetPos( pos.x, pos.y );
kk->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
}
/////////////////////////////
/////////ชนแล้วเด้ง/////////////
if( j->img->SpriteHit(boss->img)){ //ชนกับบอส
j->hp -= 10;



j->img->SetPos( pos.x=0, pos.y=135 );
j->img->Draw( Screen->GetBack(), 0, 135, CDXBLT_TRANS );
}
//////////////////////////
if (j->hp <= 0)
{



j->active =
false;
Screen->GetBackEx()->Fill(0);



TextXY( Screen->GetBack(), 0, 130, 255, 255, 255, 255, ETA_CENTER,
"GAME OVER");




}
}
// Okay Boss State End Here
if (state == map_3){ // blog map
bg3_1->img->SetPos(0,0);



bg3_1->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
//backgroundX = 0;
pos.x = 100;



if (backgroundX > 0) { backgroundX = 0; }
bg3->img->SetPos(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
// if (pos.x >= 435) { pos.x = 435; }
// if (pos.x < 0) { pos.x = 0; }
wi = j->img->GetBlockWidth();



int hi = j->img->GetBlockHeight();
int posx = (-1)*(backgroundX - 100);
TextXY( Screen->GetBack(), 100, 40, 150, 100, 255, 255, "X: %d, Y: %d", posx + wi, pos.y + hi );
if (
posx + wi < 3000/* ||
(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(Input->GetKeyState(SDLK_RIGHT)||Input->GetKeyState(CDXKEY_JOYBUTN9)){
backgroundX -= 5;



}
}
if (
posx >= 0



) {
if(Input->GetKeyState(SDLK_LEFT)||Input->GetKeyState(CDXKEY_JOYBUTN7)) {




backgroundX += 5;
}
}
}
if (posx + wi >= 3000){
state++;



}
if (posx + wi < 3000
/*(pos.y + hi <225 && posx + wi <= 263) ||
(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) */

) {




//








if( Input->GetKeyState(SDLK_DOWN)||Input->GetKeyState(CDXKEY_JOYBUTN6)) {
pos.y += 5;



}
}
if (
pos.y >= 0



) {
if( Input->GetKeyState(SDLK_UP)||Input->GetKeyState(CDXKEY_JOYBUTN8)) {
pos.y -= 10;



}
}
if (pos.y<0)pos.y=0;
if (pos.y>230)pos.y=230;
j->animate->play();



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 );
//TextXY( Screen->GetBack(), 360, 200, 100, 100, 66, 255, "bgscale : %d", backgroundX );
//TextXY( Screen->GetBack(), 200, 40, 100, 100, 255, 255, "surfacexscale : %d", surfaceX );
TextXY( Screen->GetBack(), 195, 20, 100, 100, 66, 255, "Score : %d", score );
TextXY( Screen->GetBack(), 50, 20, 150, 150, 66, 255, "Player : %d", j->hp );
TextXY( Screen->GetBack(), 360, 20, 200, 200, 66, 255, "Boss : %d", boss->hp );
// weapon control




if( Input->GetKeyState(SDLK_z) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN3) == CDXKEY_PRESS ) {
AddMis();



}
UpdateMis( );
RemoveMis( );
if( Input->GetKeyState(SDLK_x) == CDXKEY_PRESS || Input->GetKeyState(CDXKEY_JOYBUTN0) == CDXKEY_PRESS ) {
if (active_weapon < 1) {
active_weapon++;



}
else {
active_weapon = 0;



}
}
// monster control
if (mon1->active){
mon1->animate->play();



mon1->img->SetPos( mon1x, 170);
mon1->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
mon1x = backgroundX+400;
mon1x += velx;
if (state1 == moveright)
{velx++;}



if (state1 == moveleft)
{velx--;}



if (mon1x == backgroundX+400)
{state1 = moveleft;}



if (mon1x == backgroundX+350)
{state1 = moveright;}



if (mon2->active){
mon2->animate->play();



mon2->img->SetPos( backgroundX+600, 250);
mon2->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
if (mon3->active){
mon3->animate->play();



mon3->img->SetPos( backgroundX+1000, 140);
mon3->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
if (mon4->active){
mon4->animate->play();



mon4->img->SetPos( backgroundX+2000, 140);
mon4->img->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );}
if (mon5->active){
mon5->animate->play();



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
#ifndef NDEBUG
pspDebugScreenInit( );




#endif




SetupCallbacks( );




#endif
cdx_Init();



while(1)
{




#ifdef WIN32
if( Input->GetKeyState(SDLK_ESCAPE) )
break;
#endif




cdx_DoFrame();



}
cdx_DeInit();
return 0;
}