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

Đồ án lập trình di động Lập trình game code java

60 2,1K 6

Đ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

Tiêu đề Đồ án lập trình di động lập trình game code java
Tác giả Nguyễn Đức Hải
Người hướng dẫn ThS. Trịnh Thị Vân Anh
Trường học PTIT
Chuyên ngành Lập trình di động
Thể loại Đồ án
Định dạng
Số trang 60
Dung lượng 7,32 MB

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

Nội dung

MỤC LỤC DANH MỤC CÁC HÌNH VẼ, SƠ ĐỒ iii MỞ ĐẦU 1 LỜI CẢM ƠN 3 CHƯƠNG 1. GIỚI THIỆU CHUNG VỀ GAME VÀ GAME TRÊN THIẾT BỊ DI ĐỘNG 4 1.1. Khái quát về game 4 1.2. Game trên thiết bị di động 6 1.3. Sơ lược quy trình phát triển game trên di động 6 1.4. Một số framework hỗ trợ việc phát triển game trên Android 8 CHƯƠNG 2. GIỚI THIỆU VỀ ANDENGINE 10 2.1. Các khái niệm chính trong lập trình AndEngine 10 2.1.1. Camera 10 2.1.2. Scene 10 2.1.3. Layer 10 2.1.4. Sprite 10 2.1.5. Entity 10 2.1.6. Modifier 10 2.1.7. Texture 11 2.1.8. Texture Region 11 2.1.9. Engine 11 2.1.10. BaseGameActivity 11 2.1.11. Box2D Physics Engine 11 2.2. Vòng đời của một game AndEngine 11 2.2.1. BaseGameActivity 11 2.2.2. SimpleBaseGameActivity 12 2.3. Một số thành phần của AndEngine được dùng trong PTITit Game 14 2.3.1. Camera / EngineOptions 14 2.3.2. BitmapTextureAtlas / Texture 15 2.3.3. Sprite / AnimatedSprite 17 2.3.4. Font 18 2.3.5.Text 18 2.3.6.Physics Box2D 19 CHƯƠNG 3. PHÂN TÍCH VÀ THIẾT KẾ ‘PTITIT GAME’ 21 3.1. Giới thiệu chung 21 3.2. Level 1 21 3.2.1. Thể loại: 21 3.2.2. Mô tả kịch bản 21 3.2.3. Thiết kế chi tiết 22 3.2.4. Ảnh chụp màn hình 27 3.3. Level 2. 29 3.3.1. Thể loại: 29 3.3.2. Mô tả kịch bản 29 3.3.3. Thiết kế chi tiết 29 3.3.4. Ảnh chụp màn hình 38 3.4. Một số thành phần khác trong game 39 3.4.1. Config 39 3.4.2.ValueControl 39 3.4.3. DBUtil và DBManager 39 3.4.4. MusicBackground và Sound 39 3.4.5. Util 40 3.5. Dữ liệu dùng trong PTITit Game 40 CHƯƠNG 4. CÀI ĐẶT ‘PTITIT GAME’ 42 4.1. Xử lý các thành phần trong game. 42 4.1.1. Xử lý đồ họa. 42 4.1.2. Xử lý font chữ. 44 4.1.3. Xử lý âm thanh. 44 4.1.4. Xử lý dữ liệu CSDL. 44 4.2. Yêu cầu của hệ thống khi cài đặt. 45 4.2.1. Yêu cầu cho phần lập trình. 45 4.2.2. Yêu cầu cho framework. 45 4.2.3. Yêu cầu cho phần chạy game. 46 4.3. Các module đã hoàn thành. 47 4.3.1. Sơ đồ các luồng màn hình của PTITit Game. 47 4.3.2. Màn hình các module game đã hoàn thiện. 48 CHƯƠNG 5. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 53 DANH MỤC TÀI LIỆU THAM KHẢO 54

Trang 1

DANH MỤC CÁC HÌNH VẼ, SƠ ĐỒ iii

MỞ ĐẦU 1

LỜI CẢM ƠN 3

CHƯƠNG 1 GIỚI THIỆU CHUNG VỀ GAME VÀ GAME TRÊN THIẾT BỊ DI ĐỘNG 4

1.1 Khái quát về game 4

1.2 Game trên thiết bị di động 6

1.3 Sơ lược quy trình phát triển game trên di động 6

1.4 Một số framework hỗ trợ việc phát triển game trên Android 8

CHƯƠNG 2 GIỚI THIỆU VỀ ANDENGINE 10

2.1 Các khái niệm chính trong lập trình AndEngine 10

2.1.1 Camera 10

2.1.2 Scene 10

2.1.3 Layer 10

2.1.4 Sprite 10

2.1.5 Entity 10

2.1.6 Modifier 10

2.1.7 Texture 11

2.1.8 Texture Region 11

2.1.9 Engine 11

2.1.10 BaseGameActivity 11

2.1.11 Box2D Physics Engine 11

2.2 Vòng đời của một game AndEngine 11

2.2.1 BaseGameActivity 11

2.2.2 SimpleBaseGameActivity 12

2.3 Một số thành phần của AndEngine được dùng trong PTITit Game 14

2.3.1 Camera / EngineOptions 14

2.3.2 BitmapTextureAtlas / Texture 15

2.3.3 Sprite / AnimatedSprite 17

2.3.4 Font 18

2.3.5.Text 18

2.3.6.Physics Box2D 19

Trang 2

3.2 Level 1 21

3.2.1 Thể loại: 21

3.2.2 Mô tả kịch bản 21

3.2.3 Thiết kế chi tiết 22

3.2.4 Ảnh chụp màn hình 27

3.3 Level 2 29

3.3.1 Thể loại: 29

3.3.2 Mô tả kịch bản 29

3.3.3 Thiết kế chi tiết 29

3.3.4 Ảnh chụp màn hình 38

3.4 Một số thành phần khác trong game 39

3.4.1 Config 39

3.4.2.ValueControl 39

3.4.3 DBUtil và DBManager 39

3.4.4 MusicBackground và Sound 39

3.4.5 Util 40

3.5 Dữ liệu dùng trong PTITit Game 40

CHƯƠNG 4 CÀI ĐẶT ‘PTITIT GAME’ 42

4.1 Xử lý các thành phần trong game 42

4.1.1 Xử lý đồ họa 42

4.1.2 Xử lý font chữ 44

4.1.3 Xử lý âm thanh 44

4.1.4 Xử lý dữ liệu CSDL 44

4.2 Yêu cầu của hệ thống khi cài đặt 45

4.2.1 Yêu cầu cho phần lập trình 45

4.2.2 Yêu cầu cho framework 45

4.2.3 Yêu cầu cho phần chạy game 46

4.3 Các module đã hoàn thành 47

4.3.1 Sơ đồ các luồng màn hình của PTITit Game 47

4.3.2 Màn hình các module game đã hoàn thiện 48

CHƯƠNG 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 53

DANH MỤC TÀI LIỆU THAM KHẢO 54

Trang 4

Hình 2.1: Ví dụ một cấu trúc đơn giản của BaseGameActivity 12

Hình 2.2: Cấu trúc của một SimpleBaseGameActivity trong AndEngine GLES2 13

Hình 2.3: Ví dụ về phương thức onCreateEngineOptions() 13

Hình 2.4: Ví dụ về phương thức onCreateResources() 14

Hình 2.5: Ví dụ về phương thức onCreateScene() 14

Hình 2.6: Ví dụ về TiledTextureRegion true_TTR sử dụng trong PTITit Game: 16

Hình 2.7: Ví dụ về font UVFBarmBrack.ttf được sử dụng trong PTITit Game 18

Hình 2.8: Tạo hình chữ nhật bao quanh là các StaticBody của level 2 trong PTITit Game 20

Hình 3.1: Giao diện phác thảo Level 1 22

Hình 3.2: Cấu trúc các thành phần của Level 1 23

Hình 3.3: Các biến sử dụng trong LaunchLevel1.java 23

Hình 3.4: phương thức onCreate() của LaunchLevel1.java 24

Hình 3.5: Phương thức onCreateEngineOptions() của LaunchLevel1.java 24

