Lập trình game trên Android sử dụng LibGdx Engine
MỞ ĐẦU 1.
Giới thiệu đề tài Smart Phone hiện nay quá phổ biến với người dùng Việt Nam cũng như thế giới.
Hiện nay trên thế giới có khoảng 1.3 tỷ chiếc smart phone theo VnEconomy. Smart phone giờ đã không thế thiếu với thế giới, được sử dụng trong nhiều lĩnh vực ngoài liên lạc như kết nối internet, đọc báo, nghe nhạc xem phim, chơi game… Đương nhiên nhu cầu sử dụng smart phone cao nhất là giải trí. Với một lượng người dùng rất lớn, nhu cầu cao nên bây giờ xuất hiện nhiều hãng phần mềm, điện tử tham gia phát triển trên mobile và xuất hiện khá nhiều hệ điều hành trên mobile như Android, Winphone, IOS,.. Hệ điều hành Android hiện nay là phổ biến nhiều nhất thế giới với hơn 60% người dùng nhưng IOS hay WindowsPhone cũng đang phát triển vượt bật. Các nhà sản xuất thiết bị di động lớn hiện nay chọn Android làm hệ điều hành chủ đạo, số lượng người dùng và thiết bị ngày càng tăng dẫn đến nhu cầu lớn về phần mềm. Android có tính mở cao, được sự hỗ trợ từ cộng đồng. Lập trình Game Android là hướng đi mới, phải vận dụng nhiều kiến thức trong CNTT. Từ đó thúc đẩy khả năng tự nghiên cứu và vận dụng những kiến thức đã học áp dụng vào thực tế. 2.
Lý do chọn đề tài Lập trình game trên mobile là một hướng đi mới cho lập trình viên. Vì nhu cầu
người dùng cao cũng như nhu cầu tuyển nhân viên rất nhiều. Nhưng mỗi hệ điều hành lại có sự khác biệt về ngôn ngữ, mô hình, cách xử lý bộ nhớ,… Nên có các engine khác nhau cho mỗi hệ điều hành. Vì vậy, lập trình viên thường chọn một hệ điều hành chính, hoặc bỏ nhiều thời gian học nhiều engine. Lidgdx engine là một engine chạy được trên nhiều nền tảng, có nghĩa là lập trình một lần và chạy được trên nhiều hệ điều hành, một lợi thế không nhỏ cho lập trình
SVTH : Sa Đức Tiến
Trang 1
Lập trình game trên Android sử dụng LibGdx Engine
viên, giảm thời gian code, giảm thời gian học và tìm hiểu về engine cho mỗi hệ điều hành, giảm thời gian debug, sửa lỗi,… Vì vậy em chọn đề tài: Lập trình game trên android với libgdx engine. Và demo là game Fapply Bird.
SVTH : Sa Đức Tiến
Trang 2
Lập trình game trên Android sử dụng LibGdx Engine
CHƯƠNG I : CƠ SỞ LÝ THUYẾT 1.1 Tổng quan về hệ điều hành Android 1.1.1 Khái niệm Hệ điều hành Anroid Android là hệ điều hành điện thoại di động mở nguồn mở miễn phí do công ty Google phát triển dựa trên nền tảng của Linux. Bất kỳ một hãng sản xuất phần cứng nào cũng đều có thể tự do sử dụng hệ điều hành Android cho thiết bị của mình, miễn là các thiết bị ấy đáp ứng được các tiêu chuẩn cơ bản do Google đặt ra (có cảm ứng chạm, GPS, 3G,...) Ra đời tháng 11/2007, hệ điều hành Android đã trải qua nhiều lần cập nhật, với phiên bản gần đây nhất là Ice Cream Sandwich 4.0. Android là nền tảng cho thiết bị di động bao gồm một hệ điều hành, midware và một số ứng dụng chủ đạo. Bộ công cụ Android SDK cung cấp các công cụ và bộ thư viên các hàm API cần thiết để phát triển ứng dụng cho nền tảng Android sử dụng ngôn ngữ lập trình java. 1.1.2 Kiến trúc Android
Hình 1.1 : Mô hình kiến trúc nền tảng Android
SVTH : Sa Đức Tiến
Trang 3
Lập trình game trên Android sử dụng LibGdx Engine
Theo tài liệu được cung cấp bởi Goolge, kiến trúc Android có 5 thành phần được phân lớp từ cao xuống thấp. Lần lượt như sau. -
Applications
Hệ điều hành Android tích hợp sẳn một số ứng dụng cơ bản như email client, SMS, lịch điện tử, bản đồ, trình duyệt web, sổ liên lạc và một số ứng dụng khác. Ngoài ra tầng này cũng chính là tầng chứa các ứng dụng được phát triển bằng ngôn ngữ Java. -
Application Framework
Tầng này của hệ điều hành Android cung cấp một nền tảng phát triển ứng dụng mở qua đó cho phép nhà phát triển ứng dụng có khả năng tạo ra các ứng dụng vô cùng sáng tạo và phong phú. Các nhà phát triển ứng dụng được tự do sử dụng các tính năng cao cấp của thiết bị phần cứng như: thông tin định vị địa lý, khả năng chạy dịch vụ dưới nền, thiết lập đồng hồ báo thức, thêm notification vào status bar của màn hình thiết bị. -
Libraries
Hệ điều hành Android bao gồm một tập các bộ thư viện C/C++ được sử dụng bởi nhiều thành phần của Android system. Những tính năng này được cung cấp cho các lập trình viên thông qua bộ framework của Android. Dưới đây là một số thư viện cốt lõi: -
Android Runtime
Hệ điều hành Android tích hợp sẳn một tập hợp các thư viện cốt lõi cung cấp hầu hết các chức năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java. Mọi ứng dụng của Android chạy trên một tiến trình của riêng nó cùng với một thể hiện của máy ảo Dalvik. Máy ảo Dalvik thực tế là một biến thể của máy ảo Java được sửa đổi, bổ sung các công nghệ đặc trưng của thiết bị di động. Nó được xây dựng với mục đích làm cho các thiết bị di động có thể chạy nhiều máy ảo một cách hiệu quả. Trước khi thực thi, bất kì ứng dụng Android nào cũng được convert thành file thực thi với định dạng nén Dalvik Executable (.dex). Định dạng này được thiết kế để phù hợp với các
SVTH : Sa Đức Tiến
Trang 4
Lập trình game trên Android sử dụng LibGdx Engine
thiết bị hạn chế về bộ nhớ cũng như tốc độ xử lý. Ngoài ra máy ảo Dalvik sử dụng bộnhân Linux để cung cấp các tính năng như thread, low-level memory management. -
Linux Kernel
Hệ điều hành Android được xây dựng trên bộ nhân Linux 2.6 cho những dịch vụ hệ thống cốt lõi như: security, memory management, process management, network stack, driver model. Bộ nhân này làm nhiệm vụ như một lớp trung gian kết nối phần cứng thiết bị và phần ứng dụng. 1.2 Tổng quan về Game 1.2.1 Khái niệm Game - video game: Video game (gọi tắt là game) là một dạng trò chơi điện tử liên quan đến tính tuơng tác với một giao diện người sử dụng để tạo ra một phản hồi hình ảnh trên một thiết bị hiển thị (video). Ngôn ngữ lập trình Game: Tùy vào từng loại game cụ thể mà sử dụng các ngôn ngữ khác nhau. Đối với những game lớn giành cho PC và các hệ máy console thì C++ và DirectX hoặc OpenGL là lựa chọn tốt nhất vì đòi hỏi phải can thiệp sâu bên trong hệ thống,Java là ngôn ngữ lập trình game phổ biến cho các thiết bị di động và không phụ thuộc vào nền tảng.Ngoài ra thì còn có C# và Python… Một số công cụ xây dưng game chuyên nghiệp: Nếu như trước kia việc lập trình game phải làm thủ công các công đoạn từ đầu tới cuối từ việc xây dựng đồ họa đến âm thanh ,…thì hiên nay với sự ra đời nhiều công cụ hỗ trợ giúp việc lập trình game nhanh hơn và tối ưu hơn gọi là game engine. Một game engine (công cụ tạo game) là một phần mềm được viết để thiết kế và phát triển video game. Có rất nhiều loại game engine dùng để thiết kế game cho các hệ máy như hệ consoles hay máy tính cá nhân(PC). Chức năng cốt lõi của game engine phần lớn nằm trong công cụ dựng hình (kết xuất đồ họa) cho các hình ảnh 2 chiều (2D) hay SVTH : Sa Đức Tiến
Trang 5
Lập trình game trên Android sử dụng LibGdx Engine
3 chiều(3D), công cụ vật lý (hay công cụ tính toán và phát hiện va chạm), âm thanh, mã nguồn, hình ảnh động (animation), trí tuệ nhân tạo, phân luồng, tạo dòng dữ liệu xử lý , quản lý bộ nhớ, dựng ảnh đồ thị, và kết nối mạng. Quá trình phát triển game tiết kiệm được rất nhiều thời gian và kinh phí vào việc tái sử dụng và tái thích ứng một engine để tạo nhiều game khác nhau. Với công nghệ tạo game engine càng phát triển và trở nên thân thiện hơn với người sử dụng ,ứng dụng của nó càng được mở rộng, và giờ đây được sử dụng để tạo các game mang mục đích khác với giải trí đơn thuần như: mô phỏng, huấn luyện ảo, y tế ảo, và mô phỏng các ứng dụng quân sự. Để tạo điều kiện tiếp cận này, các nền tảng phần cứng mới đang là mục tiêu của game engine, kể cả điện thoại di động (ví dụ: iPhone, điện thoại Android ) và trình duyệt web (như Shockwave, Flash, WebVision của Trinigy, Silverlight, Unity Web Player, O3D và thuần dhtml). Thêm vào đó, nhiều game engine đang được tạo ra bằng các ngôn ngữ lập trình cấp cao như Java và C# hay .NET (ví dụ TorqueX, và Visual3D.NET) hay Python (Panda3D). Vì hầu hết các game 3D hiện nay đều có giới hạn cho GPU( giới hạn bởi sức mạnh của card đồ họa), khả năng gây chậm máy của các ngôn ngữ lập trình cấp cao trở nên không đáng kể, trong khi việc tăng năng suất được cung cấp bởi các ngôn ngữ này lại có lợi cho các nhà phát triển game engine. 1.3 Tổng quan về LibGdx Engine 1.3.1 Giới thiệu về LibGdx Libgdx thực sự rất hữu dụng bởi lẽ nó đượ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 được trê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 tối ưu hóa game của bạn bởi các thành phần thiết kế như quản lý resource được
SVTH : Sa Đức Tiến
Trang 6
Lập trình game trên Android sử dụng LibGdx Engine
viết bằng Native code. Libgdx framework có phần documentation rất tuyệt vời và hỗ trợ qua forum của họ một cách nhanh chóng và nhiệt tình. Libgdx framework có nhiều game example, nhiều source code, và có rất nhiều game thương mại và phi thương mại đã và đang sử dụng Libgdx framework Kiến trúc của LibGdx rất linh hoạt và hiệu quả, và phù hợp cho cả những dự án có quy mô từ mức nhỏ, trung bình đến cả những project lớn mang tính thương mại. LibGdx thực sự vừa mới ra đời, do đó nó bị hạn chế khá nhiều về mặt tính năng: như thiếu các hiệu ứng đẹp mắt hơn, camera mượt mà hơn hoặc nhiều shader đặc sắc. Do LibGdx vẫn còn một chặng đường dài để phát triển. 1.3.2 Ưu điểm của LibGdx Đa nền tảng: chúng ta chỉ cần viết code 1 lần nhưng có thể chạy trên được nhiều nền tảng khác nhau. Một ứng dụng của tính năng này đó là phát triển các ứng dụng cho Android. Để phát triển một ứng dụng cho Android, khi chạy thử ứng dụng, chúng ta cần chạy ứng dụng trên Emulator hoặc trên thiết bị thật. Việc này rất mất thời gian do Emulator chạy rất chậm và quá trình cài đặt cũng như chạy ứng dụng trên thiết bị thật cũng không khá hơn. Với LibGDX, chúng ta có thể chạy ứng dụng trên PC, sau đó chỉ cần với vài dòng code, chúng ta có thể chạy ứng dụng này trên Android với hiệu năng tương đương. Điều này giúp chúng ta kiểm thử và tìm lỗi ứng dụng nhanh hơn và hiệu quả hơn. Hiệu năng: Hiệu năng của LibGDX thực sự rất ấn tượng do LibGDX sử dụng cả Java và mã nguồn C để tạo nên ứng dụng. Cộng đồng: cộng đồng sử dụng LibGDX rất tuyệt vời với số lượng người dùng lớn. Các lập trình viên luôn đóng góp và giúp đỡ cho cộng đồng. Việc sửa lỗi cũng được cập nhật rất thường xuyên. Tài liệu và ví dụ: rất đầy đủ với Javadoc. LibGDX cũng cung cấp rất nhiều các ví dụ và demo với đầy đủ các chức năng từ đơn giản đến phức tạp.
SVTH : Sa Đức Tiến
Trang 7
Lập trình game trên Android sử dụng LibGdx Engine
Mã nguồn: mã nguồn mở với thiết kế rất rõ ràng và phù hợp với việc phát triển ứng dụng cho di động. LibGDX cho phép người lập trình khả năng sử dụng các API từ các lớp thấp đến cao, tùy theo yêu cầu của người sử dụng. Tính năng: LibGDX có rất nhiều tính năng như tạo hình, xử lý đồ họa 2D, 3D, xử lý âm thanh, quản lý các thiết bị vào ra, quản lý file hệ thống. Cùng với đó là các công cụ đi kèm rất hữu ích như Texture Packer và Particle Editor. 1.3.3 Vòng đời của 1 ứng dụng LibGdx
Hình 1.2: Lược đồ vòng đời của 1 game viết bằng LibGdx -
create() : Phương thức được gọi là một lần khi ứng dụng được tạo ra.
SVTH : Sa Đức Tiến
Trang 8
Lập trình game trên Android sử dụng LibGdx Engine
-
resize(int width, int height) : Phương thức này được gọi là mỗi lần màn hình trò chơi thay đổi kích thước và trò chơi là không ở trong trạng thái tạm dừng. Nó cũng được gọi một lần ngay sau khi phương pháp create(). Các thông số chiều rộng và chiều cao màn hình đã được thay đổi kích thước bằng pixel.
-
render() : Phương thức này còn gọi là game loop, nó được gọi mỗi khi game của chúng ta cần thực hiện render. Game logic thường được cập nhật tại phương thức này
-
pause() : Trên Android phương pháp này được gọi khi nhấn nút Home hoặc nhận cuộc gọi đến. Trên máy tính để bàn này được gọi là trước khi dispose(),khi thoát khỏi ứng dụng. Một nơi tốt để lưu các trạng thái trò chơi.
-
resume() : Phương thức này chỉ có trên android khi ứng được quay trở lại
-
dispose() : Được gọi là khi ứng dụng bị phá hủy.
Libgdx không có vòng lặp chính cụ thể(main loop) tuy nhiên render() có thể coi là vòng lặp chính của game
SVTH : Sa Đức Tiến
Trang 9
Lập trình game trên Android sử dụng LibGdx Engine
CHƯƠNG II : PHÂN TÍCH THIẾT KẾ HỆ THỐNG 2.1 Phân tích yêu cầu 2.1.1 Giới thiệu game Flappy Bird Game “Flappy Bird” là 1 game tương tác với người sử dụng thông qua màn hình cảm ứng của điện thoại bằng thao tác chạm vào màn hình để điều khiển nhân vật nhảy lên, tránh các chướng ngại vật - ống khói. Giữa 2 ống khói có 1 khoảng cách cố định để người chơi kịp thực hiện thao tác. Nhưng chiều cao của ống khói là ngẫu nhiên. Ống khói sẽ xuất hiện ở bên phải và dịch dần sang bên trái. Nhiệm vụ của người chơi là chạm vào màn hình để nhân vật nhảy lên và lọt qua khe hở giữa 2 ống khói trên và dưới. Nếu qua 1 ống khói, người chơi sẽ được cộng 1 điểm. Trò chơi kết thúc khi nhân vật chạm ống khói. Tổng điểm mỗi lượt chơi sẽ được lưu lại, với mục đích để người chơi cố gắng chơi tốt hơn, dành nhiều điểm hơn trước (càng nhảy qua nhiều ống khói càng nhiều điểm). 2.1.1 Phân tích game Có một màn hình chơi game gồm các đối tượng -
Background là một nền trời nằm yên... mặt đất phía dưới chạy liên tục từ phải sang trái.
-
Một con chim – nhân vật game
-
Sự kiện “tap” : Nếu chạm vào màn hình điện thoại con chim sẽ bay ngửa mặt lên một đoạn và rơi cắm đầu xuống đất. Trong quá trình thực hiện chuỗi thao tác trên nếu xảy ra sự kiện "tap" màn hình, con chim sẽ thực hiện huỷ bỏ chuỗi thao tác trước và tại vị trí khi "tap" sẽ thực hiện chuỗi thao tác mới.
-
Trong một khoảng thời gian cố định sẽ tuần tự xuất hiện hai ống nước trên và dưới chừa một khoảng hở cao thấp ngẫu nhiên cho con chim bay qua.
-
Nếu con chim bay qua được khoảng hở hai ống này sẽ được cộng một điểm.
SVTH : Sa Đức Tiến
Trang 10
Lập trình game trên Android sử dụng LibGdx Engine
-
Nếu con chim đụng vào hai ống này thì GAME OVER – kết thúc lượt chơi
Game gồm 3 màn hình : -
Màn hình lúc mới bắt đầu game (MenuScreen) : gồm nút chơi game để chuyển đến màn hình chơi game và nút xếp hạng chuyển đến màn hình kết thúc game hiện điểm cao nhất
-
Màn hình chơi game (PlayScreen) gồm nền và mặt đất, con chim, ống,…
-
Màn hình kết thúc game (EndScreen) gồm bảng hiển thị số điểm và số điểm cao nhất
2.2 Phân tích 2.2.1 Biểu đồ use-case
Hình 2.1 : Biểu đồ Use-case
2.2.1.1 Danh sách Actor STT
Tên Actor
Ý nghĩa/Ghi chú
1
Người chơi
Người chơi bình thường của hệ thống
SVTH : Sa Đức Tiến
Trang 11
Lập trình game trên Android sử dụng LibGdx Engine
2.2.1.2 Danh sách Use-case STT
Tên Use-case
Ý nghĩa/Ghi chú
1
Thoát game
Thoát khỏi ứng dụng
2
Xem điểm
Xem điểm cao nhất
3
Thao tác
Các sự kiện như nhấn nút, chạm màn hình,…
4
Lưu điểm
Lưu điểm sau mỗi lượt chơi để tìm điểm cao nhất
5
Chơi game
Điều khiển chú chim để kiếm được điểm cao nhất
2.2.1.3 Đặc tả Use-case 2.2.1.3.1 Đặc tả Use-case “chơi game” 1.
Tóm tắt Người chơi sử dụng use-case này để chơi game
2.
Các dòng sự kiện Use-case bắt đầu khi người chơi nhất nút “Play” Hệ thống hiển thị màn hình chơi game, nhân vật game – chú chim, và các chướng
ngại vật - ống khói Người chơi chạm vào màn hình để chú chim tránh các chướng ngại vật và tăng thêm điểm cho mình Nếu chú chim chạm phải chướng ngại vật, use-case này sẽ kết thúc và điểm sẽ được lưu lại 3.
Các yêu cầu đặc biệt
SVTH : Sa Đức Tiến
Trang 12
Lập trình game trên Android sử dụng LibGdx Engine
Không có. 4.
Trạng thái hệ thống khi bắt đầu thực hiện Use-case Người dùng đang ở trong giao diện chơi game
5.
Trạng thái hệ thống sau khi thực hiện Use-case Hệ thống vẫn ở màn hình giao diện chơi game
6.
Điểm mở rộng Không có.
2.2.1.3.2 Đặc tả Use-case “thoát game” 1.
Tóm tắt Người chơi sử dụng use-case này khi không muốn chơi game nữa
2.
Các dòng sự kiện Use-case bắt đầu khi người chơi nhất nút “Home” hoặc nút “Back” của điện thoại Hệ thống tắt ứng dụng game Flappy Bird đang bật
3.
Các yêu cầu đặc biệt Game đang được mở trên màn hình điện thoại
4.
Trạng thái hệ thống khi bắt đầu thực hiện Use-case Người dùng đang ở trong giao diện của game
5.
Trạng thái hệ thống sau khi thực hiện Use-case Hệ thống vẫn ở màn hình giao diện của game
6.
Điểm mở rộng Không có.
2.2.1.3.3 Đặc tả Use-case “xem điểm” 1.
Tóm tắt
SVTH : Sa Đức Tiến
Trang 13
Lập trình game trên Android sử dụng LibGdx Engine
Người chơi sử dụng use-case này để xem điểm cao nhất 2.
Các dòng sự kiện Use-case bắt đầu khi người chơi nhất nút “Xem điểm” hoặc khi lượt chơi kết thúc Hệ thống hiển thị màn hình xem điểm gồm 1 thông báo có điểm hiện tại, điểm cao
nhất và đánh giá xếp hạng của người chơi : vàng, bạc hoặc đồng 3.
Các yêu cầu đặc biệt Không có.
4.
Trạng thái hệ thống khi bắt đầu thực hiện Use-case Người dùng đang ở trong giao diện chơi game
5.
Trạng thái hệ thống sau khi thực hiện Use-case Hệ thống vẫn ở màn hình giao diện chơi game
6.
Điểm mở rộng Không có.
2.2.1.3.4. Đặc tả Use-case “thao tác” 1.
Tóm tắt Người chơi sử dụng use-case này để nhận các thao tác của người chơi
2.
Các dòng sự kiện Use-case bắt đầu khi người chơi khởi động game Khi nhấn nút “Play” : hệ thống mở giao diện game Khi nhấn nút “Xem điểm” : hệ thống mở giao diện xem điểm Khi chạm màn hình : chú chim nhảy lên
3.
Các yêu cầu đặc biệt Phát sinh hoạt động của người chơi
SVTH : Sa Đức Tiến
Trang 14
Lập trình game trên Android sử dụng LibGdx Engine
4.
Trạng thái hệ thống khi bắt đầu thực hiện Use-case Người dùng đang ở trong giao diện chơi game
5.
Trạng thái hệ thống sau khi thực hiện Use-case Hệ thống vẫn ở màn hình giao diện chơi game
6.
Điểm mở rộng Không có.
2.2.1.3.5 Đặc tả Use-case “Lưu điểm” 1.
Tóm tắt Người chơi sử dụng use-case này để lưu điểm của mình sau lượt chơi. Nếu điểm
cao nhất thì điểm cao nhất của trò chơi sẽ được thay đổi 2.
Các dòng sự kiện Use-case bắt đầu khi use-case “chơi game” kết thúc
3.
Các yêu cầu đặc biệt Không có.
4.
Trạng thái hệ thống khi bắt đầu thực hiện Use-case Người dùng đang ở trong giao diện chơi game
5.
Trạng thái hệ thống sau khi thực hiện Use-case Hệ thống vẫn ở màn hình giao diện chơi game
6.
Điểm mở rộng Không có
SVTH : Sa Đức Tiến
Trang 15
Lập trình game trên Android sử dụng LibGdx Engine
2.2.2 Biểu đồ hoạt động 1.
Biểu đồ hoạt động use-case “chơi game”
Hình 2.2: Biểu đồ hoạt động use-case “chơi game”
SVTH : Sa Đức Tiến
Trang 16
Lập trình game trên Android sử dụng LibGdx Engine
2.
Biểu đồ hoạt động use-case “Xem điểm”
Hình 2.3: Biểu đồ hoạt động use-case “Xem điểm”
3.
Biểu đồ hoạt động use-case “Thoát game”
Hình 2.4 : Biểu đồ hoạt động “Thoát game”
SVTH : Sa Đức Tiến
Trang 17
Lập trình game trên Android sử dụng LibGdx Engine
2.2.3 Biểu đồ lớp Game gồm 3 màn hình : -
Màn hình Menu
-
Màn hình chơi game
-
Màn hình xem điểm hay màn hình lúc kết thúc lượt chơi
Và gồm một số đối tượng : -
Bird : chú chim, nhân vật game
-
Pipe: ống khói, chướng ngại vật
-
Land: mặt đất, tạo cảm giác màn hình game dịch từ phải qua trái
SVTH : Sa Đức Tiến
Trang 18
Lập trình game trên Android sử dụng LibGdx Engine
Hình 2.5: Biểu đồ lớp
SVTH : Sa Đức Tiến
Trang 19
Lập trình game trên Android sử dụng LibGdx Engine
CHƯƠNG III : XÂY DỰNG GAME FLAPPY BIRD 3.1 Tạo 1 Libgdx project Màn hình phần mềm tạo Libgdx project
Hình 3.1: Phần mềm tạo Libgdx project Chọn “Create” để tạo 1 project
Hình 3.2 : Tạo 1 project
SVTH : Sa Đức Tiến
Trang 20
Lập trình game trên Android sử dụng LibGdx Engine
Sau khi chọn nơi lưu project, điền tên project và chọn hệ điều hành mà project có thể build thì phần mềm sẽ tạo những phần cơ bản của 1 project tạo thư mục đã chọn Với Libgdx ta có thể run project desktop một cách nhanh chóng Project android run lên máy ảo avd hoặc máy thật. Đối với mỗi loại điện thoại cần usb driver Project html muốn chạy phải cài thêm gwt 3.2 Xây dựng game 3.2.1 Lớp MyGdxGame – Lớp main Lớp kế thừa từ Game, có nhiệm vụ làm điểm khởi đầu cho game, từ đó chuyển qua màn hình cần vẽ bằng phương thức setScreen() và tạo các đối tượng ban đầu : âm thanh và tài nguyên game tại phương thực onCreate() 3.2.2 Lớp config – các thông số của game Lớp này lưu giữ các thông số của game : -
Chiều cao và thời gian khi nhảy lên của nhân vật game
-
Khoảng các giữa 2 ống khói
-
Khoảng thời gian thêm 2 ông khói
-
Thời gian mặt đất dịch chuyển sang trái
3.2.3 Lớp MenuScreen – Màn hình bắt đầu game Lớp màn hình khi mới bắt đầu game, kế thức lớp Screen. Và được nạp các ảnh nền, mặt đất, ảnh chữ “Flappy Bird” và 2 button chuyển màn hình PlayScreen – màn hình chơi game ; màn hình EndScreen – màn hình xem điểm Khi click vào button gọi phương thức setScreen() để chuyển màn hình
SVTH : Sa Đức Tiến
Trang 21
Lập trình game trên Android sử dụng LibGdx Engine
3.2.4 Lớp MyStage – lớp xử lý các sự kiện trong game Lớp này xử lý sự kiện khi chạm vào màn hình thì game phát ra âm thanh và nhân vật game nhảy lên độ cao và thời gian được khai báo trong lớp config 3.2.5 Các lớp đối tượng trong game 1.
Mặt đất – Land Kế thừa lớp Image, liên tục trôi về bên trái, được gọi khi bắt đầu
2.
Nhân vật game: Bird Tương tư như lớp Land, cũng kế thừa Image. Gồm -
boolean isDie : cho biết chim sống hay chết
-
int score :điểm con chim đạt được khi bay qua các ống
Và các hành động : -
Đập cánh liên tục (nếu isDie thì dùng đập cánh) - được gọi ngay khi bắt đầu.
-
tapMe() : hàm thực hiện chuỗi hành động nhảy lên và rơi xuống - đươc gọi khi sự kiên "tap" xảy ra.
-
hitMe() - hàm thực hiện cắm đầu xuống đất và chết - được gọi khi ống đụng con chim
-
updateScore() - hàm công score của con chim thêm một điểm - được gọi khi ống thấy con chim bay qua.
3.
Ống khói: Pipe Kế thừa lớp Image, khi con chím chạm phải ống khói thì sẽ kết thúc trò chơi. Nếu
không chạm thì sẽ cộng 1 điểm người chơi Gồm các thuộc tính: -
boolean getScore : cho biết con chim bay qua có tính điểm cho chim hay không)
-
Bird bird : con chim mà ống sẽ kiểm tra "bay qua" hay "đụng vào"
SVTH : Sa Đức Tiến
Trang 22
Lập trình game trên Android sử dụng LibGdx Engine
Và hành động: -
actionMoveLeft() - trôi liên tục về trái (nếu vượt quá màn hình thì tự động REMOVE) - được gọi ngay trong khi
-
bypass() : kiểm tra và cộng điểm cho con chim - được gọi liên tục
Nếu getScore true và có chim bay qua thì gọi hàm updateScore() của chim. -
checkCollision() : kiểm tra va chạm với chim - được gọi liên tục.
Nếu có va chạm thì gọi hàm hitMe() của chim. 3.2.6 Lớp PlayScreen – Màn hình chơi game Lớp được gọi khi người chơi nhấn nút “Play” ở màn hình bắt đầu game và xử lý các sự kiện chính trong game. -
Nạp các đối tượng khi mới vào màn hình
-
Kiểm tra nếu chú chim chết thì chuyển sang màn hình xem điểm, nếu chưa thì thêm ống khói
3.2.7 Lớp EndScreen – Màn hình xem điểm Được gọi khi người chơi muốn xem điểm hoặc khi kết thúc lượt chơi -
Thêm các đối tượng lên màn hình
-
Nếu điểm sau lượt chơi cao hơn điểm cao nhất đã lưu thì lưu lại điểm cao nhất
SVTH : Sa Đức Tiến
Trang 23
Lập trình game trên Android sử dụng LibGdx Engine
3.3 Giao diện game
Hình 3.3 : Màn hình bắt đầu game
Hình 3.5: Màn hình chơi game
SVTH : Sa Đức Tiến
Hình 3.4: Màn hình chuẩn bị vào game
Hình 3.6: Con chim cắm đầu xuống đất
Trang 24
Lập trình game trên Android sử dụng LibGdx Engine
Hình 3.7: Màn hình xem điểm
SVTH : Sa Đức Tiến
Trang 25
Lập trình game trên Android sử dụng LibGdx Engine
KẾT LUẬN 1.
Kết quả đạt được Qua quá trình thực hiện đồ án lập trình game sử dụng LibGdx Engine với sự
hướng dẫn của thầy Huỳnh Bá Diệu, em đã cài đặt thành công game Flappy Bird trên hệ điều hành Android, chạy thử trên thiết bị SamSung SGH-T679 và máy ảo Android trên máy tính, chạy thử game trên máy tính cũng ổn định. Em cũng nắm được cơ sở lý thuyết về hệ điều hành Android và LibGdx Engine, có thêm kinh nghiệm trong việc áp dụng kiến thức đã học vào thực tế và học hỏi công nghệ mới. Đồ án sẽ tạo tiền đề cho việc nghiên cứu phát triển các game đa nền tảng sau này. Sản phẩm có thể đưa vào thực tế dễ dàng, qua đó thấy được tính thực tế của đề tài và mở đầu cho các hướng nghiên cứu sử dụng công nghệ mới cho sinh viên về sau. 2.
Hướng mở rộng Game được làm bằng nền tảng đồ họa 2D cơ bản, đơn thuần vẽ các ảnh có sẵn lên
màn hình, để đồ họa tốt hơn nên chuyển qua nền tảng OpenGL, có chiều sâu hình ảnh và chuyên nghiệp hơn, hay được dùng để phát triển game trong thực tế. Khi mở rộng, có thể thêm các item tăng điểm, tạo độ khó cho trò chơi, thiết kế đường đi phức tạp hơn, thiết kế sinh động hơn. Đồ án có thể mở rộng thêm các chi tiết, trau chuốt lại hình ảnh để tham gia các store Android, người chơi dễ dàng tải về và sử dụng 3.
Hạn chế Hạn chế lớn nhất là đồ họa game và các hiệu ứng chuyển động còn thô sơ, chuyển
động con chim chưa giống thực tế. Thời gian phát triển ngắn nên thiết kế game chưa được phong phú, một số code chưa tối ưu tốc độ chạy game.
SVTH : Sa Đức Tiến
Trang 26