You are on page 1of 21

6 

 

Nӝi dung
A. Tәng quan................................ ................................ ................................ ................................ .. 1
B. Các yêu cҫu ................................ ................................ ................................ ............................... 1
1. Phҫn mӅm ................................ ................................ ................................ .............................. 1
2. KiӃn thӭc ................................ ................................ ................................ ............................... 2
C. Phҫn mӅm chơi ................................ ................................ ................................ .......................... 3
1. Cҩu trúc thư mөc ................................ ................................ ................................ .................... 3
2. Phím tҳt ................................ ................................ ................................ ................................ . 3
3. map.xml ................................ ................................ ................................ ................................ . 3
4. Replay ................................ ................................ ................................ ................................ ... 4
D. Pacman đҫu tiên ................................ ................................ ................................ ......................... 4
1. Ngôn ngӳ C#................................ ................................ ................................ .......................... 4
2. Ngôn ngӳ VB.NET ................................ ................................ ................................ ................ 8
E. API tham khҧo ................................ ................................ ................................ ......................... 12
1. KiӇu dӳ liӋu ................................ ................................ ................................ ......................... 12
2. Map ................................ ................................ ................................ ................................ ..... 13
3. Pacman ................................ ................................ ................................ ................................ 15
4. Ghost ................................ ................................ ................................ ................................ ... 16
5. Utils ................................ ................................ ................................ ................................ ..... 16
F. Các qui đӏnh................................ ................................ ................................ ............................. 17
G. Hӓi đáp ................................ ................................ ................................ ................................ .... 17
à  Ã    { 
g Tә q a 
R ӧt đuәi là mӝt tò chơi dà h cho các lұ tì h vi , mô phӓng game kinh đi n Pacman1 . Ý t ӣng
chính cӫa t ò chơi nà là thay vì dùng bàn phím đӇ di chuyӇn Pacman như ngưӡi dùng bình thưӡng,
các lұp t ình vi n có thӇ vi t mã đӇ tҥo ra Pacman thông minh, có khҧ năng ti u di t các Pacman khác,
tìm đưӡng ăn đưӧc nhi u điӇm và tránh gһp phҧi các Ghost trong mê cung.

Tài li u này mô tҧ các bưӟc chi ti t đӇ tҥo ra đưӧc mӝt Pacman như trên, tӯ các công cө và ki n thӭc
lұp trình, cho đӃn các ví dө mүu, cách sӱ dөng phҫn mӅm chơi cùng các API mà nó cung cҩp, kӇ cҧ
giҧi đáp mӝt sӕ thҳc mҳc thưӡng gһp.

Đӕi tưӧng đӑc tài li u này là:

- Các lұp trình viên chuyên và không chuyên, có kiӃn thӭc căn bҧn vӅ lұp trình, muӕn trҧi
nghi
m mӝt phҫn công vi
c lұp trình robot.
- Các đӝi thi ITICup 2010 muӕn biӃt cách lұp trình cho trò chơi Rưӧt đuәi đӇ cҥnh tranh vӟi
Pacman cӫa đӝi bҥn và Ghost cӫa BTC.

Trong quá trình xây dӵng phҫn mӅm chơi và viӃt tài li
u hưӟng dүn, chҳc chҳn BTC không thӇ quҧn

lý hӃt toàn bӝ các sai sót. Mӑi ý kiӃn đóng góp, đӅ xuҩt vӅ API, hay các yêu cҫu trӧ gi p vui lòng gӱi
vӅ đӏa chӍ email iticup2010@iticlub.org. BTC rҩt mong nhұn đưӧc phҧn hӗi mang tính chҩt xây dӵng
cho trò chơi.

¬ Các yê cҫ
 Phҫ mӅm
ĐӇ bҳt đҫu lұp trình Pacman, lұp trình viên cҫn 2 phҫn mӅm sau:

1. Visual Studio 2010 Express: Đây là chương trình soҥn thҧo mã nguӗn cho các ngôn ngӳ C
hoһc VB.NET. Phҫn mӅm IDE này hoàn toàn miӉn phí, và đã bao gӗm cҧ Microsoft .NET
Framework 4.

http://www.microsoft.com/express/downloads/ 2010-All

1
http://www.freepacman.org/pacman.swf

 
 
 

  
à  6 Ã  66 { 


2. 6 6: Đây l phҫn mӅm chơi  kiӇm thӱ các Pacman đưӧc l p trình  đӗng thӡi

l m thư viӋn cung cҩp các API đӇ lҩy thông tin vӅ bҧn đӗ  các Pacman khác v các Ghost.
http://iticlub.org

{ KiӃn t ӭ

ĐӇ chơi Rưӧt đuәi  l p trình viên cҫn có mӝt sӕ kiӃn thӭc căn bҧn vӅ 1 trong 2 ngôn ngӳ C# hoһc

VB.NET. Dưӟi đây l mӝt sӕ mөc quan trӑng cҫn phҧi nҳm:

- .NET Framework
- C# & VB.NET Language Fundamentals
- Classes & Objects
- Inheritance & Polymorphism

"    


 6 
  

  6 
à  6 Ã" 66 { 
- Operator Overloading
- Structs
- Interfaces
- Arrays  Indexers  Collections
- Strings & Regular Expressions
- Handling Exceptions
- Delegates & Events

à P nm m ơi

 Ã u trú t ư mө
  
- T p tin Pacman.exe: chương trình chơi  đӗng thӡi l thư viӋn cung cҩp API đӇ l p trình
Pacman.
 
- T p tin background: nh c nӅn cӫa tr chơi  đưӧc cҳt bӓ phҫn mӣ rӝng.

- map.xml: Dӳ liӋu vӅ bҧn đӗ v vӏ trí khӣi đӝng cӫa các Pacman.
 
- Thư mөc Pacmans: chӭa các thư viӋn dll l các Pacman đã đưӧc l p trình.

{ P ím tҳt

- Enter: khӣi đӝng tr chơi.
 
- Spacebar: t m d ng hoһc tiӃp tөc tr chơi.

- Esc: kӃt thúc tr chơi.
- F7: tҳt âm thanh.

- F8: b t âm thanh.

- PageUp: b t chӃ đӝ full screen.

- PageDown: b t chӃ đӝ window screen.

× m p ml
 
Đây l t p tin cҩu hình bҧn đӗ  có đӏnh d ng XML như sau:

<?xml version="1.0" encoding="utf-8" ?>


<map>
<width>Chi u r ng X c a b n đ </width>
<height>Chi u cao Y c a b n đ </height>

"    


 6 
  

  6 
à  Ã    { 
mm 
  mm m mmm  mmm 
  m
mm 
 
  mm m mmm  mmmm
  
 
  m
mm 

  mm m mmmm  m m 

  m
mm    m
mmmm !"#$%$!&'(m)mm* m  m m+m
m* m,, m
mm    m

- m

- NӃu thҿ P  


không đưӧc đӏnh nghĩa, mһc đӏnh ghost sӁ không bao giӡ xuҩt hi !n.
- NӃu thҿ MP  
không đưӧc đӏnh nghĩa, mһc đӏnh vұt magic sӁ không xuҩt hi "n ngүu
nhiên trong quá trình chơi.
- NӃu thҿ f   
không đưӧc đӏnh nghĩa, mһc đӏnh sӕ lưӧt di chuyӇn đӇ thoát khӓi
trҥng thái yӃu là chiӅu dài cӫa mê cung.

Nӝi dung cӫa X*Y ký tӵ có thӇ là các giá trӏ sau:

- w: tương ӭng vӟi ô có chӭa vұt cҧn.


- P: tương ӭng vӟi ô có chӭa điӇm.
- E: tương ӭng vӟi ô trӕng.
- M: Tương ӭng vӟi ô có chӭa vұt Magic.
- *: vӏ trí Pacman xuҩt hi #n.

¦ Re lay
ĐӇ lưu giӳ lҥi diӉn biӃn cӫa nhӳng trұn thi đҩu hay, đӗng thӡi hӛ trӧ lұp trình viên bүy lӛi, phҫn mӅm
cung cҩp chӭc năng replay, dùng đӇ xuҩt và nҥp dӳ li $u vӅ bҧn đӗ, đưӡng đi cӫa các Pacman và
Ghost.

¬  1: sau khi trұn đҩu kӃt thúc, lұp trình viên dùng tә hӧp phím Ctrl+% đӇ tҥo ra tұp tin replay dưӟi
&
dҥng XM .

¬  2: mӣ tұp tin replay (Open with) bҵng chương trình chơi hoһc kéo thҧ tұp tin này vào icon cӫa
chương trình chơi đӇ xem lҥi diӉn biӃn cӫa trұn thi đҩu.

Ô Pacma đҫ iê
 ô ӳ C#
'
¬  1: Mӣ Visual C 2010 Express. File z New Project. Chӑn Class Library. Đһt tên cho project là
MyPacman. Click OK.

 
 
 

 
à  6 Ã" 66 { 

(
¬ : Thêm tham chiӃu đӃn chương trình chơi bҵng cách click phҧi v o project MyPacman z Add
)
Reference. Sau đó tìm đӃn thư mөc phҫn mӅm chơi v chӑn Pacman.exe. Click OK.

)
TiӃp tөc tham chiӃu đӃn thư viӋn PresentationCore v click OK.

"    


 6 
  

  6 
à  6 Ã" 66 { 

*
¬  : Khai báo sӱ dөng thư viӋn cӫa chương trình chơi v thư viӋn PresentationCore bҵng cách
* +
thêm v o 2 d ng sau ӣ phҫn đҫu cӫa Class1.cs.

?  
 

 
?  
  


, ,
¬ 
Thêm chuӛi ³ €  / phía sau ³? 
-  / đӇ kӃ th a t lӟp Pacman do
-
chương trình chơi cung cҩp. Sau đó trӓ chuӝt v o chӳ Pacman v chӑn u   . / 0.1  1 
 .

2 2
¬  : ChӍ đӏnh thuӝc tính m u sҳc cho Pacman 3 ví dө chӑn m u hӗng.

? 

 


 
?  


¬  : ChӍ đӏnh thuӝc tính tên cho Pacman 4 ví dө chӑn ³My Pacman/.

"    


 6 
  

  6 
à  Ã    { 
a  
 m56 m
m
 mm  m 75 m m
m

¬  7: Lұp trình cho Pacman di chuyӇn.

a   m 8  m


m
!!m"#m  m m mamm$% m
!!m m m am $& m $ m  m m m'(m!m 9 m"m:$
m ;$!m
!!m')m*  m'+ $m$,- m'm am $#m
<
!!m  mam "m$% m' m  m
$ m $.m  m m$/m % m#m
m
mmmmm
!!m m ,-m'0m 9 m'1 m m
!!m$m ;$ m $)m m$ ) m $m$,- m'2'm ,-m'0m &m am& m m
!!m $3m
'm ( $m ! m')m 3mm$,- m'm-#m
)m $
#*  m44m*  +a# m55m
mmmmmmmmmmmmmmmm6 $
#, - $
#*  m
mmmmmmmmm
!!m78m &am$9am 8 m m!m$,- m'm0m $)'m',9m
!!m m+m (m$. m %m"m$ ) m $" $m8 m /m  $m
!$m
m 
m4ma#- * 
 $
#7  #+7
m
m
!!m m0m $0 m$,- m'm $3, m  m ;$ m'm $m',. m ,9m%m
!!m1 m!$m:0m2m$,- m'm ,9m%mm ;$2m  $m
!$#m
)m 
#, m;m =m
mmmmmmmmmmmmmmmm 
#34 
#- 5aa
 *   $
#*  m
m
!!m m0( m $8 m m$,- m'm $3m$< m$,- m'm 6 m $ #m
)m 
#, m;m=m
$
#*  m4m 
74 
#- 3  
#, 8m
!!m m ;$ m0m$,- m'm "m ;$!m $3m*  m'+ $m'1 m #m

m
$
#*  m4m*  +a# m
mmmmmmmm m
mmmm m
>$m  m
m

¬  8: Sao lưu lҥi project bҵng File z Save All. Biên dӏch project thành thư vi?n dll bҵng cách click
phҧi vào project MyPacman z Build. Copy MyPacman.dll trong thư mөc bin (nơi sao lưu project) vào
thư mөc Pacmans cӫa phҫn mӅm chơi.

 
 
 

  
à  6 Ã" 66 { 

A B
¬ : Ch@ y chương trình chơi v mӑi chuyӋn nên di n ra suôn sҿ.

{ Ng n ng VB NE
¬ : Mӣ Visual Basic 2010 Express. File z New Project. Chӑn Class Library. Đһt tên cho project
C
l MyPacman. Click OK.

"    


 6 
  

  6  
à  6 Ã" 66 { 

D
¬ : Thêm tham chiӃu đӃn chương trình chơi bҵng cách click phҧi v o project MyPacman z Add
E
Reference. Sau đó tìm đӃn thư mөc phҫn mӅm chơi v chӑn Pacman.exe. Click OK.

"    


 6 
  

  6 

à  6 Ã" 66 { 
F
TiӃp tөc tham chiӃu đӃn thư viӋn PresentationCore v click OK.

G
¬  : Khai báo sӱ dөng thư viӋn cӫa chương trình chơi v thư viӋn PresentationCore bҵng cách
G H
thêm v o 2 d ng sau ӣ phҫn đҫu cӫa Class1.vb.

u 
 


u 
  


I J K K
¬ 
Thêm chuӛi ³u
  / bên dưӟi d ng ³?   / đӇ kӃ th a t lӟp
L
Pacman do chương trình chơi cung cҩp. Sau đó nhҩn Enter đӇ tӵ đӝng phát sinh các h m cҫn thiӃt.

M M
¬  : ChӍ đӏnh thuӝc tính m u sҳc cho Pacman N ví dө chӑn m u hӗng.

? >

@
>
    
  
 


@
? 



 

"    


 6 
  

  6 !
à  Ã    { 
¬  6: ChӍ đӏnh thuӝc tính tên cho Pacman, ví dө chӑn ³My Pacman´.

6 5 
3 5 6a mmA
9  m
- m
3  m6 m
B - m
B 6a m

¬  7: Lұp trình cho Pacman di chuyӇn.

6 5 
9 m9  m
Cm"#m  m m mamm$% m
Cm m m am $& m $ m  m m m'(m!m6 m"m-$
m O$!m
Cm')m*  m'+ $m$,- m'm am $#m
P
Cm  mam "m$% m' m  m
$ m $.m  m m$/m % m#m
*m
Cm m ,-m'0m6 m'1 m m
Cm$m O$ m $)m m$ ) m $m$,- m'2m'm ,-m'0m &m am& m m
Cm $3m
'm ( $m ! m')m 3mm$,- m'm-#m
D)#*  m4m*  +a# m5B
mEm
 #, -#*  m+$ m