Hình 3.6: phương thức onCreateResources() của LaunchLevel1.java 25

Hình 3.7: phương thức onCreateScene() của LaunchLevel1.java 25

Hình 3.8: Thể hiện của lớp KhungCauHoi.java trong Level 1 26

Hình 3.9: Thể hiện của lớp KhungHinhAnh.java trong Level 1 26

Hình 3.10: Thể hiện của lớp ThoiGianDemNguoc.java và Diem.java trong Level 1 27

Hình 3.11: Resource.java trong Level 1 27

Hình 3.12: Một số hình ảnh dùng cho các Sprite trong Level 1 27

Hình 3.13: Ảnh chụp màn hình Level 1 28

Hình 3.14: Ảnh chụp màn hình Level 1 28

Hình 3.15: Ảnh chụp màn hình Level 1 28

Hình 3.16: Giao diện phác thảo Level 2 30

Hình 3.17: Các phương thức của IAccelerationListener 31

Hình 3.18: Cấu trúc các thành phần của Level 2 33

Hình 3.19: Các biến sử dụng trong LaunchLevel2.java 33

Hình 3.20: Phương thức onCreate() của LaunchLevel2.java 35

Hình 3.21: Khởi tạo môi trường vật lý trong LaunchLevel2.java 35

Hình 3.22: Tạo hình chữ nhật giới hạn miền di chuyển quả bóng 35

Hình 3.23: Gán trạng thái cho các cạnh của hình chữ nhật 36

Hình 3.24: Gắn hình chữ nhật tĩnh vào trong Scene 36

Hình 3.25: Tạo quả bóng trong LaunchLevel2.java 36

Hình 3.26: Đăng kí PhysicsWorld cho Scene 36

Hình 3.27: Thể hiện của lớp ThoiGianDemNguoc.java và Diem.java trong Level 2 37

Hình 3.28: Một số hình ảnh dùng cho các Sprite trong Level 2 38

Hình 3.29: Ảnh chụp màn hình Level 2 38

Hình 3.30: Ảnh chụp màn hình Level 2 38

Hình 3.31: Ảnh chụp màn hình Level 2 38

Hình 3.32: Config trong PTITit Game 39

Hình 3.33: ValueControl trong PTITit Game 39

Trang 5

Hình 3.36: Util trong PTITit Game 40

Hình 3.37: Cấu trúc bảng QUESTIONS trong PTITITGAMEDB 40

Hình 4.1: Logo PTITit Game 42

Hình 4.2: Button Music sử dụng Photoshop 42

Hình 4.3: Button Thoát sử dụng Photoshop 43

Hình 4.4: Dialog sử dụng Photoshop 43

Hình 4.5: Tạo hình nền bằng Paper Artist 43

Hình 4.6: Giao diện SQLite Manager 45

Hình 4.7: Cấu hình cho project sử dụng AndEngine GLES2 và extension 46

Hình 4.8: Sơ đồ các luồng màn hình trong PTITit Game 47

Hình 4.9: Splash Screen 48

Hình 4.10: Menu Screen 48

Hình 4.11: Guide Screen 49

Hình 4.12: High Score Screen 49

Hình 4.13: About Screen 50

Hình 4.14: Select Level Screen 50

Hình 4.15: Dialog Play 50

Hình 4.16: Dialog Intro Level 51

Hình 4.17: LaunchLevel1 51

Hình 4.18: LaunchLevel2 52

Hình 4.19: Dialog Game Over 52

Trang 6

Đất nước ta đang trong thời kỳ công nghiệp hóa, hiện đại hóa, đời sống người dânkhông ngừng cải thiện, kéo theo đó là nhu cầu về vật chất và tinh thần được nâng cao Trong

số đó phải kể đến nhu cầu về các thiết bị di động Ngày nay, việc sử dụng thiết bị di động(điện thoại di động, máy tính bảng ) đã trở nên rất phổ biến đối với mọi lứa tuổi, mọi tầnglớp trong xã hội Bởi vậy, có thể dễ dàng nhận ra thị trường di động là một thị trường rất tiềmnăng mà nhiều cá nhân, tập thể, doanh nghiệp muốn nhắm tới Cùng với sự ra đời những sảnphẩm thiết bị di động công nghệ cao của Apple, Nokia, Samsung, LG, HTC và sự phát triểncủa các hệ điều hành Android, iOS, Window Phone các thiết bị di động ngày càng thu hútmột số lượng lớn người dùng trên toàn thế giới Và một yếu tố quan trọng trong sự thu hút đóphải kể đến game mobile – trò chơi trên thiết bị di động

Game từ lâu đã là một dịch vụ giải trí rất phổ biến đối với người dùng Việt Nam Dịch

vụ game có thể được phát triển trên nhiều nền tảng như PC, mobile, browser Cùng với game

PC và game browser, ngày nay, game dành cho các thiết bị di động cũng đang thực sự bùngnổ

Ở Việt Nam, hệ điều hành Android của Google sử dụng trên các thiết bị di động thôngminh đang là một trong những hệ điều hành được ưa chuộng nhất Có nhiều cách thức pháttriển dịch vụ game trên hệ điều hành Android Trong đó, AndEngine nổi bật lên như một công

cụ đơn giản và hiệu quả bậc nhất để hỗ trợ việc phát triển game với đồ họa đẹp mắt

Trong phạm vi đồ án của mình, em xin trình bày một số kiến thức cơ bản về AndEngine,

và cách thức xây dựng “PTITit Game” sử dụng AndEngine trên hệ điều hành Android Gamechủ yếu tập trung chú ý vào việc sử dụng các đối tượng mà AndEngine hỗ trợ, khả năng thểhiện đồ họa trong AndEngine Game được phát triển theo 2 level Level 1 sử dụng nhữngSprite động và tĩnh, cùng với bộ đếm thời gian và cách tính điểm đơn giản Level 2 áp dụngthêm thành phần mở rộng về vật lý của AndEngine để làm game hấp dẫn hơn Bên cạnh đó,

“PTITit Game” cũng thể hiện một cách làm việc đơn giản với CSDL sqlite hay lưu dữ liệutrên thiết bị với SharedPreferences

Với mục tiêu như vậy, bố cục của đồ án sẽ bao gồm năm chương theo cấu trúc như sau:

Chương 1: Giới thiệu chung về game và game trên thiết bị di động

Trình bày một số hiểu biết chung về game và game trên thiết bị di động Các thành phần

cơ bản của một game, cũng như những lưu ý khi xây dụng một game trên thiết bị di động

Chương 2: Giới thiệu về AndEngine

Trình bày các kiến thức về AndEngine Vòng đời của một game AndEngine, và cácthành phần AndEngine hỗ trợ để phát triển game như Sprite, Font, Text, PhysicsBox2D

Chương 3: Phân tích và thiết kế “PTITit Game”

“PTITit Game” là một game được viết bằng AndEngine, dành cho sinh viên khoa côngnghệ thông tin Học viện Công nghệ Bưu chính Viễn thông Chương này trình bày cụ thể vềquá trình thực hiện việc xây dựng “PTITit Game” về kịch bản, cách chơi, cách xây dựng giaodiện cũng như các thành phần trong game qua từng level

Trang 7

Nêu ra những yêu cầu cho phần cài đặt và chạy game

Chương 5: Kết luận và hướng phát triển

Tổng kết, tóm tắt những kết quả đã đạt được và còn chưa đạt được Từ đó đề xuất mụctiêu hướng tới cũng như hướng nghiên cứu, phát triển tiếp theo

Trang 8

Lời đầu tiên em xin bày tỏ lòng biết ơn sâu sắc tới cô giáo Trịnh Thị Vân Anh, cô đãtận tình hướng dẫn, chỉ bảo và giúp đỡ em trong suốt những năm học vừa qua cũng như trongquá trình làm đồ án tốt nghiệp

Em xin bày tỏ lòng biết ơn tới các thầy, cô giáo trong khoa Công nghệ thông tin 1 Học viện Công Nghệ Bưu chính Viễn thông cơ sở Hà Đông Các thầy cô đã chỉ bảo, dạy dỗ

