Nghiên cӭu thêm các tài liӋXFyOLrQTXDQÿӇ giúp hoàn thành viӋc lұp trình Ĉӗng thӡi viӋc thӵc hiӋQÿӅ WjLQj\FNJQJJL~SEҧn thân hӑc hӓLÿ~FNӃt thêm nhiӅu kinh nghiӋm trong viӋc phát triӇn game.
Trang 1ĈҤI HӐ&Ĉ¬1 ҸNG 75Ѭ Ӡ1*Ĉ ҤI HӐ&6Ѭ3+ ҤM
Trang 26˱3K ̩PĈj N̽ ng, các th̯ y cô trong khoa Tin h͕ FFNJQJQK˱WRjQWK ͋ các th̯ y cô
WURQJWU˱ ͥQJĈ ̩i h͕F 6˱3K ̩PĈj1 ̽QJÿmWUX\ ͉ n d̩ y nhͷ ng ki͇ n thͱ c quý báu
cho tôi trong su͙ t nhͷ QJQăPK ͕c vͳa qua t̩LWU˱ ͥng
Tôi xin chân thành c̫ P˯QF{7U ̯Q8\rQ7UDQJÿmW ̵QWuQKK˱ ͣng d̳n và h͟
trͫ tôi r̭ t nhi͉ u trong quá trình th c hi͏ n lu̵ QYăQW ͙t nghi͏p
Tôi xin c̫ P˯QF{QJW\71++7LQK ͕FYj7K˱˯QJP ̩L$V1HWÿmW ̩RÿL ͉ u ki͏ n
FKRW{LFyÿ˱ ͫFP{LWU˱ ͥng t͙t vͣLF˯V ͧ v̵t ch̭WPi\PyFÿ ̯\ÿ ͯ ÿ͋ có th͋ h͕ c h͗ i
ÿ˱ ͫc r̭t nhi͉ u nhͷ ng kinh nghi͏ m làm vi͏ c quý báu tͳ th c t͇
r̭ t nhi͉ u trong quá trình th c hi͏ n lu̵ QYăQW ͙t nghi͏ p này
Trang 31 Nhͷ ng n͡ i dung trong lu̵ QYăQW ͙t nghi͏ p này là do tôi th c hi͏ QG˱ ͣi s
2 M͕ i tài li͏ u tham kh̫ o dùng trong lu̵ QYăQW ͙t nghi͏ SQj\ÿ ͉ Xÿ˱ ͫc trích
d̳ n rõ ràng tên tác gi̫ , tên công trình, thͥ i giDQÿ ͓ DÿL ͋m công b͙
3 M͕ i sao chép không hͫ p l͏ , vi ph̩ m quy ch͇ ÿjRW ̩o, hay gian trá, tôi xin
ch͓ u hoàn toàn trách nhi͏ m
Sinh viên th c hi͏ n
Nguy͍ n Ṱ n Châu
Trang 4MӨC LӨC
DANH MӨC HÌNH ҦNH
&+ѬѪ1*,*, ӞI THIӊ8Ĉ ӄ TÀI 1
1 Lý do chӑ Qÿ Ӆ tài 1
2 MөFÿtFKQJKLrQF ӭu 1
3 ĈӕLWѭ ӧng và phҥm vi nghiên cӭu 2
3.1 ĈӕLWѭ ӧng nghiên cӭu 2
3.2 Phҥ m vi nghiên cӭu 2
4 3KѭѫQJSKiSQJKLrQF ӭu 2
5 Ý nghƭ a khoa hӑ c và thӵc tiӉ n cӫDÿ Ӆ tài 2
&+ѬѪ1*,,&Ѫ6 Ӣ LÝ THUYӂT 4
1 TÌM HIӆU NGÔN NGӲ C++ 4
1.1 Khái niӋ m lұ SWUuQKKѭ ӟQJÿ ӕLWѭ ӧng 4
1.2 Các tính chҩ WFѫE ҧn cӫa lұSWUuQKKѭ ӟQJÿ ӕLWѭ ӧng 4
2 GIӞI THIӊ87+Ѭ9, ӊ1Ĉ Ӗ HӐA SDL 6
2.1 SDL Video 7
2.2 SDL Audio 8
3 &Ѫ6 Ӣ LÝ THUYӂT GAME 9
3.1 Các khái niӋ m và kӻ thuұ Wÿ ӗ hӑa 9
3.2 Ĉѭ ӡng cong Bézier 18
&+ѬѪ1*,,,;Æ<' ӴNG GAME KHÔNG CHIӂN 22
Trang 52.1 Các công viӋ c cө thӇ 23
2.2 Nӝ LGXQJWUzFKѫL 23
2.3 &iFÿ ӕLWѭ ӧng trong game 24
2.4 Ĉӝ khó 25
2.5 0jQFKѫL 25
2.6 Góc nhìn 25
2.7 ĈL Ӈm 25
2.8 Bҧ Qÿ ӗ 26
2.9 Xӱ lý 26
2.10 HӋ thӕ ng phát hiӋ n và xӱ lý va chҥ m 26
2.11 Xӱ lý âm thanh 27
2.12 Xây dӵng hӋ thӕ ng hҥ t mô tҧ hiӋ u ӭng 27
3 Giӟi thiӋ XFiFÿ ӕLWѭ ӧng trong game 27
3.1 Lӟp cha 27
3.2 Các lӟp con 28
3.3 Các lӟp khác 30
4 KӃ t quҧ xây dӵng game 34
KӂT LUҰN 39
1 KӃ t quҧ ÿҥ Wÿѭ ӧc 39
1.1 VӅ kiӃ n thӭc lý thuyӃ t 39
1.2 VӅ kinh nghiӋ m thӵc tiӉ n 39
2 Hҥ n chӃ 40
Trang 7II.1 Sprite Sheet 9
III.4 6ѫÿӗWKLӃWNӃOӟSPCRocket 28
III.5 6ѫÿӗWKLӃWNӃOӟS NPCFighter 29
Trang 9&+ѬѪ1*, GIӞI THIӊ8Ĉ ӄ TÀI
1 Lý do chӑ Qÿ Ӆ tài
Trong cuӝc sӕng hiӋn nay, ngoài nhu cҫXFѫEҧn cӫDFRQQJѭӡLQKѭăQӣÿL
lҥi thì nhu cҫu giҧLWUtFNJQJOjPӝt nhu cҫu mà không thӇ thiӃu cӫa mӛLFRQQJѭӡi
GiҧLWUtJL~SFRQQJѭӡi bӟWFăQJWKҷng, mӋt mӓi sau nhӳng giӡ làm viӋc hoһc sau
nhӳng giӡ hoҥWÿӝQJOjPFKRQJѭӡi trӣ nên vui vҿJL~SWKѭJLmQÿҫXyF1yLÿӃn
FiFSKѭѫQJSKiSJLҧi trí thì không thӇ không nhҳFÿӃn game HiӋn nay trên thӃ giӟi
có rҩt nhiӅu hãng sҧn xuҩW JDPH FNJQJ QKѭ Uҩt nhiӅX JDPH ÿm ÿѭӧF UD ÿӡi, và xu
Kѭӟng phát triӇn game sӁ FzQ ÿѭӧc phát triӇn mҥnh mӁ KѫQ QӳD 7URQJ ÿyJDPH
WUrQ3&ÿѭӧc phát triӇn mҥQKYuÿDVӕ mӑLQJѭӡi có máy tính nhiӅXKѫQOjFiFWKLӃt
bӏ FKѫLJDPHFKX\rQGөQJNKiFQKѭ;ER[3OD\6WDWLRQ«*DPH'OjGzQJJDPHÿm[Xҩt hiӋn tӯ OkXYjÿӃn nay vүQÿѭӧc phát triӇn rҩt nhiӅu
Có rҩt nhiӅu ngôn ngӳ ÿӇ phát triӇQJDPHQKѭ-DYD&«1KѭQJWURQJÿy
C++ là mӝt ngôn ngӳ rҩt mҥQKÿӇ làm game Game viӃt bҵng C++ có thӇ chҥy ӣ
trên nhiӅu hӋ ÿLӅXKjQKNKiFQKDXQKѭ:LQGRZV0DF268EXQWX«KRһc trên các
hӋ ÿLӅu hành cӫDGLÿӝQJQKѭ$QGURLGL26«1hҳFÿӃn ngôn ngӳ lұSWUuQKWKuFNJQJ
không thӇ không nhҳFÿӃQWKѭYLӋQÿӗ hӑDÿӇ phát triӇQJDPH&iFWKѭYLӋQÿӗ hӑa
hӛ trӧ viӋc viӃWJDPHQKѭ2SHQ*/6'/« 7URQJÿy6'/OjPӝWWKѭYLӋQÿӗ hӑa
hӛ trӧ rҩt tӕt cho game, dӉ sӱ dөng
Tôi muӕn tìm hiӇu nhӳng kiӃn thӭF FNJQJ QKѭ NLQK QJKLӋm trong viӋc lұp
trình game 2D, nhӳng kiӃn thӭc trong viӋc tӕLѭXWKXұt toán, mã nguӗn trong quá
WUuQKOjPÿӅ WjL ÿӇ WKHR ÿXәi viӋc phát triӇQJDPHWURQJWѭѫQJODLĈyOjOêGRW{L
thӵc hiӋQÿӅ tài này
2 MөFÿtFKQJKLrQF ӭu
Tìm hiӇu, hӑc hӓLÿӇ nҳPU}ÿѭӧc quá trình phát triӇn game 2D tӯ khâu thiӃt
kӃ FKRÿӃn khi hoàn thành sҧn phҭm
Trang 10Phát triӇn mӝWJDPHÿѫQJLҧn là game 2D bҳn máy bay sӱ dөng ngôn ngӳ lұp
Tìm hiӇXÿӑc tài liӋu vӅ WKѭYLӋQÿӗ hӑa SDL
Hӑc hӓi quy trình phát triӇn game
Nghiên cӭu thêm các tài liӋXFyOLrQTXDQÿӇ giúp hoàn thành viӋc lұp trình
Ĉӗng thӡi viӋc thӵc hiӋQÿӅ WjLQj\FNJQJJL~SEҧn thân hӑc hӓLÿ~FNӃt thêm
nhiӅu kinh nghiӋm trong viӋc phát triӇn game
ĈӅ tài này FyêQJKƭDUҩt lӟn trong viӋc thӇ hiӋQÿѭӧc nhӳng kiӃn thӭc quý
EiX ÿm ÿѭӧc hӑc tӯ các quý thҫy cô cӫD WUѭӡQJ Ĉҥi hӑF 6ѭ SKҥm - Ĉҥi hӑF Ĉj
NҹQJ 9j ÿһc biӋt là sӵ theo dõi và quan tâm trӵc tiӃp cӫa cô Trҫn Uyên Trang
Trang 11trong suӕt thӡi gian thӵc tұp Và nhӡ sӵ hӛ trӧ tұn tình tӯ phía công ty TNHH Tin
hӑF 7KѭѫQJPҥi AsNet trong suӕt quá trình thӵc tұp tҥi công ty
Trang 12C+ѬѪ1* II: &Ѫ6 Ӣ LÝ THUYӂT
1 TÌM HIӆU NGÔN NGӲ C++
1.1 Khái niӋ m lұ SWUuQKKѭ ӟQJÿ ӕLWѭ ӧng
LұSWUuQKKѭӟQJÿӕLWѭӧng (gӑi tҳt là OOP, tӯ chӳ Anh ngӳ object-oriented-
programming), là kӻ thuұt lұp trình hӛ trӧ công nghӋ ÿӕLWѭӧQJ223ÿѭӧc xem là
JL~SWăQJQăQJVXҩWÿѫQJLҧQKyDÿӝ phӭc tҥp khi bҧRWUuFNJQJQKѭPӣ rӝng phҫn
mӅm bҵng cách cho phép lұp trình viên tұSWUXQJYjRFiFÿӕLWѭӧng phҫn mӅm ӣ
bұc FDRKѫQ1JRjLUDQKLӅXQJѭӡi còn cho rҵng OOP dӉ tiӃSWKXKѫQFKRQKӳng
QJѭӡi mӟi hӑc vӅ lұSWUuQKKѫQOjFiFSKѭѫQJSKiSWUѭӟFÿy [7]
1.2 Các tính chҩ WFѫE ҧn cӫa lұSWUuQKKѭ ӟQJÿ ӕLWѭ ӧng
ĈӕLWѭӧng (object): Các dӳ liӋu và chӍ thӏ ÿѭӧc kӃt hӧp vào mӝWÿѫn vӏ ÿҫy
ÿӫ tҥo nên mӝWÿӕLWѭӧQJĈѫQYӏ Qj\WѭѫQJÿѭѫQJYӟi mӝWFKѭѫQJWUuQKFRQYjYu
thӃ FiF ÿӕL Wѭӧng sӁ ÿѭӧc chia thành hai bӝ phұn chính: phҫQ FiF SKѭѫQJ WKӭc
(method) và phҫn các thuӝc tính (attribute) Trong thӵc tӃFiFSKѭѫQJWKӭc cӫDÿӕi
Wѭӧng là các hàm và các thuӝc tính cӫa nó là các biӃn, các tham sӕ hay hҵng nӝi tҥi
cӫa mӝWÿӕLWѭӧng (hay nói cách khác tұp hӧp các dӳ liӋu nӝi tҥi tҥo thành thuӝc
tính cӫD ÿӕL Wѭӧng) Các SKѭѫQJ WKӭF Oj SKѭѫQJ WLӋQ ÿӇ Vӱ GөQJ PӝW ÿӕL WѭӧQJtrong khi các WKXӝFtính VӁP{WҧÿӕLWѭӧQJFyQKӳQJWtQKFKҩWJu
&iFSKѭѫQJWKӭc và các thuӝFWtQKWKѭӡng gҳn chһt vӟi thӵc tӃ FiFÿһc tính
Mӛi SKѭѫQJWKӭc hay mӛi dӳ liӋu nӝi tҥi cùng vӟi các tính chҩWÿѭӧFÿӏnh
QJKƭD EӣL QJѭӡi lұS WUuQK ÿѭӧc xem là mӝt ÿһc tính riêng cӫD ÿӕL Wѭӧng NӃu
Trang 13không có gì lҫm lүn thì tұp hӧS FiF ÿһc tính này gӑL FKXQJ Oj ÿһc tính cӫD ÿӕi
Wѭӧng
LұS WUuQK KѭӟQJ ÿӕL Wѭӧng là mӝW SKѭѫQJ SKiS Oұp trình có các tính chҩt
chính sau:
1.2.1 Tính trӯXWѭ ӧng
Ĉk\OjNKҧ QăQJFӫDFKѭѫQJWUuQKEӓ TXDKD\NK{QJFK~êÿӃn mӝt sӕ khía
cҥnh cӫDWK{QJWLQPjQyÿDQJWUӵc tiӃp làm viӋFOrQQJKƭDOjQyFyNKҧ QăQJWұp trung vào nhӳng cӕt lõi cҫn thiӃt MӛLÿӕLWѭӧng phөc vө QKѭOjPӝWÿӝng tӱ" có
thӇ hoàn tҩt các công viӋc mӝt cách nӝi bӝEiRFiRWKD\ÿәi trҥng thái cӫa nó và
liên lҥc vӟLFiFÿӕLWѭӧng khác mà không cҫn cho biӃWOjPFiFKQjRÿӕLWѭӧng tiӃn
KjQKÿѭӧc các thao tác Tính chҩWQj\WKѭӡQJÿѭӧc gӑi là sӵ trӯXWѭӧng cӫa dӳ liӋu
Tính trӯXWѭӧng còn thӇ hiӋn qua viӋc mӝWÿӕLWѭӧQJEDQÿҫu có thӇ có mӝt
sӕ ÿһFÿLӇm chung cho nhiӅXÿӕLWѭӧQJNKiFQKѭOjVӵ mӣ rӝng cӫDQyQKѭQJEҧn
WKkQÿӕLWѭӧQJEDQÿҫu này có thӇ không có các biӋn pháp thi hành Tính trӯXWѭӧng
Qj\WKѭӡQJÿѭӧF[iFÿӏnh trong khái niӋm gӑi là lӟp trӯXWѭӧng hay lӟSFѫVӣ trӯu
Wѭӧng
1.2.2 7tQKÿyQJJyL
C++ xây dӵQJWtQKÿyQJEҵng cách cho phép mӑi thành viên cӫa mӝt lӟp có
thӇ ÿѭӧc khai báo bҵng các tӯ khoá public, private, hay protected Mӝt thành viên
private chӍ có thӇ ÿѭӧc truy cұp tӯ FiFSKѭѫQJSháp (hàm nӝi tҥi) là thành viên cӫa
chính lӟSÿyKD\ÿѭӧc truy cұp tӯ các hàm và các lӟSÿѭӧFÿһc biӋt cho phép sӱ
dөng bҵng cách dùng tӯ khóa friend Mӝt thành viên protected cӫa mӝt lӟp sӁ có thӇ
truy cұSÿѭӧc tӯ FiF WKjQK YLrQQjR ÿy Fӫa các lӟp có tính kӃ thӯa cӫa nó hay
FNJQJFyWKӇ truy cұSÿѭӧc tӯ các thành viӋn cӫa chính lӟSÿyYjFӫa mӑi thành viên
friend
Nguyên lý cӫa OOP là mӑi và chӍ có các hàm là có thӇ truy cұSÿѭӧFÿӃn các
giá trӏ nӝi tҥi cӫa cùng lӟSWKuQrQFyWtQKÿyQJ&FyKӛ trӧ ÿһc tính này (qua các
Trang 14hàm thành viên và các hàm bҥn QKѭQJ&Oҥi không là yêu cҫu bҳt buӝFQJѭӡi
lұp trình có thӇ khai báo các phҫn hay tҩt cҧ các giá trӏ nӝi tҥi là công cӝng (public),
YjFNJQJFKRSKpSOjPFKRWRjQEӝ lӟp trӣ thành công cӝng Lí do là vì C++ hӛ trӧ
không chӍ lұSWUuQKKѭӟQJÿӕLWѭӧng mà còn hӛ trӧ các mүu hình yӃXKѫQQKѭOjOұp trình mô-ÿXQ
Mӝt thói quen tӕt cҫn có trong thӵc hành là khai báo mӑi dӳ liӋXÿӅu là riêng
Wѭprivate), hay ít nhҩt ӣ dҥng bҧo tӗQYjVDXÿyWҥo ra mӝt giao diӋn nhӓ (thông
TXDFiFSKѭѫQJSKiS FKRQJѭӡi dùng cӫa lӟp này dҩXÿLFiFFKLWLӃt thiӃt lұp bên
trong [7]
1.2.3 7tQKÿDKuQK
ThӇ hiӋn thông qua viӋc gӱi các WK{QJ ÿLӋp (message) ViӋc gӱi các thông
ÿLӋp này có thӇ VR ViQK QKѭ YLӋc gӑi các hàm bên trong cӫa mӝt ÿӕL Wѭӧng Các
SKѭѫQJWKӭc dùng trҧ lӡi cho mӝWWK{QJÿLӋp sӁ W\WKHRÿӕLWѭӧQJPjWK{QJÿLӋp ÿyÿѭӧc gӱi tӟi sӁ có phҧn ӭQJNKiFQKDX1Jѭӡi lұp trình có thӇ ÿӏQKQJKƭDPӝt
ÿһc tính (chҷng hҥn thông qua tên cӫDFiFSKѭѫQJWKӭc) cho mӝt loҥWFiFÿӕLWѭӧng
gҫQQKDXQKѭQJNKLWKLKjQKWKuGQJFQJPӝt tên gӑi mà sӵ thi hành cӫa mӛLÿӕi
Wѭӧng sӁ tӵ ÿӝng xҧ\UDWѭѫQJӭQJWKHRÿһc tính cӫa tӯQJÿӕLWѭӧng mà không bӏ
nhҫm lүn
1.2.4 Tính kӃ thӯa
Ĉһc tính này cho phép mӝWÿӕLWѭӧng có thӇ có sҹQFiFÿһFWtQKPjÿӕi tѭӧng
NKiFÿmFyWK{QJTXDNӃ thӯDĈLӅXQj\FKRSKpSFiFÿӕLWѭӧng chia sҿ hay mӣ rӝng
FiFÿһc tính sҹn có mà không phҧi tiӃQKjQKÿӏQKQJKƭDOҥi Tuy nhiên, không phҧi
ngôn ngӳ ÿӏQKKѭӟQJÿӕLWѭӧQJQjRFNJQJFyWtQKFKҩt này
2 GIӞI THIӊ87+Ѭ9, ӊ1Ĉ Ӗ HӐA SDL
SDL là tӯ viӃt tҳt cӫa Simple DirectMedia Layer, là mӝWWKѭYLӋn lұp trình
cung cҩp các hàm giao tiӃp vӟi các phҫn cӭQJÿӗ hӑa, âm thanh hay thiӃt bӏ vào và
UD7KѭYLӋn này giúp các lұp trình viên viӃWFiFFKѭѫQJWUuQKJLҧi trí hay các ӭng
Trang 15dөQJ ÿD SKѭѫQJ tiӋn (multimedia) trên nhiӅu hӋ ÿLӅX KjQK NKiF QKDX QKѭ
GNU/Linux, Windows, Mac OS, Classic, BeOS và mӝt vài hӋ ÿLӅu hành không
chính thӭFNKiF4XDWKѭYLӋn này, lұp trình viên có thӇ ÿLӅu khiӇn phҫn hiӇn thӏ, sӵ
kiӋn, âm thanh, ә ÿƭD&'-ROM, thread và ÿӗng hӗ ÿRJLӡ
6'/ Oj WKѭ YLӋQ ÿD SKѭѫQJ WLӋQ ÿD QӅn (cross-SODWIRUP ÿѭӧc thiӃt kӃ ÿӇ
cung cҩp sӵ truy cұp ӣ mӭc thҩSÿӃn âm thanh, hình ҧnh, bàn phím, chuӝt, cҫQÿLӅu
khiӇn game (joystick), phҫn cӭng 3D (3D hardware) thông qua OpenGL và 2D
video framebuffer
SDL là mӝt gói bao bӑc (wrapper) xung quanh các chӭFQăQJ[iFÿӏnh cӫa
hӋ ÿLӅu hành MөFÿtFKFKtQKFӫa SDL là lұp thành mӝt giao diӋn lұp trình cӕt lõi
ÿDKӋ ÿLӅu hành phә biӃn cho viӋc truy cұp chӭFQăQJÿDSKѭѫQJWLӋn
7KѭYLӋQ6'/ÿѭӧc viӃt bҵng ngôn ngӳ C chuҭQQKѭQJKӛ trӧ tӕt vӟi C++
và nhiӅu ngôn ngӳ lұp trình khác
Do cách thiӃt kӃ cӫa SDL, hҫu hӃt mã nguӗn cӫDWKѭYLӋQÿѭӧc tách thành
nhiӅu phҫn cho tӯng hӋ ÿLӅXKjQK.KL6'/ÿѭӧc biên dӏch cho mӝt hӋ ÿLӅu hành,
GiӕQJQKѭ*',Yj'LUHFW'UDZFӫa DirectX, trong gói SDL Video có 7 thành
phҫQÿѭӧc xây dӵQJÿӇ phөc vө cho viӋc hiӇn thӏ hình ҧnh Mӛi thành phҫn có cҩu
Trang 16WU~FU}UjQJÿѭӧc xây dӵng cho nhӳng công viӋc cө thӇYjÿѭӧc tә chӭc mӝt cách
Cҧ 7 thành phҫQQj\ÿӅXÿѭӧc bӑFWURQJWKѭYLӋQ6'/BLPDJH7KѭYLӋn này
hӛ trӧ FiF ÿӏnh dҥng hình ҧnh sau: BMP, PPM, PCX, GIF, JPEG, PNG, TGA, và
TIFF
2.2 SDL Audio
Âm thanh là mӝt phҫn tích hӧp trong bҩt kǤ JDPH QjR ÆP WKDQK WKѭӡng
ÿѭӧc mӣ trong suӕt thӡi gian chҥy cӫa game Âm thanh hiӋu ӭng cùng vӟi nhҥc nӅn
góp phҫn làm game hҩp dүQKѫQ&KtQKYuYұy âm thanh hiӋu ӭng và nhҥc nӅn là
phҫn không thӇ thiӃu trong game Tôi xin giӟi thiӋu vӅ WKѭ YLӋn lұp trình
SDL_mixer, mӝWWKѭYLӋn hӛ trӧ rҩt tӕt cho viӋFWѭѫQJWiFYӟi các file âm thanh
SDL_mixer là mӝWWKѭYLӋn mӣ rӝng cӫa SDL, cung cҩp khҧ QăQJFKѫLQKLӅu
file âm thanh và file nhҥc mӝWFiFKÿӗng thӡL7KѭYLӋn này hӛ trӧ nhiӅXÿӏnh dҥng
audio khác nhau và cung cҩp sӵ WѭѫQJWiFGӉ dàng trong viӋc tҧi chúng
Trang 173 &Ѫ6 Ӣ LÝ THUYӂT GAME
3.1 Các khái niӋ m và kӻ thuұ Wÿ ӗ hӑa
3.1.1 Các khái niӋ m
a Sprite sheet
Sprite sheet là mӝt hình ҧnh toàn vҽn cӫa mӝWÿӕLWѭӧng MӛLÿӕLWѭӧQJÿӝng
có mӝt tұSFiFVSULWHULrQJWѭѫQJӭng vӟi tӯng dҥng chuyӇQÿӝng, mӛi sprite là mӝt
hình ҧnh mô tҧ mӝt trҥng thái trong dҥng chuyӇQÿӝQJÿy
ViӋFWKD\ÿәi liên tiӃp các sprite này vӟi mӝt khoҧng thӡi gian chӡ hӧp lý
giӳa các sprite sӁ tҥo ra các hình ҧnh chuyӇQÿӝng vӟi cҧm giác thұt Các hình ҧnh
chuyӇQÿӝQJWKѭӡng thҩ\WURQJJDPHÿһc biӋWOjJDPH'QKѭQKkQYұt di chuyӇn,
Qѭӟc chҧy, hay các vө nә do va chҥPÿӅu có thӇ ÿѭӧc thӇ hiӋn bҵng cách dùng
sprite
Hình II.1: Sprite Sheet
b Mô hình màu RGB
Mô hình màu RGB (Red ± Green ± Blue) là mô hình màu chuҭQ ÿѭӧc sӱ
dөng chӫ yӃu trong các thiӃt bӏ hiӇn thӏ màu Mô hình RGB tҥo ra các màu khác
nhau bҵng cách hòa trӝn vӟi tӹ lӋ khác nhau tӯ 3 màu FKtQKÿӓ, xanh lá cây và xanh
GѭѫQJ9uYұy trong các thiӃt bӏ hiӇn thӏ khác nhau màu sҳc có thӇ khác nhau
Khi biӇu diӉQ Gѭӟi dҥng sӕ các giá trӏ 5*% ÿѭӧc biӇu diӉn bҵng bӝ 3 sӕ
WѭѫQJÿѭѫQJYӟLFѭӡQJÿӝ cӫDPjXFѫEҧn trên DӵDYjRÿӝ lӟn cӫa bӝ 3 sӕ này
QJѭӡi ta phân ra các kiӇu sau
Trang 18'QJELWÿӇ biӇu diӉn 1 màu vӟi 5 bit cho mӛi màu gӑi là kiӇu 555 hoһc
thêm 1 bit cho màu xanh lá cây (vì mҳt có thӇ cҧm nhұn màu này tӕWKѫQVRYӟi các
KiӇX5*%ÿѭӧc tҥo ra vӟLP~FÿtFKJKpSFiFKuQKOҥi vӟi nhau bҵng cách
WKrP ÿӝ trong suӕW YjR ELW Gѭ Yu WKӃ tҥo UD ÿӏnh dҥng 32 bit Kênh trong suӕt
ÿѭӧc biӃW ÿӃn phә biӃQ KѫQ QKѭ Oj NrQK DOSKD Yu WKӃ ÿӏnh dҥng này có tên là
5*%$&NJQJOѭXêUҵQJYuQyNK{QJWKD\ÿәi bҩt kǤ cái gì trong mô hình RGB, nên
RGBA không phҧi là mӝt mô hình màu khác biӋt, nó chӍ Ojÿӏnh dҥQJILOHWURQJÿy
bә sung thêm thông tin vӅ ÿӝ trong suӕt cùng vӟi thông tin vӅ màu trong cùng mӝt
file
&y ÿӏnh dҥng ҧnh phә biӃn hiӋn nay hә trӧ ҧnh trong suӕW ÿy Oj *,) YjPNG Tuy nhiên PNG tӓ UDYѭӧt trӝLKѫQӣ ҧQKWƭQKYӟi khҧ QăQJQpQWӕWKѫQYj
hiӇn thӏ ҧnh trong suӕt, không bӏ UăQJFѭDӣ vùng biên Ngoài ra, trong khi PNG hӛ
trӧ ÿӃn 48 bit màu thì GIF chӍ có tӟi 8 bit màu
c Frame
Tҩt cҧ các thiӃt bӏ hiӇn thӏ hình ҧnh chuyӇQ ÿӝng hiӋQ QD\ QKѭ 79màn
hình« ÿӅu dӵa trên khҧ QăQJ OѭXҧnh cӫa mҳt ngѭӡi Sau khi hình ҧnh biӃn mҩt
mҳt cӫDFK~QJWDFzQOѭXOҥi tҥi võng mҥc 1/24 giây Vì vұ\ÿӇ tҥRFiFÿRҥn film
QJѭӡi ta chӍ cҫQWKD\ÿәi liên tөc các hình ҧnh theo tӕFÿӝ 24 hình/giây hoһc cao
KѫQ 7URQJ JDPH FNJQJ iS Gөng kӻ thuұW Qj\ ÿӇ tҥo chuyӇQ ÿӝng và mӛi lҫn cұp
nhұt màn hình gӑi là 1 frame
Trang 19d Bҧ Qÿ ӗ
BҧQÿӗ là vùng thӇ hiӋn tҩt cҧ FiFÿӕLWѭӧng trong game, mӝt phҫn hoһc toàn
bӝ bӅ mһt cӫa bҧQÿӗ ÿѭӧc hiӇn thӏ trên màn hình BҧQÿӗ chӭa tҩt cҧ FiFÿӕLWѭӧng
khác Tҩt cҧ FiFÿӕLWѭӧng chӍ có thӇ di chuyӇn trong phҥm vi cӫa bҧQÿӗ và có mӭc
ÿӝ ѭXWLrQNKL[Xҩt hiӋn trên bҧQÿӗ khác nhau
Cách tә chӭc bҧQÿӗ trong game là phҫn rҩt quan trӑQJÿӕi vӟi mӛi game
khác nhau lҥi có các tә chӭc khác nhau
e Surface
Surface là khái niӋm chӍ mӝt vùng bӝ nhӟ ÿӇ OѭXGӳ liӋu hình ҧnh Hình ҧnh
ÿѭӧFOѭXOjPӝt vùng hình chӳ nhұt, có thӇ là hình ҧQKÿѭӧc tҧi lên tӯ mӝt file hình
ҧQKQjRÿyKRһc là sӵ tәng hӧp cӫa nhiӅu hình ҧnh khác nhau Khi cҫn các surface
có thӇ ÿѭӧc vӁ OrQPjQKuQKÿӇ hiӇn thӏ hình ҧQKÿӗ hӑa trong game
3.1.2 Các kӻ thuұ t xӱ lý
a Lӑ c màu
GҫQQKѭWҩt cҧ các ҧnh sӕ hiӋQQD\ÿѭӧFOѭXGѭӟi dҥng hình chӳ nhұWQKѭQJ
các hình ҧQKÿѭӧc dùng trong game thì có vô sӕ kiӇXNKiF QKDX&yKDLSKѭѫQJpháp giҧi quyӃt vҩQ ÿӅ Qj\ Oj GQJ FiF ÿӏnh dҥng ҧnh có kênh alpha và dùng
SKѭѫQJSKiSOӑc màu khi vӁ lên màn hình
&iFÿӏnh dҥng ҧQKFyNrQKDOSKDQKѭJLISQJFyWKrPPӝt giá trӏ OѭXÿӝ mӡ
tҥLSL[HOÿyQӃu giá trӏ này bҵQJNK{QJWKuSL[HOÿyWURQJVXӕWYjNK{QJÿѭӧc nhìn
thҩy
Tuy nhiên khi sӱ dөQJ FiF ÿӏnh dҥng này viӋF WKD\ ÿәL ÿӝ mӡ, vӏ trí mӡ
WURQJFKѭѫQJWUuQKVӁ NKyNKăQYuYұy ӣ ÿk\tôi sӱ dөQJFѫFKӃ chӑn màu Hình cҫn
sӱ dөQJÿѭӧc vӁ trên mӝt màu nӅQÿӗng nhҩt, khi vӁ chúng lên màn hình ta chӍ cҫn
loҥi bӓ tҩt cҧ các pixel có màu là màu nӅQWDÿѭӧc hình cҫn vӁ
Trang 20Hình II.2: ̪QKFK˱DO ͕c màu n͉ n
b Ĉӗ ng bӝ Frame
Ĉӗng bӝ frame là mӝt kӻ thuұt làm cho hình ҧnh chuyӇQÿӝng trong game
ÿѭӧc mӏn Trong game có nhiӅXÿӕLWѭӧng vӟi nhiӅu hình ҧQKÿӗ hӑDÿѭӧc vӁ liên
tөc NӃu cӭ mӛi lҫQ Fy ÿӕL WѭӧQJ WKD\ ÿәi ta lҥi cұp nhұt lên màn hình thì sӁ
không tҥRÿѭӧc cҧPJLiFFiFÿӕLWѭӧng chuyӇQÿӝQJÿӗng thӡLĈӇ giҧi quyӃt vҩn
ÿӅ này chúng ta chӡ tҩt cҧ FiFÿӕLWѭӧQJWKD\ÿәi rӗi mӟi cұp nhұt màn hình
Tuy nhiên khi game chҥy có lúc các xӱ lý xҧy ra nhanh, có khi lҥi chұm
khiӃQFiFFiFÿӕLWѭӧng lúc thì chuyӇQÿӝng nhanh lúc thì chuyӇQÿӝng chұm tҥo
cҧm giác game bӏ giұWĈӇ giҧi quyӃt vҩQÿӅ Qj\WDTX\ÿӏnh thӡi gian cұp nhұt màn
hình là cӕ ÿӏnh, nӃu sau khi tҩt cҧ các xӱ lý trong 1 frame hoàn thành ta kiӇm tra
xem thӡi gian thӵc hiӋQFK~QJÿmÿӫ thӡLJLDQTX\ÿӏQKFKRIUDPHKD\FKѭD1Ӄu nhӓ KѫQWKuÿӧLFKRÿӃQO~Fÿӫ thӡi gian mӟi cұp nhұt tҩt cҧ lên màn hình
Trang 21Hình II.4: 6˯ÿ ͛ thu̵WWRiQÿ ͛ng b͡ Frame
c Ngôn ngӳ Script
Ngôn ngӳ script là ngôn ngӳ lұp trình kӏch bҧn, các lӋQK ÿѭӧF QJѭӡi lұp
WUuQKÿӏnh sҹQÿӇ FKѭѫQJWUuQKVӱ dөQJÿӑc và thӵc hiӋQWKHRVFULSWÿy&iFFKѭѫQJWUuQKÿѭӧc viӃt bҵng ngôn ngӳ này hҫu hӃWNK{QJÿѭӧc biên dӏch, chúng không hoҥt
ÿӝQJÿӝc lұSÿѭӧc mà phө thuӝFYjRFKѭѫQJWUuQKKә trӧ chúng
Ngôn ngӳ kӏch bҧQÿѭӧc biӃWÿӃn nhiӅu nhҩWOjMDYDVFULSW ÿѭӧc nhúng vào
các trang web Ngoài ra còn có Macromedia Flash ± $FWLRQ6FULSWGQJÿӇ lұp trình
WURQJIODVK/XD6KHOO«
ViӋc thiӃt kӃ bҧQÿӗ trong game là mӝt phҫn quan trӑng NӃu mӝWJDPHÿѭӧc
ÿҫXWѭUҩt tӕt vӅ phҫQÿӗ hӑDQKѭQJbҧQÿӗ ÿѭӧc thiӃt kӃ không tӕt, không hҩp dүn
YjNKyNKăQFKRQJѭӡLFKѫLWKuJDPHÿyVӁ mҩWÿLӇm rҩt nhiӅX1JRjLUDÿӇ bҧQÿӗ
có thӇ WKD\ÿәi dӉ dàng và mӣ rӝng sau khi game hoàn thành, tôi ÿmÿӏQKQJKƭDPӝt
ngôn ngӳ VFULSWÿѫQJLҧQÿӇ tách phҫn thiӃt kӃ ra khӓi mã nguӗn cӫDFKѭѫQJWUuQK
.KLÿyYLӋc thiӃt kӃ bҧQÿӗ sӁ không phө thuӝc vào mã nguӗn cӫDFKѭѫQJWUuQKYj
thұPFKtQJѭӡi sӱ dөQJFNJQJFyWKӇ tӵ thiӃt kӃ bҧQÿӗ nӃu muӕn
BҲ7Ĉ ҪU
Time < frameTime
frameTime = const Time = thӡ LÿL Ӈm bҳ Wÿ ҫ u
Time = thӡ i gian hiӋ n tҥ i ± thӡ LÿL Ӈm bҳ Wÿ ҫ u
KӂT THÚC ÿ~QJ
sai
Trang 22d Tә chӭc bҧ Qÿ ӗ
Có nhiӅu cách tә chӭc bҧQ ÿӗ, tuy nhiên có 2 cách thông dөng nhҩW ÿy là
dùng Tile và dùng Background 7URQJ FKѭѫQJ WUuQK Qj\ HP Wә chӭc bҧQÿӗ bҵng
Cuӝn bҧQÿӗ là kӻ thuұt mà hҫu hӃWFiFJDPHÿӅu có sӱ dөQJĈӕi vӟi các
game có bҧQÿӗ lӟQKѫQFӱa sә hiӇn thӏ thì cuӝn bҧQÿӗ OjÿLӅu bҳt buӝc Cuӝn bҧn
ÿӗ có thӇ ÿѭӧc hiӇu giӕQJQKѭYLӋc di chuyӇn cӱa sә hiӇn thӏ trên bҧQÿӗ ÿӇ hiӇn thӏ
ÿ~QJKuQKҧnh nhân vұt trong vùng cӱa sә khi nhân vұt di chuyӇn BҧQÿӗ có thӇ
ÿѭӧc cuӝn theo nhiӅXKѭӟng, tùy theo cách thiӃt kӃ bҧQÿӗYjFNJQJFyQKLӅu cách
ÿӇ cuӝn bҧQÿӗ
NӃu game có nhiӅu Background thì tӕFÿӝ cuӝn cӫa các Background sӁ khác
nhau tùy theo vӏ WUtWѭѫQJÿӕi cӫa Background ÿyVRYӟLWkPÿLӇm, Background lӟp
[DKѫQVӁ ÿѭӧc cuӝn vӟi tӕFÿӝ chұPKѫQ
Trang 23Hình II.5: 6˯ÿ ͛ thu̵t toán cu͡n Background theo chi͉ u d͕ c tͳ trên xu͙ QJG˱ ͣi
f KiӇ m tra va chҥ m
Va chҥm là phҫn không thӇ thiӃu trong game, tùy yêu cҫu cӫa mӛi game mà
mӭFÿӝ xӱ lý lҥLNKiFQKDXĈӕi vӟLFiFJDPHFyFiFVSULWHFyNtFKWKѭӟc khác nhau
ta có thӇ dӵa vào tӑD ÿӝ cӫD FiF VSULWHYjNtFKWKѭӟc cӫD VSULWHÿӇ kiӇm tra xem
chúng có nҵm chӗng lrQQKDXKD\NK{QJÿӇ nhұn biӃt va chҥm
BҲ7Ĉ ҪU
bgY = 0
tӕFÿӝ cuӝn map = const
bgY = bgY ± tӕFÿӝ cuӝn map
bgY < - background.height
hoһc bgY > background height
Trang 24Hình II.6: 6˯ÿ ͛ thu̵t toán ki͋ m tra va ch̩ m
Trang 25g Vòng lһ p game (Game loop)
Cұp nhұt tӑa
ÿӝ mӟi Khӣi tҥo
;iFÿӏnh va chҥm
Nhұn sӵ kiӋn
tӯ QJѭӡi FKѫL
VӁ lên màn hình
Thoát Game
Ĉ~QJ
Sai BҲ7Ĉ ҪU
KӂT THÚC
... biӃn cho vi? ?c truy c? ?p chӭFQăQJÿDSKѭѫQJWLӋn7KѭYLӋQ6''/ÿѭ? ?c viӃt bҵng ngôn ngӳ C chuҭQQKѭQJKӛ trӧ tӕt vӟi C+ +
và nhiӅu ngơn ngӳ lұp trình kh? ?c
Do c? ?ch thiӃt kӃ c? ?a SDL, ...
kh? ?c Tҩt c? ? FiFÿӕLWѭӧng chӍ c? ? thӇ di chuyӇn phҥm vi c? ?a bҧQÿӗ c? ? m? ?c
ÿӝ ѭXWLrQNKL[Xҩt hiӋn bҧQÿӗ kh? ?c
C? ?ch tә ch? ?c bҧQÿӗ game phҫn rҩt quan trӑQJÿӕi vӟi mӛi game
kh? ?c. ..
Trang 22d Tә ch? ?c bҧ Qÿ ӗ
C? ? nhiӅu c? ?ch tә ch? ?c bҧQ ÿӗ, nhiên c? ? c? ?ch thơng dөng nhҩW