Cm78m &am$9am 8 m m!m$,- m'm0m $)m'm',9m
Cm m+m (m$. m %m"m$ ) m $" $m8 m /m  $m
!$m
*m 
m4ma#- * 
#7  #+7
m
m
Cm m0m $0 m$,- m'm $3m, m  m O$ m'm $m',. m ,9m%m
Cm1 m!$m:0m2m$,- m'm ,9m%mm O$2m  $m
!$#m
D)m 
#, m;m Qm+$ m
mmmmmmmmmmmmmmmm 
#34 
#- 5aa
 *  #*  m
B D)m
m
Cm m0m( m $8 m m$,- m'm $3m$< m$,- m'm 6 m $ #m
D)m 
#, m;m=m+$ m
#*  m4m 
4 
#- 3  
#, m
B
m
Cm m O$ m0m$,- m'm "m O$!m $3m*  m'+ $m'1 m #m
#*  m4m*  +a# m
B D)m
B D)m
7am
B 9 m

¬  8: Sao lưu lҥi project bҵng File z Save All. Biên dӏch project thành thư viRn dll bҵng cách click
phҧi vào project MyPacman z Build. Copy MyPacman.dll trong thư mөc bin (nơi sao lưu project) vào
thư mөc Pacmans cӫa phҫn mӅm chơi.

 
 
 

  
à  6 Ã" 66 { 

