Đối tượng nghiên cứu Ngôn ngữ lập trình hướng đối tượng C++ và thư viện đồ họa SDL để xây dựng được game 2D hoàn chỉnh với đầy đủ các thành phần.. Các tính chất cơ bản của lập trình hướ
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TIN HỌC
Đề tài:
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
Đà Nẵng, tháng 05/2012
Trang 2Sư Phạm Đà Nẵng, các thầy cô trong khoa Tin học cũng như toàn thể các thầy cô trong trường Đại học Sư Phạm Đà Nẵng đã truyền dạy những kiến thức quý báu cho tôi trong suốt những năm học vừa qua tại trường
Tôi xin chân thành cảm ơn cô Trần Uyên Trang đã tận tình hướng dẫn và hỗ trợ tôi rất nhiều trong quá trình thực hiện luận văn tốt nghiệp
Tôi xin cảm ơn công ty TNHH Tin học và Thương mại AsNet đã tạo điều kiện cho tôi có được môi trường tốt với cơ sở vật chất máy móc đầy đủ để 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ế
Tôi xin chân thành cảm ơn anh Ngô Phú Cường đã theo sát và giúp đỡ tôi rất nhiều trong quá trình thực hiện luận văn tốt nghiệp này
Một lần nữa, tôi xin chân thành cảm ơn!
Trang 31 Những nội dung trong luận văn tốt nghiệp này là do tôi thực hiện dưới sự hướng dẫn trực tiếp của Th.S Trần Uyên Trang, anh Ngô Phú Cường
2 Mọi tài liệu tham khảo dùng trong luận văn tốt nghiệp này đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố
3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạ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 Tấn Châu
Trang 4LỜI CAM ĐOAN
MỤC LỤC
DANH MỤC HÌNH ẢNH
CHƯƠNG I: GIỚI THIỆU ĐỀ TÀI 1
1 Lý do chọn đề tài 1
2 Mục đích nghiên cứu 1
3 Đối tượng và phạm vi nghiên cứu 2
3.1 Đối tượng nghiên cứu 2
3.2 Phạm vi nghiên cứu 2
4 Phương pháp nghiên cứu 2
5 Ý nghĩa khoa học và thực tiễn của đề tài 2
CHƯƠNG II: CƠ SỞ LÝ THUYẾT 4
1 TÌM HIỂU NGÔN NGỮ C++ 4
1.1 Khái niệm lập trình hướng đối tượng 4
1.2 Các tính chất cơ bản của lập trình hướng đối tượng 4
2 GIỚI THIỆU THƯ VIỆN ĐỒ HỌA SDL 6
2.1 SDL Video 7
2.2 SDL Audio 8
3 CƠ SỞ LÝ THUYẾT GAME 9
3.1 Các khái niệm và kỹ thuật đồ họa 9
3.2 Đường cong Bézier 18
CHƯƠNG III: XÂY DỰNG GAME KHÔNG CHIẾN 22
Trang 52.1 Các công việc cụ thể 23
2.2 Nội dung trò chơi 23
2.3 Các đối tƣợng trong game 24
2.4 Độ khó 25
2.5 Màn chơi 25
2.6 Góc nhìn 25
2.7 Điểm 25
2.8 Bản đồ 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ệu các đối tƣợ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ả đạt đƣợ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
II.5 Sơ đồ thuật toán cuộn Background theo chiều dọc từ trên
Trang 8III.18 Sơ đồ các lớp của toàn chương trình 33
III.26 Màn hình hiển thị các cài đặt trong game 37 III.27 Màn hình hiển thị các trợ giúp cho người chơi 38
Trang 9CHƯƠNG I: GIỚI THIỆU ĐỀ TÀI
1 Lý do chọn đề tài
Trong cuộc sống hiện nay, ngoài nhu cầu cơ bản của con người như ăn, ở, đi lại thì nhu cầu giải trí cũng là một nhu cầu mà không thể thiếu của mỗi con người Giải trí giúp con người bớt căng thẳng, mệt mỏi sau những giờ làm việc hoặc sau những giờ hoạt động, làm cho người trở nên vui vẻ, giúp thư giãn đầu óc Nói đến các phương pháp giải trí thì không thể không nhắc đến game Hiện nay trên thế giới
có rất nhiều hãng sản xuất game cũng như rất nhiều game đã được ra đời, và xu hướng phát triển game sẽ còn được phát triển mạnh mẽ hơn nữa Trong đó game trên PC được phát triển mạnh vì đa số mọi người có máy tính nhiều hơn là các thiết
bị chơi game chuyên dụng khác như Xbox, PlayStation… Game 2D là dòng game
đã xuất hiện từ lâu, và đến nay vẫn được phát triển rất nhiều
Có rất nhiều ngôn ngữ để phát triển game như Java, C++… Nhưng trong đó C++ là một ngôn ngữ rất mạnh để làm game Game viết bằng C++ có thể chạy ở trên nhiều hệ điều hành khác nhau như Windows, Mac OS, Ubuntu… hoặc trên các
hệ điều hành của di động như Android, iOS… Nhắc đến ngôn ngữ lập trình thì cũng không thể không nhắc đến thư viện đồ họa để phát triển game Các thư viện đồ họa
hỗ trợ việc viết game như OpenGL, SDL… Trong đó SDL là một thư viện đồ 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ức cũng như kinh nghiệm trong việc lập trình game 2D, những kiến thức trong việc tối ưu thuật toán, mã nguồn trong quá trình làm đề tài để theo đuổi việc phát triển game trong tương lai Đó là lý do tôi thực hiện đề tài này
2 Mục đích nghiên cứu
Tìm hiểu, học hỏi để nắm rõ được quá trình phát triển game 2D từ khâu thiết
kế cho đến khi hoàn thành sản phẩm
Trang 10Phát triển một game đơn giản là game 2D bắn máy bay sử dụng ngôn ngữ lập trình C++ và thư viện đồ họa SDL
3 Đối tượng và phạm vi nghiên cứu
3.1 Đối tượng nghiên cứu
Ngôn ngữ lập trình hướng đối tượng C++ và thư viện đồ họa SDL để xây dựng được game 2D hoàn chỉnh với đầy đủ các thành phần
3.2 Phạm vi nghiên cứu
Phát triển game chạy trên PC, mà cụ thể là các máy PC chạy hệ điều hành Windows
4 Phương pháp nghiên cứu
Đọc tài liệu về C++, qua đó nắm rõ hơn về C++ để có thể áp dụng để phát triển game
Tìm hiểu, đọc tài liệu về thư viện đồ 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ệu có liên quan để giúp hoàn thành việc lập trình game
5 Ý nghĩa khoa học và thực tiễn của đề tài
Việc xây dựng và phát triển game để giúp người dùng có thể giải trí, thư giãn sau những giờ làm việc mệt mỏi, giúp các em nhỏ có được niềm vui trong cuộc sống
Đồng thời việc thực hiện đề tài này cũng giúp bản thân học hỏi, đúc kết thêm nhiều kinh nghiệm trong việc phát triển game
Đề tài này có ý nghĩa rất lớn trong việc thể hiện được những kiến thức quý báu đã được học từ các quý thầy cô của trường Đại học Sư phạm - Đại học Đà Nẵng Và đặ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ọc & Thương mại AsNet trong suốt quá trình thực tập tại công ty
Trang 12CHƯƠNG II: CƠ SỞ LÝ THUYẾT
1.1 Khái niệm lập trình hướng đối tượng
Lập trình hướng đối tượ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ệ đối tượng OOP được xem là giúp tăng năng suất, đơn giản hóa độ phức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viên tập trung vào các đối tượng phần mềm ở bậc cao hơn Ngoài ra, nhiều người còn cho rằng OOP dễ tiếp thu hơn cho những người mới học về lập trình hơn là các phương pháp trước đó [7]
1.2 Các tính chất cơ bản của lập trình hướng đối tượng
Đối tượng (object): Các dữ liệu và chỉ thị được kết hợp vào một đơn vị đầy
đủ tạo nên một đối tượng Đơn vị này tương đương với một chương trình con và vì thế các đối tượng sẽ được chia thành hai bộ phận chính: phần các phương thức (method) và phần các thuộc tính (attribute) Trong thực tế, các phương thức của đối tượ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ột đối tượ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ủa đối tượng) Các phương thức là phương tiện để sử dụng một đối tượng trong khi các thuộc tính sẽ mô tả đối tượng có những tính chất gì
Các phương thức và các thuộc tính thường gắn chặt với thực tế các đặc tính
và sử dụng của một đối tượng
Trong thực tế, các đối tượng thường được trừu tượng hóa qua việc định nghĩa của các lớp (class)
Tập hợp các giá trị hiện có của các thuộc tính tạo nên trạng thái của một đối tượng
Mỗi phương thức hay mỗi dữ liệu nội tại cùng với các tính chất được định nghĩa (bởi người lập trình) được xem là một đặc tính riêng của đối tượng Nếu
Trang 13không có gì lầm lẫn thì tập hợp các đặc tính này gọi chung là đặc tính của đối tượng
Lập trình hướng đối tượng là một phương pháp lập trình có các tính chất chính sau:
1.2.1 Tính trừu tƣợng
Đây là khả năng của chương trình bỏ qua hay không chú ý đến một số khía cạnh của thông tin mà nó đang trực tiếp làm việc lên, nghĩa là nó có khả năng tập trung vào những cốt lõi cần thiết Mỗi đối tượng phục vụ như là một "động tử" có thể hoàn tất các công việc một cách nội bộ, báo cáo, thay đổi trạng thái của nó và liên lạc với các đối tượng khác mà không cần cho biết làm cách nào đối tượng tiến hành được các thao tác Tính chất này thường được gọi là sự trừu tượng của dữ liệu
Tính trừu tượng còn thể hiện qua việc một đối tượng ban đầu có thể có một
số đặc điểm chung cho nhiều đối tượng khác như là sự mở rộng của nó nhưng bản thân đối tượng ban đầu này có thể không có các biện pháp thi hành Tính trừu tượng này thường được xác định trong khái niệm gọi là lớp trừu tượng hay lớp cơ sở trừu tượng
1.2.2 Tính đóng gói
C++ xây dựng tính đóng bằ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ừ các phương pháp (hàm nội tại) là thành viên của chính lớp đó hay được truy cập từ các hàm và các lớp được đặ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ập được từ các thành viên (nào đó) của các lớp có tính kế thừa của nó hay cũng có thể truy cập được từ các thành viện của chính lớp đó và củ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ập được đến các giá trị nội tại của cùng lớp thì nên có tính đóng C++ có hỗ trợ đặc tính này (qua các
Trang 14hàm thành viên và các hàm bạn), nhưng C++ lại không là yêu cầu bắt buộc: ngườ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),
và cũng cho phép làm cho toàn bộ lớp trở thành công cộng Lí do là vì C++ hỗ trợ không chỉ lập trình hướng đối tượng mà còn hỗ trợ các mẫu hình yếu hơn như là lập trình mô-đun
Một thói quen tốt cần có trong thực hành là khai báo mọi dữ liệu đều là riêng
tư (private), hay ít nhất ở dạng bảo tồn, và sau đó, tạo ra một giao diện nhỏ (thông qua các phương pháp) cho người dùng của lớp này dấu đi các chi tiết thiết lập bên trong [7]
1.2.3 Tính đa hình
Thể hiện thông qua việc gửi các thông điệp (message) Việc gửi các thông điệp này có thể so sánh như việc gọi các hàm bên trong của một đối tượng Các phương thức dùng trả lời cho một thông điệp sẽ tùy theo đối tượng mà thông điệp
đó được gửi tới sẽ có phản ứng khác nhau Người lập trình có thể định nghĩa một đặc tính (chẳng hạn thông qua tên của các phương thức) cho một loạt các đối tượng gần nhau nhưng khi thi hành thì dùng cùng một tên gọi mà sự thi hành của mỗi đối tượng sẽ tự động xảy ra tương ứng theo đặc tính của từng đối tượ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ột đối tượng có thể có sẵn các đặc tính mà đối tượng khác đã có thông qua kế thừa Điều này cho phép các đối tượng chia sẻ hay mở rộng các đặc tính sẵn có mà không phải tiến hành định nghĩa lại Tuy nhiên, không phải ngôn ngữ định hướng đối tượng nào cũng có tính chất này
SDL là từ viết tắt của Simple DirectMedia Layer, là một thư viện lập trình cung cấp các hàm giao tiếp với các phần cứng đồ họa, âm thanh hay thiết bị vào và
ra Thư viện này giúp các lập trình viên viết các chương trình giải trí hay các ứng
Trang 15dụng đa phương tiện (multimedia) trên nhiều hệ điều hành khác nhau như: GNU/Linux, Windows, Mac OS, Classic, BeOS và một vài hệ điều hành không chính thức khác Qua thư viện này, lập trình viên có thể điều khiển phần hiển thị, sự kiện, âm thanh, ổ đĩa CD-ROM, thread và đồng hồ đo giờ
SDL là thư viện đa phương tiện, đa nền (cross-platform), được thiết kế để cung cấp sự truy cập ở mức thấp đến âm thanh, hình ảnh, bàn phím, chuột, cần điề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ức năng xác định của
hệ điều hành Mục đích chính của SDL là lập thành một giao diện lập trình cốt lõi
đa hệ điều hành phổ biến cho việc truy cập chức năng đa phương tiện
Thư viện SDL được viết bằng ngôn ngữ C chuẩn, nhưng hỗ 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ủa thư viện được tách thành nhiều phần cho từng hệ điều hành Khi SDL được biên dịch cho một hệ điều hành, các phần thích hợp được chọn cho hệ điều hành đó
SDL cho phép sử dụng miễn phí cho việc viết game và các chương trình nhưng bạn phải liên kết với thư viện liên kết động của chúng
Trang 16trúc rõ ràng, được xây dựng cho những công việc cụ thể, và được tổ chức một cách hợp lý 7 thành phần đó là:
Cả 7 thành phần này đều được bọc trong thư viện SDL_image Thư viện này
hỗ trợ các đị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ỳ game nào Âm thanh thườ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ẫn hơn Chính vì vậ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ề thư viện lập trình SDL_mixer, một thư viện hỗ trợ rất tốt cho việc tương tác với các file âm thanh
SDL_mixer là một thư viện mở rộng của SDL, cung cấp khả năng chơi nhiều file âm thanh và file nhạc một cách đồng thời Thư viện này hỗ trợ nhiều định dạng audio khác nhau và cung cấp sự tương tác dễ dàng trong việc tải chúng
Trang 173 CƠ SỞ LÝ THUYẾT GAME
3.1 Các khái niệm và kỹ thuật đồ 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ột đối tượng Mỗi đối tượng động
có một tập các sprite riêng tương ứng với từng dạng chuyển động, mỗi sprite là một hình ảnh mô tả một trạng thái trong dạng chuyển động đó
Việc thay đổ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ển động với cảm giác thật Các hình ảnh chuyển động thường thấy trong game, đặc biệt là game 2D như nhân vật di chuyển, nước chảy, hay các vụ nổ do va chạm đề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ẩn đượ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 chính đỏ, xanh lá cây và xanh dương Vì vậ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ễn dưới dạng số các giá trị RGB được biểu diễn bằng bộ 3 số tương đương với cường độ của 3 màu cơ bản trên Dựa vào độ lớn của bộ 3 số này người ta phân ra các kiểu sau
Kiểu 16 bit
Trang 18Dùng 16 bit để 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ốt hơn so với các màu khác), gọi là kiểu 565
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
Có 2 định dạng ảnh phổ biến hiện nay hổ trợ ảnh trong suốt đó là GIF và PNG Tuy nhiên PNG tỏ ra vượt trội hơn ở ảnh tĩnh với khả năng nén tốt hơn và hiển thị ảnh trong suốt, không bị răng cưa ở 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ển động hiện nay như TV, màn hình… đều dựa trên khả năng lưu ảnh của mắt người Sau khi hình ảnh biến mất mắt của chúng ta còn lưu lại tại võng mạc 1/24 giây Vì vậy để tạo các đoạn film người ta chỉ cần thay đổi liên tục các hình ảnh theo tốc độ 24 hình/giây hoặc cao hơn Trong game cũng áp dụng kỹ thuật này để tạo chuyển động và mỗi lần cập nhật màn hình gọi là 1 frame
Trang 19d Bản đồ
Bản đồ là vùng thể hiện tất cả các đối tượng trong game, một phần hoặc toàn
bộ bề mặt của bản đồ được hiển thị trên màn hình Bản đồ chứa tất cả các đối tượng khác Tất cả các đối tượng chỉ có thể di chuyển trong phạm vi của bản đồ và có mức
độ ưu tiên khi xuất hiện trên bản đồ khác nhau
Cách tổ chức bản đồ trong game là phần rất quan trọng, đố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ớ để lưu dữ liệu hình ảnh Hình ảnh được lưu là một vùng hình chữ nhật, có thể là hình ảnh được tải lên từ một file hình ảnh nào đó hoặ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ẽ lên màn hình để hiển thị hình ảnh đồ họa trong game
3.1.2 Các kỹ thuật xử lý
a Lọc màu
Gần như tất cả các ảnh số hiện nay được lưu dưới dạng hình chữ nhật, nhưng các hình ảnh được dùng trong game thì có vô số kiểu khác nhau Có hai phương pháp giải quyết vấn đề này là dùng các định dạng ảnh có kênh alpha và dùng phương pháp lọc màu khi vẽ lên màn hình
Các định dạng ảnh có kênh alpha như gif, png có thêm một giá trị lưu độ mờ tại pixel đó, nếu giá trị này bằng không thì pixel đó trong suốt và không được nhìn thấy
Tuy nhiên khi sử dụng các định dạng này việc thay đổi độ mờ, vị trí mờ trong chương trình sẽ khó khăn vì vậy ở đây tôi sử dụng cơ chế chọn màu Hình cần
sử dụng được vẽ trên một màu nền đồ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ền, ta được hình cần vẽ
Trang 20Hình II.2: Ảnh chưa lọc màu nền
Hình II.3: Ảnh đã lọ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ển động trong game được mịn Trong game có nhiều đối tượng với nhiều hình ảnh đồ họa được vẽ liên tục Nếu cứ mỗi lần có 1 đối tượng thay đổi ta lại cập nhật lên màn hình thì sẽ không tạo được cảm giác các đối tượng chuyển động đồng thời Để giải quyết vấn
đề này chúng ta chờ tất cả các đối tượng thay đổ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ến các các đối tượng lúc thì chuyển động nhanh lúc thì chuyển động chậm tạo cảm giác game bị giật Để giải quyết vấn đề này ta quy đị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ện chúng đã đủ thời gian quy định cho 1 frame hay chưa Nếu nhỏ hơn thì đợi cho đến lúc đủ thời gian mới cập nhật tất cả lên màn hình
Trang 21Hình II.4: Sơ đồ thuật toán đồ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ệnh được người lập trình định sẵn để chương trình sử dụng đọc và thực hiện theo script đó Các chương trình được viết bằng ngôn ngữ này hầu hết không được biên dịch, chúng không hoạt động độc lập được mà phụ thuộc vào chương trình hổ trợ chúng
Ngôn ngữ kịch bản được biết đến nhiều nhất là javascript được nhúng vào các trang web Ngoài ra còn có Macromedia Flash – ActionScript dùng để lập trình trong flash, Lua, Shell…
Việc thiết kế bản đồ trong game là một phần quan trọng Nếu một game được đầu tư rất tốt về phần đồ họa nhưng bản đồ được thiết kế không tốt, không hấp dẫn
và khó khăn cho người chơi thì game đó sẽ mất điểm rất nhiều Ngoài ra để bản đồ
có thể thay đổi dễ dàng và mở rộng sau khi game hoàn thành, tôi đã định nghĩa một ngôn ngữ script đơn giản để tách phần thiết kế ra khỏi mã nguồn của chương trình Khi đó việc thiết kế bản đồ sẽ không phụ thuộc vào mã nguồn của chương trình và thậm chí người sử dụng cũng có thể tự thiết kế bản đồ nếu muốn
BẮT ĐẦU
Time < frameTime
frameTime = const Time = thời điểm bắt đầu
Time = thời gian hiện tại – thời điểm bắt đầu
KẾT THÚC đúng
sai
Trang 22d Tổ chức bản đồ
Có nhiều cách tổ chức bản đồ, tuy nhiên có 2 cách thông dụng nhất đó là
dùng Tile và dùng Background Trong chương trình này em tổ chức bản đồ bằng Background
Cách tổ chức bản đồ dùng Background thường được áp dụng với những game có bản đồ lớn hơn nhiều lần cửa sổ hiển thị Một Background có kích thước
lớn hơn hoặc bằng với cửa sổ hiển thị được vẽ đầu tiên làm hình nền Tất cả những
đối tượng khác trong game sẽ được vẽ lên trên Background này theo thứ tự ưu tiên
Trang 23Hình II.5: Sơ đồ thuật toán cuộn Background theo chiều dọc từ trên xuống dưới
tốc độ cuộn map = const
bgY = bgY ± tốc độ cuộn map
bgY < - background.height
hoặc bgY > background height
Trang 24Hình II.6: Sơ đồ thuật toán kiểm tra va chạm
Trang 25g Vòng lặp game (Game loop)
Hình II.7: Sơ đồ vòng lặp chính của game
Cập nhật tọa
độ mới Khởi tạo
Xác định va chạm
Nhận sự kiện
từ người chơi
Vẽ lên màn hình
Thoát Game
Đúng
Sai BẮT ĐẦU
KẾT THÚC