-và truyền đạt cho em những kiến thức cần thiết, luôn tạo điều kiện học tập tốt nhất cho emtrong suốt hơn 4 năm học tập tại trường

Cuối cùng, tôi xin chân thành cảm ơn các bạn trong tập thể lớp D09CN1 đã nhiệt tìnhgiúp đỡ cũng như đóng góp những ý kiến có giá trị giúp tôi hoàn thành được đồ án này

Hà Nội, ngày 20 tháng 11 năm 2013

Nguyễn Đức Hải

Trang 9

CHƯƠNG 1 GIỚI THIỆU CHUNG VỀ GAME VÀ GAME

TRÊN THIẾT BỊ DI ĐỘNG1.1 Khái quát về game

Kể từ khi máy tính xuất hiện, game đã trở thành một trong những ứng dụng phổ biến

nhất trên thị trường Trong cuốn sách Reality Is Broken, tác giả Jane McGonigal đã nêu ra 4

thuộc tính của phần lớn game trên thị trường:

+ Mục tiêu: Game chỉ ra một mục tiêu rõ ràng cho người chơi để họ đạt được Mục tiêu

là những thử thách đối với người chơi, nhưng họ có thể vượt qua Người chơi sẽ cảm thấyhứng thú nhất nếu mục tiêu đó phù hợp với khả năng của mình, không quá khó, không quá dễ.Mục tiêu rõ ràng, thú vị cũng là yếu tố quan trọng thu hút người chơi đến với game

+ Quy tắc: Game cũng có những quy tắc bắt buộc mà tất cả người chơi phải tuân theo.

Các quy tắc này thường làm cho việc đạt được mục tiêu nêu trên khó khăn hơn Điều đó cũngkhuyến khích sự sáng tạo của mỗi người

+ Phản hồi: Game cần phản hồi cho người chơi biết rằng họ đang làm công việc của

mình tốt hay không Một điều đáng lưu ý rằng, hệ thống phản hồi chính là chìa khóa để làmtrò chơi thú vị

+ Tham gia một cách tự nguyện: một trò chơi sẽ không còn là một trò chơi đúng nghĩa

nếu bạn không thực sự thích chơi nó Điều này ngụ ý rằng người chơi phải chấp nhận đượcmục tiêu, các quy tắc, và hệ thống phản hồi của trò chơi

Các thể loại game cơ bản

Những người phát triển game không chủ động phân loại các trò chơi của họ Và tấtnhiên, không có danh sách chuẩn nào về việc phân loại game Mặc dù vậy, theo thời gian, cáctrò chơi cũng dần được phân loại vào các lớp khác nhau theo những cách khác nhau Việcphân loại chính xác rất khó khăn Tuy vậy, chúng ta có thể kể đến một số loại game điển hìnhnhư sau:

+ Game hành động hay kỹ năng: Người chơi phải sử dụng một số kỹ năng trong thời

gian thực (VD: bắn vào một vật đang di chuyển ) để đạt được mục tiêu

+ Game về chiến lược: Người chơi ít phải sử dụng kỹ năng hơn, và chủ yếu tập trung

đưa ra những quyết định lựa chọn chiến lược hợp lý để vượt qua màn chơi

+ Game phiêu lưu hay có cốt truyện: Những game này được xây dựng dựa trên một cốt

truyện hấp dẫn, với các nhân vật được chau chuốt cùng với một cốt truyện cụ thể Cốt truyện

đó cũng định nghĩa ra mục tiêu cho người chơi trong thể loại game này

+ Game mô phỏng: Thông thường, game thuộc thể loại này mô tả lại một yếu tố có

trong thực tế (VD như lái một chiếc xe, chơi tennis )

+ Game câu đố: Một số trò chơi truyền tải trực tiếp câu đố đến với người chơi Tuy

nhiên, trong một số game phức tạp, những câu đố này có thể ẩn dưới nhiều hình thức khácnhau Có thể hiểu như một game nhỏ, trong một game lớn hơn

Trang 10

Các thành phần cơ bản của một game

+ Opening (Splash) Screen:

Để tối ưu hóa hiệu năng hoạt động, trước khi game sẵn sàng, đồ họa của level thườngđược nạp vào trước khi level đó bắt đầu Quá trình nạp dữ liệu có thể kéo dài đến vài giây.Trong thời gian đó, bạn không muốn để người dùng phải nhìn vào một màn hình trống Vậynên, hãy hiển thị một màn hình chờ (splash screen) Nó cho người dùng biết game vẫn đanghoạt động bình thường

+Hiệu ứng âm thanh (Sound Effects)

Những hiệu ứng âm thanh sẽ làm cho game trở nên thú vị hơn nhiều Ví dụ như khi haivật thể va chạm, người chơi muốn được nghe một tiếng động nào đó thể hiện sự va chạm này

Âm thanh sẽ làm cho game thân thiện hơn với người chơi

sẽ vui hơn nhiều

+ Chướng ngại vật (Obstacles)

Mỗi thể loại game khác nhau sẽ sử dụng những chướng ngại vật khác nhau Hãy lựachọn chướng ngại vật phù hợp để tăng độ khó cũng như thử thách người chơi

+ Cấp độ (Levels)

Thử thách trong game là một phần thúc đẩy người chơi Nhưng hãy biết cách giới hạnnó! Hãy chia những thử thách thành nhiều cấp độ Người chơi bắt đầu với những màn chơi dễdàng, rồi dần dần làm quen, nâng cao kỹ năng, để chiến thắng được những cấp độ khó hơn

+ Người chơi (Player)

Người chơi luôn là phần quan trọng nhất của bất kỳ game nào Game sẽ chỉ thành côngkhi luôn giữ được sự thú vị, lôi cuốn đối với người chơi Người chơi cần được thử thách bởicác thành phần trong game, nhưng không được quá thách thức khiến họ từ bỏ game trong thấtvọng Game cần bao gồm đủ nhiều yếu tố để duy trì sự quan tâm từ phía người chơi!

Trang 11

+ Màn chơi (Scenes)

Nếu coi trò chơi như một bộ phim, thì mỗi màn hình hiển thị cho người chơi cũng giốngnhư một cảnh trong phim Ở đó có sự thay đổi về nền đồ họa trong mỗi cảnh, nhưng khôngquá nhiều dù điểm nhìn của người chơi thay đổi Sau đó, ta thêm vào những thứ chuyển động,cùng với những chướng ngại vật để tạo ra một màn hình game hoàn chỉnh

1.2 Game trên thiết bị di động

Cùng với sự đa dạng và phong phú về thể loại game có thể lựa chọn, chúng ta cần tậptrung vào những yếu tố phù hợp nhất với nền tảng di động (điện thoại di động, máy tínhbảng ), đặc biệt quan tâm đến những game có thể phát triển bằng một nhóm ít người

Với tiềm năng to lớn của thị trường di động, không ngạc nhiên khi có rất nhiều nghiêncứu và tư tưởng được đưa ra nhằm mục đích tạo nên một game di động tốt Cùng với việc tiếptục áp dụng những nguyên tắc thông thường khi thiết kế game trên máy tính, ta cần quan tâmđến một số đặc điểm của game được thiết kế trên các thiết bị di động:

+ Không lãng phí thời gian của người chơi

+ Cung cấp sự trợ giúp cần thiết cho người chơi

+ Làm cho mục tiêu của trò chơi dễ hiểu

+ Hiển thị các trạng thái trong game một cách rõ ràng

+ Người dùng di động thường chỉ chơi game trong một thời gian ngắn

+ Người chơi có thể dễ dàng tạm dừng hay tiếp tục game khi cần thiết

+ Người chơi có thể đạt được tiến bộ trong một thời gian ngắn

+ Những hạn chế của thiết bị di động ảnh hưởng đến việc xây dựng game:

 Kích thước màn hình nhỏ, và đa dạng về kích thước màn hình, độ phân giải

 Có rất nhiều cách thức nhập dữ liệu từ người dùng (bàn phím, cảm ứng, cảmứng đa điểm, )

 Hạn chế về khả năng tính toán

 Hạn chế về pin

1.3 Sơ lược quy trình phát triển game trên di động

Một đội phát triển game trên thiết bị di động thường có những vị trí sau:

