การบ้านครั้งที่ 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
การบ้านครั้งที่ 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;
}