วันจันทร์ที่ 27 กันยายน พ.ศ. 2553

Present



รายชื่อ กลุ่ม
1. นาย ปณิธิ เรืองสิทธิ์ 502576
2. นาย ธเนศ วิลารณย์กมล 5100986
3. นาย ธนากร กู่กิจวัฒนา 5108183
4. อนุพงษ์ ศรีวัฒน์ 5108405

code game

วันอาทิตย์ที่ 19 กันยายน พ.ศ. 2553

PSP Console Game

ชื่อเกม Chef Story Realr

ความเป็นมาและความสำคัญของเกม
ความเป็นมาของการพัฒนาเกมส์ Chef Story Realr ด้วยอาหารไทยมีชื่อเสียงมากในด้าน รสชิาตที่จัดจ้าน จึงทำให้มีชาวต่างชาติ หลากหลายประเทศ สนใจในอาหารไทยเรา มาขึ้น จึงนำความคิดจากจุดเด่นของ อาหารไทย มาพัฒนาเป็น เกมส์ Chef Story Realr ซึ่งเนื้อหาเกมส์ คือการทำอาหาร เน้นการทำอาหารไทย เพื่อเผยแผ่วัฒนธรรมไทย และอาหาร โดยตัวเกมส์ ก็ตามชื่อเลยครับ Chef Story Realr เรื่องเลาการผจญภัย หาวัตถุดิบ เพื่อนำมาทำอาหาร สูตรเด็ด ซึุ้งสามารถนำสูตรอาหารมาใช้ ในการทำอาหารได้จริง

วัตถุประสงค์
เพื่อเผยแผ่วัฒนธรรมไทย
เพื่อเผยแผ่อาหารไทย
เพื่อฝึกทักษะการทำอาหารที่สามารถนำไปใช้ได้จริง

เพื่อเป็นคล้ายสือการเรียนรู้ ในการทำอาหารไทย
เพื่อรักษาอาหารไทย ให้คนรุ่นต่อๆไป รู้จัก
เพื่อให้เด็กรุ่นหลังหันมาสนใจการทำอาหารไทย หรือ เลือกทานอาหารไทย

ขอบเขตของโครงการ