+ Người viết kịch bản

+ Lập trình viên

+ Người thiết kế đồ họa

+ Người soạn nhạc và hiệu ứng âm thanh

+ Người kiểm tra và đóng gói sản phẩm

Cần có một tài liệu thật tốt để mọi người trong nhóm có chung tiếng nói, hiểu được mụctiêu chung và cùng nhau phát triển tốt sản phẩm game

Trang 12

Xét về mặt tổng quát, có thể chia phát triển game thành 4 giai đoạn:

GĐ1: Giai đoạn tiền sản phẩm/ý tưởng

Ở giai đoạn này, từng thành viên phát triển ý tưởng, sau đó thống nhất với cả đội để xácđịnh ý tưởng chủ đạo của sản phẩm Qua giai đoạn này, các ý tưởng cho lập trình, nội dung,thể loại game (action, puzzle, adventure, platform, sport, RPG ), phong cách đồ họa và âmnhạc dần được hình thành thể hiện qua biểu đồ, đặc tả, các thông số thử nghiệm, hình vẽ tay

về nhân vật (sketch), giai điệu nhạc được lựa chọn và thống nhất xuyên suốt các giai đoạnphát triển

GĐ2: Đặc tả cho lập trình

Đây là một giai đoạn rất quan trọng trong quá trình thiết kế game Bạn càng bỏ nhiềuthời gian cho giai đoạn này thì khi lập trình, gỡ lỗi càng tiết kiệm thời gian Lập trình viênchuyên nghiệp hiểu rằng lỗi xuất hiện trong quá trình thiết kế sẽ thiệt hại hơn nhiều so với lỗiđược phát hiện trong giai đoạn này

Bạn cần giấy, bút hay chương trình văn bản và cùng với một vài người khác chơi thửgame Khi “chơi thử” bằng cách ghi ra giấy, các ưu/khuyết của thiết kế sẽ lộ rõ và bạn có thểchỉnh sửa cho đến khi cảm thấy vừa ý

GĐ3: Thực hiện viết code, thiết kế đồ họa và chọn nhạc, hiệu ứng âm thanh

Với đặc tả đã có, hãy dự tính thời lượng cho việc lập trình, tính toán ngày công kỹ càng

để có thể ước tính khối lượng công việc và dễ theo dõi tiến độ Và phải đảm bảo việc codeđúng với những gì đã đặc tả trong game

Bên cạnh việc viết code, thiết kế đồ họa trong game cũng cần đặc biệt lưu tâm Do độphân giải của màn hình điện thoại di động khá nhỏ nên mọi vật thể đồ họa trong game đềuđược thực hiện bằng đồ họa điểm ảnh (pixel art), vì vậy người thiết kế đồ họa ngoài kiến thức

về vẽ tay, đổ bóng còn phải có kỹ năng thao tác tỉ mỉ

Âm thanh trong game là một phần rất quan trọng tạo nên cái hồn của game Việc lựachọn hay mix nhạc phù hợp sẽ tạo sự hào hứng với người chơi, tăng độ hấp dẫn cho game củabạn Hiện tại cũng có nhiều chương trình giúp cho việc soạn nhạc dễ dàng mà không cần biếtnhiều về nhạc lý, bạn chỉ cần lựa vài hợp âm, nhạc cụ, tempo, điệu nhạc , và chương trình sẽtạo bản nhạc cho bạn

GĐ4: Kiểm tra và đóng gói sản phẩm

Kiểm tra: Nhóm lập trình sẽ cùng chơi thử, cảm nhận và ghi lại tất cả các ưu và khuyết.Sửa các lỗi nếu có Phát hành bản beta cho game thủ chơi thử và lấy ý kiến của họ

Đóng gói: game cho di động phải được “xuất” hay đóng gói cho các dòng máy khácnhau (do các dòng máy này khác nhau về phím nhấn, bộ nhớ và thư viện hỗ trợ)

1.4 Một số framework hỗ trợ việc phát triển game trên Android

Do nhu cầu không ngừng của người chơi game cũng như của những nhà phát triển, ngàynay trên thị trường có rất nhiều framework hỗ trợ việc xây dựng và phát triển game trên cácthiết bị di động, đặc biệt là trên hệ điều hành Android

Trang 13

Tùy theo yêu cầu và đặc điểm của từng game, mà lập trình viên lựa chọn cho mìnhframework thích hợp để lập trình Một số framework cơ bản có thể kể đến như:

+ Libgdx: Libgdx framework được phát triển dựa trên nghiên cứu về game development

cross-platform Nghĩa là game của bạn khi viết ra bằng Libgdx framework, nó sẽ chơi đượctrên Desktop, Web, Android, iOS và trong tương lai có thể thêm những platform khác nữa!Khi bạn code game sử dụng Libgdx framework, bạn có thể code trên desktop và debug ở đó,sau khi game hoàn thiện, bạn hoàn toàn có thể mang game đó chạy trên các platform khác màkhông cần sửa chữa mã nguồn nhiều Libgdx framework tối ưu hóa game của bạn bởi cácthành phần thiết kế như quản lý tài nguyên được viết bằng Native code Libgdx framework cóphần tài liệu hướng dẫn rất tuyệt vời và được hỗ trợ qua forum một cách nhanh chóng và nhiệttình Libgdx framework có nhiều game example, nhiều source code, và có rất nhiều gamethương mại và phi thương mại đã và đang sử dụng Libgdx framework

Ligdx framework thích hợp để xây dựng những game chơi được trên nhiều platform, vànhững game hành động đòi hỏi di chuyển mượt mà

+ AndEngine: AndEngine là một bộ các công cụ để phát triển video game, được phát

triển bởi Nicolas Gramlich Nó bao gồm đầy đủ các thuộc tính quan trọng nhất của OpenGL,ngay cả khi bạn không có kinh nghiệm với OpenGL - bạn vẫn có thể tạo ra 1 game có đồ họađẹp và đầy đủ tính năng hoặc 1 ứng dụng đẹp mắt sử dụng công cụ này

Tất cả các phương diện quan trọng của một game đều được định nghĩa sẵn trongAndEngine, và rất dễ dàng để sử dụng AndEngine có thể làm việc trên nhiều thiết bị khácnhau, với độ phân giải khác nhau Hỗ trợ cảm ứng đa điểm, và hình nền động Bằng những lợithế đó, AndEngine rất thích hợp để xây dựng những game yêu cầu đồ họa cùng những hiệuứng đẹp mắt

Trong khuôn khổ đồ án này, chúng ta sẽ tập trung tìm hiểu về AndEngine GLES2

Trang 14

CHƯƠNG 2 GIỚI THIỆU VỀ ANDENGINE2.1 Các khái niệm chính trong lập trình AndEngine

Để có thể hiểu và làm việc tốt với AndEngine, trước hết chúng ta xem xét một số kháiniệm chính thường được nhắc đến khi lập trình với AndEngine:

2.1.1 Camera

Các "camera" của trò chơi xác định giao diện được trình bày cho người chơi Nó giốngnhư một máy quay phim trong không gian hai chiều Chiếc máy quay này có thể giãn vàphóng trên các cảnh để thay đổi khung nhìn trình bày Sự co dãn và phóng to có thể được thựchiện dưới sự kiểm soát của người chơi hoặc được điều khiển theo chương trình

2.1.2 Scene

Một trò chơi, giống như một bộ phim, bao gồm một loạt các cảnh nơi hành động diễn

ra Trong một bộ phim, những cảnh được biên tập lại với nhau theo một cách cố định Trongtrò chơi, trình tự của cảnh được dẫn dắt bởi lối chơi của trò chơi Trò chơi giống như bộ phimđược chỉnh sửa từ trên cao nhìn xuống

2.1.3 Layer

Cảnh bao gồm các lớp đồ họa Các lớp được chồng lên nhau, giống như các tế bào hoạthình được sử dụng để làm phim hoạt hình theo cách cổ điển Các lớp cũng có thể được sửdụng để giới thiệu hiệu ứng 2½D, ví dụ như việc điều chỉnh máy quay, các lớp gần hơnchuyển động nhanh hơn các lớp ở xa

2.1.4 Sprite

