Khi vào màn chơi thì từng màn có các chức năng: tạo nét cắt, tạo dây treo đối tượng khác, các chú nhện chụp lấy những quả bóng cùng màu, ném các vật khác bóng khác màu,… , lò xo giúp bắn
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC NGÀNH KỸ THUẬT PHẦN MỀM
Đề tài
ỨNG DỤNG PHÁT TRIỂN GAME TRÊN THIẾT BỊ DI ĐỘNG
Sinh viên: Hồ Hữu Nhân
Mã số: 1111321 Khóa: K37
Cần Thơ, 05/2015
Trang 2TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
Người hướng dẫn Sinh viên thực hiện ThS Phan Phương Lan Hồ Hữu Nhân
Mã số: 1111321 Khóa: K37
Cần Thơ, 05/2015
Trang 3LỜI CẢM ƠN
Trước hết, tôi xin gởi lời cảm ơn chân thành và sự tri ân sâu sắc đến các thầy
cô của trường Đại học Cần Thơ Đặc biệt là các thầy cô khoa Công Nghệ Thông Tin và Truyền Thông đã tạo điệu kiện cho tôi học tập và hoàn thành khóa học, cũng như luận văn tốt nghiệp này
Đồng thời tôi cũng xin chân thành cảm ơn cô Phan Phương Lan đã nhiệt tình hướng dẫn tôi hoàn thành luận văn tốt nghiệp trong suốt thời gian qua
Bên cạnh đó, tôi cảm ơn tất cả người thân, bạn bè đã tạo điều kiện và động viên tôi hoàn thành tốt luận văn này Đặc biệt, tôi muốn gửi lời cảm chân chân thành đến anh Nguyễn Thanh Hoài, cảm ơn anh đã nhiệt tình giúp đỡ, giải đáp thắc mắc cho tôi trong suốt quá trình làm luận văn
Trong quá trình học tập, cũng như là trong quá trình làm luận văn, mặc dù
đã cố gắng hết sức nhưng vẫn khó tránh khỏi sai sót, vì vậy rất mong nhận được ý kiến đóng góp quý báu của quý Thầy Cô và các bạn
Tôi xin chân thành cảm ơn!
Cần thơ, ngày 3 tháng 5 năm 2014
Sinh viên
Hồ Hữu Nhân
Trang 4MỤC LỤC
Lời cảm ơn 3
Mục lục 4
Danh mục bảng 6
Danh mục hình 7
Tóm tắt 9
Abstract 10
Giới thiệu 11
Đặt vấn đề 11
Tóm tắt lịch sử giải quyết vấn đề 11
Mục tiêu đề tài 12
Đối tượng và phạm vi nghiên cứu 12
Nội dung nghiên cứu 12
Những đóng góp chính của đề tài 13
Bố cục của quyển luận văn 13
Chương 1 - Mô tả bài toán 14
1.1 Mô tả chi tiết bài toán 14
1.2 Phân tích đánh giá các giải pháp/ có liên quan đến bài toán 15
1.3 Tiếp cận giải quyết vấn đề 16
Chương 2 - Thiết kế và cài đặt giải pháp 30
2.1 Thiết kế 30
2.1.1 Thiết kế kiến trúc 30
2.1.2 Thiết kế dữ liệu 31
2.1.3 Thiết kế giao diện 37
2.1.4 Thiết kế thuật toán 51
Chương 3 - Kiểm thử và đánh giá 58
3.1 Mục tiêu kiểm thử 58
3.2 Kịch bản kiểm thử 58
3.3 Kết quả kiểm thử 59
Kết luận 61
Trang 5Hạn chế 61
Hướng phát triển 61
Tài liệu tham khảo 62
Phụ lục 63
1 Hướng dẫn cài đặt 63
1.1 Cài đặt Java Development Kit 63
1.2 Cài đặt Corona SDK 63
1.3 Cài đặt Corona Cards 63
2 Hướng dẫn phát triển 65
2.1 Tạo một project từ Corona SDK 65
2.2 Cách build project (xuất ra file apk) 66
2.3 Cách tạo một bodyType sử dụng công cụ Physics Editor 67
3 Sơ lược về ngôn ngữ Lua 73
3.1 Giới thiệu 73
3.2 Cú pháp 74
4 Sơ lược về Corona SDK 78
4.1 Các đối tượng hiển thị 78
4.2 Sự kiện trên các đối tượng hiển thị (multitouch, tap, touch) 80
4.3 Sự kiện vật lý cho các đối tượng (physics) 82
4.4 Chuyển trang 83
4.5 Đối tượng lớp widget 85
4.6 Đối tượng lớp native 86
4.7 Thao tác với File 86
4.8 Thao tác với database 89
4.9 Transition, Timer 90
Trang 6DANH MỤC BẢNG
Bảng 1 1: Bảng diễn giải các đối tượng trong game 17
Bảng 1.2: Danh sách các sơ đồ tuần tự 18
Bảng 2.1: Danh sách các đối tượng trong game 31
Bảng 2.2: Bảng diễn giải các dữ liệu dùng trong game 36
Bảng 2.3: Bảng sanh sách tên các thuật toán 51
Bảng 3.1: Kết quả kiểm thử theo từng chức năng 59
Bảng 3.2: Kết quả các lần chơi xác định số điểm – sao 59
Trang 7DANH MỤC HÌNH
Hình 1.1: Sơ đồ lớp 16
Hình 1.2: Sơ đồ tuần tự màn chơi thứ 1 19
Hình 1.3: Sơ đồ tuần tự màn chơi thứ 2 20
Hình 1.4: Sơ đồ tuần tự màn chơi thứ 3 20
Hình 1.5: Sơ đồ tuần tự màn chơi thứ 4 21
Hình 1.6: Sơ đồ tuần tự màn chơi thứ 5 21
Hình 1.7: Sơ đồ tuần tự màn chơi thứ 6 22
Hình 1.8: Sơ đồ tuần tự màn chơi thứ 7 23
Hình 1.9: Sơ đồ tuần tự màn chơi thứ 8 24
Hình 1.10: Sơ đồ tuần tự màn chơi thứ 9 24
Hình 1.11: Sơ đồ tuần tự màn chơi thứ 10 25
Hình 1.12: Sơ đồ tuần tự màn chơi thứ 11 25
Hình 1.13: Sơ đồ tuần tự màn chơi thứ 12 26
Hình 1.14: Sơ đồ tuần tự màn chơi thứ 13 27
Hình 1.15: Sơ đồ tuần tự màn chơi thứ 14 28
Hình 1.16: Sơ đồ tuần tự màn chơi thứ 15 29
Hình 2.1: Hệ thống phân cấp project cơ bản 30
Hình 2.2: Sơ đồ phân cấp các chức năng của phần mềm 31
Hình 2.3: Sơ đồ phân cấp dữ liệu dùng trong game 36
Hình 2.4: Loạt hình ảnh hình thành nên chú nhện 37
Hình 2.5: Sử dụng chức năng Place Insert Frame trong Corel 37
Hình 2.6: Chú nhện có màu quả bóng trắng 38
Hình 2.7: Mảng các ảnh động các chú nhện 38
Hình 2.8: Loạt hình ảnh hình thành nên lò xo 38
Hình 2.9: Lò xo có thêm các thanh đỡ 38
Hình 2.10: Mảng các ảnh động của lò xo 39
Hình 2.11: Loạt hình ảnh hình thành nên vật nặng 39
Hình 2.12: Mảng các ảnh động vật nặng 40
Hình 2.13: Giao diện loading 41
Hình 2.14: Giao diện menu 41
Hình 2.15: Giao diện menu (có các nút bật/tắt âm thanh) 42
Hình 2.16: Giao diện hướng dẫn 1 42
Hình 2.17: Giao diện hướng dẫn 2 43
Hình 2.18: Giao diện chọn màn chơi 43
Hình 2.19: Giao diện màn 1 44
Hình 2.20: Giao diện màn 2 44
Hình 2.21: Giao diện màn 3 45
Hình 2.22: Giao diện màn 4 45
Hình 2.23: Giao diện màn 5 46
Trang 8Hình 2.25: Giao diện màn 7 47
Hình 2.26: Giao diện màn 8 47
Hình 2.27: Giao diện màn 9 48
Hình 2.28: Giao diện màn 10 48
Hình 2.29: Giao diện màn 11 49
Hình 2.30: Giao diện màn 12 49
Hình 2.31: Giao diện màn 13 50
Hình 2.32: Giao diện màn 14 50
Hình 2.33: Giao diện màn 15 51
Hình 2.34: Thuật toán kiểm tra chiến thắng cho 1 màn chơi 52
Hình 2.35: Thuật toán nhện chụp lấy bóng cùng màu, ném đối tượng khác 53
Hình 2.36: Thuật toán tạo nét cắt 54
Hình 2.37: Thuật toán tạo sợi dây treo vật thể 55
Hình 2.38: Thuật toán tạo các đối tượng – cách xách định từng va chạm 56
Hình 2.39: Thuật toán tính lực va chạm 57
Trang 9TÓM TẮT
Sự bùng nổ của các thiết bị thông minh trong vài năm qua đã dẫn đến sự ra đời của một thị trường tiềm năng - thị trường ứng dụng di động Thị trường này có tốc độ phát triển nhanh chóng và mạnh mẽ, đặc biệt trong lĩnh vực lập trình game trên di động, đó là vùng đất hứa cho các lập trình viên đam mê về game trên di động Luận văn tốt nghiệp là công trình nghiên cứu về game engine – bộ công cụ cung cấp môi trường phát triển tích hợp được đơn giản hóa, đặc biệt là công cụ Corona SDK, một nền tảng phần mềm linh hoạt và dễ dàng sử dụng lại với mọi chức năng cốt lõi cần thiết ngay trong nó Sản phẩm của luận văn là một game (Spider Ball) chạy được trên các thiết bị di động, máy tính bảng chạy hệ điều hành Android Game được phát triển trên ngôn ngữ Lua và công cụ phát triển trò chơi Corona SDK, theo cách lập trình hướng dữ liệu game tạo ra 15 màn chơi được sắp xếp từ mức độ dễ đến khó, giao diện thân thiện, đối tượng đồ họa sinh động, âm thanh trực quan lôi cuốn người chơi Tuy game chỉ chạy được trên nền tảng Android, nhưng trong tương lai game sẽ tiếp tục phát triển và có mặt trên cả 3 nền tảng thông dụng hiện nay (Android, iOS và Window phone)
Trang 10ABSTRACT
The explosion of smart devices in the past few years led to the birth of a potential market - the mobile application market Market is able to grow strong and fast, especially in the moblie game programming, the promised land which gives software developer enthuse for games on mobile Thesis researchs for the game engine - tools are generally provided in an integrated development environment to enable simplified, especially Corona SDK tools, they provide a flexible and reusable software platform which provides all the core functionality needed Product of the thesis (Spider Ball) runing on mobile devices, tablets running the Android operating system The game has developed on Lua language and Corona SDK, follow programming in a data-driven manner, game have 15 levels from easy
to difficult, user-friendly interface, vivid graphic objects, visual audio appeal players However, the game only runs on the Android platform, but the game will continue to develop in the future and be present on all 3 platforms currently used (Android, iOS and Windows Phone)
Trang 11GIỚI THIỆU
ĐẶT VẤN ĐỀ
Xuất phát từ ý tưởng của game Cut the Rope (Cắt dây thừng) là một trò chơi điện tử thể loại giải đố dựa trên vật lý nhiều phần của nhà phát triển Nga ZeptoLab thiết kế cho nhiều dạng máy và thiết bị chơi Mục tiêu của trò chơi là đưa viên kẹo vào miệng của Om Nom, một quái vật nhỏ xíu màu xanh lá, trong khi phải thu thập càng nhiều sao càng tốt Dựa trên ý tưởng của game Cut the Rope, một ý tưởng về trò chơi mới được hình thành Trong trò chơi mới này, 1 cặp viên kẹo – Om Nom của game Cut the Rope sẽ trở thành 2 cặp bóng – nhện, viên kẹo sẽ trở thành các quả bóng, Om Nom sẽ trở thành các chú nhện sinh động, các quả bóng có nhiều màu sắc hơn, ngoài ra còn có các đối tượng khác (lò xo, vật nặng, vật cản, …) để làm cho trò chơi hấp dẫn hơn
Để phát triển game đa nền tảng, Corona SDK thường được sử dụng vì giúp phát triển ứng dụng nhanh hơn gấp nhiều lần Ngoài ra, nó còn cung cấp hệ thống thư viện hỗ trợ phong phú và được thiết kế rất tốt do đó nhà phát triển phần mềm có thể dễ dàng xây dựng các thao tác (hành động) trong game chỉ với một vài dòng code Với công cụ Corona SDK, chúng ta chỉ cần phát triển game một lần, sau đó
có thể dễ dàng biên dịch ứng dụng sang các nền tảng khác như Andriod, iOS, Kindle Fire, Nook và Windows Phone một cách dễ dàng Không những vậy Corona SDK còn cho hỗ trợ chuyển đổi với những thiết bị có kích cỡ và độ phân giải khác nhau một cách dễ dàng
Từ những nội dung trên, tác giả đề xuất đề tài “TÌM HIỂU CORONA SDK VÀ LUA, ỨNG DỤNG PHÁT TRIỂN GAME TRÊN THIẾT BỊ DI ĐỘNG” Game
cụ thể được phát triển dựa trên ý tưởng được trình bày ở trên (nhện bắt bóng) có tên là “Spider Ball”
TÓM TẮT LỊCH SỬ GIẢI QUYẾT VẤN ĐỀ
Việc phát triển game chạy đa nền tảng là một vấn đề không mới, vì hiện tại có rất nhiều game sử dụng nhiều công cụ khác nhau (Unity, Marmalade, V-Play, Cocos2D JS…) được đưa lên hằng ngày trên các chợ Google Play hay App store Trong đó có game Cut the Rope, một dạng game giải đố với ý tưởng đưa một viên kẹo vào miệng của một con quái vật Game này không cung cấp mã nguồn, cũng không cho biết các công nghệ để làm ra sản phẩm này Vì vậy, tác giả không biết được thuật toán của game Cut the Rope và không tái sử dụng được bất cứ một thành phần nào của game này Mặc dù game “Spider Ball” dựa trên ý tưởng của game
Trang 12trên nhưng áp dụng trên đối tượng khác nhau, số lượng đối tượng khác nhau, thuật toán do tác giả tự đề xuất Do đó, bài toán tự đề xuất này là hoàn toàn mới đối với tác giả và chưa từng được giải quyết trước đó
MỤC TIÊU ĐỀ TÀI
Ứng dụng bộ công cụ phát triển ứng dụng Corona SDK và các thư viện sẵn có (OpenGL, OpenAL, Box2D, JSON …) để xây dụng game “Spider Ball” với các vấn đề trọng tâm như
– Bố trí các màn chơi một cách logic và theo mức độ từ dễ đến khó hơn – Quản lý (bật/tắt) được âm thanh (hiệu ứng/nhạc nền) thông qua các nút trên giao diện menu
– Tạo được nét cắt để có thể đưa chính xác các quả bóng đến từng chú nhện
– Làm cho các chú nhện có thể chụp lấy bóng cùng màu, ném các bóng khác màu (vật thể khác)
– Tạo ra các đối tượng lò xo để bắn các vật thể khác (vật nặng, bóng), và bắn được nhiều lần
– Lưu các dữ liệu trong game sử dụng JSON
ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU
Đối tượng được nghiên cứu là các đối tượng đồ họa và các thuật toán được sử dụng trong game Mặc dù công cụ được sử dụng để phát triển game hỗ trợ đa nền tảng (Android, iOS, Window phone), nhưng trong phạm vi luận văn này nghiên cứu chỉ tập trung vào nền tảng Android
NỘI DUNG NGHIÊN CỨU
Tác giả sẽ tập trung nghiên cứu các nội dung chính như sau:
– Cách thức xây dựng trò chơi đa nền tảng sử dụng công cụ Corona SDK
và ngôn ngữ LUA
– Bộ thư viện thư viện vật lý trong Corona SDK (Physics), bộ thư viện vật
lý hỗ trợ trong quá trình phát triển game, cách tạo ra môi trường vật lý, cho đến cách xử lý các va chạm giữa các đối tượng đồ họa với nhau, tùy biến sản phẩm cuối cùng để có thể biên dịch chạy được trên đa nền tảng Hiểu được một cách tổng quan, sơ bộ về phương thức hoạt động của một số trò chơi đơn giản, những thành phần cơ bản có trong một trò chơi Tìm hiểu cách thêm, sửa, xóa, tạo mới các kết cấu, cấu tạo, xếp đặt màu sắc lên các đối tượng hiển thị có trong Corona SDK
Trang 13– Ngôn ngữ LUA, ngôn ngữ lập trình thông dịch với đặc điểm nhỏ gọn, đa nền tảng Tìm hiểu cách lập trình, soạn thảo mã kịch bản cho chương trình, cách đặt ra quy luật trong trò chơi
– Tham khảo các flash game trên mạng, tìm kiếm ý tưởng để tạo ra các màn chơi
– Xây dụng game “Spider Ball” thông qua các bước phân tích, thiết kế, cài đặt và kiểm thử phần mềm
NHỮNG ĐÓNG GÓP CHÍNH CỦA ĐỀ TÀI
Đề tài đã đóng góp thêm vào tài liệu nghiên cứu cho sinh viên khoa Công nghệ thông tin & Truyền thông, trong lĩnh vực lập trình game trên di động Ngoài ra, đề tài cũng là tài liệu tham khảo cho các sinh viên các khóa sau, khi nghiên cứu về Corona SDK và ngôn ngữ LUA, ứng dụng phát triển trò chơi đa nền tảng
Game “Spider Ball” bổ sung thêm vào kho trò chơi phong phú trên google play thuộc thể loại giải đố Game giúp người chơi rèn luyện tư duy logic, giải trí sau giờ làm việc mệt mỏi
BỐ CỤC CỦA QUYỂN LUẬN VĂN
Quyển luận văn gồm 5 nội dung chính
Phần đầu gồm có: lời cảm ơn, mục lục, danh mục đồ thị, biểu bảng và hình ảnh, tóm tắt và abstract
Phần giới thiệu gồm: mô tả sơ lược về bài toán (đặt bóng vào hộp cùng màu), đưa ra vấn đề dựa trên bài toán đó, lợi ích và vì sao chọn Corona SDK; tóm tắt lịch
sử giải quyết vấn đề; nêu mục tiêu đề tài với những vấn đề trọng tâm cần giải quyết; nêu đối tượng và pham vi của đề tài; liệt kê toàn bộ nội dung mà đề tài nghiên cứu
và nêu những đóng góp chính của đề tài
Phần nội dung gồm: 3 chương Chương 1 - mô tả chi tiết bài toán, đặt ra các yêu cầu chức năng, yêu cầu phi chức năng, cách giải quyết; phân tích đánh giá các giải pháp có liên quan đến bài toán, đưa ra các hướng giải quyết và chọn lựa hướng giải quyết; tiếp cận giải quyết vấn đề đặt ra Chương 2 - trình bày các thiết kế kiến trúc; thiết kế dữ liệu; thiết kế đối tượng - giao diện; thiết kế thuật toán; trình bày cách cài đặt giải pháp dựa vào các thiết kế Chương 3 - Mô tả mục tiêu kiểm thử, kịch bản kiểm thử và kết quả kiểm thử
Phần kết luận trình bày về các kết quả đạt được, hạn chế và hướng phát triển của
đề tài
Phần cuối là các tài liệu tham khảo và phụ lục bao gồm: hướng dẫn cài đặt, hướng dẫn sử dụng
Trang 14CHƯƠNG 1 - MÔ TẢ BÀI TOÁN
1.1 MÔ TẢ CHI TIẾT BÀI TOÁN
Vấn đề bài toán đặt ra là làm như thế nào để có thể đưa những quả bóng vào những chú nhện cùng màu Bài toán có 15 màn chơi trong từng màn chơi tùy mức
độ phức tạp mà người lập trình đặt ra số lượng nhện và bóng trong màn chơi là nhiều hay ít nhưng vẫn giữ đúng cặp (nhện – bóng) nhất định Cụ thể, nếu có 2 nhện thì số bóng tương ứng phải là 2 Ở đây ta có 1 nhện màu trắng, 1 nhện màu
đỏ, 1 bóng trắng, 1 bóng đỏ Đặc biệt, nếu ở màn chơi có nhiều hơn một quả bóng cùng màu xuất hiện, thì chú nhện có màu tương ứng đó phải chụp được nhiều lần Các chú nhện được đặt cố định ở một vị trí trong màn chơi, còn các quả bóng thì linh động hơn, có thể được treo, nằm trên vật thể khác Ngoài ra, còn có các khúc
gỗ làm vật cản, lò xo (bắn các vật thể khác), các dây treo treo đối tượng khác (vật nặng, khúc gỗ, …), vật nặng gây cản trở bóng đến các chú nhện
Các yêu cầu đặt ra với bài toán này được chia thành 2 nhóm: yêu cầu chức năng, yêu cầu phi chức năng
Các yêu cầu chức năng:
– Chọn màn chơi – cho phép người dùng lựa chọn màn để chơi Khi vào màn chơi thì từng màn có các chức năng: tạo nét cắt, tạo dây treo đối tượng khác, các chú nhện chụp lấy những quả bóng cùng màu, ném các vật khác (bóng khác màu,… ), lò xo giúp bắn các vật thể khác đi
– Hướng dẫn – giúp người dùng hiểu được luật chơi
– Bật/tắt âm thanh (hiệu ứng/nhạc nền)
– Chuyển đổi ngôn ngữ (tiếng Anh/tiếng Việt)
– Xem thông tin về sản phẩm
Các yêu cầu phi chức năng
– Giao diện
+ Đẹp, bắt mắt
+ Các tông màu phù hợp với các đối tượng
– Thời gian thực hiện
+ Thời gian trễ không quá 5s
+ Game vận hành mượt mà không có lỗi phát sinh
– Thiết bị hỗ trợ
+ Hệ điều hành Android 2.3.3 hoặc cao hơn (ARMv7) Ứng dụng được xây dựng trong phiên bản này sẽ không cài đặt được trên các thiết bị ARMv6
Trang 15+ Bộ nhớ điện thoại trống 30M
+ Độ phân giải màn hình đề nghị 800x480 hoặc cao hơn
+ Ghi chú: hiện tại game chạy tốt trên nền tảng android, công việc chuyển đổi sang nên tảng Window Phone, iOS là không mất nhiều thời gian
1.2 PHÂN TÍCH ĐÁNH GIÁ CÁC GIẢI PHÁP/ CÓ LIÊN QUAN ĐẾN BÀI TOÁN
Vấn đề được tiếp nhận và có nhiều hướng giải quyết, bên dưới là các hướng giải quyết bài toán
Về công nghệ, CorelDRAW là một phần mềm biên tập đồ họa vector vì nó có các tính năng: tạo, xuất ảnh dưới dạng vector, dễ dàng chuyển đổi một bức ảnh sang dạng vector Vì vậy tác giả sử dụng phần mềm CorelDRAW để cài đặt các thiết kế đối tượng và giao diện trong game “Spider Ball”
Hướng giải quyết thứ 1 sử dụng công nghệ Corona SDK và ngôn ngữ LUA Hướng giải quyết thứ 2 sử dụng công nghệ Cocos2D JS sử dụng hoàn toàn
bằng JavaScript
Công nghệ Cocos2D JS có ưu điểm về hỗ trợ đa nền tảng, đa ngôn ngữ, tuy nhiên công nghệ này không cung cấp một cấu trúc tốt cho ứng dụng, API không chính thống do đa ngôn ngữ và hoàn toàn không theo một chuẩn nào Công nghệ Corona SDK và LUA có ưu điểm hơn công nghệ Cocos2D JS, máy ảo trong Corona SDK chạy khá nhanh, dễ dàng điều chỉnh các độ phân giải khác nhau của màn hình Đặc biệt CoronaSDK cho phép tạo âm thanh/yếu tố trực quan chỉ với một hoặc hai dòng code Lua được phát triển từ C và hệ thống các API theo hướng đơn giản hóa Cài đặt ngôn ngữ LUA, vì có các tính năng: nhỏ gọn, nhanh, kết hợp tốt, đa nền tảng Toàn bộ phần mềm thông dịch Lua cùng mã nguồn, tài liệu hướng dẩn và các
ví dụ chỉ gói gọn trong dung lượng 860 KB (phiên bản 5.1.4, không nén) Tốc độ của Lua thuộc vào loại nhanh nhất trong số các ngôn ngữ thông dịch Kết hợp tốt với các ngôn ngữ khác, chẳng hạn C Chạy trên Windows, Unix, Linux, Mac OS X cùng nhiều hệ điều hành khác Sử dụng ngôn ngữ Lua để cài đặt các thiết kiến trúc, thiết kế dữ liệu và thiết kế thuật toán trong game Nên tác giả chọn hướng giải quyết thứ 1
Về cách chơi, bài toán được giải quyết với nhiều luật chơi và bên dưới là các luật chơi được đề xuất
Hướng giải quyết thứ 1 sử dụng luật chơi như sau: người chơi dùng ngón
tay để tạo nét cắt, cắt các sợi dây treo các quả bóng hoặc các vật nặng sao cho hợp
lý nhất để các quả bóng rơi đúng vào các chú nhện cùng màu
Hướng giải quyết thứ 2 sử dụng luật chơi như sau: người chơi nắm, giữ và
bắn đi vật thể (chú nhện), thay vì dùng ngón tay cắt như luật chơi trên
Trang 16Do thời gian làm luận văn bị giới hạn cùng với việc phải tìm hiểu về các công nghệ mới (Corona SDK, LUA), nên để phù hợp với năng lực và thời gian của tác giả trong việc làm đề tài vì thế tác giả chọn hướng giải quyết thứ 1 Tác giả cần phải nghiên cứu thêm bộ thư viện multitouch có độ phức tạp lớn hơn nếu chọn hướng giải quyết thứ 2
1.3 TIẾP CẬN GIẢI QUYẾT VẤN ĐỀ
Thông thường một hệ thống cần có biểu đồ lớp để mô tả toàn bộ bức tranh hệ thống Các biểu đồ lớp giúp người phát triển phần mềm quan sát và lập kế hoạch xây dựng hệ thống trước khi viết mã trình Nó được đảm bảo rằng hệ thống được thiết kế tốt ngay từ ban đầu Sau đây là sơ đồ lớp của hệ thống game “Spider Ball”
Sơ đồ lớp
Hình 1.1: Sơ đồ lớp
Ball_Spider
TopRope_Rope Shoot_Steel
Ball x y Name
Spider x
y Name Dx_White Dy_White Dx_Red Dy_Red Dx_Blue Dy_Blue create() update() getObject() destroy() destroyAll() hide() show() onCollWhite() onCollRed() onCollBlue()
Line x y strokeWidth isSensor onCollLine() drawLine() destroy()
Background x
y
Rope x
y Name Num isSleepingAllowed rotation
create() destroy() hide() show()
Trang 17Bảng 1 1: Bảng diễn giải các đối tượng trong game
isSleepingAllowed Cho phép đối tượng là ngũ hay không
là không
Trang 18destroy() Hàm xóa bỏ từng đối tượng
rơi vào chú nhện xanh
rơi vào chú nhện đỏ
onCollSprings() Hàm xử lý các va chạm khi đối tượng khác
rơi vào lò xo
onCollSteel() Hàm xử lý các va chạm khi vật nặng rơi onCollWhite() Hàm xử lý các va chạm khi đối tượng khác
rơi vào chú nhện trắng
với mối nối
Người thiết kế và người phát triển phần mềm có thể xác định các lớp sẽ xây dựng, quan hệ giữa các lớp, thao tác và trách nhiệm của mỗi lớp thông qua sơ đồ lớp Nên biểu đồ tuần tự trở thành nền tảng cho các công việc còn lại của thiết kế Biểu đồ trình tự là trật tự theo thời gian của các thông điệp, nó có ích khi ai đó muốn quan sát luồng logic trong kịch bản
Sơ đồ tuần tự
Bảng 1.2: Danh sách các sơ đồ tuần tự
1 Sơ đồ tuần tự màn chơi thứ 1 Màn 1
2 Sơ đồ tuần tự màn chơi thứ 2 Màn 2
3 Sơ đồ tuần tự màn chơi thứ 3 Màn 3
4 Sơ đồ tuần tự màn chơi thứ 4 Màn 4
5 Sơ đồ tuần tự màn chơi thứ 5 Màn 5
6 Sơ đồ tuần tự màn chơi thứ 6 Màn 6
7 Sơ đồ tuần tự màn chơi thứ 7 Màn 7
8 Sơ đồ tuần tự màn chơi thứ 8 Màn 8
9 Sơ đồ tuần tự màn chơi thứ 9 Màn 9
10 Sơ đồ tuần tự màn chơi thứ 10 Màn 10
11 Sơ đồ tuần tự màn chơi thứ 11 Màn 11
Trang 1913 Sơ đồ tuần tự màn chơi thứ 13 Màn 13
14 Sơ đồ tuần tự màn chơi thứ 14 Màn 14
15 Sơ đồ tuần tự màn chơi thứ 15 Màn 15
– Màn 1: màn gồm một vật nặng màu vàng, 2 quả bóng màu đỏ và trắng, 2
chú nhện màu đỏ và trắng Người chơi cắt sợi dây treo vật nặng, làm rơi để va
chạm bóng đỏ và trắng, làm cho bóng đỏ rơi vào nhện đỏ, bóng trắng rơi vào
nhện trắng
Hình 1.2: Sơ đồ tuần tự màn chơi thứ 1
– Màn 2: màn gồm 2 quả bóng màu đỏ và trắng, 2 chú nhện màu đỏ và
trắng, và một số các khúc gỗ tạo thành hình cái bập bênh Quả bóng trắng được
đặt so le (chéo góc) với chú nhện trắng, tương tự với bóng đỏ, còn cái bập bênh
được đặt ở giữa Người chơi cố gắng đưa bóng trắng về phía nhện trắng và bóng
đỏ về phía nhện đỏ
Vẽ nét cắt Tạo nét cắt
Background
NguoiDung
Trang 20Hình 1.3: Sơ đồ tuần tự màn chơi thứ 2
– Màn 3: ở màn chơi này xuất hiện thêm một bệ lò xo làm chức năng đẩy
vật thể khác khi người chơi chạm vào chúng Người chơi cố gắng cắt các sợi dây
sao cho vật nặng rơi vào bệ lò xo, người chơi chạm vào lò xo, bắn vật nặng va
chạm với 2 bóng, 2 bóng rơi về hai phía và rơi xuống bên dưới Bên dưới là các
chú nhện đang đón chờ các quả bóng rơi
Hình 1.4: Sơ đồ tuần tự màn chơi thứ 3
– Màn 4: trong màn các quả bóng được treo lơ lững bên phía trên cùng bên
Man 2
Mối nối Bóng
đỏ NguoiDung
Hủy liên kết
Va chạm
Vẽ nét cắt Tạo nét cắt
Bóng trắng
Nhện trắng
Khúc gỗ
Nhện đỏ
Đường thẳng Background
Chụp lấy bóng đỏ
Chụp lấy bóng trắng
Va chạm Lăn trên
Hủy liên kết
Va chạm
Vẽ nét cắt Tạo nét cắt
Va chạm Lăn trên
Bóng đỏ
Nhện trắng
Nhện đỏ
Đường thẳng Background
Va chạm Bắn
Va chạm Hủy liên kết
Va chạm Tạo nét cắt
Trang 21khối gỗ lớn chặn lại nhưng có một lỗ được tạo ra giúp bóng rơi lọt xuống phía bên dưới, phía dưới cái lỗ này có treo một khúc gỗ dùng để dẫn banh đi đúng hướng Người chơi cố gắng đưa quả banh trắng rơi xuống nhện trắng trước, sau
đó cắt sợi dây treo khúc gỗ tạo đường đi cho bóng đỏ đến nhện đỏ sau
Hình 1.5: Sơ đồ tuần tự màn chơi thứ 4
– Màn 5: người chơi cố gắng cắt vật nặng vào bệ lò xo, bắn vật nặng va chạm với 2 quả bóng, lần lượt cắt các quả bóng trắng, đỏ lần lượt rơi vào các chú nhện trắng đỏ
Bóng trắng Mối nối
Va cham
Vẽ nét cắt Tạo nét cắt
Nhện trắng
Khúc gỗ
Nhện đỏ
Chụp lấy bóng đỏ
Va chạm Lăn trên
Va chạm
Va chạm
Vẽ nét cắt Tạo nét cắt
NguoiDung
Vật nặng 2
Vật
Bóng đỏ
Nhện đỏ
Va chạm Hủy liên kết
Va chạm Tạo nét cắt
Vật nặng Background Đường
Bóng trắng
Nhện trắng
Trang 22– Màn 6: trong màn có 2 bóng trắng, 1 bóng đỏ, 2 chú nhện trắng - đỏ, 3
vật nặng Các quả bóng lần lượt được đặt ở phía trên các khúc gổ là trắng - đỏ -
trắng Ở phí trên các quả bóng là các vật nặng được treo thẳng đứng Ở giữa màn
là thanh gỗ chuyển động qua lại Bên dưới là các chú nhện, đỏ được đạt bên tay
trái, trắng nằm ở phía bên tay phải Người chơi cắt các vật nặng rơi, va chạm với
các quả bóng rơi vào các chú nhện
Hình 1.7: Sơ đồ tuần tự màn chơi thứ 6
– Màn 7: trong màn gồm có 2 quả bóng trắng - đỏ, 2 chú nhện trắng đỏ, 1
lò xo, 3 vật nặng, và một số khúc gỗ làm vật cản Người chơi cắt quả bóng trắng
để va chạm với vật nặng thứ 1 và thứ 2, rơi xuống bên dưới va chạm với lò xo
Lò xo bắn bóng trắng trúng vật nặng thứ 3 và rơi trúng nhện trắng Tiếp theo cắt
quả bóng đỏ rơi thẳng đứng và bên dưới là chú nhện đỏ
Va chạm
Vẽ nét cắt
Va chạm Hủy liên kết
Va chạm
Vẽ nét cắt
Vật nặng
Bóng trắng
Vật nặng
Thanh gỗ
di chuyển
Va cham Lăn trên
Va chạm Hủy liên kết
Va chạm
Vẽ nét cắt
Va cham Lăn trên
Va chạm Hủy liên kết
Va cham
Vẽ nét cắt
Tạo nét cắt
Vật nặng
Bóng trắng
Vật nặng
Bóng đỏ
Nhện đỏ Background Mối
nối
Đường thẳng
Nhện trắng
Trang 23Hình 1.8: Sơ đồ tuần tự màn chơi thứ 7
– Màn 8: trong màn có 2 quả bóng trắng – đỏ, 2 chú nhện trắng đỏ, 3 vật
nặng và có 2 cái lò xo quay một góc 20 độ 2 quả bóng được treo phía bên trên
còn 2 lò xo được đặt bên dưới các quả bóng, nhưng bị lệch về phía bên tay trái
khoảng 100 pixel Các vật nặng thứ nhất treo sao cho khi cắt dây liên kết thì rới
trúng bóng trắng, làm đung đưa nó Cắt bóng trắng cho rơi để va chạm với vật
nắng thứ 2 và 3 Đồng thời bóng trắng rơi vào lò xo, bắn lên trúng nhện trắng
Vật nặng thứ 3 va chạm với lò xo thứ 2, bắn va chạm với bóng đỏ Làm đung
đưa bóng đỏ, cắt bóng đỏ sao cho rơi vào nhện đỏ
NguoiDung
Bóng xanh
Nhện xanh
Vật nặng 2
Vật
Đường thẳng
gỗ Man 7
Chụp lấy bóng trắng
Va cham Hủy liên kết
Va chạm
Vẽ nét cắt Tạo nét cắt
Hủy liên kết
Va chạm
Vẽ nét cắt Tạo nét cắt
Chụp lấy bóng đỏ
Va cham Hủy liên kết
Chụp lấy bóng xanh
Va chạm Hủy liên kết
Va cham
Vẽ nét cắt
Tạo nét cắt
Mối nối Bóng trắng Nhện trắng
Trang 24Hình 1.9: Sơ đồ tuần tự màn chơi thứ 8
– Màn 9: tương tự như ở màn 2, ở màn này có thêm bóng xanh và nhện
xanh, mức độ khó của màn được tăng lên
Hình 1.10: Sơ đồ tuần tự màn chơi thứ 9
– Màn 10: ở màn này xuất hiện thêm một chú nhện thứ 3 (nhện xanh), dựa
vào vị trí các vật cản trong màn, người chơi cố gắng cắt các sợi dây một cách
logic nhất để đưa bóng vào đúng nhện
Man 8
NguoiDung
Chụp lấy bóng trắng
Va chạm Hủy liên kết
Va chạm
Vẽ nét cắt Tạo nét cắt
Chụp lấy vật va chạm
nặng
Vật nặng 2
Đường thẳng
trắng
Nhện trắng
Ném vật nặng đi
Va chạm Ném vật nặng đi
Chụp lấy vật va chạm
Va chạm
Va chạm Hủy liên kết
Va chạm Background
Va chạm
Bắn
Va chạm
Va chạm Hủy liên kết
Va cham
Vẽ nét cắt Tạo nét cắt
Đường thẳng Mối nối Lò xo
Vật nặng
Bóng trắng
Nhện trắng
Bóng đỏ
Nhện đỏ
Trang 25Hình 1.11: Sơ đồ tuần tự màn chơi thứ 10
– Màn 11: trong màn gồm có 2 quả bóng trắng – xanh, 2 chú nhện trắng –
xanh Các khúc gỗ được đặt chia làm thành 2 bên trái và phải, trong đó có 2
thanh gỗ được di chuyển qua lại ở phía giữa tạo cầu nối cho 2 bên 2 cặp bóng
nhện được đặt so le nhau Người chơi cố gắng cắt vật nặng trước để va chạm với
một số vật nặng khác tạo khoảng trống để đưa bóng vào nhện Cần canh thời
gian để đưa bóng từ bên này qua bên kia, vì 2 thanh gỗ này di chuyển qua lại
Hình 1.12: Sơ đồ tuần tự màn chơi thứ 11
NguoiDung
Vật nặng
Vật nặng 2
Bóng xanh
Nhện xanh
Thanh gỗ di chuyển Man 10
Va chạm
Vẽ nét cắt Tạo nét cắt
Lăn trên Lăn trên
Chụp lấy bóng xanh
Va chạm Hủy liên kết
Va chạm
Vẽ nét cắt
Chụp lấy bóng trắng
Va cham Lăn trên
Va cham
Vẽ nét cắt Tạo nét cắt
Thanh gỗ di chuyển 2 Background Đường
thẳng Mối nối
Bóng trắng
Nhện trắng
Va chạm
Nhện trắng Mối nối
Bóng trắng
Khúc gỗ
Đường thẳng
nặng
Bóng đỏ
Nhện đỏ
Trang 26– Màn 12: trong màn ngươi chơi cố gắng vượt màn bằng cách đưa 1 trong những chú nhện màu vàng (có kích thước lớn) vào bệ lò xo, bệ lò xo bắn chú nhện lên va chạm vào 2 quả bóng rơi về hai phía và rơi xuống bên dưới, hứng bên dưới là 2 chú nhện trắng và đỏ
Hình 1.13: Sơ đồ tuần tự màn chơi thứ 12
– Màn 13: trong màn gồm có 1 quả bóng trắng, 1 chú nhện, 2 vật nặng Quả bóng và vật nặng được treo phía trên bên trái, còn chú nhện được đặt phía dưới bên phải, ở giữa thì có 2 thanh gỗ di chuyển qua lại gâp khó khăn người chơi đưa bóng về phía nhện Ngoài ra, còn có 1 vật nặng nằm phía trên chú nhện nhằm không cho quả bóng rơi về phía chú nhện
Vật nặng 2
Vật nặng 3
trắng
Nhện trắng Background Đường
thẳng Mối nối
Bóng đỏ
Nhện đỏ
Va chạm
Va chạm
Va chạm
Trang 27Hình 1.14: Sơ đồ tuần tự màn chơi thứ 13
– Màn 14: 2 quả bóng được treo phía bên trên, ở dưới nó là một dãy khúc
gỗ ngăn cách các chú nhện phía bên dưới, ở giữa dãy ngăn cách là một khúc gỗ
được treo căng bằng, làm vật cản ngăn chặn bóng rơi Ngươi chơi vượt ải bằng
cách cắt những sợi dây treo khúc gỗ này, làm nó rới xuống bên dưới tạo đường
đi Bên tay phải là một khúc gỗ được cố định 1 đầu, đầu còn lại được treo hờ bởi
một sợi dây Khi cắt sợi dây này, khúc gỗ sẽ đánh vào vật nặng, khiến vật nặng
văng ra xa va chạm với quả bóng từ trên rớt xuống, đẩy quả bóng về hướng chú
Va chạm
Va chạm Bắn
Va chạm Hủy liên kết
Va chạm
Vẽ nét cắt Tạo nét cắt
Bóng trắng
Nhện trắng
Đường thẳng
Hủy liên kết
Va chạm
Vẽ nét cắt Tạo nét cắt
Chụp lấy bóng trắng
Va chạm Hủy liên kết
Va chạm
Vẽ nét cắt Tạo nét cắt
Trang 28Hình 1.15: Sơ đồ tuần tự màn chơi thứ 14
– Màn 15: trong màn gồm có 2 quả bóng được treo phía trên, 2 chú nhện
được đặt góc dưới bên phải, ngoài ra còn có 2 khúc gỗ được thiết kế giống với
một cái chong chóng, 1 được đặt bên trái quay ngược chiều kim đồng hồ, 1 được
đặt bên phải quay theo chiều kim đồng hồ và có thêm một khúc gỗ di chuyển
qua lại nằm phía bên trái Người chơi vượt màn bằng cách cắt bóng đỏ rơi xuống
bên dưới, va chạm với khúc gỗ quay ngược chiều kim đồng hồ làm bật quả bóng
đỏ sang bên đối diện, tiếp tục người chơi cắt quả bóng trắng rơi xuống bên dưới,
sao cho quả bóng vừa lọt vào chú nhện trắng đang nằm phía bên dưới
NguoiDung
Nhện đỏ
Chụp lấy bóng trắng 2
Va chạm
Bóng xanh
Nhện xanh
Man 14
Bóng trắng
Nhện trắng Background Đường
thẳng Mối nối
Khúc gỗ
Bóng
Vật nặng
Bóng đỏ
Tạo nét cắt
Chụp lấy bóng xanh
Va chạm Chụp lấy bóng trắng
Va cham
Va chạm Hủy liên kết
Va cham
Vẽ nét cắt Tạo nét cắt
Chụp lấy bóng đỏ
Va cham
Va chạm Bắn
Va chạm
Va chạm Lăn trên
Hủy liên kết
Va chạm
Vẽ nét cắt
Trang 29Hình 1.16: Sơ đồ tuần tự màn chơi thứ 15
Man 15
NguoiDung
Chụp lấy bóng đỏ
Va chạm Hủy liên kết
Va chạm
Vẽ nét cắt Tạo nét cắt
Mối nối Bóng đỏ Bóng trắng chóng 1Chong chóng 2Chong Nhện đỏ
Đường thẳng
trắng
Chụp lấy bóng trắng
Va chạm Đẩy
Va chạm Hủy liên kết
Va chạm
Vẽ nét cắt Tạo nét cắt
Va chạm Đẩy
Trang 30CHƯƠNG 2 - THIẾT KẾ VÀ CÀI ĐẶT GIẢI PHÁP
2.1 THIẾT KẾ
2.1.1 Thiết kế kiến trúc
Cấu trúc cho dự án (project) được phân cấp như sau
Hình 2.1: Hệ thống phân cấp project cơ bản
– Project_Folder/ (top-level)
+ images/ (folder): tập tin hình ảnh với phần mở rộng là png hay jpg
+ audio/ (folder): tập tin âm thanh (caf, mp3, ogg, vv )
+ videos/ (folder): các tập tin video ( avi, mp4, vv)
+ data/ (folder): tập tin dữ liệu chỉ đọc được sử dụng bởi ứng dụng của
chúng ta Chúng có thể được định dạng bất kỳ, nhưng thông thường nó chứa các tập tin như JSON và xml
+ scripts/ (folder): các tập tin Lua khác (ngoài main.lua)
+ main.lua: tập tin được chạy đầu tiên trong ứng dụng
+ config.lua: thiết lập cấu hình cho ứng dụng
+ build.settings: Để kiểm soát định hướng ứng dụng trên các thiết bị thực tế
Sơ đồ phân cấp chức năng của phần mềm
Trang 31Hình 2.2: Sơ đồ phân cấp các chức năng của phần mềm
2.1.2 Thiết kế dữ liệu
Danh sách các đối tượng có trong game “Spider Ball” được mô tả trong bảng bên
dưới gồm có tên đối tượng, hình ảnh và vai trò của nó
Bảng 2.1: Danh sách các đối tượng trong game
vượt được ải
vượt được ải
vượt được ải
Màn 15
Hiển thị chiến thắng
Hiển thị điều hướng (đang chơi) Bật/tắt âm thanh Thay đổi ngôn ngữ Xem thông tin sản phẩm
Trang 325 Quả bóng đỏ Làm đối tượng tìm kiếm của chú
9 Mối nối Tạo nên các sợi dây treo vật thể
hình dạng giống như sao
16 Thanh nền bên
trái và phải
Làm các thanh giới hạn phong nền, tránh các vật thể vượt ra khỏi màn hình
Trang 3321 Nút home Trở về trang menu
27 Nút xem thông
tin
Xem thông tin về người lập trình
Trang 34Function onCollRed(self , event);
Function onCollBlue(self , event);
Function create( obj , dx , dy );
Function create(dx, dy, _rotation , _force );
Function onCollSprings(self, event);
Trang 35Function create(dx , dy ,_friction ,_bounce , _density , _radius
,_linearDamping);
Function onCollSteel( self , event)
Fuction getObject( objname );
Funtion create( n , dx , dy ,ropeFirst , ropeFinal );
Function ropeCollision( event )
Ngoài ra, Game cần lưu lại các tùy chỉnh khi đang chơi trong game ( ngôn ngữ;
âm thanh, nhạc nền là bật hay tắt; số sao; màn chưa chơi; màn đã chơi, …) vì vậy cần một để bảng lưu lại các dữ liệu này
myData{
Number maxGroupLevels;
Number maxLevels;
String currentScene;
Trang 36Sơ đồ phân cấp dữ liệu dùng trong game
Hình 2.3: Sơ đồ phân cấp dữ liệu dùng trong game Bảng 2.2: Bảng diễn giải các dữ liệu dùng trong game
myData
settings currentLevel Level hiện tại
myData
maxGroup
Levels maxLevels
current Scene settings
currentLevel unlocked
Levels
unlocked GroupLevels levels
startscorecount
musicOn soundOn language
Trang 37unlockedLevels Mở được đến level unlockedGroup
2.1.3 Thiết kế giao diện
Thiết kế hình ảnh chú nhện (nhân vật chính của game)
– Cách một chú nhện được tạo nên
Hình 2.4: Loạt hình ảnh hình thành nên chú nhện
– Đổi màu chú nhện Chọn đối tượng bóng Sử dụng chức năng Place Insert Frame trong Corel, để đổi màu cho chú nhện
Hình 2.5: Sử dụng chức năng Place Insert Frame trong Corel
– Kết quả là ta được một chú nhện có màu giống với quả bóng
Trang 38Hình 2.8: Loạt hình ảnh hình thành nên lò xo
– Ta thêm một vài thanh đỡ giúp cố định vật cần bắn
Hình 2.9: Lò xo có thêm các thanh đỡ
Trang 40– Tạo ra một mảng các kích thước tùy vào pixel để sử dụng