PSP Console Game
เนื้อเรื่อง ณ ตลาดสด ร้านค้ามากมาย ที่ค้าขายทั้งวัตถุดิบ และอาหาร ตลาดแห่งนี้ มีความคึกคักมากเต็มไปด้วยลูกค้าทั้งไทย และ ชาวต่างชาติ จอห์น เป็น ชาติต่างชาติที่อาศัยอยู่ที่ หลังตลาด ซึ่ง ที่มาของจอห์น ไม่แน่นชัดมากนัก ว่า จอห์น เป็นคนประเทศไหน แต่จอห์น หลงใหลใน รสชาติของอาหารไทย เอามากๆ จึงเป็นเหตุผลที่ทำให้ จอห์น ใช้ชีวิตอยู่ที่ ประเทศไทย เพื่อเหตุผลบ้า่งอย่าง นั้นคือ แม่ของจอห์น เป็น คนไทย (เสียชีวิตไปแล้ว) แม่จอห์นเคยมี ชื่อเสียงมากในฝีมือการทำอาหารไทย ตั้งแต่ จอห์น ยังเด็กมาก และจอห์นก็ถูกส่งไปต่างประเทศอยู่กับพ่อ ของเค้าตั้งแต่เด็ก จึงทำให้ จอห์นไม่ค่อยมีโอกาสพบ แม่ของเค้ามากนัก หลังจากแม่ของ จอห์น เสียชีวิต แม่จอห์นได้ ทิ้ง ร้านอาหาร ร้านหนึ่งไว้ ซึ่งมีชื่อเสียงมากในหลาย 10 ปีที่แล้ว ตั้งแต่ มี ร้านอาหารต่างชาติเข้ามา ชื่อเสียงของ ร้าน แม่ของจอห์นก็ถึงจุดจบ ที่คนส่วนใหญ่ในสมัยนั้น นิยมหันไป ทาน อาหารต่างชาติมากขึ้น (เพราะอาหารต่างชาติส่วนใหญ่ มี หลายสาขา สะดวกสะบายที่เดินทาง หรือหารับประทาน จึงเป็นที่ นิยมของ คนทั่วไปที่ใช้ชีวิตเร่งรีบตลอดเวลา ซึ่ง จอห์นเมือได้รับรู้เรื่องราวทั้งหมดของแม่เค้า จอห์น จึงอยากทำร้านอาหาร ของแม่เค้าให้กลับมามีชื่อเสียงอีกครั้ง แต่ก็มีปัญหา ตรงที่ จอห์น ไปอยู่ เมืองนอกตั้งแต่เด็ก เค้าจึงทำอาหารไทยไม่เป็น แล้วไม่เคยลอง อาหารไทย อีกหลาย เมนูที่ร้าน ของแม่ จอห์น อีก จึงทำให้จอห์น ต้องศึกษาหาวิธีทำอาหารไทย จนได้พบกลับ อ.สมศักดิ์ อ.สมศักดิ์ เป็น อาจารย์ชื่อดัง เปิดโรงเรียนสอนทำอาหารไทย แถม ยัง เป็นเจ้าของ รายการทีวี อาหาร ที่โ่ด่งดังอีกด้วย เรื่องราวทั้งหมด และชะตากรรม ทั้งหมด ของ จอนห์นจึงขึ้นอยู่กลับ อ.สมศักดิ์ ผู้เป็น ครู สอน ทำอาหารให้ กับ จอห์น

ตัวละคร

จอห์น
(เป็นตัวละครเอก ของเกมส์ จอห์นเป็นชาติต่างชาติที่หลงใหล ในรสชาติอาหารไทย จึงทำให้เป็นแรงบันดานใจ ที่อยากเป็น Chef ซึ่งมี อ.สมศักดิ์ เป็นตัวละครช่วยสอนทำอาหารไทย)

อ.สมศักดิ์
(เป็นตัวละคร อาจารย์สอนทำอาหารไทย เป็นตัวละครที่ ให้เควสทำอาหารต่างๆในเกมส์)

ฉากภายในเกมส์
ฉากภายในเกมส์ จะแบ่งเป็น 4 ฉากใหญ่ ๆ
โดย
1. ฉาก map ใหญ่ เป็น แผ่นที่ใหญ่ใช่เลือกสถานที่ไปได้ 4 ที่
1.1. สถานที่ บ้าน ใช้สำหรับทำอาหาร
1.2. สถานที่ โรงเรียนสอนทำอาหาร ใช้สำหรับไปรับเควส
1.3. สถานที่ mapต่างๆ ที่หาของ วัถตุดิบ โดยเชื่องต่อกันเป็น map เดียว มีทั้ง ป่า ทะเล ตลาด
1.4. สถานที่ ร้านอาหารของ แม่ จอห์น ยังไม่มีข้อมูลมากนัก เป็นสถานที่ ตอนที่ จอห์น ฝึกทำอาหาร สำเสร็จแล้ว ถึงจะเอาได้


ประโยชน์ของโครงการ
1.เพื่อการเรียนรู้ศึกษาวิธีทำเกมส์ ลงเครื่อง PSP
2.เพื่อสร้างลักษณะ การทำงานแบบกลุ่ม อย่างเป็นระบบ
3.เพื่อพัฒนา หรือ กระตุ้น วงการเกมส์ ของ ประเทศไทย
4.เพื่อเป็นแบบอย่าง แก่รุ่นน้อง ในการพัฒนาเกมส์ หรือ ทำโครงการเกมส์
4.เพื่อการส่งเสริมอาหารไทย

โปรแกรมที่ใช้พัฒนา
pspsdk
cdx_psp
Microsoft Visual C++ 2008

รายชื่อ ผู้พัฒน์เกมส์
1. นาย ปณิธิ เรืองสิทธิ์ 502576
2. นาย ธเนศ วิลารณย์กมล 5100986
3. นาย ธนากร กู่กิจวัฒนา 5108183
4. นาย อนุพงษ์ ศรีวัฒน์ 5108405







_______________________________________________________________
ขออภัยอยู่ระหว่านรวบรวมงานขึ้น blog

วันพุธที่ 8 กันยายน พ.ศ. 2553

Chef Story Realr

รูปไฟล์งานทั้งหมด



ดู code ได้ที่นี้ครับ แยอะมากยาวๆ


ฉากเดินป่าค้นหาของ ของจุถูกซ่อนตามต้อไม้ต่างๆๆต้องเดินไปหาที่ต้นไม้




อันนี้เป็นฉากที่ได้เก็บ item มาแล้ว itemที่ต้องทำการ หัน ก็จะเลือกหันได้ที่ฉากนี้ครับ



อันนี้จะเป็นฉากทำอาหาร โดยการเลือดยิบ item ใส่ครก แล้วตำ การตำจะมีเกรดระดับความสำเร็จ ถ้าเต็มก็ทำเร็จ

วันจันทร์ที่ 28 มิถุนายน พ.ศ. 2553

Shooting game


Homework – Shooting game

1. Player move by keyboard 8 directions.
2. Player have 2 type missile can change between play game.
3. Game have enemy draw with transformation image and moving to player in up, down, left or right direction.
4. Score over 10 player meet BOSS.
5. Kill boss game is over and show you win.
NOTE: Game have Transformation Image,
Layer and Fade Screen.

รูปทั้งหมดที่ใช้ในเกมส์



ส่วนของโค๊ตที่ใช้ควบคุ่ม
#include

// ------------------------------------------------------------------
// CDX Objects
// ------------------------------------------------------------------
CDXScreen *Screen = 0; // The screen object, every program must have one
CDXInput *Input = 0;
CDXSprite *Bg1 = 0;
CDXSprite *Bg2 = 0;
FPSmanager *Fps = 0;
POINT bg1={0,0};
POINT bg2={512,0};
class Rtype
Rtype ship;
class Missile:public Rtype
{
public:
typedef struct
{
CDXSprite *missile;
POINT pos, di, vel;
int width,height;
int xfix,yfix;
int damage;
bool active;
}miss_info;
irr::core::array mlist;
bool AddMis( char* name, const POINT& pos, const POINT& di, const POINT& vel,const int& damage )
{
miss_info* minfo = new miss_info( );
minfo->missile = new CDXSprite( );
minfo->missile->Create( name, 0 );
minfo->pos.x = pos.x;
minfo->pos.y = pos.y;
minfo->di = di;
minfo->vel = vel;
minfo->damage = damage;
minfo->active = true;
mlist.push_back( minfo );
return true;
}
bool AddMis( char* name,const int& width,const int& height, const POINT& pos, const POINT& di, const POINT& vel,const int& damage )
{
miss_info* minfo = new miss_info( );
minfo->missile = new CDXSprite( );
minfo->missile->Create( name,width,height, 0 );
minfo->pos.x = pos.x;
minfo->pos.y = pos.y;
minfo->di = di;
minfo->vel = vel;
minfo->damage = damage;
minfo->active = true;
mlist.push_back( minfo );
return true;
}
bool AddMis( char* name,const int& width,const int& height,const int& xfix,const int& yfix, const POINT& pos, const POINT& di, const POINT& vel,const int& damage )
{
miss_info* minfo = new miss_info( );
minfo->missile = new CDXSprite( );
minfo->missile->Create( name,width,height, 0 );
minfo->pos.x = pos.x+xfix;
minfo->pos.y = pos.y+yfix;
minfo->di = di;
minfo->vel = vel;
minfo->damage = damage;
minfo->active = true;
mlist.push_back( minfo );
return true;
}
void UpdateMis(void)
{
for( irr::u32 i = 0; i != mlist.size(); i++ )
{
if(mlist[i]->active)
{
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, mlist[i]->pos.y );
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 <>pos.x > 480 ||
mlist[i]->pos.y <>pos.y > 272 ||
mlist[i]->active==false)
{
SAFEDELETE( mlist[i]->missile );
SAFEDELETE( mlist[i] );
mlist.erase( i );
--i;
}
}
}
void deinit(void)
{
for( irr::u32 i = 0; i != mlist.size(); ++i )
{
SAFEDELETE( mlist[i]->missile );
SAFEDELETE( mlist[i] );
mlist.erase( i );
--i;
}
}
};
Missile Miss;
class Shoot:public Missile
{
public:
int select;
int de;
int damage;
void fire(POINT pos)
{
if(Input->GetKeyState(SDLK_SPACE))
{
delay();
if(de==0)
shoot1(pos);
}
if(Input->GetKeyState(SDLK_LALT))
{
charge++;
}
if(Input->GetKeyState(SDLK_LALT)==CDXKEY_RELEASE)
{
if(charge>20)
shootc(pos);
charge=0;
}
}
void shoot1(POINT pos)
{
POINT di={1,0};
POINT vel={10,0};
AddMis("Shoot.png",40,17,40,15,pos,di,vel,2);
}
void shootc(POINT pos)
{
POINT di={1,0};
POINT vel={15,0};
AddMis("ChargeShot.png",128,64,0,-15,pos,di,vel,5);
}
public:
int charge;
void delay(void)
{
de++;
if(de>7)
de=0;
}
};
Shoot shoot;
class Monster:public Missile
{
public:
int w1count;
int det;
typedef struct
{
CDXSprite *monster;
POINT pos, di, vel;
int width,height;
int xfix,yfix;
bool active;
int health;
}mon_info;
irr::core::array monlist;
bool AddMon( char* name, const POINT& pos, const POINT& di, const POINT& vel,const int& health )
{
mon_info* moninfo = new mon_info( );
moninfo->monster = new CDXSprite( );
moninfo->monster->Create( name, 0 );
moninfo->pos.x = pos.x;
moninfo->pos.y = pos.y;
moninfo->di = di;
moninfo->vel = vel;
moninfo->active = true;
moninfo->health = health;
monlist.push_back( moninfo );
return true;
}
bool AddMon( char* name,const int& width,const int& height, const POINT& pos, const POINT& di, const POINT& vel )
{
mon_info* moninfo = new mon_info( );
moninfo->monster = new CDXSprite( );
moninfo->monster->Create( name,width,height, 0 );
moninfo->pos.x = pos.x;
moninfo->pos.y = pos.y;
moninfo->di = di;
moninfo->vel = vel;
moninfo->active = true;
monlist.push_back( moninfo );
return true;
}
void MUpdateMis(void)
{
for( irr::u32 i = 0; i != monlist.size(); i++ )
{
monlist[i]->pos.x += monlist[i]->di.x * monlist[i]->vel.x;
monlist[i]->pos.y += monlist[i]->di.y * monlist[i]->vel.y;
if(monlist[i]->active)
{
monlist[i]->monster->SetPos( monlist[i]->pos.x, monlist[i]->pos.y );
monlist[i]->monster->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
}

}
}
void MRemoveMis(void)
{
for( irr::u32 i = 0; i != monlist.size(); ++i )
{
if( monlist[i]->pos.x <>pos.x > 480 ||
monlist[i]->pos.y <>pos.y > 272 ||
monlist[i]->active==false)
{
SAFEDELETE( monlist[i]->monster );
SAFEDELETE( monlist[i] );
monlist.erase( i );
--i;
}
}
}
void Mdeinit(void)
{
for( irr::u32 i = 0; i != monlist.size(); ++i )
{
SAFEDELETE( monlist[i]->monster );
SAFEDELETE( monlist[i] );
monlist.erase( i );
--i;
}
}
void wave1(void)
{
delay();
POINT pos={480,200};
POINT di={-1,0};
POINT vel={5,0};
if(dem==0)
{
w1count++;
if(w1count>10)
pos.y-=100;
if(w1count>20)
{
pos.y-=100;
di.y+=1;
vel.y+=5;
}
if(w1count>30)
{
pos.y+=250;
di.y-=2;
vel.y+=5;
}
if(w1count<40) pos="{480,30};" di="{-1,0};" vel="{4,0};">50&&bossv==0)
{
bossv=1;
AddMon("boss.png",pos,di,vel,20);
}
}
private:
int bossv;
int dem;
void delay(void)
{
dem++;
if(dem>10)
dem=0;
}
};