Những Sprite là những đại diện trực quan của các diễn viên trong bộ phim của chúng ta

Dù cho các sprite là hình động hay tĩnh, chúng vẫn thường di chuyển trong những màn chơi.Kết cấu Sprite thường được nạp từ một hình ảnh lớn mà bao gồm một tập hợp các hình ảnhhọa tiết, được gọi là một sprite sheet

2.1.5 Entity

Trong AndEngine, các thực thể là tất cả những thứ được vẽ trên màn hình Các thực thể

có thể là các sprite, các hình dạng hình học, hay các dòng kẻ trên màn hình Tất cả các thựcthể đều có các thuộc tính, chẳng hạn như màu sắc, góc quay, độ lớn,vị trí, và có thể đượcthay đổi bằng các Modifier

2.1.6 Modifier

Các modifier thay đổi các thuộc tính của một thực thể, và chúng là công cụ rất mạnh mẽđược sử dụng trong AndEngine Chúng có thể được áp dụng trên bất kỳ thực thể nào, và sựthay đổi mà chúng gây ra có thể là trực tiếp hoặc diễn ra từ từ trong một thời gian nhất định.Trong trò chơi, chúng ta thường sẽ sử dụng các modifier để tạo hiệu ứng với các sprite và cácthực thể khác

Trang 15

2.1.10 BaseGameActivity

Lớp này, được mở rộng của lớp Activity Android, sẽ là cơ sở của mỗi scene trong tròchơi của chúng ta BaseGameActivity làm các công việc chung cho tất cả các scene, thiết lậpcác công cụ trò chơi, phù hợp với các yêu cầu vòng đời hoạt động Android

2.1.11 Box2D Physics Engine

Physics Box2D là một thành phần mở rộng của AndEngine, nó hỗ trợ việc mô phỏng sựtương tác thực tế giữa các đối tượng vật lý trong các trường hợp sau đây:

+ Mô phỏng các tính chất vật lý của các vật rắn

+ Ổn định xếp chồng

+ Trọng lượng

+ Các đơn vị được người dùng xác định

+ Giải quyết hiệu quả cho sự tương tác / liên lạc

+ Trượt ma sát

+ Làm việc với các hình học: Hộp, hình tròn, đa giác

+ Một số loại liên kết: khoảng cách, lăng trụ, ròng rọc,

+ Trạng thái ngủ (loại bỏ cơ thể bất động từ các mô phỏng cho đến khi chạm vào)

2.2 Vòng đời của một game AndEngine

2.2.1 BaseGameActivity

Điều quan trọng đầu tiên, cần lưu ý đến việc khởi tạo game Nhu cầu cơ bản của mộtgame khi khởi tạo bao gồm việc tạo ra engine, nạp tài nguyên của game, và thiết lập màn hìnhkhởi tạo Mỗi một game viết bằng AndEngine được thể hiện thông qua classBaseGameActivity BaseGameActivity là một lớp con kế thừa từ class Activity của Android

Để hiểu được quá trình hoạt động của BaseGameActivity, ta xem xét vòng đời của nó

Trang 16

Một class BaseGameActivity chứa một số phương thức mà chúng ta cần phải ghi đètrực tiếp Đó là:

+ onCreateEngineOptions(): Sử dụng để khởi tạo các thành phần cơ bản của một game

AndEngine như khởi tạo engineOptions, camera

+ onCreateResources(): Sử dụng để khởi tạo tài nguyên cho game như khởi tạo texture,

region, âm thanh, font chữ …

+ onCreateScene(): Khởi tạo các màn hình chơi, các nhân vật và các thành phần trong

game như sprite, animatedSprite …

+ onPopulateScene(): Là nơi chúng ta gắn các entity con cho scene tương ứng

Hình 2.1: Ví dụ một cấu trúc đơn giản của BaseGameActivity.

Trang 17

SimpleBaseGameActivity được tạo ra cho AndEngine GLES2 SimpleBaseGameActivityđược cho là giống với BaseGameActivity trong AndEngine GLES1, và đã đáp ứng được điều

mà rất nhiều người phát triển AndEngine muốn vào thời điểm đó

Điều làm nên sự khác biệt cho BaseGameActivity (GLES2) là chúng ta có nhiều quyềnkiểm soát hơn đối với ứng dụng của mình, vì các phương thức sẽ không được gọi một cách tựđộng (bên cạnh việc thiết lập các tùy chọn engine) Phần lớn các phương thức được thực hiệntương tự khi sử dụng BaseGameActivity trong GLES1, nhưng bạn sẽ phải cung cấp một lờigọi lại (callback) Một callback cho chương trình biết rằng chúng ta đã làm việc xong vớiphương thức, nó sẽ chuyển sang phương pháp tiếp theo Điều này giúp chúng ta linh hoạt hơnrất nhiều trong việc nạp tài nguyên game

Hình 2.2: Cấu trúc của một SimpleBaseGameActivity trong AndEngine GLES2.

Dưới đây là một ví dụ về SimpleBaseGameActivity:

+ onCreateEngineOptions():

Hình 2.3: Ví dụ về phương thức onCreateEngineOptions()

Ví dụ: Chúng ta tạo một Camera có kích thước WIDTH x HEIGHT, bắt đầu từ vị trí(0,0) của màn hình

Trang 18

Sau đó khởi tạo engineOptions có hàm khởi tạo như trên với ý nghĩa là:

true: chế độ toàn màn hình;

ScreenOrientation.LANDSCAPE_FIXED: xoay màn hình theo chiều ngang;

new FillResolutionPolicy(): điền kín màn hình, bỏ qua tỉ lệ;

Hàm khởi tạo được sử dụng:

Camera(final float pX, final float pY, final float pWidth, final float pHeight)

Trong đó:

+ pX, pY: là tọa độ bắt đầu của Camera trong màn hình hiển thị của thiết bị

Trang 19

+ pWidth, pHeight: là kích thước chiều ngang và chiều dọc của Camera.

b EngineOptions

Hàm khởi tạo được sử dụng:

EngineOptions(final boolean pFullscreen, final ScreenOrientation pScreenOrientation,final IResolutionPolicy pResolutionPolicy, final Camera pCamera)

Trong đó:

+ pFullscreen: là chế độ toàn màn hình

+ pScreenOrientation: Chiều của màn hình

pScreenOrientation có thể nhận các giá trị:

ScreenOrientation.PORTRAIT_FIXED: màn hình xoay theo chiều dọc

ScreenOrientation.LANDSCAPE_FIXED: màn hình xoay theo chiều ngang

+ pResolutionPolicy: cho biết cách thức làm việc với các màn hình khác nhau

pResolutionPolicy có thể là:

RatioResolutionPolicy(final float pWidthRatio, final float pHeightRatio): mở rộng đồhọa để điền vào nhiều nhất có thể các phần trong màn hình mà vẫn duy trì tỉ lệ ban đầu củađối tượng đồ họa

FillResolutionPolicy(): lấp đầy đồ họa trong màn hình, không quan tâm đến tỉ lệ

FixedResolutionPolicy(final int pWidth, final int pHeight): sử dụng kích thước cố địnhban đầu, và không thay đổi cho bất kì loại màn hình nào

RelativeResolutionPolicy(final float pWidthScale, final float pHeightScale): sử dụngmột quy mô cố định trên một kích thước ban đầu Ta nên sử dụng cách này nếu muốn tối ưutrên một số thiết bị cụ thể

2.3.2 BitmapTextureAtlas / Texture

Bất cứ khi nào chúng ta muốn nạp một đối tượng đồ họa vào trong game AndEngine,điều bắt buộc phải làm đó là khai báo cho đối tượng đồ họa đó một nơi để chứa thông tin cácđiểm ảnh Trong AndEngine, BitmapTextureAtlas có thể hiểu như một khung tranh, cònTexture sẽ đóng vai trò như một bức hình để vào trong khung tranh BitmapTextureAtlas đó Các BitmapTextureAtlas và các Texture phải được nạp vào lúc khởi tạo game, sẽ được

đặt trong hàm onCreateResources();

a BitmapTextureAtlas

Hàm khởi tạo được sử dụng:

BitmapTextureAtlas(final TextureManager pTextureManager, final int pWidth, final intpHeight, final TextureOptions pTextureOptions)

Trang 20

+ pTextureOption: là cách thức khung tranh sẽ được hiển thị.

b Texture

o TextureRegion

TextureRegion được sử dụng để chứa thông tin đồ họa của những Sprite tĩnh

Cách khai báo được sử dụng:

TextureRegion createFromAsset(final BitmapTextureAtlas pBitmapTextureAtlas, finalContext pContext, final String pAssetPath, final int pTextureX, final int pTextureY)

Trong đó:

+ pBitmapTextureAtlas: là khung tranh BitmapTextureAtlas sẽ chứa tấm hình này

+ pContext: là Activity chứa đối tượng này

+ pAssetPath: đường dẫn đến bức hình

+ pTextureX, pTextureY: hai tọa độ đầu tiên trong khung tranh BitmapTextureAtlas đểđặt tấm hình này

o TiledTextureRegion

TiledTextureRegion được sử dụng để nạp thông tin đồ họa của những Sprite động, tức

là những TiledSprite Trong mỗi bức hình có nhiều phần nhỏ, mỗi phần là một trạng thái củaSprite theo thời gian

Hình 2.6: Ví dụ về TiledTextureRegion true_TTR sử dụng trong PTITit Game:

Cách khai báo được sử dụng:

pBitmapTextureAtlas, final Context pContext, final String pAssetPath, final int pTextureX,final int pTextureY, final int pTileColumns, final int pTileRows)

Trong đó:

+ pBitmapTextureAtlas: là khung tranh BitmapTextureAtlas sẽ chứa tấm hình này

+ pContext: là Activity chứa đối tượng này

+ pAssetPath: đường dẫn đến bức hình

+ pTextureX, pTextureY: hai tọa độ đầu tiên trong khung tranh BitmapTextureAtlas đểđặt tấm hình này

Trang 21

+ pTileColumns, pTileRows: là số cột, số hàng của bức hình.

2.3.3 Sprite / AnimatedSprite

Sprite là thành phần chính trong game Bất kì game nào cũng cần có Sprite, thậm chí lànhiều Sprite trong mỗi màn chơi Sprite có thể ở dạng tĩnh (Sprite) – không thay đổi hìnhdạng, hay động (AnimatedSprite) – thay đổi hình dạng theo thời gian

Việc khai báo Sprite / AnimatedSprite sẽ được đặt trong hàm onCreateScene();

a Sprite

Các hàm khởi tạo được sử dụng:

public Sprite(final float pX, final float pY, final ITextureRegion pTextureRegion, finalVertexBufferObjectManager pVertexBufferObjectManager) (1)

public Sprite(final float pX, final float pY, final float pWidth, final float pHeight, final ITextureRegion pTextureRegion, final VertexBufferObjectManager

pVertexBufferObjectManager) (2)

Trong đó:

+ pX, pY: là tọa độ bắt đầu của Sprite đặt trong Scene

+ pWidth, pHeight: là kích thước chiều ngang và chiều dọc của Sprite

Trong trường hợp sử dụng hàm khởi tạo (1), tức là không khai báo pWidth, pHeight thìkích thước của Sprite sẽ chính là kích thước của đối tượng ảnh được nạp vào

+ pTextureRegion: là tấm hình sẽ được nạp vào cho Sprite đó

+ pVertexBufferObjectManager: là đối tượng quản lý bộ đệm để tải các dữ liệu về đồhọa Thông thường được khai báo là mGame.getVertexBufferObjectManager()

b AnimatedSprite

Để tạo được một Sprite động (ví dụ AnimatedSprite true_SP với đồ họa như hình 2.1),thay vì dùng Sprite thông thường, ta cần sử dụng AnimatedSprite

Hàm khởi tạo được sử dụng:

AnimatedSprite(final float pX, final float pY, final ITiledTextureRegion

pTiledTextureRegion, final VertexBufferObjectManager pVertexBufferObjectManager) (1)AnimatedSprite(final float pX, final float pY, final float pWidth, final float pHeight, final ITiledTextureRegion pTiledTextureRegion, final VertexBufferObjectManager

pVertexBufferObjectManager) (2)

Trong đó:

+ pX, pY: là tọa độ bắt đầu của AnimatedSprite đặt trong Scene

+ pWidth, pHeight: là kích thước chiều ngang và chiều dọc của Sprite

Trong trường hợp sử dụng hàm khởi tạo (1), tức là không khai báo pWidth, pHeight thìkích thước của AnimatedSprite sẽ chính là kích thước của đối tượng ảnh được nạp vào

+ pTiledTextureRegion: là tấm hình tiled sẽ được nạp vào cho AnimatedSprite đó

Trang 22

+ pVertexBufferObjectManager: là đối tượng quản lý bộ đệm để tải các dữ liệu về đồhọa Thông thường được khai báo là mGame.getVertexBufferObjectManager().

2.3.4 Font

Trong game chắc chắn bạn sẽ phải sử dụng những đoạn text để thể hiện nội dung, ví dụhiển thị dialog, đưa ra trợ giúp cho người chơi Thay vì sử dụng font mặc định của hệ thống,AndEngine cũng cho phép chúng ta sử dụng font tùy chọn của riêng bạn Điều này vừa tạo ranét riêng cho game, đồng thời tăng hiệu quả về đồ họa cho game

Hình 2.7: Ví dụ về font UVFBarmBrack.ttf được sử dụng trong PTITit Game

Để thay đổi một font chữ cho đối tượng trong AndEngine, chúng ta sử dụng class Font

Việc cài đặt và tải font được thực hiện trong phương thức onCreateResources().

Cách khai báo được sử dụng:

Font createFromAsset(final FontManager pFontManager, final ITexture pTexture, finalAssetManager pAssetManager, final String pAssetPath, final float pSize, final booleanpAntiAlias, final int pColor)

+ pAntiAlias = true: bật chế độ anti-alias

+ pColor: màu sắc của chữ

2.3.5.Text

Sau khi đã tải xong font, chúng ta có thể sử dụng font đó để format cho các đoạn texttrong game AndEngine cung cấp cho chúng ta đối tượng Text để thể hiện các chuỗi kí tự.Việc sử dụng Text cũng tương tự như sử dụng một đối tượng Sprite, và được đặt trong

phương thức onCreateScene() của game activity.

Hàm khởi tạo được sử dụng:

Text(final float pX, final float pY, final IFont pFont, final CharSequence pText, final intpCharactersMaximum, final VertexBufferObjectManager pVertexBufferObjectManager)

Trang 23

Trong đó:

+ pX, pY: là tọa độ bắt đầu của Text đặt trong Scene

+ pFont: là font đã được nạp trong phương thức onCreateResource()

+ pText: nội dung đoạn text

+ pCharactersMaximum: Số kí tự tối đa của text

+ pVertexBufferObjectManager: là đối tượng quản lý bộ đệm để tải các dữ liệu về đồhọa Thông thường được khai báo là mGame.getVertexBufferObjectManager()

2.3.6.Physics Box2D

a Sơ lược về PhysicBox2D

Trong phát triển game, cụm từ “vật lý” (physics) dùng để chỉ tập hợp mô phỏng cáctương tác vật lý giống với ngoài đời thực Không phải game nào cũng yêu cầu vật lý Ví dụnhững game câu đố, chúng ta không cần sử dụng bất kì yếu tố vật lý nào Tuy vậy, đây cũng

là một trong những thành phần quan trọng làm nên hiệu quả cho game, đặc biệt trong nhữnggame hành động

Trong AndEngine hỗ trợ một physics engine rất đầy đủ, được coi như một phần engine

mở rộng của AndEngine, có tên gọi là Physics Box2D Physics Box2D Engine ban đầu đượcviết bởi Erin Catto bằng ngôn ngữ C++ Kể từ khi ra đời đến nay, nó đã được dịch sang rấtnhiều ngôn ngữ lập trình, và áp dụng vào rất nhiều engine game 2D

b Các bước để thiết lập một thế giới vật lý trong game AndEngine

B1: Tạo một đối tượng PhysicsWorld.