T U
¬ : ChS y chương trình chơi v mӑi chuyӋn nên di n ra suôn sҿ.

E API t m k ҧo
Các API dưӟi đây đӅu đưӧc cung cҩp dưӟi namespace 0 VW   
  .

 KiӇu d liӋu
X Y [ [
Bҧn đӗ cӫa mê cung đưӧc mô hình hóa th nh mӝt ma tr n kích thưӟc   Z  x    . Các
\ ] ^ _ ] ^
ô trong ma tr n có tӑa đӝ d ng v cӝt đưӧc đánh sӕ bҳt đҫu t 0 ` do đó d ng cuӕi cùng có sӕ thӭ tӵ l
^ ^
Map.Height ± 1 ` v cӝt cuӕi cùng có sӕ thӭ tӵ l Map.Width ± 1.
\ ^ \
Mӛi ô cӫa ma tr n có giá trӏ thuӝc kiӇu  ` mô tҧ ô n y đang chӭa v t gì:
a
-   : ô n y đang trӕng.
b
-   : ô đang có chӭa điӇm. Khi di chuyӇn đӃn ô n yc Pacman đưӧc cӝng thêm
b
điӇm v ô chuyӇn sang giá trӏ   .

"    


 6 
  

  6 
à  Ã    { 
-  def P : ô đang có chӭa vұt Magic. Khi di chuyӇn đӃn ô này, Pacman biӃn tҩt các các
Pacman và Ghost khác sang trҥng thái yӃu, gây ra hi gu ӭng dӉ bӏ tәn thương và giҧm ½ tӕc
đӝ. Khi này ô chuyӇn sang giá trӏ def M.
-  h : ô có chӭa vұt cҧn, Pacman và Ghost không thӇ di chuyӇn đӃn đây.

Tҥi ô (i, j), Pacman và Ghost có thӇ di chuyӇn theo 4 hưӟng kӃ cұn hoһc đӭng yên. Hưӟng đi đưӧc mô
tҧ bҵng mӝt giá trӏ thuӝc kiӇu Ô   
 như sau:

- Ô   
  : di chuyӇn theo hưӟng Bҳc, đӃn ô có tӑa đӝ (i ± 1, j) nӃu i > 0, ngưӧc lҥi
đӃn ô có tӑa đӝ ( P  ± 1, j).
- Ô   
 : di chuyӇn theo hưӟng Đông, đӃn ô có tӑa đӝ (i, j + 1) nӃu j + 1
<  , ngưӧc lҥi đӃn ô có tӑa đӝ (i, 0).
- Ô   
  : di chuyӇn theo hưӟng Nam, đӃn ô có tӑa đӝ (i + 1, j) nӃu i + 1
< P , ngưӧc lҥi đӃn ô có tӑa đӝ (0, j).
- Ô   
  : di chuyӇn theo hưӟng Tây, đӃn ô có tӑa đӝ (i, j ± 1) nӃu j > 0, ngưӧc lҥi
đӃn ô có tӑa đӝ (i,   - 1).
- Ô   
 
: không di chuyӇn, giӳ nguyên tӑa đӝ (i, j).

Thay vì mô tҧ tӑa đӝ bҵng mӝt cһp giá trӏ sӕ nguyên (dòng, cӝt) như trên, lұp trình viên có thӇ sӱ
dөng kiӇu dӳ li iu 
 đưӧc xây dӵng sҹn như sau:

- 
  : hoành đӝ cӫa tӑa đӝ, tương đương vӟi sӕ thӭ tӵ cӝt, có giá trӏ thuӝc kiӇu u
.
- 
 
: tung đӝ cӫa tӑa đӝ, tương đương vӟi sӕ thӭ tӵ dòng, có giá trӏ thuӝc kiӇu u
.
- 
  : giá trӏ lӟn nhҩt đưӧc cho phép cӫa mӝt tӑa đӝ, thuӝc kiӇu 
 .
- 
 
 : giá trӏ nhӓ nhҩt đưӧc cho phép cӫa mӝt tӑa đӝ, thuӝc kiӇu 
 ,
tҩt nhiên trong trò chơi này đó là (0, 0).
- 
 
 u
  u
 : cӝng vào hoành đӝ giá trӏ  và cӝng vào tung đӝ giá
trӏ  đӇ tҥo nên mӝt tӑa đӝ mӟi.
- Các phép so sánh bҵng (=) và so sánh khác () giӳa 2 giá trӏ thuӝc kiӇu 
 .
- 
 
P : tҥo mӝt chuӛi mô tҧ tӑa đӝ theo dҥng ¥.
- 
   
P : tҥo mӝt đӕi tưӧng tӑa đӝ tӯ mӝt chuӛi mô tҧ s có dҥng ¥.

{ Ma
Cung cҩp các hàm ti jn ích đӇ làm vi jc vӟi bҧn đӗ. Đây là nhӳng hàm static có thӇ gӑi trӵc tiӃp tӯ lӟp
Map.

6rototype Mô tҧ
ÿ  
Nhұn các mӋnh lӋnh cӫa ngưӡi dùng tӯ bàn phím.
Giá trӏ trҧ vӅ thuӝc kiӇu
 M
fu
 . Lưu ý: thuӝc tính này
chӍ đưӧc dùng đӇ hӛ trӧ kiӇm thӱ trong giai đoҥn
lұp trình, đӇ sӱ dөng cҫn tham chiӃu đӃn thư viӋn
windows Base.
ÿ     Lҩy mô tҧ cӫa ô trong mê cung có tӑa đӝ . Giá
trӏ trҧ vӅ thuӝc kiӇu  .
ÿ     Lҩy mô tҧ cӫa ô trong mê cung nҵm theo hưӟng
  
    cҥnh bên ô có tӑa đӝ . Giá trӏ trҧ vӅ thuӝc
kiӇu  .
ÿ         Lҩy mô tҧ cӫa ô trong mê cung tҥi dòng , cӝt .
Giá trӏ trҧ vӅ thuӝc kiӇu  .

 
 
 

  "
à  Ã    { 
ÿ         Lҩy mô tҧ cӫa ô trong mê cung nҵm theo hưӟng
  
    cҥnh bên ô tҥi dòng , cӝt . Giá trӏ trҧ vӅ thuӝc
kiӇu  .
ÿ       Lҩy đӕi tưӧng Ghost theo sӕ thӭ tӵ index (đưӧc
đánh sӕ bҳt đҫu tӯ *). Giá trӏ trҧ vӅ thuӝc kiӇu
, hoһc trҧ vӅ
 nӃu Ghost này không còn
tӗn tҥi.
ÿ    Lҩy mҧng toàn bӝ các Ghost có trong mê cung.
Giá trӏ trҧ vӅ thuӝc kiӇu .
ÿ     Lҩy mҧng các Ghost hiӋn đang nҵm tҥi tӑa đӝ 
trên mê cung. Giá trӏ trҧ vӅ thuӝc kiӇu .
ÿ         Lҩy mҧng các Ghost hiӋn đang nҵm tҥi dòng , cӝt
 trên mê cung. Giá trӏ trҧ vӅ thuӝc kiӇu .
ÿ     Lҩy tӑa đӝ ô trên mê cung nҵm theo hưӟng  
  
  cҥnh bên ô có tӑa đӝ . Giá trӏ trҧ vӅ thuӝc kiӇu

 .
ÿ         Lҩy tӑa đӝ ô trên mê cung nҵm theo hưӟng  
  
  cҥnh bên ô tҥi dòng , cӝt . Giá trӏ trҧ vӅ thuӝc
kiӇu 
 .
ÿ  ÿ  Lҩy mô tҧ tình trҥng hiӋn thӡi cӫa mê cung. Giá trӏ
trҧ vӅ thuӝc kiӇu  .
ÿ  ÿ     Lҩy tұp hӧp các hưӟng đi có thӇ di chuyӇn đưӧc
  xung quanh ô có tӑa đӝ . Giá trӏ trҧ vӅ thuӝc
kiӇu u
M  k Ô   
 .
ÿ  ÿ       Lҩy tұp hӧp các hưӟng đi có thӇ di chuyӇn đưӧc
   xung quanh ô tҥi dòng , cӝt . Giá trӏ trҧ vӅ thuӝc
kiӇu u
M  l Ô   
 .
ÿ  ÿ    Lҩy tұp hӧp các tӑa đӝ có thӇ di chuyӇn đưӧc xung
  quanh ô có tӑa đӝ . Giá trӏ trҧ vӅ thuӝc kiӇu
u
M  m  
 .
ÿ  ÿ      Lҩy tұp hӧp các tӑa đӝ có thӇ di chuyӇn đưӧc xung
   quanh ô tҥi dòng , cӝt . Giá trӏ trҧ vӅ thuӝc kiӇu
u
M  n  
 .
ÿ  !      Lҩy đӕi tưӧng Pacman theo sӕ thӭ tӵ index (đưӧc
đánh sӕ bҳt đҫu tӯ *). Giá trӏ trҧ vӅ thuӝc kiӇu
 M
, hoһc trҧ vӅ
 nӃu Pacman này không
còn tӗn tҥi.
ÿ  !   Lҩy mҧng toàn bӝ các Pacman có trong mê cung.
Giá trӏ trҧ vӅ thuӝc kiӇu  M
.
ÿ  !    Lҩy Pacman hiӋn đang nҵm tҥi tӑa đӝ  trên mê
cung. Giá trӏ trҧ vӅ thuӝc kiӇu  M
. NӃu không
có Pacman nào thì trҧ vӅ
.
ÿ  !        Lҩy Pacman hiӋn đang nҵm tҥi dòng , cӝt  trên
mê cung. Giá trӏ trҧ vӅ thuӝc kiӇu  M
. NӃu
không có Pacman nào thì trҧ vӅ
.
ÿ   "  Lҩy sӕ lưӧt di chuyӇn mà cӭ sau sӕ lưӧt này, mӝt
Ghost mӟi sӁ đưӧc sinh ra. Giá trӏ trҧ vӅ thuӝc
kiӇu u
. Lưu ý: do mӛi lưӧt di chuyӇn cách
nhau 0.2 giây nên  Ô 
  chính là
khoҧng thӡi gian tính theo giây giӳa các lҫn xuҩt
hiӋn cӫa Ghost.
ÿ # $ Lҩy chiӅu cao cӫa mê cung. Giá trӏ trҧ vӅ thuӝc
kiӇu u
.

 
 
 

  
à  Ã    { 
ÿ %   "  Lҩy sӕ lưӧt di chuyӇn tiӃp theo mà mӝt Ghost mӟi
sӁ xuҩt hiӋn. Giá trӏ trҧ vӅ thuӝc kiӇu u
.
ÿ %     Lҩy tӑa đӝ tiӃp theo mà mӝt Ghost mӟi sӁ xuҩt
hiӋn. Giá trӏ trҧ vӅ thuӝc kiӇu 
 .
ÿ %  ÿ $"  Lҩy sӕ lưӧt di chuyӇn tiӃp theo mà mӝt vұt magic
mӟi sӁ xuҩt hiӋn. Giá trӏ trҧ vӅ thuӝc kiӇu u
.
ÿ %   Lҩy sӕ lưӧng Ghost hiӋn tҥi có trong mê cung. Giá
trӏ trҧ vӅ thuӝc kiӇu u
. Lưu ý: sӕ thӭ tӵ cӫa các
Ghost đưӧc đánh sӕ tӯ * đӃn    .
ÿ %ÿ $ Lҩy sӕ lưӧng ô chӭa vұt Magic còn trong mê cung.
Giá trӏ trҧ vӅ thuӝc kiӇu u
.
ÿ %!   Lҩy sӕ lưӧng Pacman hiӋn tҥi có trong mê cung.
Giá trӏ trҧ vӅ thuӝc kiӇu u
. Lưu ý: sӕ thӭ tӵ cӫa
các Pacman đưӧc đánh sӕ tӯ * đӃn   M
 
.
ÿ %!  Lҩy sӕ lưӧng ô chӭa điӇm còn trong mê cung. Giá
trӏ trҧ vӅ thuӝc kiӇu u
.
ÿ " Lҩy sӕ lưӧt di chuyӇn đã trҧi qua kӇ tӯ khi trò chơi
bҳt đҫu. Giá trӏ trҧ vӅ thuӝc kiӇu u
.
ÿ & '"  Lҩy sӕ lưӧt di chuyӇn mà Pacman hay Ghost phҧi
trҧi qua đӇ trӣ lҥi trҥng thái bình thưӡng kӇ tӯ khi
rơi vào trҥng thái yӃu do tác dөng cӫa vұt Magic.
Giá trӏ trҧ vӅ thuӝc kiӇu u
. Mһc đӏnh, giá trӏ
này là đӝ dài cҥnh lӟn nhҩt cӫa mê cung.
ÿ &  Lҩy chiӅu rӝng cӫa mê cung. Giá trӏ trҧ vӅ thuӝc
kiӇu u
.

× Pacma
Cung cҩp các hàm tiӋn ích đӇ làm viӋc vӟi Pacman. Đây là nhӳng hàm gҳn vӟi mӝt đӕi tưӧng Pacman
P cө thӇ.

6rototype Mô tҧ
!   ( !     KiӇm tra Pacman P có khҧ năng ăn đưӧc Pacman
M
hay không.
!   (   $ KiӇm tra Pacman P có khҧ năng ăn đưӧc Ghost
P  hay không.
!      
  KiӇm tra Pacman P có thӇ đi tiӃp theo hưӟng  
hay không.
!   Lҩy màu sҳc cӫa Pacman P, trҧ vӅ giá trӏ màu
thuӝc kiӇu  M
f   .
!     Gán hoһc lҩy hưӟng đi hiӋn tҥi cӫa Pacman P, trҧ
vӅ giá trӏ hưӟng đi thuӝc kiӇu Ô   
 . Lưu
ý: Pacman P không thӇ gán hưӟng đi cho Pacman
khác hoһc ngưӧc lҥi.
!  (    Lҩy sӕ lưӧng Ghost mà Pacman P đã ăn đưӧc kӇ
tӯ lúc bҳt đҫu trò chơi. Giá trӏ trҧ vӅ thuӝc kiӇu
u
.
!    Lҩy sӕ thӭ tӵ chӍ mөc cӫa Pacman P trong danh
sách các Pacman có mһt ӣ mê cung. Giá trӏ trҧ vӅ
thuӝc kiӇu u
. Lưu ý: nӃu Pacman đã bӏ tiêu
diӋt thì trҧ vӅ .

 
 
 

  #
à  Ã    { 
!    KiӇm tra Pacman P đã bӏ tiêu diӋt hay chưa.
!    Lҩy tӑa đӝ hiӋn thӡi cӫa Pacman P trên mê cung,
trҧ vӅ giá trӏ tӑa đӝ thuӝc kiӇu 
 .
!  %  Trҧ vӅ tên cӫa Pacman P dưӟi dҥng chuӛi.
!  %   !  Trҧ vӅ sӕ điӇm sӁ đưӧc cӝng thêm nӃu Pacman P
tiӃp tөc ăn đưӧc mӝt Ghost nӳa.
!  !  Lҩy sӕ điӇm mà Pacman P đã ghi đưӧc tӯ khi bҳt
đҫu trò chơi. Sӕ điӇm này là sӕ nguyên dương kiӇu
u
.
!  )   Hàm khӣi đӝng cӫa Pacman P đưӧc gӑi bӣi
chương trình chơi khi trò chơi bҳt đҫu.
!  & ' Lҩy trҥng thái hiӋn tҥi cӫa Pacman P. NӃu P đang
bình thưӡng, trҧ vӅ giá trӏ 0. NӃu P đang ӣ trҥng
thái yӃu, trҧ vӅ sӕ nguyên dương kiӇu u
 biӇu
diӉn sӕ lưӧt di chuyӇn mà P cҫn phҧi trҧi qua đӇ
trӣ lҥi trҥng thái bình thưӡng.

¦ Gh s
Cung cҩp các hàm tiӋn ích đӇ làm viӋc vӟi Ghost. Đây là nhӳng hàm gҳn vӟi mӝt đӕi tưӧng Ghost G
cө thӇ.

6rototype Mô tҧ
  ( !     KiӇm tra Ghost G có khҧ năng ăn đưӧc Pacman
M
hay không.
     
  KiӇm tra Ghost G có thӇ đi tiӃp theo hưӟng   hay
không.
    Lҩy hưӟng đi hiӋn tҥi cӫa Ghost G, trҧ vӅ giá trӏ
hưӟng đi thuӝc kiӇu Ô   
 .
   Lҩy sӕ thӭ tӵ chӍ mөc cӫa Ghost G trong danh
sách các Ghost có mһt ӣ mê cung. Giá trӏ trҧ vӅ
thuӝc kiӇu u
. Lưu ý: nӃu Ghost đã bӏ tiêu diӋt
thì trҧ vӅ .
   KiӇm tra Ghost G đã bӏ tiêu diӋt hay chưa.
   Lҩy tӑa đӝ hiӋn thӡi cӫa Ghost G trên mê cung, trҧ
vӅ giá trӏ tӑa đӝ thuӝc kiӇu 
 .
 & ' Lҩy trҥng thái hiӋn tҥi cӫa Ghost G. NӃu G đang
bình thưӡng, trҧ vӅ giá trӏ 0. NӃu G đang ӣ trҥng
thái yӃu, trҧ vӅ sӕ nguyên dương kiӇu u
 biӇu
diӉn sӕ lưӧt di chuyӇn mà G cҫn phҧi trҧi qua đӇ
trӣ lҥi trҥng thái bình thưӡng.

 U ils
Cung cҩp mӝt sӕ hàm tiӋn ích hӛ trӧ cho công viӋc lұp trình. Đây là nhӳng hàm static có thӇ gӑi trӵc
tiӃp tӯ lӟp Utils.

6rototype Mô tҧ
r *+
,- 
   "  Gán â làm giá trӏ cӫa tҩt cҧ các phҫn tӱ thuӝc
mҧng mӝt chiӅu .
r *+
,- 
   "  Gán â làm giá trӏ cӫa tҩt cҧ các phҫn tӱ thuӝc
mҧng 2 chiӅu .

 
 
 

  $
à  Ã    { 
r  ) $  Lҩy giá trӏ màu tӯ mӝt chuӛi mô tҧ. Giá trӏ trҧ vӅ
thuӝc kiӇu  M
f   .
r  .    Trҧ vӅ hưӟng đi ngưӧc lҥi vӟi hưӟng đi   đưӧc
  
  cung cҩp. Ví dө, nӃu   là Ô   
 
thì hàm trҧ vӅ Ô   
  .
r  /  Trҧ vӅ mӝt sӕ nguyên dương kiӇu u
 có giá trӏ
ngүu nhiên.
r  /    0 "  Trҧ vӅ mӝt sӕ nguyên dương kiӇu u
 có giá trӏ
ngүu nhiên nhӓ hơn M .
r  /   0 "  Trҧ vӅ mӝt sӕ nguyên kiӇu u
 có giá trӏ ngүu
   0 "  nhiên trong khoҧng M
 và M .
r  / "   Trҧ vӅ mӝt sӕ thӵc có giá trӏ ngүu nhiên trong
khoҧng tӯ 0 đӃn 1.
r ) / 1
1
,- "22  Gán các giá trӏ sӕ nguyên kiӇu ¬ ngүu nhiên
vào tӯng vӏ trí cӫa mҧng  .
r )"22 ("   34   Trҧ vӅ mӝt hӧp gӗm các phҫn tӱ đã đưӧc xáo trӝn
ngүu nhiên tӯ tұp hӧp  .

‰ Các q i đӏ h
1. Không đưӧc sӱ dөng Thread hoһc Parallel Task Library. Mӛi Pacman chӍ đưӧc chҥy trên
thread do chương trình chơi cung cҩp nhҵm bҧo đҧm công bҵng vӅ viӋc tiêu thө CPU.
2. Không đưӧc gӑi hàm  M
 . Đây là hàm khӣi đӝng Pacman và chӍ chương trình
chơi mӟi đưӧc phép gӑi khi trò chơi bҳt đҫu.
3. Không đưӧc sӱ dөng con trӓ đӇ bҧo đҧm an toàn vӅ mһt tài nguyên vùng nhӟ.
4. Không đưӧc chӑn màu cӫa Pacman là ¬ , ¬ hay   vì sӁ làm rӕi mҳt khán giҧ do
bҧn đӗ cӫa chương trình chơi cũng đưӧc xây dӵng tӯ 3 màu này.
5. Không đưӧc thӵc hiӋn bҩt kǤ xӱ lý nào trong thuӝc tính  và M cӫa Pacman đӇ bҧo
đҧm đӝ phӭc tҥp cӫa 2 thuӝc tính này luôn là O(1).
6. Không đưӧc viӃt thêm hàm khӣi tҥo cho Pacman.
7. Không đưӧc sӱ dөng các hàm input/output gây gián đoҥn trò chơi, ví dө như InputBox,
MessageBox, v.v«
8. Không đưӧc gӑi các chương trình, các thư viӋn khác ngoài viӋc sӱ dөng API do chương trình
chơi và .NET Framework cung cҩp, điӇn hình là dùng thư viӋn cӫa windows như user32.dll,
hay command line cmd.exe.
9. Không đưӧc sӱ dөng nhӳng kӻ thuұt gây ҧnh hưӣng xҩu đӃn hӋ thӕng máy tính và thuұt toán
cӫa các Pacman khác, điӇn hình là lұp trình đӋ qui, chiӃm dөng bӝ nhӟ, hoһc khóa các tài
nguyên sӱ dөng chung.
10.Ӣ mӛi lưӧt di chuyӇn, chương trình chơi thӵc hiӋn nhӳng công viӋc sau đây:
a. Giҧm trҥng thái weak cӫa Pacman và Ghost 1 đơn vӏ.
b. Trao quyӅn di chuyӇn luân phiên tӯ Pacman đҫu tiên đӃn Pacman cuӕi cùng, sau đó
đӃn lưӧt các Ghost. NӃu Pacman hay Ghost ӣ vào trҥng thái yӃu thì sӁ mҩt lưӧt di
chuyӇn tҥi các thӡi điӇm  M
  hay   là sӕ lҿ.
c. Sinh thêm Ghost mӟi và vұt magic mӟi nӃu đúng thӡi điӇm qui đӏnh.

G Hӓi đá
1. Trong thi đҩu thì tôi  n phҧi thӵ hiӋn ҧ 7 b  nh ví dө mүu hay không?

 
 
 

  
à  Ã    { 
Không. BTC sӁ thӵc hiӋn các bưӟc tӯ 1 đӃn 4 và chuҭn bӏ sҹn máy tính cho viӋc lұp trình. Trong thӡi
gian thi đҩu, lұp trình viên thӵc hiӋn tiӃp tөc tӯ bưӟc 5 đӃn 7. Sau khi hoàn thành xong phҫn chơi,
BTC tiӃp tөc thӵc hiӋn bưӟc 8 và 9.

2. ĐiӅu gì sӁ xҧy ra nӃu tôi i đһt hm Start() không phҧi l mӝt vòng lһp vô hҥn?

Lұp trình viên đưӧc phép thӵc hiӋn điӅu này. Tuy nhiên, do đһc tính cӫa chương trình chơi, khi hàm
  kӃt thúc đӗng nghĩa vӟi viӋc báo hiӋu Pacman sӁ không còn có khҧ năng cұp nhұt hưӟng đi
nӳa. KӇ tӯ lúc này cho đӃn khi trò chơi chҩm dӭt, Pacman sӁ chӍ đi theo mӝt hưӟng ± đó chính là
hưӟng đi cuӕi cùng mà nó cұp nhұt vào thuӝc tính Ô   
.

×. Tôi  thӇ mang theo bn phím v huӝt riêng đӇ thuұn tiӋn trong thao tá hay không?

Hoàn toàn có thӇ, BTC khuyӃn khích điӅu này đӇ bҧo đҧm chҩt lưӧng cӫa viӋc lұp trình. Lưu ý rҵng
chuӝt và bàn phím nên có cәng USB.

¦. Tôi  quyӅn mang theo ti liӋu trong lú lұp trình không?

Không. KӇ cҧ ӣ ví trí lұp trình và vӏ trí chӡ đӅu không đưӧc phép sӱ dөng tài liӋu dưӟi bҩt kǤ hình
thӭc nào. BTC sӁ cung cҩp sҹn giҩy thi và viӃt cho viӋc thҧo luұn, ghi chú. Giҩy thi tҥi vӏ trí chӡ
không đưӧc mang lên vӏ trí lұp trình và ngưӧc lҥi.

. ¬ҧn đӗ thi đҩu sӁ thay đәi nh thӃ no qua tӯng trұn đҩu?

Cuӝc thi sӁ có 3 bҧn đӗ dành cho vòng loҥi, bán kӃt và chung kӃt. Lұp trình viên đưӧc quyӅn biӃt
trưӟc bҧn đӗ đӇ chuҭn bӏ trong vòng mӝt tuҫn trưӟc ngày thi.

6. Thuұt toán điӅu khiӇn Ghost a ¬TC thay đәi thӃ no qua tӯng trұn đҩu?

Mӛi trұn đҩu BTC có quyӅn thay đәi mӝt thuұt toán khác nhau, không nhҩt thiӃt phҧi giӕng vӟi
chương trình chơi đưӧc cung cҩp vӟi mөc đích làm quen. BTC cũng không thông báo gì trưӟc vӅ mӭc
đӝ thông minh cӫa các Ghost.

7. Trong tr ng hӧp tên v mu a á 6aman trùng nhau thì xӱ lý nh thӃ no?

BTC sӁ ưu tiên đӝi thi có điӇm sӕ thҩp hơn. Các đӝi còn lҥi buӝc phҧi thay đәi tên hoһc chӑn mӝt màu
khác cho Pacman cӫa mình.

8. «m thӃ no tôi  thӇ debug th viӋn 6aman?

ĐӇ chҥy Pacman, nӃu lұp trình viên phҧi copy thư viӋn dll và chҥy chương trình chơi mӝt cách thӫ
công thì khá bҩt tiӋn trong lúc lұp trình. Hưӟng dүn sau đây mô tҧ cách thӭc thiӃt lұp chӃ đӝ debug đӇ
thuұn tiӋn cho viӋc dò lӛi. Trưӟc khi thi đҩu, tҩt cҧ máy tính cũng sӁ đưӧc BTC cҩu hình sҹn như bên
dưӟi.

Bưӟc 1: Do phiên bҧn Visual Studio 2010 Express không hӛ trӧ nhiӅu thiӃt đһt Start Options nên lұp
o
trình viên cҫn làm thӫ công như sau. Mӣ tұp tin project *.csproj (C ) hoһc *.vbproj (VB.NET) bҵng
notepad, thêm nӝi dung!  
và  PM vào bên dưӟi thҿ     
  
"#
 
P 
$  M""Ô P$!
 #:

!  
 PM!  

 PM
P%

 
P&
    M
   PM

 
 
 

  %
à  Ã    { 
"gôn ngӳ C#
p
Bưӟc 2: Trong Visual C 2010 Express, click phҧi vào project và chӑn Properties.

Bưӟc 3: Trong tab Build, mөc Output, chӑn Output Path là thư mөc Pacmans cӫa phҫn mӅm chơi.

"gôn ngӳ V¬."ET

Bưӟc 2: Trong Visual Basic 2010 Express, click phҧi vào project và chӑn Properties.

Bưӟc 3: Trong tab Compile, chӑn Build output path là thư mөc Pacmans cӫa phҫn mӅm chơi.

Cҧ 2 ngôn ngӳ

Bưӟc 4: Trong tab Debug, mөc Start Options, chӑn working directory là thư mөc gӕc cӫa phҫn mӅm
chơi.

Bưӟc 5: Sao lưu lҥi project, đһt breakpoint tҥi các vӏ trí cҫn thiӃt và nhҩn F5 đӇ bҳt đҫu debug.

9. Tҥi sao trong th mө Output a projet tôi lҥi thҩy  ҧ tұp tin 6aman.exe?

Chương trình chơi Pacman.exe đưӧc project tham chiӃu đӃn trong lúc lұp trình, do đó mһc đӏnh nó sӁ
đưӧc copy vào thư mөc Output. Sӵ xuҩt hiӋn cӫa nó, có hay không có, cũng không gây ҧnh hưӣng gì
đӃn hoҥt đӝng cӫa thư viӋn dll trong lúc thi đҩu. Tuy nhiên, nӃu cҧm thҩy bҩt tiӋn, lұp trình viên có
thӇ tùy chӍnh như sau đӇ ngăn viӋc tӵ đӝng copy này: click vào References\Pacman ӣ Solution
Explorer, gán thuӝc tính Copy Local ӣ Properties window là False.

10. «m thӃ no đӇ ngăn hһn á 6aman khá gӑi hm 6    a tôi?

BTC đã có luұt cҩm gӑi hàm  M


 . Pacman vi phҥm luұt này bӏ loҥi khӓi cuӝc chơi. NӃu
lұp trình viên vүn chưa an tâm, có thӇ sӱ dөng cách thӭc sau đӇ ngăn cҧn:

- Đӏnh nghĩa mӝt biӃn  kiӇu ¬ 


và gán giá trӏ khӣi tҥo là ' .
- Trong hàm  , nӃu  là ' thì gán  bҵng  và chҥy thuұt toán, ngưӧc lҥi
thoát khӓi hàm.

Phương cách trên không hoàn toàn giҧi quyӃt đưӧc vҩn đӅ, tuy nhiên nó góp phҫn hҥn chӃ mӝt sӕ rӫi
ro có thӇ xҧy ra.

11. 6aman a tôi gây ra lӛi trong lú thӵ thi, lm sao đӇ tôi xem hi tiӃt nӝi dung a lӛi?

Khi Pacman bӏ hӫy vì gây ra lӛi, nӝi dung lӛi sӁ nҵm ҭn bên dưӟi khu vӵc điӇm sӕ cӫa Pacman. ĐӇ
thҩy đưӧc nӝi dung này, lұp trình viên trӓ chuӝt vào gҫn điӇm sӕ, chú thích (tooltip) vӅ lӛi sӁ hiӋn ra.

12. Ch ng trình hi b ӏ rash trong lú hҥy vì th viӋn WI"MM.dll?

ĐӇ khҳc phөc lӛi này, có 2 phương án:

- Downgrade vӅ windows XP hoһc upgrade lên windows 7.


- Vô hiӋu hóa âm thanh trong trò chơi bҵng phím F7 trưӟc khi nhҩn Enter đӇ bҳt đҫu.

Thông thưӡng, lӛi này không xuҩt hiӋn trên hҫu hӃt các nӅn tҧng windows ngoҥi trӯ Vista.

1×. Tôi  thӇ viӃt thêm mã ngoi á hm đ ӧ ung ҩp không?

 
 
 

  &
à  Ã    { 
Lұp trình viên đưӧc toàn quyӅn viӃt thêm mã, ví dө như các hàm mӟi, đӏnh nghĩa thêm các biӃn, các
cҩu trúc dӳ liӋu mӟi. NӃu cҧm thҩy mã này khá thông dөng, có thӇ đӅ xuҩt vӟi BTC đӇ BTC chuҭn
hóa nó thành API, nhҵm tiӃt kiӋm thӡi gian lұp trình.

1¦. Tҥi sao tôi không nên ұp nhұt thuӝ tính Diretion nhiӅu ln trong mӝt vòng lһp?

Đôi khi có trưӡng hӧp chưa chҥy hӃt vòng lһp, mà chương trình chơi đã lҩy thuӝc tính Direction ra đӇ
sӱ dөng. Khi này, thuӝc tính Direction chưa phҧi là tӕi ưu nên sӁ làm Pacman chҥy không đúng theo ý
cӫa ngưӡi thiӃt kӃ.

ĐӇ giҧi quyӃt tình huӕng này, lұp trình viên nên cұp nhұt hưӟng đi vào mӝt biӃn tҥm, rӗi trưӟc khi kӃt
thúc vòng lһp thì mӟi gán Direction bҵng giá trӏ cӫa biӃn tҥm trên.

¬TC ITICup 2010

 
 
 

 ' 

You might also like