Monster mon;
class Effect
{
public:
CDXSprite *Charge;
int frame,bframe;
Effect()
{
Charge = new CDXSprite();
Charge->Create("Charge.png",30,35,0);
}
typedef struct
{
CDXSprite *eff;
POINT pos, di, vel;
int width,height;
int xfix,yfix;
bool active;
}FX_info;
irr::core::array efflist;
bool AddFX( char* name, const POINT& pos)
{
FX_info* effinfo = new FX_info( );
effinfo->eff = new CDXSprite( );
effinfo->eff->Create( name, 0 );
effinfo->pos.x = pos.x;
effinfo->pos.y = pos.y;
effinfo->active = true;
efflist.push_back( effinfo );
return true;
}
bool AddFX( char* name, const POINT& pos, const POINT& di, const POINT& vel )
{
FX_info* effinfo = new FX_info( );
effinfo->eff = new CDXSprite( );
effinfo->eff->Create( name, 0 );
effinfo->pos.x = pos.x;
effinfo->pos.y = pos.y;
effinfo->di = di;
effinfo->vel = vel;
effinfo->active = true;
efflist.push_back( effinfo );
return true;
}
bool AddFX( char* name,const int& width,const int& height, const POINT& pos, const POINT& di, const POINT& vel )
{
FX_info* effinfo = new FX_info( );
effinfo->eff = new CDXSprite( );
effinfo->eff->Create( name,width,height, 0 );
effinfo->pos.x = pos.x;
effinfo->pos.y = pos.y;
effinfo->di = di;
effinfo->vel = vel;
effinfo->active = true;
efflist.push_back( effinfo );
return true;
}
bool AddFX( char* name,const int& width,const int& height,const int& xfix,const int& yfix, const POINT& pos, const POINT& di, const POINT& vel )
{
FX_info* effinfo = new FX_info( );
effinfo->eff = new CDXSprite( );
effinfo->eff->Create( name,width,height, 0 );
effinfo->pos.x = pos.x+xfix;
effinfo->pos.y = pos.y+yfix;
effinfo->di = di;
effinfo->vel = vel;
effinfo->active = true;
efflist.push_back( effinfo );
return true;
}
void UpdateMis(void)
{
for( irr::u32 i = 0; i != efflist.size(); i++ )
{
if(efflist[i]->active)
{
efflist[i]->pos.x += efflist[i]->di.x * efflist[i]->vel.x;
efflist[i]->pos.y += efflist[i]->di.y * efflist[i]->vel.y;
bframe++;
efflist[i]->eff->SetPos( efflist[i]->pos.x, efflist[i]->pos.y );
efflist[i]->eff->SetFrame(bframe);
efflist[i]->eff->Draw( Screen->GetBack(), 0, 0, CDXBLT_TRANS );
}
}
}
void RemoveMis(void)
{
for( irr::u32 i = 0; i != efflist.size(); ++i )
{
if( efflist[i]->pos.x <>pos.x > 480 ||
efflist[i]->pos.y <>pos.y > 272 ||
efflist[i]->active==false ||
bframe>6)
{
SAFEDELETE( efflist[i]->eff );
SAFEDELETE( efflist[i] );
efflist.erase( i );
--i;
}
}
}
void deinit(void)
{
for( irr::u32 i = 0; i != efflist.size(); ++i )
{
SAFEDELETE( efflist[i]->eff );
SAFEDELETE( efflist[i] );
efflist.erase( i );
--i;
}
}
void Fdeinit(void)
{
SAFEDELETE( Charge );
}
void charge(int posx,int posy)
{
if(Input->GetKeyState(SDLK_SPACE))
{
drawcharge(posx,posy);
animate(0,7);
}
}
private:
void drawcharge(int posx,int posy)
{
Charge->SetFrame(frame);
Charge->SetPos(posx+40,posy+5);
Charge->Draw(Screen->GetBack(),0,0,CDXBLT_TRANS );
}
void animate(int s,int e)
{
frame++;
if(frame>e)
frame=s;
}
};
Effect fx;
class Crash
{
public:
void crashwave1(void)
{
for(irr::u32 i=0;i != shoot.mlist.size();i++)
{
for(irr::u32 j=0;j != mon.monlist.size();j++)
{
if(shoot.mlist[i]->missile->SpriteHit(mon.monlist[j]->monster))
{
mon.monlist[j]->health-=shoot.mlist[i]->damage;
if(shoot.mlist[i]->damage<5)>active=false;
if(mon.monlist[j]->health<0)>active=false;
}
POINT di={1,0};
POINT vel={1,0};
fx.bframe=0;
if(mon.monlist[j]->health<0)>pos,di,vel);
}
}
}
}
};