Hàm khởi tạo được sử dụng:

PhysicsWorld(final Vector2 pGravity, final boolean pAllowSleep)

Trong đó:

+ pGravity: gia tốc trọng trường trong thế giới vật lý đó

+ pAllowSleep: cho phép mô phỏng trạng thái không hoạt động trong thế giới vật lý.Trong PhysicsBox2D có 3 trạng thái của một đối tượng trong PhysicsWorld là:

+ BodyType.StaticBody: Đối tượng nằm yên, không di chuyển

+ BodyType.DynamicBody: Đối tượng di chuyển và phản ứng với các đối tượng khác.+ BodyType.KinematicBody: Đối tượng di chuyển nhưng không bị ảnh hưởng bởi cácđối tượng khác

B2: Tạo một số mô phỏng đối tượng tĩnh, được thực hiên qua 2 giai đoạn.

+ Tạo ra hình khối cho đối tượng

+ Sau đó tạo trạng thái (body) cho đối tượng, rồi gán trạng thái này cho hình khối củađối tượng trong môi trường vật lý của chúng ta

B3: Gắn hình khối đã tạo ở trên vào trong Scene để hiển thị chúng.

B4: Kết nối các Sprite với vật lý thông qua PhysicsConnectors.

Trang 24

B5: Đăng ký Box2D PhysicsWorld như một UpdateHandler cho Scene, qua đó ta có thể cập nhật trạng thái, vị trí các Sprite.

Hình 2.8: Tạo hình chữ nhật bao quanh là các StaticBody của level 2 trong PTITit Game

+ Tạo ra hình khối cho đối tượng

+ Sau đó tạo trạng thái (body) cho đối tượng, rồi gán trạng thái này cho hình khối củađối tượng trong môi trường vật lý của chúng ta

Chúng ta sẽ tìm hiểu kỹ hơn các sử dụng PhysicsBox2D trong game AndEngine ở các chương sau.

Trang 25

CHƯƠNG 3 PHÂN TÍCH VÀ THIẾT KẾ ‘PTITIT GAME’

3.1 Giới thiệu chung

Tên game: PTITit Game

Là một game viết cho đối tượng sinh viên ngành công nghệ thông tin đã hoặc đang họctập trong Học viện Công nghệ Bưu chính Viễn thông

Game được chia thành 3 màn chơi tương ứng với 3 môn học:

+ Môn học 1: Lập trình C/C++;

+ Môn học 2: Lập trình Java;

+ Môn học 3: Lập trình Web

Trong mỗi môn học tương ứng sẽ có 2 level:

+ Level 1: mô phỏng một game câu đố, tính thời gian

+ Level 2: mô phỏng một game hành động có sử dụng vật lý, tính thời gian

Cách tính điểm (tối đa đạt được 100 điểm):

+ Khi bắt đầu, người chơi sẽ có 10 điểm làm vốn

+ Lần lượt trả lời 9 câu hỏi trắc nghiệm, với thời gian mỗi câu là 10 giây

+ Mỗi câu trả lời đúng, điểm số được cộng thêm 10 điểm và miếng ghép hình tương ứngvới câu hỏi đó sẽ được mở ra

+ Mỗi câu trả lời sai, điểm số bị trừ đi 5 điểm và chuyển sang câu hỏi tiếp theo

+ Bất kì khi nào điểm của bạn nhỏ hơn 0, màn chơi sẽ ngay lập tức kết thúc

+ Nếu hết 10 giây mà người chơi không đưa ra câu trả lời cho câu hỏi thì điểm số sẽ bịtrừ 5 điểm và chuyển sang câu hỏi tiếp theo, đồng hồ được bắt đầu đếm lại từ 10 giây

Người chơi được coi là vượt qua level này nếu đạt điểm số lớn hơn hoặc bằng mứcđiểm mà môn học đề ra Tương ứng với mỗi màn chơi (hay môn học) sẽ yêu cầu một mứcđiểm khác nhau, và độ khó tăng dần:

+ Môn học 1 (Lập trình C/C++) yêu cầu 35 điểm để vượt qua

+ Môn học 2 (Lập trình Java) yêu cầu 50 điểm để vượt qua

Trang 26

+ Môn học 3 (Lập trình Web) yêu cầu 65 điểm để vượt qua.

3.2.3 Thiết kế chi tiết

3.2.3.2 Phác thảo giao diện của level 1:

Hình 3.1: Giao diện phác thảo Level 1

Trong giao diện phác thảo Level 1:

+ Phần (1) là dự kiến phần đặt hình ảnh Các miếng ghép được đặt phía trên hình ảnh

đó, và yêu cầu phải che kín bức hình phía dưới

+ Phần (2) là dự kiến phần đặt câu hỏi Các phương án trả lời được đặt ở các phần (A),(B), (C) tương ứng

+ Phần (Thời gian + Điểm) là dự kiến phần bố trí hiển thị điểm số và thời gian

+ Ngoài ra, để giao diện không bị trống, cần set ảnh nền cho màn hình phía sau

3.2.3.3 Code

Trang 27

Hình 3.2: Cấu trúc các thành phần của Level 1

a LaunchLevel1.java

Là phần thân chính của game, một lớp được extends từ SimpleBaseGameActivity củaAndEngine GLES2 Đây là nơi nạp dữ liệu ban đầu, tải các tài nguyên, sắp xếp và phân bổ vịtrí cũng như kích thước các đối tượng

Một số phần trong source code:

+ Khai báo biến:

Hình 3.3: Các biến sử dụng trong LaunchLevel1.java

Các biến sử dụng trong LaunchLevel1:

mHinhNen: đối tượng này sẽ tạo ảnh nền cho Level1

mKhungHinhAnh: đối tượng này thể hiện phần (1) trong giao diện phác thảo Level 1(Hình 3.1)

mKhungCauHoi: đối tượng này thể hiện phần (2) trong giao diện phác thảo Level 1(Hình 3.1)

timer: luồng điều khiển đếm ngược thời gian

mThoiGianDemNguoc: là một đối tượng chứa đoạn text thể hiện thời gian đếm ngượctrong game, được biểu diễn ở phần (Thời gian) trong giao diện phác thảo Level 1 (Hình 3.1).mDiem: là một đối tượng chứa đoạn text thể hiện điểm số trong game, được biểu diễn ởphần (Điểm) trong giao diện phác thảo level 1 (Hình 3.1)

+ Một số phương thức:

Phương thức onCreate(Bundle savedInstanceState);

Trang 28

Đây là phương thức của một Activity thông thường, có tác dụng khởi tạo các thànhphần được sử dụng bên trong game.

Hình 3.4: phương thức onCreate() của LaunchLevel1.java

Phương thức onCreateEngineOptions();

Hình 3.5: Phương thức onCreateEngineOptions() của LaunchLevel1.java

Các biến sử dụng trong onCreateEngineOptions():

o mCamera: khởi tạo một Camera mới với kich thước màn hình làCAMERA_WIDTH x CAMERA_HEIGHT Hai biến này có giá trị tương ứngvới kích thước chiều dài và chiều rộng của màn hình thiết bị di động, được xử lýtrong lớp Config

o engineOption: Khởi tạo và truyền các thuộc tính tùy chọn cho engine Các thànhphần bên trong đã được trình bày ở phần 2.3.1.b khi nói về EngineOptions

Trang 29

Phương thức onCreateResources();

Hình 3.6: phương thức onCreateResources() của LaunchLevel1.java

Nhiệm vụ của phương thức này là nạp dữ liệu về các thành phần vào game trước khigame được bắt đầu

Phương thức onCreateScene();

Hình 3.7: phương thức onCreateScene() của LaunchLevel1.java

Nhiệm vụ của phương thức này chính là xây dựng màn chơi Scene bằng việc add cácđối tượng vào Scene và hiển thị

b HinhNen.java

Lớp HinhNen.java tạo ra hình nền cho Level1 bằng cách nạp bức ảnh có đường dẫn là

‘jpg_filename’ vào trong mTextureRegion Sau đó tạo một Sprite background_SP có kíchthước bằng kích thước màn hình để hiển thị hình nền đó ra Scene

c KhungCauHoi.java

Trang 30

Lớp KhungCauHoi.java tạo ra phần hiển thị câu hỏi thông qua Text Có 3 button A, B,

C tương ứng với 3 cách trả lời cho câu hỏi Có 3 đối tượng Text thể hiện nội dung của 3 đáp

án được đặt bên cạnh các button Câu hỏi và nội dung các đáp án được lấy ra theo thứ tự ngẫunhiên từ cơ sở dữ liệu Và đảm bảo 2 lần chơi khác nhau không lấy ra cùng 1 tập câu hỏi

Hình 3.8: Thể hiện của lớp KhungCauHoi.java trong Level 1

d KhungHinhAnh.java

Lớp KhungHinhAnh.java tạo ra phần hiển thị bức hình cùng các miếng ghép hình chephía bên trên Mỗi miếng ghép là một AnimatedSprite được load từ một hình ảnh riêng CácAnimatedSprite này sẽ không thay đổi trạng thái khi người chơi đang không trả lời câu hỏitương ứng, và sẽ nhấp nháy nếu điều ngược lại xảy ra

Hình 3.9: Thể hiện của lớp KhungHinhAnh.java trong Level 1

e ThoiGianDemNguoc.java và Diem.java

Ngày đăng: 12/06/2014, 18:18

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Chris Pruett, Writing Real Time Games For Android, May 2009 Sách, tạp chí
Tiêu đề: Writing Real Time Games For Android
[2] Jane McGonigal, Reality is Broken, The Penguin Press, New York, 2011 [3] Jayme Shroeder & Brian Broyles, AndEngine for Android Game DevelopmentCookbook, PACKT Publishing, January 2013 Sách, tạp chí
Tiêu đề: Reality is Broken", The Penguin Press, New York, 2011[3] Jayme Shroeder & Brian Broyles, AndEngine "for Android Game Development "Cookbook
[4] Rick Rogers, Learning Android Game Programming, Addison-Wesley, USA, December 2011.Danh mục các Website tham khảo Sách, tạp chí
Tiêu đề: Learning Android Game Programming
[5] “Hướng dẫn tạo một Game đơn giản với AndEngine 2.0”: http://www.droidviet.com/forum/bai-hoc-ma-nguon/15175-huong-dan-tao-mot-game-don-gian-voi-andengine-2-0-phan-1-a.html Sách, tạp chí
Tiêu đề: Hướng dẫn tạo một Game đơn giản với AndEngine 2.0
[6] “Hướng dẫn lập trình game Pikachu với Andengine”: http://android.vn/threads/huong-dan-lap-trinh-game-pikachu-voi-andengine-da-hoan-thanh.23996/ Sách, tạp chí
Tiêu đề: Hướng dẫn lập trình game Pikachu với Andengine
[7] “Hướng dẫn lập trình game Kim Cương (Jewels) với Andengine”: http://android.vn/threads/huong-dan-lap-trinh-game-kim-cuong-jewels-voi-andengine-da-hoan-thanh.26451/ Sách, tạp chí
Tiêu đề: Hướng dẫn lập trình game Kim Cương (Jewels) với Andengine
[8] “Không lấy dữ liệu SQLite từ Assets ra được”: http://android.vn/threads/khong-lay-du-lieu-sqlite-tu-assets-ra-duoc.28331/ Sách, tạp chí
Tiêu đề: Không lấy dữ liệu SQLite từ Assets ra được
[9] “Copy my own SQLite DB from Asset folder to”: http://stackoverflow.com/questions/4434367/copy-my-own-sqlite-db-from-asset-folder-to Sách, tạp chí
Tiêu đề: Copy my own SQLite DB from Asset folder to
[10] “Copy my own SQLite DB from Asset folder to”: http://stackoverflow.com/questions/4434367/copy-my-own-sqlite-db-from-asset-folder-to Sách, tạp chí
Tiêu đề: Copy my own SQLite DB from Asset folder to
[11] “[Released] Balance Ball”: http://www.andengine.org/forums/post56148.html#p56148[12]“GLES1 versus GLES2 – comparison”: http://www.matim-dev.com/gles1-versus-gles2---comparison.html Sách, tạp chí
Tiêu đề: [Released] Balance Ball”: http://www.andengine.org/forums/post56148.html#p56148[12] “GLES1 versus GLES2 – comparison
[16] “Android: Accessing assets folder sqlite database file with .sqlite extension”: http://stackoverflow.com/questions/2605555/android-accessing-assets-folder-sqlite-database-file-with-sqlite-extension Sách, tạp chí
Tiêu đề: Android: Accessing assets folder sqlite database file with .sqlite extension

HÌNH ẢNH LIÊN QUAN

Hình 2.1: Ví dụ một cấu trúc đơn giản của BaseGameActivity. - Đồ án lập trình di động Lập trình game code java
Hình 2.1 Ví dụ một cấu trúc đơn giản của BaseGameActivity (Trang 13)
Hình 2.2: Cấu trúc của một SimpleBaseGameActivity trong AndEngine GLES2. - Đồ án lập trình di động Lập trình game code java
Hình 2.2 Cấu trúc của một SimpleBaseGameActivity trong AndEngine GLES2 (Trang 14)
Hình 2.6: Ví dụ về TiledTextureRegion true_TTR sử dụng trong PTITit Game: - Đồ án lập trình di động Lập trình game code java
Hình 2.6 Ví dụ về TiledTextureRegion true_TTR sử dụng trong PTITit Game: (Trang 17)
Hình 3.1: Giao diện phác thảo Level 1 - Đồ án lập trình di động Lập trình game code java
Hình 3.1 Giao diện phác thảo Level 1 (Trang 23)
Hình 3.8: Thể hiện của lớp KhungCauHoi.java trong Level 1 d. KhungHinhAnh.java - Đồ án lập trình di động Lập trình game code java
Hình 3.8 Thể hiện của lớp KhungCauHoi.java trong Level 1 d. KhungHinhAnh.java (Trang 27)
Hình 3.9: Thể hiện của lớp KhungHinhAnh.java trong Level 1 e. ThoiGianDemNguoc.java và Diem.java - Đồ án lập trình di động Lập trình game code java
Hình 3.9 Thể hiện của lớp KhungHinhAnh.java trong Level 1 e. ThoiGianDemNguoc.java và Diem.java (Trang 27)
Hình 3.12: Một số hình ảnh dùng cho các Sprite trong Level 1 3.2.4. Ảnh chụp màn hình - Đồ án lập trình di động Lập trình game code java
Hình 3.12 Một số hình ảnh dùng cho các Sprite trong Level 1 3.2.4. Ảnh chụp màn hình (Trang 28)
Hình 3.13: Ảnh chụp màn hình Level 1 - Đồ án lập trình di động Lập trình game code java
Hình 3.13 Ảnh chụp màn hình Level 1 (Trang 29)
Hình 3.14: Ảnh chụp màn hình Level 1 - Đồ án lập trình di động Lập trình game code java
Hình 3.14 Ảnh chụp màn hình Level 1 (Trang 29)
Hình 3.15: Ảnh chụp màn hình Level 1 - Đồ án lập trình di động Lập trình game code java
Hình 3.15 Ảnh chụp màn hình Level 1 (Trang 29)
Hình 3.16: Giao diện phác thảo Level 2 - Đồ án lập trình di động Lập trình game code java
Hình 3.16 Giao diện phác thảo Level 2 (Trang 31)
Hình 3.19: Các biến sử dụng trong LaunchLevel2.java - Đồ án lập trình di động Lập trình game code java
Hình 3.19 Các biến sử dụng trong LaunchLevel2.java (Trang 35)
Hình 3.29: Ảnh chụp màn hình Level 2 - Đồ án lập trình di động Lập trình game code java
Hình 3.29 Ảnh chụp màn hình Level 2 (Trang 40)
Hình 3.28: Một số hình ảnh dùng cho các Sprite trong Level 2 3.3.4. Ảnh chụp màn hình - Đồ án lập trình di động Lập trình game code java
Hình 3.28 Một số hình ảnh dùng cho các Sprite trong Level 2 3.3.4. Ảnh chụp màn hình (Trang 40)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w