1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng game 2d không chiến chạy trên windows bằng ngôn ngữ c và thư viện đồ họa SDL

51 34 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 51
Dung lượng 832,21 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 2

6˱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 3

1 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 4

MӨ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 5

2.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 7

II.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 10

Phá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 11

trong 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 12

C+ѬѪ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 13

khô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 YLrQ QjR ÿ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 14

hà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 15

dө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 16

WU~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 17

3 &Ѫ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 19

d 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 20

Hì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 21

Hì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 22

d 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 23

Hì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 24

Hình II.6: 6˯ÿ ͛ thu̵t toán ki͋ m tra va ch̩ m

Trang 25

g 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Ӌ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, ...

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 22

d 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

Ngày đăng: 26/06/2021, 13:17

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w