Crash hit;
void Bgmove(void)
{
bg1.x-=3;
bg2.x-=3;
if(bg1.x<-511) bg1.x=511; if(bg2.x<-511) bg2.x=509; } // ------------------------------------------------------------------ // 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
Bg1 = new CDXSprite();
Bg2 = new CDXSprite();
Bg1->Create("bg1.png",0);
Bg2->Create("bg1.png",0);
return TRUE;
}

// ------------------------------------------------------------------
// cdx_DeInit - handles cleanup of CDX objects
// ------------------------------------------------------------------
void cdx_DeInit( void )
{
// TODO: Destroy your CDX objects here
fx.deinit();
mon.Mdeinit();
Miss.deinit();
fx.Fdeinit();
ship.deinit();
SAFEDELETE( Fps );
SAFEDELETE( Bg2 );
SAFEDELETE( Bg1 );
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
TextXY( Screen->GetBack(), 150, 20, 233, 227, 66, 255, "test");

//background
Bgmove();
Bg1->SetPos(bg1.x,bg1.y);
Bg2->SetPos(bg2.x,bg2.y);
Bg1->Draw(Screen->GetBack(),0,0,CDXBLT_TRANS);
Bg2->Draw(Screen->GetBack(),0,0,CDXBLT_TRANS);
//background

//rtype
ship.animateRE();
ship.animate();
ship.ctrl_movement();
ship.Scrblk();
ship.draw();
//rtype

//shoot
shoot.fire(ship.Rpos);
//shoot

//FX
fx.charge(ship.Rpos.x,ship.Rpos.y);
//FX

//monster
mon.wave1();
mon.boss();
//monster

//hitcheck
hit.crashwave1();
//hitcheck

//update
shoot.UpdateMis();
fx.UpdateMis();
mon.MUpdateMis();
mon.MRemoveMis();
fx.RemoveMis();
shoot.RemoveMis();
//update

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



ตอนยิน กระสุน แบบที่ 1


ตอนยิน กระสุน แบบที่ 2


บอสครับ

วันอาทิตย์ที่ 13 มิถุนายน พ.ศ. 2553

Cgm224 Game - pacman


Game pacman เกมส์เก่าที่ยังเก๋าอยู่ ถูกนำมาเป็นโจร์ท วิชา Cgm 224 วันแรกก็มีงานกันเลยทีเดียว
______________________________________________________________


**************ส่วนของโค๊ต ภาษา C++ มาเลยเชียว ประกาศตัวแปร ต่างๆ
______________________________________________________________


**************จองพื้นที่ใช้สอย
______________________________________________________________


**************ส่วนของลูกบอล
______________________________________________________________


*************การควบคุบปุ่มกดต่างๆ
______________________________________________________________


**************ควบคุบจำนวนลูกบอล เช็ดคะแนน แพ้ ชนะ
______________________________________________________________


**************หน้าตาพระเอกของเอก
______________________________________________________________


**************เสร็จแล้วครับ หน้าตาเกมส์ Pacman
______________________________________________________________