บทความที่ได้รับความนิยม

Homework_1

โจทย์  จงเขียนเกม PACMAN โดยมีรายละเอียดดังนี้
1. มีลูกบอลทั้งหมด 80 ลูก

2. มีการเก็บคะแนนและแสดงคะแนนด้านซ้ายบน

3. หากกินลูกบอลหมดจะขึ้นคำว่าYOU WIN

Run on PSP





อธิบาย Code






Capture screen shot






Code game

#include <cdx_app_wiz.h>

// ------------------------------​------------------------------​------
// CDX Objects
// ------------------------------​------------------------------​------
CDXScreen *Screen = 0; // The screen object, every program must have one
CDXInput *Input = 0;
FPSmanager *Fps = 0;
CDXSprite * pac = 0;
CDXSprite* mu = 0;
CDXSnd* g_snd;

int x, y, i, j;
int score;
typedef struct
{
int x, y;
CDXSprite* ball;
bool Active;
}BALLINFO;
BALLINFO myball[10][8]; // สร้าง อาเรย์ขนาด 8x10

// ------------------------------​------------------------------​------
// cdx_Init - handles initialization of the CDX objects
// ------------------------------​------------------------------​------
BOOL cdx_Init()
{
score=0;
x=0;
y=0;//ตั้งแค่า x y และ score =0 เพื่อให้วนกลับมาแล้วทุกอย่างเร​ิ่มเต้นใหม่
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
g_snd = new CDXSnd();
g_snd->Create();
g_snd->Play("start.ogg");

mu = new CDXSprite( );
mu->Create( "bg.jpg", 1 );
pac = new CDXSprite( );
pac->Create( "pac.png", 1 );
for( i = 0; i < 10; i++ ) {
for( j = 0; j < 8; j++ ) {
myball[i][j].ball = new CDXSprite( );
myball[i][j].ball->Create( "ball.png", 1 );
myball[i][j].x = 40*(i+1);//ระยะห่าง ในแกน x
myball[i][j].y = 34*(j+1);//ระยะห่าง ในแกน y

myball[i][j].ball->SetPos( myball[i][j].x, myball[i][j].y-26 );//ตำแหน่งของ ball แต่ละลูก (x,y)
myball[i][j].Active = true;
}
}

return TRUE;
}

// ------------------------------​------------------------------​------
// cdx_DeInit - handles cleanup of CDX objects
// ------------------------------​------------------------------​------
void cdx_DeInit( void )
{
// TODO: Destroy your CDX objects here
SAFEDELETE( g_snd );
SAFEDELETE( mu );

for( i = 0; i < 10; i++ ){
for( j = 0; j < 8; j++ ){
SAFEDELETE( myball[i][j].ball );}}
SAFEDELETE(pac);

SAFEDELETE( Fps );
SAFEDELETE( Input );
SAFEDELETE( Screen );

}

// ------------------------------​------------------------------​------
// cdx_DoFrame - performs drawing of the current frame
// ------------------------------​------------------------------​------
void cdx_DoFrame()
{
Input->Update( );

Screen->GetBackEx()->Fill(0);
// TODO: Add code to draw your objects during each frame
mu->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );

if( Input->GetKeyState(SDLK_RIGHT)​||
Input->GetKeyState(CDXKEY_JOYB​UTN9))
x += 8;
if( Input->GetKeyState(SDLK_LEFT)|​|
Input->GetKeyState(CDXKEY_JOYB​UTN7))
x -= 8;
if( Input->GetKeyState(SDLK_UP)||
Input->GetKeyState(CDXKEY_JOYB​UTN8))
y -= 8;
if( Input->GetKeyState(SDLK_DOWN)|​|
Input->GetKeyState(CDXKEY_JOYB​UTN6))
y += 8;
if(x<0)
x=0;
if(x>448)
x=448;
if(y<0)
y=0;
if(y>240)
y=240;

pac->SetPos( x, y );
pac->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
for( i = 0; i < 10; i ++ ) {
for( j = 0; j < 8; j++ ) {
if( pac->SpriteHit(myball[i][j].ba​ll) && myball[i][j].Active ) {
myball[i][j].Active = false;
score += 1;
}

if( myball[i][j].Active ) {
myball[i][j].ball->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
}
}// for j
}//for i

TextXY( Screen->GetBack(),416, 10, 255, 28, 7, 134, "SCORE " "%d",score );
if(score==80){
TextXY( Screen->GetBack(), 240,124, 255,28, 7, 134,ETA_CENTER, "::YOU WIN::");
TextXY( Screen->GetBack(), 240,138, 255, 28, 7, 134,ETA_CENTER, "<Press Start To Play Again>");
}

if( Input->GetKeyState(SDLK_SPACE)​||
Input->GetKeyState(CDXKEY_JOYB​UTN11)){
score = 0;
for( i = 0; i < 10; i++ ) {
for( j = 0; j < 8; j++ ) {
myball[i][j].ball->SetPos( myball[i][j].x, myball[i][j].y-26 );//ตำแหน่งของ ball แต่ละลูก (x,y)
myball[i][j].Active = true;
}
}
}//วน loop

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;
}

2 ความคิดเห็น: