1. มีลูกบอลทั้งหมด 80 ลูก
2. มีการเก็บคะแนนและแสดงคะแนนด้านซ้ายบน
3. หากกินลูกบอลหมดจะขึ้นคำว่า YOU WIN
4. pacman หันหน้าไปตามทิศทางที่เดิน
5. pacman และลูกบอลมี animation
6. มีฉากหลัง (Background)
นี่คือเกมที่เสร็จแล้ว
ควบคุมโดยการใช้ W,A,S,D ในการขยับตัว ไปกินจุดหลังจากที่เก็บครบหมดแล้วเกมก็จะขึ้นว่า เราชนะ
Code
ในส่วนจะเป็นการประกาศตัวแปรที่จำเป็นต้องใช้
สร้าง struct ซึ่งก็คือการสร้างโครงสร้างของตัวแปรเพื่อทีี่่จะได้เรียกใช้ได้ง่ายขึ้น ในส่วนนี้้เป็นการสร้างโครงสร้างของตัวลูกบอล หลังจากที่สร้างแล้วก็ตั้งชื่อให้ว่า BALLINFO แล้วก็นำstruct นั้นมาประกาศเป็นชื่อ myball เป็นอาเรย์ มี 10 แถว 8 คอลัมน์
สร้างกล้องขึ้นมาแล้วกำหนดให้เป็นกล้องแบบเกม FPS กำหนดตำแหน่งของกล้องใหม่พร้อมกับหมุมให้ได้มุมด้วย
นำโมเดลชื่อ peet.obj เข้ามาเก็บไว้ที่ pac หลังจากนั้นก็นำ pac ไปแสดงไว้ใน pac_node
pac_node->setMaterialFlag(EMF_LIGHTING,false); นั้นเป็นการกำหนดให้โมเดลนี้ไม่มีผลต่อแสง
สำหรับ g_font กับ g_font2 นั้นเป็นการนำ Font ที่เป็น ไฟล์ bit map เข้ามา
นำเอาอาเรย์ชื่อ myball มากำหนดค่าต่างๆลงไป เช่น นำโมเดล ball.obj เข้ามา กำหนดให้ไม่มีผลต่อแสงเป็นต้น
ในส่วนนี้เป็นการควบคุมตัวละครโดยกำหนดให้ W เดินขึ้น S เดินลง A ไปทางซ้าย D ไปทางขวา
จะขึ้นคำว่า YOU WIN เมื่อคะแนนถึง 8000 กับอีก อันหนึ่งคือการแสดงค่าของคะแนน
เช็คว่าลูกบอลชนกับตัวละครหรือเปล่า ถ้าชนลูกบอลจะหายไปพร้อมกับเพิ่มคะแนนมา 100
Download Source code ทั้งหมด
Code
ICameraSceneNode* camera = 0;
IAnimatedMesh* pac = 0;
IAnimatedMeshSceneNode* pac_node = 0;
IGUIFont* g_font;
IGUIFont* g_font2;
int i, j;
int sc = 0;
wchar_t text[256];
ในส่วนจะเป็นการประกาศตัวแปรที่จำเป็นต้องใช้
- ICameraSceneNode เป็นตัวแปรที่่เอาเก็บค่าของกล้อง
- IAnimatedMesh คือ ตัวแปรที่เอาไว้เก็บโมเดล
- IAnimatedMeshSceneNode คือ ตัวแปรที่นำเอาโมเดลที่เก็บไว้มาแสดงบนจอ
- IGUIFont ไว้สำหรับเก็บค่าของตัวอัษรที่จะวาดลงในจอ
- int ค่าจำนวนเต็ม
- wchar_t ไว้เก็บตัวอักษร
typedef struct
{
vector3df pos;
IAnimatedMesh* ball;
IAnimatedMeshSceneNode* ball_node;
bool Active;
}BALLINFO;
BALLINFO myball[10][8];
สร้าง struct ซึ่งก็คือการสร้างโครงสร้างของตัวแปรเพื่อทีี่่จะได้เรียกใช้ได้ง่ายขึ้น ในส่วนนี้้เป็นการสร้างโครงสร้างของตัวลูกบอล หลังจากที่สร้างแล้วก็ตั้งชื่อให้ว่า BALLINFO แล้วก็นำstruct นั้นมาประกาศเป็นชื่อ myball เป็นอาเรย์ มี 10 แถว 8 คอลัมน์
camera = g_engine.smgr->addCameraSceneNodeFPS();
camera->setPosition(vector3df(500,500,-100));
camera->setRotation(vector3df(45,0,0));
สร้างกล้องขึ้นมาแล้วกำหนดให้เป็นกล้องแบบเกม FPS กำหนดตำแหน่งของกล้องใหม่พร้อมกับหมุมให้ได้มุมด้วย
pac = g_engine.smgr->getMesh("peet.obj");
pac_node = g_engine.smgr->addAnimatedMeshSceneNode(pac);
pac_node->setMaterialFlag(EMF_LIGHTING,false);
pac_node->setPosition(vector3df(500,-10,50));
pac_node->setScale( core::vector3df(10.0f, 10.0f, 10.0f) );
g_font = g_engine.guienv->getFont("myfont.xml");
g_font2 = g_engine.guienv->getFont("myfont.xml");
นำโมเดลชื่อ peet.obj เข้ามาเก็บไว้ที่ pac หลังจากนั้นก็นำ pac ไปแสดงไว้ใน pac_node
pac_node->setMaterialFlag(EMF_LIGHTING,false); นั้นเป็นการกำหนดให้โมเดลนี้ไม่มีผลต่อแสง
สำหรับ g_font กับ g_font2 นั้นเป็นการนำ Font ที่เป็น ไฟล์ bit map เข้ามา
for(i = 0;i <10;i++) j =" 0;j" ball =" g_engine.smgr-">getMesh("ball.obj");
myball[i][j].ball_node = g_engine.smgr->addAnimatedMeshSceneNode(myball[i][j].ball);
myball[i][j].ball_node->setMaterialFlag(EMF_LIGHTING,false);
myball[i][j].ball_node->setRotation(vector3df(0,180,0));
myball[i][j].pos.X = 100.0f*(i+1);
myball[i][j].pos.Z = 100.0f*(j+1);
myball[i][j].ball_node->setPosition(myball[i][j].pos);
myball[i][j].Active = true;
}
นำเอาอาเรย์ชื่อ myball มากำหนดค่าต่างๆลงไป เช่น นำโมเดล ball.obj เข้ามา กำหนดให้ไม่มีผลต่อแสงเป็นต้น
if( g_input.keyDown(KEY_KEY_W) ){
move_ex( camera, pac_node, vector3df(0,0,1));
pac_node->setRotation( core::vector3df(0, 0, 0) );
}
else if( g_input.keyDown(KEY_KEY_S) ){
move_ex( camera, pac_node, vector3df(0,0,-1));
pac_node->setRotation( core::vector3df(0, 180, 0) );
}
else if( g_input.keyDown(KEY_KEY_A) ){
move_ex( camera, pac_node, vector3df(-1,0,0));
pac_node->setRotation( core::vector3df(0, 270, 0) );
}
else if( g_input.keyDown(KEY_KEY_D) ){
move_ex( camera, pac_node, vector3df(1,0,0));
pac_node->setRotation( core::vector3df(0, 90, 0) );
}
ในส่วนนี้เป็นการควบคุมตัวละครโดยกำหนดให้ W เดินขึ้น S เดินลง A ไปทางซ้าย D ไปทางขวา
if(sc>= 8000)
{
g_font->draw( L"YOU WIN",rect(250,200,100,100),SColor(255,255,255,255) );
}
swprintf(text,256,L"Score :%d",sc);
g_font->draw( text, rect(10,5,100,100),SColor(255,0,255,255) );
จะขึ้นคำว่า YOU WIN เมื่อคะแนนถึง 8000 กับอีก อันหนึ่งคือการแสดงค่าของคะแนน
for( i = 0; i < j =" 0;" active =" false;">setVisible( false );}
}
}
เช็คว่าลูกบอลชนกับตัวละครหรือเปล่า ถ้าชนลูกบอลจะหายไปพร้อมกับเพิ่มคะแนนมา 100
Download Source code ทั้งหมด
ไม่มีความคิดเห็น:
แสดงความคิดเห็น