Khóa luận Xây dựng game 3D chém trái cây trên Windows và điện thoại di động sử dụng hệ điều hành Android

pdf 83 trang Gia Huy 17/05/2022 2060
Bạn đang xem 20 trang mẫu của tài liệu "Khóa luận Xây dựng game 3D chém trái cây trên Windows và điện thoại di động sử dụng hệ điều hành Android", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfkhoa_luan_xay_dung_game_3d_chem_trai_cay_tren_windows_va_die.pdf

Nội dung text: Khóa luận Xây dựng game 3D chém trái cây trên Windows và điện thoại di động sử dụng hệ điều hành Android

  1. ĐẠI HỌC ĐÀ NẴNG TRƢỜNG ĐẠI HỌC SƢ PHẠM KHOA TIN HỌC KHÓA LUẬN TỐT NGHIỆP NGÀNH CÔNG NGHỆ THÔNG TIN ĐỀ TÀI: XÂY DỰNG GAME 3D CHÉM TRÁI CÂY TRÊN WINDOWS VÀ ĐTDĐ SỬ DỤNG HĐH ANDROID GVHD : TRẦN UYÊN TRANG SVTH : NHỮ THỊ TRÀ MY LỚP : 08CNTT02 ĐÀ NẴNG, 05/2012
  2. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android NHẬN XÉT CỦA CÁN BỘ HƢỚNG DẪN Đà Nẵng, ngày , tháng , năm 2012 Cán bộ hƣớng dẫn Trần Uyên Trang SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 2
  3. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android NHẬN XÉT CỦA CÁN BỘ PHẢN BIỆN Đà Nẵng, ngày , tháng , năm 2012 Cán bộ phản biện SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 3
  4. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android LỜI CẢM ƠN Em xin chân thành cảm ơn các thầy cô giáo trong khoa TIN HỌC cùng toàn thể thầy cô của trường Đại Học Sư Phạm Đà Nẵng đã truyền đạt cho em những kiến thức quý giá trong suốt bốn năm học vừa qua. Xin chân thành cảm ơn cô: Trần Uyên Trang đã tận tình chỉ bảo và giúp đỡ em hoàn thành đề tài này. Cuối cùng em xin cảm ơn các anh chị trong công ty Gameloft cùng các bạn trong khoa TIN HỌC, những người đã giúp đỡ, chia sẽ những kiến thức, kinh nghiệm, tài liệu trong suốt quá trình nghiên cứu thực hiện đề tài. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 4
  5. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android LỜI CAM ĐOAN Em xin cam đoan: 1 Những nội dung trong báo cáo này là do em thực hiện. 2 Mọi tham khảo dùng trong báo cáo này đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố. 3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, em xin chịu hoàn toàn trách nhiệm. Sinh viên thực hiện Nhữ Thị Trà My SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 5
  6. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android MỤC LỤC LỜI CẢM ƠN 4 LỜI CAM ĐOAN 5 CHƢƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI 14 1.1. Giới thiệu đề tài 14 1.2. Mục đích, ý nghĩa của đề tài 14 1.3. Phƣơng án triển khai đề tài 14 CHƢƠNG 2 CƠ SỞ LÝ THUYẾT 16 2.1. Giới thiệu các công cụ để làm game 3D 16 2.1.1. Visual C++ 16 2.1.2. Giới thiệu về OpenGL 16 2.1.3. Giới thiệu về OpenGL ES 2.0 21 2.1.4. Giới thiệu về hệ điều hành ANDROID 22 2.2. Giới thiệu về 3D cơ bản 25 2.2.1. Hệ tọa độ 3D 25 2.2.2. Quy tắc bàn tay trái- bàn tay phải 26 2.2.3. Xác định vị trí của một điểm trong tọa độ 3D 26 2.2.4. Các phép dịch chuyển cơ bản ở trong 3D 27 2.2.5. Phép chiếu trong 3D 31 2.2.6. Tọa độ thực đến thiết bị 33 SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 6
  7. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 2.3. Cấu trúc của một game 35 2.3.1. Game Loop (vòng lặp của game) 35 2.3.2. Framerate (FPS) 36 2.3.3. Bộ nhớ (memory) 37 2.3.4. State 37 2.4. Giới thiệu về NDK 38 CHƢƠNG 3. PHÂN TÍCH TRÒ CHƠI 42 3.1. Hệ thống và tính khả chuyển (portability): 42 3.1.1. C/C++ và thƣ viện 42 3.1.2. Phân tích tính khả chuyển (portability) của các thành phần trong trò chơi 43 3.2. Xây dựng hệ thống khả chuyển 46 3.2.1. Sử dụng các tiền xử lý 47 3.2.2. Sử dụng nguyên mẫu hàm, lớp trừu tƣợng 47 3.3. Cấu trúc của một Trò chơi 48 3.3.1. Vòng lặp trò chơi 48 3.3.2. Cấu trúc trò chơi 50 3.3.3. Nội dung trò chơi 52 3.3.4. Đồ họa 54 3.3.5. Âm Thanh 56 CHƢƠNG 4. QUÁ TRÌNH LẬP TRÌNH 58 SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 7
  8. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 4.1. Thiết kế chƣơng trình 58 4.2. Vòng lặp trò chơi 59 4.3. Nội dung trò chơi 60 4.3.1. Khởi tạo vị trí hiện tại của trái cây 61 4.3.2. Cập nhật trạng thái của trái cây 61 4.3.3. Kiểm tra va chạm 62 4.3.4. Tính toán lại các trạng thái sau khi va chạm 62 4.4. Đồ Họa 62 4.4.1.Tải shader và biên dịch 63 4.4.2. Vẽ một đối tƣợng 3D 63 4.4.3. Vẽ một đối tƣợng 2D 64 4.5. Nhập 64 4.6. Âm thanh 65 4.7. Giao diện ứng dụng 65 4.8. Giao diện xuất nhập tập tin 66 CHƢƠNG 5. QUY TRÌNH CHUYỂN TRÒ CHƠI 67 5.1. Chuyển sang Android 67 5.1.1 Cài đặt phần mềm 67 5.1.2. Hoạt động của JNI và quy trình biên dịch 67 5.1.3. Đồ họa 68 SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 8
  9. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 5.1.4. Âm thanh 69 5.1.5. Cảm ứng chạm 70 5.1.6. Giao diện ứng dụng 71 5.1.7. Xử lí file 71 CHƢƠNG 6. QUÁ TRÌNH CÀI ĐẶT HỆT THỐNG TRÊN MOBIE 73 6.1. Cài đặt hệ thống trên Android 73 CHƢƠNG 7.MỘT SỐ KẾT QUẢ VÀ DEMO CỦA GAME 74 7.1. Kết quả demo trên Windows 74 7.2. Kết quả demo trên Android (điện thoại Galaxy mini) 79 CHƢƠNG 8. KẾT LUẬN 82 8.1. Kết quả đạt đƣợc 82 8.2. Những vấn đề còn tồn đọng 82 8.3. Hƣớng phát triển của đề tài 82 TÀI LIỆU THAM KHẢO 83 SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 9
  10. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android MỤC LỤC CÁC HÌNH Hình 1. Biễu diễn OpenGl và mối quan hệ với các API 20 Hình 2. Biễu diễn đường ống dẫn trong OpenGL 21 Hình 3. Biễu diễn đường ống dẫn trong OpenGL 2.0 22 Hình 4. Biễu tượng của hệ điều hành Android 23 Hình 5. Biễu diễn hệ tọa độ 3D 25 Hình 6. Biễu diễn quy tắc bàn tay trái- bàn tay phải 26 Hình 7. Biễu diễn một điểm trong hệ tọa độ 3D 26 Hình 8. Biễu diễn phép tịnh tiến một đối tượng theo một vector 27 Hình 9. Biễu diễn phép biến dạng theo một tỷ lệ. 28 Hình 10. Biễu diễn phép biến dạng không theo tỷ lệ. 28 Hình 11. Biễu diễn phép quay quanh một trục tọa độ theo một góc a 29 Hình 12. Phép quay theo trục Ox 30 Hình 13. Phép quay theo trục Oz 31 Hình 14. Biễu diễn phép chiếu phối cảnh 32 Hình 15. Biễu diễn phép chiếu vuông góc 33 Hình 16. Biễu diễn tọa độ thực đến thiết bị thông qua NDC 33 Hình 17. Biễu diễn về NDC 34 Hình 18. Biễu diễn sự biến đổi 3 chiều thành 2 chiều 34 Hình 19. Biễu diễn quá trình xây dựng và chuyển trò chơi. 46 SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 10
  11. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Hình 20. Biễu diễn vòng lặp của trò chơi 48 Hình 21. Cấu trúc của một trò chơi 50 Hình 22. Giao diện của trò chơi 51 Hình 23. Trạng thái của trò chơi 51 Hình 24. Biễu diễn chuyển động của trái cây 53 Hình 25. Biễu diễn thanh kiếm của người chơi 53 Hình 26. Biễu diễn va chạm giữa thanh kiếm và trái cây 53 Hình 27. Biễu diễn tính toán tọa độ sau va chạm 54 Hình 28. Biễu diễn đối tượng 3D trong trò chơi 55 Hình 29. Biễu diễn giao diện 2D 55 Hình 30. Biễu diễn cách bố trí để vẽ giao diện 2D trong trò chơi 56 Hình 31. Biễu diễn khung thiết kế của chương trình 58 Hình 32. Cách kế thừa các lớp trừ tượng trên các nền tảng khác nhau 59 Hình 33. Biễu diễn vòng lặp của trò chơi 60 Hình 34. Vòng đời của một trái cây 61 Hình 35. Sơ đồ hoạt động của OpenGl ES 2.0 trong chương trình 62 Hình 36. Kết quả demo về main menu ở trên Windows 74 Hình 37. Kết quả demo giao diện lúc đang chơi game trên windows 75 Hình 38. Kết quả demo lúc người chơi chạm vào trái cây trên windows 76 Hình 39. Kết quả demo lúc Game over trên windows 77 SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 11
  12. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Hình 40. Demo giao diện màn hình highscore trên windows 78 Hình 41. Kết quả demo biểu tượng icon của game trên Android 79 Hình 42. Kết quả demo màn hình mainmenu trên Android 79 Hình 43. Kết quả demo màn hình game play trên Android 80 Hình 44. Kết quả demo màn hình highScore trên Android 80 Hình 45. Kết quả demo màn hình GameOver trên Android 81 Hình 46. Kết quả demo màn hình About trên Android 81 SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 12
  13. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android MỤC LỤC CÁC BẢNG Bảng 1. Biễu diễn các kiểu dữ liệu trong OpenGL 18 Bảng 2. Các phiên bản OpenGL ES có thể sử dụng ND để tạo ra thư viện native 41 Bảng 3. Thực tế của các thành phần trong trò chơi trên 3 hệ thống 44 Bảng 4. Bảng nhận xét các thành phần trò chơi trên cả 3 hệ thống. 45 Bảng 5. Bản thiết kế âm thanh 57 SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 13
  14. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android CHƢƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI 1.1. Giới thiệu đề tài Ngày nay, những thiết bị di động cầm tay đã trở thành một trợ thủ không thể thiếu của đa số mọi ngƣời. Nó không đơn giản chỉ là những thiết bị dùng để liên lạc nữa mà hơn thế nữa nó còn là một trung tâm giải trí với những kho ứng dụng độc đáo. Đặc biệt sự ra đời của một số hệ điều hành trên di động nhƣ: IOS, Android, Windows Phone đã tạo bƣớc phát triển mạnh mẽ cho những ứng dụng này. Nói tới giải trí game luôn đứng hàng đầu. Với sự phát triển của công nghệ cũng nhƣ đáp ứng nhu cầu của thị trƣờng, các Game ngày càng có chất lƣợng cao. Thời gian gần đây một xu hƣớng mới là Game 3D đang đƣợc ƣa chuộng. Vì những lý do trên nên em xin chọn đề tài này nhằm nghiên cứu nhằm nghiên cứu kỹ thuật làm Game 3D trên ĐTDĐ có HĐH riêng. 1.2. Mục đích, ý nghĩa của đề tài Củng cố những kiến thức đã học. Tìm hiểu hệ điều hành Android , nghiên cứu công ghệ làm game 3D. Nghiên cứu cách xây dựng một game đa nền tảng, và quá trình chuyển từ Windows sang Android Xây dựng trò chơi chém trái cây trên Windows và ĐTDĐ có hệ điều hành Android. 1.3. Phương án triển khai đề tài Để hoàn thành đề tài này, trong quá trình triển khai thực hiện cần tuân thủ các bƣớc sau: Lập kế hoạch thực hiện đề tài. Tìm hiểu những vấn đề liên quan tới đề tài. Phân tích và thiết kế hệ thống, dữ liệu. Xây dựng chƣơng trình (chia nhỏ các chức năng thành các module và component để giải quyết từng phần). SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 14
  15. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Củng cố kết quả đã đạt đƣợc (bao gồm kiểm thử các module và chức năng của hệ thống, chỉnh sửa lỗi nếu có và tiến tới hoàn thiện chƣơng trình ở mức có thể). SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 15
  16. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android CHƢƠNG 1 CƠ SỞ LÝ THUYẾT 2.1. Giới thiệu các công cụ để làm game 3D 2.1.1. Visual C++ Microsoft Visual C++ (còn đƣợc gọi là MSVC) là một sản phẩm Môi trƣờng phát triển tích hợp (IDE) cho các ngôn ngữ lập trình C, C++, và C++/CLI của Microsoft. Visual C++ là bộ công cụ lập trình nằm trong bộ Visual Studio. Đây là một môi trƣờng lập trình đa năng dành cho ngôn ngữ C/C++ và vì là một môi trƣờng lập trình trên hệ điều hành Windows nên Visual C++ cho phép lập trình viên thực hiện rất nhiều công việc, hỗ trợ lập trình viên việc coding, thiết kế giao diện Trong VC++ chúng ta có thể tạo đƣợc : các ứng dụng trên Windows, ActiveX, hay thƣ viện liên kết động DLL VC++ có nhiều công cụ giúp việc thiết kế giao diện cho chƣơng trình, kiểm lỗi và sửa lỗi. 2.1.2. Giới thiệu về OpenGL 2.1.2.1. Giới thiệu OpenGL( Open Graphics Library) một bộ thƣ viện đồ họa mở,có mục đích lập ra một giao diện lập trình ứng dụng( API) đa chiều. Bộ thƣ viện đồ họa này chứa khoảng 150 hàm để vẽ các cảnh phức tạp từ những hàm đơn giản. Nó đƣợc dùng rộng rãi trong các trò chơi điện tử. Ngoài ra nó còn dùng trong các ứng dụng CAD, thực tế ảo, mô phỏng khoa học, mô phỏng thông tin, phát triển trò chơi. OpenGL còn có một đối thủ cạnh tranh là DirectX của Microsoft. Không gian trong OpenGL đƣợc miêu tả qua hình học xạ ảnh. Một điểm trong không gian này có tất cả 4 tọa độ. Cách thể hiện các điểm trong không gian bằng 4 tọa độ cho phép xử lý các điểm vô tận một cách tổng quát. Vì vậy mã nguồn các ứng dụng đã đƣợc đơn giản hóa đi nhiều. OpenGL hỗ trợ các hàm đồ họa: • Xây dựng các đối tƣợng phức tạp từ các thành phần hình học cơ bản (điểm, đoạn, đa giác, ảnh bitmap). • Sắp xếp đối tƣợng trong 3D và chọn điểm thuận lợi để quan sát. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 16
  17. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android • Tính toán màu sắc của các đối tƣợng (màu sắc của đối tƣợng đƣợc quy định bởi điều kiện chiếu sáng, texture của đối tƣợng, mô hình đƣợc xây dựng hoặc là kết hợp của cả 2 hoặc 3 yếu tố đó). • Biến đổi những mô tả toán học của đối tƣợng và thông tin màu sắc thành phần các pixel trên màn hình (quá trình này đƣợc gọi là rasterization). • Có API đa nền tảng: Windows, Mac, Linux, Unix. • Các hệ thống dùng để nhúng: - Iphone, Windows mobile • Dùng cho đa ngôn ngữ: - C, C++, Python, Ruby, PHP • Dùng cho cả cách vẽ trong 2D và 3D. Những thứ OpenGL không hỗ trợ: - Bản thân OpenGL không có sẵn các hàm nhập xuất hay thao tác trên windows. - OpenGL không có sẵn các hàm cấp cao để xây dựng các mô hình đối tƣợng, thay vào đó, ngƣời dùng phải tự xây dựng từ các thành phần hình học cơ bản (điểm, đoạn thẳng, đa giác). 2.1.2.2. Cấu trúc lệnh trong OpenGL OpenGL sử dụng tiền tố gl và tiếp theo đó là những từ những từ đƣợc viết hoa ở chữ cái đầu để tạo nên tên của một lệnh, ví dụ glClearColor(). Tƣơng tự, OpenGL đặt tên các hằng số bắt đầu bằng GL_ và các từ tiếp sau đều đƣợc viết hoa và cách nhau bởi dấu ’_’, ví dụ: GL_COLOR_BUFFER_BIT. Bên cạnh đó, với một số lệnh, để ám chỉ số lƣợng cũng nhƣ kiểu tham số đƣợc truyền, một số hậu tố đƣợc sử dụng nhƣ trong bảng sau: SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 17
  18. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Hậu tố Kiểu dữ liệu Tƣơng ứng với Tƣơng ứng với kiểu trong C kiểu trong OpenGL B 8-bit integer Signed char Glbyte S 16-bit integer Short Glshort I 32-bit integer Int or long Glint, Glsizei F 32-bit floating- Float GLfloat, point Glclampf D 64-bit floating- Double Glbouble, point Glclampd Ub 8-bit unsigned Unsigned char GLubyte, integer Glboolean Us 16-bit unsigned Unsigned short Glushort integer Ui 32-bit unsigned Unsigned int or GLuint, integer unsigned long GLenum, Glbitfield Bảng 1. Biễu diễn các kiểu dữ liệu trong OpenGL Ví dụ: glVertex2i(1, 3) tƣơng ứng với xác định một điểm(x, y) với x, y nguyên.  Lưu ý: SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 18
  19. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android OpenGL có định nghĩa một số kiểu biến, việc sử dụng các định nghĩa này thay vì định nghĩa có sẵn của C sẽ tránh gây lỗi khi biên dịch code trên một hệ thống khác. Một vài lệnh của OpenGL kết thúc bởi v ám chỉ rằng tham số truyền vào là một vector. Ví dụ: glColor3fv(color_array) là mảng 1 chiều có 3 phần tử là float. 2.1.2.3. Thƣ viện OpenGL  Core library  OpenGL utility library(GLU)  Links với hệ thống window  OpenGL Utility Toolkit(Glut) Để khắc phục một số nhƣợc điểm của OpenGL, GLUT đƣợc tạo ra với nhiều hàm hỗ trợ: Quản lý window Display callback Nhập xuất (bàn phím, chuột ) Vẽ một số đối tƣợng 3D phức tạp (mặt cầu, khối hộp )  OpenGL cho hệ thống nhúng • Mobile phone • PDAS • Video game consoles  Hệ tọa độ của OpenGL SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 19
  20. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android OpenGL dùng hệ tọa độ theo quy tắc bàn tay phải.  Mối quan hệ giữa OpenGL với các API Hình 1. Biễu diễn OpenGl và mối quan hệ với các API 2.1.2.4. Đƣờng ống dẫn trong OpenGL (OpenGL Rendering pipeline) Đƣờng ống dẫn của OpenGL gồm một chuỗi các quá trình xử lý theo trình tự. Hai đồ họa thông tin, dữ liệu vertex-based và pixel-based, đƣợc xử lý thông qua các đƣờng ống, Kết hợp với nhau sau đó đƣợc viết vào frame buffer.Chú ý rằng OpenGL có thể gửi các dữ liệu đã đƣợc xử lý lại cho ứng dụng của chúng ta. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 20
  21. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Hình 2. Biễu diễn đường ống dẫn trong OpenGL 2.1.3. Giới thiệu về OpenGL ES 2.0 Là một phần mềm giao diện để vẽ đồ họa 3D phức tạp trên các thiết bị cầm tay và nhúng. Nó chính là thƣ viện đồ họa cho các thiết bị cầm tay và nhúng với lập trình 3D phần cứng bao gồm điện thoại di động, PDA, thiết bị, xe cộ, và hệ thống điện tử. Với OpenGL ES 2.0 thì chúng ta có thể lập trình shader trên các thiết bị nhỏ và di động. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 21
  22. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android  Đường ống dẫn(pipeline) trong OpenGL ES 2.0 Hình 3. Biễu diễn đường ống dẫn trong OpenGL 2.0 2.1.4. Giới thiệu về hệ điều hành ANDROID 2.1.4.1. ANDROID là gì? Android là một hệ điều hành điện thoại di động đƣợc dựa trên một phiên bản sửa lỗi của Linux. Ban đầu nó đƣợc phát triển bởi một tổ chức cùng tên là Android. Vào năm 2005, nhƣ là một chiến lƣợc của mình vào thị trƣờng di động, Google đã mua lại Android và đã qua công tác phát triển nó. Các nhà phát triển viết ứng dụng cho Android dựa trên ngôn ngữ Java. Sự ra mắt của Android vào ngày 5 tháng 11 năm 2007 gắn với sự thành lập của liên minh thiết bị cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng, phần mềm và viễn thông nhằm mục đính tạo nên một chuẩn mở cho điện thoại di động trong tƣơng lai. Các lợi thế chính của việc áp dụng Android là nó cung cấp một cách tiếp cận thống nhất để phát triển ứng dụng. Các nhà phát triển chỉ cần phát triển cho Android và các ứng dụng của họ sẽ có thể chạy trên nhiều thiết bị khác nhau, miễn là thiết bị đƣợc hỗ trợ SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 22
  23. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android bằng cách sử dụng Android. Trong thế giới của điện thoại thông minh ứng dụng là một phần quan trọng nhất của chuỗi thành công. Do đó, các nhà sản xuất thiết bị nhìn thấy Android nhƣ hy vọng tốt nhất của họ để thách thức sự tấn công dữ dội của Iphone, mà đã chỉ huy một cơ sở lớn các ứng dụng. Android cung cấp một bộ đầy đủ các phần mềm cho các thiết bị di động: Nó là một hệ thống điều hành, middleware và các ứng dụng di động chủ chốt. Các Android Software Development Kit (SDK) bây giờ đã có. Hình 4. Biễu tượng của hệ điều hành Android Android đƣợc xây dựng để cho phép các nhà phát triển tạo ra các ứng dụng di động hấp dẫn tận dụng tất cả một chiếc điện thoại đã cung cấp. Nó đƣợc xây dựng để đƣợc thực sự mở. Ví dụ, một ứng dụng có thể kêu gọi bất kỳ chức năng lõi của điện thoại nhƣ thực hiện cuộc gọi, gửi tin nhắn văn bản, hoặc bằng cách sử dụng máy ảnh, cho phép các nhà phát triển để tạo ra phong phú hơn và nhiều hơn nữa những kinh nghiệm cố kết cho ngƣời dùng. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 23
  24. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Hơn nữa, nó sử dụng một máy ảo tuỳ chỉnh đƣợc thiết kế để tối ƣu hóa bộ nhớ và tài nguyên phần cứng trong một môi trƣờng di động. Android là mã nguồn mở, nó có thể đƣợc liberally mở rộng. Android không phân biệt giữa các ứng dụng lõi của điện thoại và các ứng dụng của bên thứ ba. Với các thiết bị xây dựng trên Hệ điều hành Android, ngƣời dùng có thể hoàn toàn thích ứng với điện thoại đến lợi ích của họ. Họ có thể trao đổi trên màn hình của điện thoại, những phong cách của dialer, hoặc bất kỳ ứng dụng. Android phá bỏ rào cản để xây dựng các ứng dụng mới và sáng tạo. Ví dụ, một nhà phát triển có thể kết hợp thông tin từ các trang web với dữ liệu trên điện thoại di động của một cá nhân – ví dụ nhƣ địa chỉ liên hệ của ngƣời dùng, lịch, hoặc vị trí địa lý – để cung cấp một trải nghiệm ngƣời dùng có liên quan hơn. Với Android, một nhà phát triển có thể xây dựng một ứng dụng cho phép ngƣời dùng xem vị trí của bạn bè của họ và đƣợc cảnh báo khi họ đang có trong vùng phụ cận cho họ một cơ hội để kết nối. Với Android tốc độ nhanh và phát triển ứng dụng dễ dàng. Android cung cấp truy cập đến một loạt các thƣ viện công cụ hữu ích và có thể đƣợc sử dụng để xây dựng các ứng dụng phong phú. Ví dụ, Android cho phép các nhà phát triển để có đƣợc vị trí của điện thoại, và cho phép các thiết bị giao tiếp với nhau tạo điều kiện cho đồng đẳng rich-to-peer ứng dụng xã hội. Rất nhiều nhà phát triển hệ điều hành Android đã vào cuộc và các ROM cho Android độc đáo đƣợc ra đời với nhiều tích năng nổi trội đƣợc tích hợp và đầy sáng tạo. 2.1.4.2. Các phiên bản của ANDROID Android 1.5 Android 1.6 Android 2.0 Android 2.1 SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 24
  25. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Android 2.2 Android 2.3.3 Android 3.0 Android 3.1 Android 3.2 Android 4.0 Android 4.0.3 2.2. Giới thiệu về 3D cơ bản 2.2.1. Hệ tọa độ 3D Đƣợc định nghĩa bởi 3 trục tọa độ: ox, oy, oz. Hình 5. Biễu diễn hệ tọa độ 3D SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 25
  26. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 2.2.2. Quy tắc bàn tay trái- bàn tay phải Hình 6. Biễu diễn quy tắc bàn tay trái- bàn tay phải 2.2.3. Xác định vị trí của một điểm trong tọa độ 3D Cho điểm P (Px, Py, Pz) trong tọa độ 3D. Ta biểu diễn nhƣ sau: Hình 7. Biễu diễn một điểm trong hệ tọa độ 3D SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 26
  27. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 2.2.4. Các phép dịch chuyển cơ bản ở trong 3D  Translate  Scale  Rotate 2.2.4.1. Phép Tịnh tiến (Translate)  Tịnh tiến một đối tượng P theo một vector V Hình 8. Biễu diễn phép tịnh tiến một đối tượng theo một vector Cho vector V: V = Vx * i + Vy *j + Vz *k Phép tịnh tiến P thành P’ theo vector V đƣợc xác định nhƣ sau: Tv: P -> P’ Tv = { Px’ = Px + Vx, Py’ = Py + Vy, Pz’ = Pz + Vz} SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 27
  28. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 2.2.4.2. Phép biến đổi Biến đổi theo một tỷ lệ S: P -> P’ S = { Px’ = Px *Sx, Py’ = Py *Sy, Pz’ = Pz * Sz} Hình 9. Biễu diễn phép biến dạng theo một tỷ lệ. Biến đổi không theo tỷ lệ Hình 10. Biễu diễn phép biến dạng không theo tỷ lệ. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 28
  29. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 2.2.4.3. Phép quay quanh một trục tọa độ theo một góc a Hình 11. Biễu diễn phép quay quanh một trục tọa độ theo một góc a  Quay quanh trục Ox, Oy, Oz  Cách xác định tọa độ theo phép quanh quay một trục Quay quanh trục Ox: R (a, x): P -> P’ R (a, x) = { Px’ = Px Py’ = Py * Cos (a) – Pz * Sin (a) Pz’ = Py * Sin (a) + Pz * Cos (a) } SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 29
  30. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Hình 12. Phép quay theo trục Ox Quay quanh trục Oy: R (a, y): P -> P’ R (a, y) = { Py’ = Py Px’ = Py * Cos (a) + Pz * Sin (a) Pz’ = -Px * Sin (a) + Pz * Cos (a) } Quay quanh trục Oz: R (a, z): P -> P’ R (a, z) = { Pz’ = Pz Px’ = Px * Cos (a) - Py * Sin (a) Py’ = Px * Sin (a) + Py * Cos (a) } SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 30
  31. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Hình 13. Phép quay theo trục Oz 2.2.5. Phép chiếu trong 3D Giới hạn vùng để vẽ ảnh trên thiết bị 3D: Trái, phải, trên, dƣới, gần, xa. 2.2.5.1. Chiếu phối cảnh Là hình chiếu đƣợc xây dựng bằng phép chiếu xuyên tâm. Đặc điểm của phép chiếu này là tạo cho ngƣời xem có cảm giác xa gần giống nhƣ nhìn trong thực tế. Là một cách vẽ trong hội họa, hay tạo hình, dùng để thể hiện các hình ảnh 3 chiều một cách gần đúng trên một bề mặt 2 chiều nhờ vào các quy luật phối cảnh. Các quy luật phối cảnh đƣợc xây dựng trên các quy tắc hình học chặt chẽ. Các quy tắc phối cảnh giúp hình ảnh 2 chiều trở thành 3 chiều, khiến chúng đƣợc quan sát đƣợc trực quan hơn trên tranh vẽ. Ứng dụng của hình chiều phối cảnh là đi kèm theo các hình chiếu vuông góc trong bản vẽ thiết kế kiến trúc và xây dựng để biễu diễn các công trình có kích thƣớc lớn. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 31
  32. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Hình 14. Biễu diễn phép chiếu phối cảnh 2.2.5.2. Chiếu trực giao (phép chiếu vuông góc) Trong phép chiếu này, khoảng cách của vật tới camera không ảnh hƣởng tới độ lớn của vật đó khi hiển thị. Phép chiếu trực giao hay còn đƣợc gọi là phép chiếu nhìn từ trên xuống hoặc từ dƣới lên. Có 2 phép chiếu khác cũng khá thông dụng là:  Phép nhìn từ trước: Tia chiếu song song với trục x và mặt phẳng quan sát là yz. Phép chiếu này loại bỏ thành phần x của P.  Phép chiếu nhìn từ phía bên cạnh: Tia chiếu song song với trục y và mặt phẳng chiếu này loại bỏ thành phần y của P. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 32
  33. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Hình 15. Biễu diễn phép chiếu vuông góc 2.2.6. Tọa độ thực đến thiết bị  Tọa độ thực -> tọa độ mắt -> NDC -> Thiết bị Hình 16. Biễu diễn tọa độ thực đến thiết bị thông qua NDC  NDC Là thiết bị chuẩn hóa tọa độ. Có hình dạng là một lập phƣơng có tọa độ các điểm cố định. Chỉ có những điểm nằm trong NDC mới đƣợc vẽ. Xác định tọa độ theo quy tắc bàn tay trái. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 33
  34. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Hình 17. Biễu diễn về NDC  Biểu đồ thể hiện sự biến đổi 3 chiều thành thành điểm có tọa độ 2 chiều Hình 18. Biễu diễn sự biến đổi 3 chiều thành 2 chiều SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 34
  35. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 2.3. Cấu trúc của một game  Các khái niệm trong game 2.3.1. Game Loop (vòng lặp của game) Là thành phần quan trọng của bất kỳ game nào. Game loop giúp game chạy ổn định hơn không bị ảnh hƣởng bởi tác động của ngƣời dùng. Hầu hết các chƣơng trình truyền thống đều đáp ứng thông điệp đƣa vào của ngƣời dùng . Ví dụ nhƣ: word thì định dạng và text theo nhƣng gì ngƣời dùng nhập vào, nếu ngƣời dùng không nhập vào thì nó không làm gì cả. Nhƣng đối với một chƣơng trình game thì dù ngƣời dùng có nhập vào thông điệp hay không thi nó vẫn thực hiện theo một cấu trúc chƣơng trình có sẵn đây chính là vòng lặp của game. Một vòng lặp game rất đơn giản nó có thể trông nhƣ thế này: While ( user doesn't exit ) check for user input run AI move enemies resolve collisions draw graphics play sounds end while Các vòng lặp game có thể thay đổi nhƣ sự phát triển của game nhƣng hầu hết chúng đều dựa trên ý tƣởng cơ bản này. Vòng lặp game khác nhau tùy thuộc vào nền tảng mà nó phát triển.Vòng lặp game đƣợc thực hiên thông qua 2 hàm chính là Update và Paint. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 35
  36. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 2.3.2. Framerate (FPS) Số lần vẽ khung hình trên một giây. Framerate chậm sẽ làm cho ngƣời dùng không có cảm giác thật, ảnh hƣởng đến sự tƣơng tác của ngƣời dùng với trò chơi.  Các yếu tố làm cho framerate chậm Hình vẽ có kích thƣớc lớn. Tính toán trong game nhiều. Lỗi của thiết bị.  Cách cải thiện framerate Tối ƣu hóa tính toán và các điều kiện thực hiện trong game: + Sử dụng ít vòng lặp. + Dùng phép toán dịch chuyển bit thay cho phép nhân và phép chia. + Khai báo các biến và phƣơng thức ở dạng static. Caching module của các file ảnh, tối ƣu hóa các module dùng để vẽ sao cho số lƣợng module vẽ ra là ít. Dùng Bacbuffer: Không vẽ từng sprite ra màn hình mà ta vẽ các sprite lên một ảnh sau đó vẽ ảnh đó ra màn hình. Bỏ các hiệu ứng không cần thiết.  Limit Frame rate Là sự giới hạn lại số lần vẽ trên một giây của trò chơi. Nhằm mục đích dùng trong những trƣờng hợp ứng dụng có frame rate quá nhanh, sẽ làm cho ứng dụng không ổn định. Ảnh hƣởng đến quá trình xử lý, ngƣời chơi không chơi kịp và một điều nữa là nó dẫn đến việc nhanh hết pin của thiết bị. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 36
  37. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 2.3.3. Bộ nhớ (memory) Là kích thƣớc bộ nhớ có thể dùng để chạy chƣơng trình game của thiết bị.  Các yếu Tố ảnh hưởng đến bộ nhớ trong game • File ảnh dùng trong game. • Âm thanh dùng trong game. • Các file text, mảng chứa text trong game.  Tối ưu hóa bộ nhớ • Đơn giản hóa các frame và hình ảnh động. • Chia ảnh ra thành các module nhỏ. • Xóa các module của dữ liệu sau khi caching. • Dùng gói sound có dung lƣợng nhỏ, Load sound khi chạy sound và giải phóng (free) khi dừng sound. • Dùng mảng một chiều thay vì dùng mảng 2 chiều. • Chỉ giữ những đối tƣợng cần thiết trong bộ nhớ. Để tránh vấn đề phân mảnh bộ nhớ (là các đối tƣợng thƣờng dùng (fonts, main characters, common interface sprites, ) ). • Load khi muốn vẽ và giải phóng khi đi ra khỏi màn hình. • Tránh phân mảnh bộ nhớ: load đối tƣợng có kích thƣớc lớn trƣớc. Giữ cho bộ nhớ ổn định. Không load và giải phóng quá nhiều lần. 2.3.4. State Là các trạng thái của một game. Chúng có liên quan chặt chẽ với nhau.Thông thƣờng một game thƣờng có các trạng thái sau: mainmenu, gamestart, gamewin, gameover, about, highscore, Exit SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 37
  38. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 2.4. Giới thiệu về NDK Là bộ công cho phép nhúng các mã code lên các ứng dụng android. ứng dụng Android chạy trong máy ảo Dalvik. NDK cho phép chúng ta dùng các ứng dụng viết bằng ngôn ngữ C và C++ lên thiết bị android. NDK cung cấp một số hỗ trợ sau: • Một tập hợp các Toos và files build dùng để tạo ra các thƣ viện mã từ sources C và C++. • Cách để nhúng các thƣ viện mã vào một file (.apk) gói ứng dụng mà chúng ta có thể chạy đƣợc trên các thiết bị android. • Tài liệu, ví dụ và một số hƣớng dẫn. • Một bộ các thƣ viện C/C++ đƣợc hỗ trợ trong tất cả các phiên bản sau này của hệ điều hành Android, bắt đầu từ Android 1.5. Từ phiên bản 2.3 trở đi, hệ điều hành android còn hỗ trợ them cách viết Activity bằng C/C++. NDK cung cấp bộ header cho libc ( bột thƣ viện C ), libm (bột thƣ viện toán học), openGL ES(thƣ viện đồ họa 3D), giao diện JNI(là giao diện để liên lạc giữa java và native code), một số thƣ viện khác, đƣợc chứa trong Development Tools.  Khi nào thì Native code Không phải khi nào NDK cũng đều có lợi với tất cả các ứng dụng. Vì vậy chúng ta cần cân bằng lợi ích với nhƣợc điểm của nó. Đặc biệt trong trƣờng hợp sử dụng native code không làm tăng hiệu suất thực thi mà làm tăng sự phức tạp của ứng dụng. Nói chung chỉ nên sử dụng native code nếu nó là cần thiết đối với ứng dụng của mình. Chứ không phải vì chúng ta thích chƣơng trình trong C/C++. Frame android cung cấp 2 cách để dùng native code : Dùng Android framework để viết ứng dụng của mình và dùng JNI để truy cập API đƣợc cung cấp bởi Android NDK. Kỹ thuật này cho phép chúng ta tận dụng các tiện ích của SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 38
  39. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Android framework, nhƣng vẫn cho phép chúng ta viết native code khi cần thiết. Chúng ta có thể cài ứng dụng sử dụng Native code thông qua JNI trên thiết bị chạy android 1.5 hoặc mới hơn. Viết một native activity, cho phép chúng ta thực hiện cài đặt vòng đời của ứng dụng android trên native code. Android SDK cung cấp lớp NativeActivity cho phép chúng ta cài đặt vòng đời thông qua các hàm sau (onCreate(), onResume(), ).  Development tool NDK gồm một bộ công cụ (compilers, linkers, ) dùng để tạo ra mã nhị phân cho bộ vi xử lý ARM trên hệ điều hành Linux, OS X, và Windows(với Cygwin). Cung cấp một bộ headers của hệ thống cho các API native chuẩn mà đƣợc đảm bảo đƣợc hỗ trợ trong tất cả các phiên bản sau này của nền tảng: • Libc (thƣ viện C) headers. • Libm (thƣ viện toán học) headers. • Giao diện JNI headers. • Liblog (Android logging) header. • OpenGL ES 1.1 và OpenGL ES 2.0(thƣ viện graphics library) headers. • Libjnigraphics (Pixel buffer access) header(for Android 2.2. trở lên). • Thƣ viện OpenSL ES native audio. • API cho ứng dụng android. NDK cũng cung cấp một hệ thống biên dịch giúp chúng ta làm việc hiệu quả với mã nguồn của mình mà không cần điều khiển chi tiết các công cụ/ nền tảng/ CPU/ ABI. Ngƣời dùng chỉ cần tạo các file biên dịch đơn giản để mô tả mã nguồn của mình mà trong ứng dụng Android sử dụng. Và hệ thống biên dịch sẽ sử dụng các file này để biên dịch, và tạo ra một thƣ viện động bỏ trực tiếp vào trong dự án của mình. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 39
  40. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android  Hệ thống và phần mềm yêu cầu • The Android SDK - Hoàn tất cài đặt một Android SDK (bao gồm tất cả các phụ thuộc). - Phiên bản SDK Android 1.5 trở đi. • Hệ điều hành hỗ trợ - Window XP (32-bit) hoặc vista (32- hoặc 64 -bit). - Linux (32 hoặc 64 bit, thử nghiệm trên Linux Ubuntu Dapper Drake). • Các công cụ Cần Thiết - Đối với tất cả các nền tảng, bắt buộc GNU Make 3.81 trở lên. - Đối với Window, bắt buộc Cygwin 1.7 trở lên. NDK không làm việc với Cygwin 1.5. • Nền tảng Android tƣơng thích Các thƣ viện native đƣợc tạo ra bởi Android NDK chỉ có thể sử dụng trên các thiết bị Android phiên bản 1.5 trở đi. Điều này là do Bộ công cụ và ABI liên quan đến những thay đổi làm cho các thƣ viện native không tƣơng thích với hình ảnh hệ thống 1.0 và 1.1. Vì lí do này nên chúng ta nên sử dụng thƣ viện native đƣợc tạo ra với NDK trong ứng dụng mà đƣợc triển khai trên các thiết bị chạy trên nền tảng android 1.5 trở đi. Để đảm bảo tính tƣơng thích, một ứng dụng dùng thƣ viện native tạo ra với NDK phải khai báo phần tử trong file mainfese của nó, với một giá trị thuộc tính của android:minSdkVersion 3 hoặc lớn hơn. Ví dụ: SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 40
  41. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Nếu sử dụng NDK để tạo ra thƣ viện native có sử dụng OpenGL ES API, thì ứng dụng chứa các thƣ viện chỉ có thể đƣợc triển khai trên các thiết bị chạy tối tiểu là các phiên bản đƣợc nêu dƣới đây: OpenGL ES Version Compatible Android Required uses-sdk Attribute Used Platform(s) OpenGL ES 1.1 Android 1.6 and android:minSdkVersion="4" higher OpenGL ES 2.0 Android 2.0 and android:minSdkVersion="5" higher Bảng 2. Các phiên bản OpenGL ES có thể sử dụng ND để tạo ra thư viện native SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 41
  42. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android CHƢƠNG 3 PHÂN TÍCH TRÕ CHƠI 3.1. Hệ thống và tính khả chuyển (portability): 3.1.1. C/C++ và thƣ viện Để đạt đƣợc yêu cầu đặt ra của bài toán, là hệ thống có thể chạy đƣợc trên cả hai Hệ điều hành: Windows, Android . Và trong quá trình làm không cần mất nhiều thời gian, chúng ta cần phải phân tích kỹ lƣỡng và đề xuất phƣơng án phù hợp để tiến hành đề ra giải pháp và xây dựng bài toán. Nhận xét:  Cả hai hệ điều hành đều cung cấp môi trường lập trình trên ngôn ngữ ANSI C/C++. Windows: Hổ trợ sẵn. Android: JNI từ Android 1.5, Native Activity từ Android 2.3.  Cả hai hệ điều hành đều cung cấp thư viện OpenGL ES 2.0. Android: Từ phiên bản 2.1. Windows: Thông qua bộ giả lập OpenGL ES 2.0 của PowerVR.  Môi trường C/C++ trên cả hai hệ điều hành tương đối giống nhau. Tuy nhiên số lượng các thư viện hổ trợ khác nhau, do đó chúng ta chỉ sử dụng các thư viện chuẩn mà cả hai đều hỗ trợ.  Có thể dễ dàng chuyển một thư viện C chuẩn lên cả hai hệ điều hành (trong trường hợp ứng dụng này, tôi đã chuyển thành công thư viện LIB PNG – hổ trợ đọc và xử lí tập tin hình ảnh PNG trong C/C++).  Tất cả đều hổ trợ các công cụ phát triển mạnh mẽ, Android chạy trên nền tảng GCC. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 42
  43. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android  Do đó, trong quá trình lập trò chơi, chúng ta nên sử dụng hợp lí các công cụ, thƣ viện, mã nguồn và lập trình một cách tối ƣu để có thể sử dụng lại trên cả hai nền tảng khác nhau này. 3.1.2. Phân tích tính khả chuyển (portability) của các thành phần trong trò chơi Thông thƣờng, trong một trò chơi (tức là một ứng dụng) sẽ có các thành phần nhƣ sau: - Vòng lặp trò chơi: là trung tâm của trò chơi, quản lí vòng đời, trạng thái của trò chơi. - Logic: là phần xử lí của trò chơi, xử lí thuật toán, trí thông minh nhân tạo, tƣơng tác với ngƣời chơi. - Đồ Họa: là phần thể hiện của trò chơi. - Âm thanh: là phần không thể thiếu của trò chơi, giúp trò chơi trở nên sinh động hơn. - Nhập: đối với các thiết bị Android thì tƣơng tác chủ yếu thông qua cảm ứng chạm (touch screen), giúp ngƣời dùng tƣơng tác với trò chơi. - Giao diện ứng dụng: là bộ khung tƣơng tác với nền tảng của ứng dụng: cho phép ứng dụng khởi chạy, tạm ngƣng, ngƣng, và xử lí các sự kiện liên quan. Đối với các thành phần trên, ta có bảng thực tế nhƣ sau: Nền tảng / Yếu tố Windows Android Vònglặp trò chơi Có thể cài đặt giống nhau Có thể cài đặt giống nhau trên cả hai hệ thống do đều trên cả hai hệ thống do đều viết bằng C/C++. viết bằng C/C++. Logic Tƣơng tự, ta có thể cài đặt Tƣơng tự, ta có thể cài đặt giống nhau trên cả ba hệ giống nhau trên cả ba hệ thống. thống. Đồ Họa - Direct X. - OpenGL ES 1.1. - OpenGL. OpenGL ES 2.0. (C/C++: OpenGLES (thông qua bộ từ Android 2.1; Java: từ giả lập). Android 2.2). SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 43
  44. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Âm thanh Có thể sử dụng các bộ thƣ - MediaPlayer. viện âm thanh. - SoundPool. - Open SL ES (Từ Android 2.2). Hổ trợ các định dạng: midi, wav, m4a, mp3 Nhập Nhận thông điệp từ Từ View – phƣơng thức windows. OnTouchEvent(). Không hổ trợ nhận sự kiện cảm ứng trực tiếp từ JNI. Giao diện ứng dụng: main() tạo cửa sổ và - Activity viết bằng Java. tƣơng tác. Native activity viết bằng C/C++. (từ Android 2.3). Xuất nhập tập tin Dùng thƣ viên . Đọc tập tin từ res/raw qua JNI. Bảng 3. Thực tế của các thành phần trong trò chơi trên 3 hệ thống Từ bảng thực tế trên, ta có bảng nhận xét sau: Yếu tố Tính Khả Chuyển Giải Pháp Vòng lặp trò Cài đặt bằng C/C++. chơi  Logic Trò Chơi Cài đặt bằng C/C++.  Đồ Họa Dùng OpenGL ES 2.0. API 2.0 mạnh mẽ hơn  nhiều so với 1.1 và hầu hết các thiết bị hiện tại đều hổ trợ. Âm thanh Không có một chuẩn chung về âm thanh. Tuy nhiên ở mức độ đơn giản, chúng ta không xử lí nhiều tới âm thanh (âm thanh nổi, v.v ). - Trên windows: không cài đặt âm thanh. - IOS: Sử dung AVAAudioPlayer. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 44
  45. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android - Android OS: Sử dụng MediaPlayer. Nhập Tƣơng tự, ta không có một API chung để nhận cảm ứng, do đó phần này ta phải viết riêng trên từng hệ thống. Giao diện ứng Phần này ta phải viết riêng trên từng hệ dụng thống. Xuất nhập tập Phần này ta phải viết riêng trên từng hệ tin thống. Bảng 4. Bảng nhận xét các thành phần trò chơi trên cả 3 hệ thống. Với lựa chọn trên, trò chơi của chúng ta sẽ chạy đƣợc trên các nền tảng với cấu hình nhƣ sau:  Windows: 32 bit, card đồ họa hỗ trợ OpenGL ES 2.0.  Android: phiên bản 2.1 trở về sau. Dựa vào bảng phân tích trên, ta tiến hành chia phần cài đặt ra các phần sau.  Phần có thể sử dụng chung: Chung cho tất cả các trò chơi: các thành phần chung cho toàn bộ các trò chơi. Riêng biệt của trò chơi hiện tại: ví dụ thuật toán, logic, ý tƣởng trò chơi. Phần phải cài đặt riêng: đây là phần mình phải cài đặt riêng cho từng hệ thống, tuy nhiên, các phần này đơn giản hơn nhiều so với các phần còn lại, chúng ta sẽ thiết kế để cài đặt phần này có thể sử dụng chung cho toàn bộ các trò chơi. Từ đó, ta suy ra quy trình thực hiện như sau: SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 45
  46. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Cài đặt phần chung. Windows 32 Cài đặt cho windows, Cài đặt trò chơi Cài đặt và chuyển Hình 19. Biễu diễn quá trình xây dựng và chuyển trò chơi. Ta sẽ ƣu tiên xây dựng các thành phần chung nhất, sau đó hoàn thành trò chơi trên windows. Nơi chúng ta đƣợc sự trợ giúp của các công cụ và môi trƣờng quen thuộc giúp chúng ta cài đặt và gỡ rối một cách dễ dàng. Sau đó chúng ta sẽ thực hiện đƣa lên các nền tảng khác một cách dễ dàng. 3.2. Xây dựng hệ thống khả chuyển Để dễ dàng hơn trong việc lập trình cũng nhƣ việc chuyển trò chơi từ hệ thống này sang các nền tảng khác, ta cần phải xây dựng hệ thống theo các phƣơng pháp sau. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 46
  47. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 3.2.1. Sử dụng các tiền xử lý Các thông số kỹ thuật của các thiết bị tƣơng đối khác nhau, đôi khi cũng có sự khác nhau giữa các thƣ viện trên các thiết bị. Do đó ta cần phải sử dụng các định nghĩa tiền xử lí để có thể viết mã nguồn chạy tốt trên mọi hệ thống. Các định nghĩa tiền xử lí có sẵn trên hệ thống: WIN32: có giá trị đúng khi nền tảng biên dịch hiện tại là windows. ANDROID: có giá trị đúng khi nền tảng biên dịch hiện tại là Android. Các cách sử dụng tiền xử lí để tăng tính khả chuyển trong chƣơng trình: Định nghĩa các thông số: các thiết bị có thể có màn hình khác nhau, do đó ta đƣa các thông số đó vào các định nghĩa lúc biên dịch. #define SCREEN_W 960 #define SCREEN_H 640 Viết riêng cho từng cấu hình: sử dụng tiền xử lí #if, #else, #endif để viết một đoạn mã mà chỉ chạy trên một nền tảng mong muốn. 3.2.2. Sử dụng nguyên mẫu hàm, lớp trừu tƣợng Khai báo một nguyên mẫu hàm, lớp trừu tƣợng chung cho tất cả các hệ thống sau đó ta cài đặt khác nhau trên mỗi nền tảng khác nhau. Ví dụ, do xử lí âm thanh trong trò chơi này tƣơng đối đơn giản, do đó, ta cần hai hàm để thực hiện chơi một âm thanh bất kỳ và dừng tất cả các âm thanh đang chơi. Ta khai báo nguyên mẫu hàm nhƣ sau: // Play Sound void PlaySound(int id, int loop = 1); // Stop all sound void StopSound(); Và sau đó ta sẽ viết hàm này trên các hệ thống khác nhau sử dụng tiền xử lý nhƣ phƣơng pháp trên. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 47
  48. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 3.3. Cấu trúc của một Trò chơi 3.3.1. Vòng lặp trò chơi Vòng lặp trò chơi chính là trung tâm của trò chơi. Trò chơi khác hẳn với các ứng dụng hƣớng sự kiện khác, ngay cả khi không có sự kiện xuất nhập, trò chơi vẫn phải hoạt động và đáp ứng liên tục để tạo ra hiệu ứng hoạt động của các nhân vật, đối tƣợng trong trò chơi. Có thể ví dụ trò chơi nhƣ một cuốn phim hoạt hình mà ngƣời chơi có thể tƣơng tác với các nhân vật trong trò chơi. Để tạo đƣợc hiệu ứng hoạt hình, trò chơi phải vẽ hơn 12 hình trên một giây để đảm bảo hiệu ứng hoạt hình. Ngoài ra trò chơi cần phải tính toán, xử lí các sự kiện phát sinh, tính toán các vật thể, các nhân vật và hoạt động trong trò chơi. Đó là hai công việc chính của vòng lặp trò chơi - Cập nhật, tính toán trạng thái hiện tại. - Vẽ các nhân vật, đối tƣợng, giao diện màn hình. Kết thúc Đúng Sai Xử lí sự kiện Vẽ Hình 20. Biễu diễn vòng lặp của trò chơi SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 48
  49. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Hai hành động này đƣợc lặp đi lặp lại liên tiếp nhau trong suốt trò chơi hình thành nên vòng lặp chính của trò chơi. Để mọi việc rõ ràng và dễ dàng hơn, chúng ta nên tách riêng biệt hai hành động này và sử dụng các biến trạng thái để lập trình. Ví dụ: Trong game cần vẽ một quả bóng di động. Ta nhận thấy: - Để xử lí cập nhật, tính toán trạng thái của quả bóng ta cần các thông tin bao gồm: bán kính bóng, vị trí trái bóng, và vận tốc của trái bóng. - Để vẽ trái bóng lên màn hình: ta cần biết các thông tin: bán kính, vị trí. Bán kính, vị trí, vận tốc: chính là các biến trạng thái chung cho chƣơng trình. Sử dụng các biến trạng thái này, ở hành động cập nhật, ta không cần quan tâm trái bóng đƣợc vẽ nhƣ thế nào vẫn có thể thực hiện đƣợc và ngƣợc lại. Việc nhìn một góc nhìn riêng biệt sẽ khiến chúng ta làm mọi việc dễ dàng và đơn giản hơn nhiều. Số lần vẽ/cập nhật trên một giây gọi là FPS (Frame per second). Thông thƣờng, một trò chơi 3D có số FPS chuẩn là 60 FPS. Số FPS càng lớn thì trò chơi chạy càng mƣợt mà, tuy nhiên nếu số FPS quá lớn thì sẽ gây hiện tƣợng trò chơi quá nhanh, ngƣời dùng không thể chơi tốt đƣợc, khi đó, chúng ta cần phải giới hạn số FPS lại một giá trị mong muốn. FPS là giá trị phụ thuộc nhiều vào cấu hình của thiết bị, do đó: việc chuyển đổi trò chơi trên nhiều hệ thống khác nhau sẽ dẫn đến số FPS khác nhau. Trên một thiết bị mạnh hơn, số FPS sẽ tăng lên, do đó chúng ta sẽ phải giới hạn lại. Ngƣợc lại, chúng ta cần tối ƣu hóa thuật toán, cách vẽ hoặc chỉnh sửa nội dung của trò chơi đó để đạt đƣợc số FPS mong muốn tạo ra kết quả tối ƣu cho ngƣời chơi. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 49
  50. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 3.3.2. Cấu trúc trò chơi Hình 21. Cấu trúc của một trò chơi Một trò chơi bao gồm nhiều giao diện khác nhau. Ví dụ: bảng chọn chính, mục giới thiệu trò chơi, mục điểm cao nhất và trò chơi. Để tích hợp điều này vào vòng lặp chính, chúng ta sẽ có một biến trạng thái lƣu lại giao diện hiện tại của trò chơi, rồi theo đó xử lí tƣơng ứng. Dựa vào biến trạng thái chúng ta sẽ lƣu lại giao diện hiện tại và xử lí trạng thái tƣơng ứng. Tƣơng tự nhƣ trong hàm cập nhật hoặc hàm vẽ. Trong thiết kế trò chơi của mình, tôi đưa ra các giao diện sau - Bảng chọn chính: Hiển thị các mục để ngƣời chơi có thể truy xuất đƣợc các mục khác trong trò chơi. - Điểm cao: Ghi lại các kỷ lục đƣợc lập trong trò chơi. - Giới thiệu: Giới thiệu sơ lƣợc về trò chơi. - Trò chơi: nơi ngƣời chơi chơi và ghi điểm. - Kết thúc trò chơi: Khi ngƣời chơi bị mất hết mạng. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 50
  51. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Xử lí sự kiện Trạng thái hiện tại Xử lí bảng chọn Xử lí trò chơi Xử lí giới thiệu Vẽ Hình 22. Giao diện của trò chơi Các trạng thái của trò chơi Chọn Xem Điểm Chọn Giới thiệu Xem Điểm Bảng chọn chính Giới Thiệu Chọn Vào chơi Vào chơi Mất hết mạng Hết - Chọn nút quay lại Hình 23. Trạng thái của trò chơi SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 51
  52. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 3.3.3. Nội dung trò chơi Trò chơi mô phỏng hành động cắt trái cây của một kiếm sĩ. Trò chơi chỉ có một chế độ chơi duy nhất tính điểm. Ngƣời chơi đƣợc bắt đầu với năm mạng và một thanh kiếm. Trái cây lần lƣợt đƣợc tung lên từ bên dƣới, ngƣời chơi có nhiệm vụ sử dụng kiếm để cắt trái cây ra làm đôi trƣớc khi trái cây đó rơi ra khỏi tầm nhìn. Cứ mỗi trái cây cắt thành công, ngƣời chơi sẽ dành đƣợc một điểm. Độ khó của trò chơi: tăng dần, cứ 50 điểm đạt đƣợc, trò chơi sẽ xuất hiện thêm một trái cây khiến mức độ khó của trò chơi tăng lên. Ngƣợc lại ngƣời chơi sẽ đƣợc tặng một mạng. Trò chơi kết thúc: khi ngƣời chơi mất tất cả các số mạng của mình. Cứ mỗi khi ngƣời chơi làm rơi một trái cây, ngƣời chơi sẽ bị trừ một mạng. Các thiết kế thuật toán:  Chuyển động của trái cây: Ban đầu vị trí P trái cây đƣợc đặt bên dƣới màn hình. Trái cây đƣợc cung cấp một vận tốc ban đầu và . Trong môi trƣờng tồn tại gia tốc trọng trƣờng . Theo đó, sau mỗi khung hình, ta có cập nhật trạng thái của trái cây đã cho nhƣ sau: P SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 52
  53. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Hình 24. Biễu diễn chuyển động của trái cây  Thanh kiếm của ngƣời chơi: Thanh kiếm, vết chém của ngƣời chơi đƣợc nhập từ màn hình thông qua cảm ứng chạm. Dữ liệu vào tƣơng đối rời rạc do hạn chế của hệ điều hành. Ví dụ khi ngƣời dùng lƣợt tay trên màn hình thì sẽ có khoảng n điểm đƣợc ghi lại (không phải tất cả các điểm). Từ những dữ liệu này, chúng ta xây dựng thành thanh kiếm có hình dạng tƣơng đối nhƣ hình. Chạm và các điểm được ghi nhận Thanh kiếm sau khi được render Quy tắc: D B DB = BC = w/2.Trong đó, w là độ rộng của A C thanh kiếm tại B. Hình 25. Biễu diễn thanh kiếm của người chơi  Kiểm tra va chạm: Ta kiểm tra va chạm giữa thanh kiếm và trái cây bằng cách kiểm tra va chạm giữa thanh kiếm và hình chữ nhật viền xung quanh trái cây. Hình 26. Biễu diễn va chạm giữa thanh kiếm và trái cây SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 53
  54. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android  Tính toán tọa độ sau va chạm: Trƣớc khi va chạm: Gia tốc của vật là . Sau khi va chạm: Trái cây đƣợc cắt làm 2, và đƣợc truyền thêm một gia tốc tƣơng ứng do lực chém truyền vào là . Gia tốc sau: . Hình 27. Biễu diễn tính toán tọa độ sau va chạm 3.3.4. Đồ họa Chúng ta sử dụng bộ thƣ viện OPENGL ES 2.0. Ta cài đặt một số phƣơng thức để vẽ một đối tƣợng 3D và vẽ giao diện 2D. Vẽ đối tƣợng 3D: - Một đối tƣợng 3D bao gồm định nghĩa về tọa độ và một đối tƣợng texture đƣợc lƣu riêng rẻ. - Dữ liệu về tọa độ trong trò chơi đƣợc tạo ra bằng phần mềm 3DS Max Studio, và sau đó đƣợc xuất ra tập tin văn bản kiểu obj (wave front object), đây là dữ liệu bao gồm các thông tin để vẽ một đối tƣợng: Tọa độ. (vertex position). UV. (textcoord). Vector Normal. (để tính toán ánh sáng). SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 54
  55. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android - Đối tƣợng 3D trong trò chơi chủ yếu là trái cây và đã đƣợc cắt sẵn ra làm 2 phần bằng nhau đễ dễ dàng xử lí trong trò chơi. Hình 28. Biễu diễn đối tượng 3D trong trò chơi Các đối tƣợng này đƣợc tự vẽ để đảm bảo tính đơn giản và tăng tốc độ thực thi trong chƣơng trình. Vẽ giao diện 2D: Giao diện 2D là một phần không thể thiếu trong trò chơi, vì nó là phần quan trọng để thể hiện thông tin tới ngƣời dùng. Để vẽ 2D trong OpenGL ES 2.0 chúng ta tạo một texture rồi tiến hành vẽ từng bộ đôi tam giác 1 ra màn hình. Ví dụ, để vẽ hình bên dƣới thì chúng ta vẽ hai tam giác nhƣ sau: Hình 29. Biễu diễn giao diện 2D Để tạo ra toàn bộ giao diện 2D trong chƣơng trình, ta nén tất cả vào một texture có kích thƣớc lớn, sau đó tải vào bộ nhớ và vẽ từng bộ đôi tam giác nhƣ mô hình trên. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 55
  56. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Hình 30. Biễu diễn cách bố trí để vẽ giao diện 2D trong trò chơi 3.3.5. Âm Thanh Trò chơi tƣơng đối đơn giản, do đó trong chƣơng trình ta có hai loại âm thanh sau:  Âm thanh nền.  Âm thanh hiệu ứng. Ta có bản thiết kế âm thanh nhƣ sau: SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 56
  57. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Tên âm thanh Mô tả Kích hoạt MUSIC_TITLE Nhạc nền. Kích hoạt tại bảng chọn chính. CUT Âm hiệu ứng Ngƣời dùng chọn một menu. Ngƣời dùng cắt thành công một trái cây. GAME_OVER Nhạc nền. Khi trò chơi kết thúc. Bảng 5. Bản thiết kế âm thanh SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 57
  58. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android CHƢƠNG 4 QUÁ TRÌNH LẬP TRÌNH 4.1. Thiết kế chương trình Dựa vào các phân tích, ta có thiết kế khung của một chƣơng trình. Hình 31. Biễu diễn khung thiết kế của chương trình - Lớp Application là bộ giao tiếp giữa ứng dụng và các nền tảng. - Lớp FileSystem là lớp trừu tƣợng đƣợc dùng để thực hiện các hành động đọc/ghi tập tin. -Lớp VideoDriver: là lớp cài đặt các phƣơng thức vẽ hình liên quan đến OpenGLES 2.0. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 58
  59. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android - Lớp Sprite2DManager, Sprite3DManager là lớp chịu trách nhiệm tải các đối tƣợng 3D cũng nhƣ giao diện 2D và vẽ lên trong chƣơng trình. Ở mỗi nền tảng các đối tƣợng này sẽ đƣợc kế thừa và cài đặt khác nhau nếu cần thiết. Hình 32. Cách kế thừa các lớp trừ tượng trên các nền tảng khác nhau Đây là bộ khung cần thiết để chúng ta tiến hành xây dựng các thành phần trong chƣơng trình. 4.2. Vòng lặp trò chơi Chúng ta thực hiện vòng lặp trò chơi qua hai phƣơng thức của lớp Application, đó là phƣơng thức Update() và Render(). - Phƣơng thức Update: cập nhật trạng thái của trò chơi. - Phƣơng thức Render: Render nội dung của trò chơi ra màn hình thiết bị. Do trò chơi bao gồm nhiều giao diện (bảng chọn chính, xem kỷ lục, xem giới thiệu, chơi game ). Chúng ta sẽ khai báo một biến trạng thái để lƣu trữ trạng thái hiện tại. Sau đó ở hàm Update và Render, chúng ta sẽ dựa vào biến trạng thái này để cập nhật trò chơi. void UpdateGame(int type) { switch (s_iCurrentState) { SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 59
  60. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android case GAME_START: UpdateGameStart(type); break; case MAIN_MENU: UpdateMainMenu(type); Ứng với mỗi trạng thái ta sử dụng một chỉ thị để xác định hành động hiện tại là Paint hay Render. Ngoài ra mỗi trạng thái cần có các hành động để tải và hủy bỏ các đối tƣợng trên. - UPDATE: Cập nhật trạng thái hiện tại. - PAINT: Render trạng thái hiện tại. - CTOR: Tải các đối tƣợng cần thiết để vẽ và tính toán trạng thái hiện tại. - DTOR: Hủy bỏ các biến đã sử dụng trong trạng thái hiện tại. Hình 33. Biễu diễn vòng lặp của trò chơi 4.3. Nội dung trò chơi Chúng ta định nghĩa các biến trạng thái rồi lần lƣợt cài đặt các nội dung nhƣ sau: Các biến dùng để vẽ và cập nhật trái cây: enum {ST_NORMAL, ST_CUT, ST_HIDDEN}; struct Fruit { int status; float x; float y; float ax; float ay; int model; }; SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 60
  61. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Fruit fruits[MAX]; Các biến dùng để lƣu trữ và xử lí nhập từ ngƣời chơi: int blades[MAX_BLADE][2]; int bladesLength = 0; Ta có vòng đời của một trái cây nhƣ sau: Hình 34. Vòng đời của một trái cây  Các chức năng cài đặt: 4.3.1. Khởi tạo vị trí hiện tại của trái cây // gán gia tốc fruits[i].ay = 0.28f; fruits[i].ax = (rand() % 10 - 5) * 0.01f; // gán vịtrí fruits[i].y = -2.8f; fruits[i].x = (rand() % 90) / 10.0f - 4.0f; // gán trạng thái fruits[i].status = ST_NORMAL; // gán loại trái cây fruits[i].model = (rand() % 3) * 3; 4.3.2. Cập nhật trạng thái của trái cây // Tính toán lại gia tốc fruits[i].ay -= 0.007f; fruits[i].y += fruits[i].ay; fruits[i].x += fruits[i].ax; // Xác định lại trạng thái if (fruits[i].y < -3.0f) { fruits[i].status = ST_HIDDEN; } SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 61
  62. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 4.3.3. Kiểm tra va chạm Chúng ta kiểm tra cắt nhau giữa các điểm thuộc thanh kiếm và đƣờng biên va chạm của trái cây nhƣ sau: // ax, ay là tọa độ của trái cây. float cx = blades[bladesLength - 2][0] + vx * j * stepLength; float cy = blades[bladesLength - 2][1] + vy * j * stepLength; if(fruits[i].status == ST_NORMAL && PointerInRect(cx, cy, ax - 56, ay - 58, 112, 116)) { // Đã cắt nhau 4.3.4. Tính toán lại các trạng thái sau khi va chạm fruits[i].ax += 0.02f * vx; fruits[i].ay += 0.02f * vy; fruits[i].model = fruits[i].model + 1; fruits[i].status = ST_CUT; Tuy nhiên bây giờ, trái cây của chúng ta đã đƣợc cắt làm 2: do đó, chúng ta sẽ có: fruits[i + 1].ax = -fruits[i].ax; fruits[i + 1].x = fruits[i].x; fruits[i + 1].y = fruits[i].y; fruits[i + 1].ay = -fruits[i].ay; fruits[i + 1].model = fruits[i].model + 1; fruits[i + 1].status = ST_CUT; 4.4. Đồ Họa Sơ đồ hoạt động của OpenGLES 2.0 trong chƣơng trình nhƣ sau: Hình 35. Sơ đồ hoạt động của OpenGl ES 2.0 trong chương trình Để cài đặt đồ họa với OpenGLES 2.0 chúng ta cần phải cài đặt các tính năng sau. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 62
  63. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 4.4.1.Tải shader và biên dịch OpenGLES 2.0 cung cấp một đƣờng ống để chúng ta có thể lập trình cách thức hoạt động của bộ xử lí đồ họa. Shader là bộ điều khiển hoạt động của OpenGLES 2.0 và đƣợc chạy ngay trên bộ xử lí đồ họa. Shader đƣợc viết bằng ngôn ngữ shader (glsl) và bao gồm hai phần: shader đỉnh (vertex shader) và shader điểm ảnh (fragment shader). Ứng dụng OpenGLES 2.0 chỉ có thể hoạt động khi đã đƣợc xác định một cặp shader trong hệ thống. Do đó chúng ta phải cài đặt shader cho lớp xử lí đồ họa của mình. - Tải shader từ tập tin. - Biên dịch shader. - Liên kết shader thành chƣơng trình. - Sử dụng chƣơng trình đó để vẽ. 4.4.2. Vẽ một đối tƣợng 3D Để vẽ một đối tƣợng 3D, chúng ta sử dụng phép chiếu phối cảnh. Một đối tƣợng 3D đƣợc xác định bởi các thuộc tính: - Vị trí, dữ liệu, màu sắc, UV của từng đỉnh thuộc đối tƣợng. - Quan hệ giữa các đỉnh thuộc đối tƣợng. - Texture: hình ảnh đƣợc áp lên đối tƣợng đó. Trong chƣơng trình, vị trí, dữ liệu, màu sắc, uv của đối tƣợng đƣợc lƣu dƣới dạng file .OBJ có định dạng nhƣ sau: v $x $y $z ; đỉnh có tọa độ x y z vt $u $v ; tọa độ uv của đối tƣợng. vn $x $y $z ; vec-tơ chính phƣơng. f $i/$j/$k $i’/$j’/$k’ $i’’/$j’’/$k’’; Xác định một mặt tam giác của đối tƣợng, trong đó: $i: vị trí của tọa độ, $j: vị trí của uv, $k: vị trí của vector chính phƣơng tại đỉnh đó, Các thông tin này đƣợc nén lại vào một file nhị phân chứa nhiều đối tƣợng cùng lúc mục đích: dễ dàng tải và thực hiện trong chƣơng trình. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 63
  64. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Lúc vẽ, chúng ta truyền các tham số này vào một shader trong OPENGL ES và bộ xử lí đồ họa sẽ vẽ đối tƣợng này lên màn hình. driver->SetArray(ATTRIB_VERTEX, 3, meshes[i].vertices); driver->SetArray(ATTRIB_TEX_COORD, 2, meshes[i].texCoords); //driver->SetArray(ATTRIB_NORMAL, 3, meshes[i].normals); driver->SetTexture2D(0, manager- >GetTexture(meshes[i].textureId)); driver->DrawArray(TRIANGLES, meshes[i].nVertices); 4.4.3. Vẽ một đối tƣợng 2D Để vẽ một đối tƣợng 2D, chúng ta sử dụng phép chiếu vuông góc. Tƣơng tự nhƣ đối tƣợng 3D, chúng ta sẽ lƣu thông tin của các đối tƣợng 2D vào một file nhị phân, sau đó tải vào bộ nhớ và vẽ ra. 4.5. Nhập Ta sử dụng hàm PointerEvent trong đối tƣợng Application để nhận và xử lí các sự kiện nhập từ cảm ứng / chuột. Ở trên windows, ta xử lí nhƣ sau: case WM_LBUTTONDOWN: mouseDown = true; bt::core::Application::GetApplication() ->PointerEvent(bt::core::POINTER_START, x, y); break; case WM_MOUSEMOVE: if (mouseDown) { bt::core::Application::GetApplication() ->PointerEvent(bt::core::POINTER_MOVED, x, y); }; break; case WM_LBUTTONUP: mouseDown = false; bt::core::Application::GetApplication() ->PointerEvent(bt::core::POINTER_ENDED, x, y); break; Ở trong trò chơi của mình, chúng ta chỉ cần cài đặt và xử lí hàm PointerEvent mà không cần phải biết thật sự cảm ứng/chuột đƣợc nhận nhƣ thế nào. Ví dụ: SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 64
  65. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android if (pointerState == POINTER_START && PointerInRect(m_iLastPointerX, m_iLastPointerY, SCREEN_W - 100, SCREEN_H - 100, 100, 100)) { SwitchState(MAIN_MENU); } 4.6. Âm thanh Ta đƣa ra hai phƣơng thức để chơi âm thanh: // Play Sound void PlaySound(int id, int loop = 1); // Stop all sound void StopSound(); Tuy nhiên, trong windows, chúng ta không xử lí âm thanh – do không cần thiết và không có đủ thời gian để thực hiện. 4.7. Giao diện ứng dụng Ứng dụng của chúng ta xây dựng là ứng dụng console: để có giao diện giúp chúng ta debug dễ dàng. Đầu vào của ứng dụng là hàm main() -> chúng ta thực hiện các việc sau: - Khởi tạo ứng dụng. - Tạo cửa sổ và khởi tạo đối tƣợng OpenGL ES 2.0. - Bắt đầu trò chơi. - Gọi vòng lặp trò chơi. app->StartApp(); while (!exit) { // Update and Paint app->Update(); app->Render(); eglSwapBuffers(context->display, context->surface); }; app->Destroyed(); SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 65
  66. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 4.8. Giao diện xuất nhập tập tin Việc xuất nhập tập tin trong windows tƣơng đối đơn giản. Chúng ta chỉ cần sử dụng các phƣơng thức cơ bản của thƣ viện để thực hiện. // Open a file in Windows 32bits so easily FILE* Win32FileSystem::OpenFile(const char *filename, const char *mode) { FILE *file; fopen_s(&file, filename, mode); return file; }; SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 66
  67. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android CHƢƠNG 5 QUY TRÌNH CHUYỂN TRÕ CHƠI Sau khi thực hiện cài đặt các bƣớc trên, ta có đƣợc ứng dụng trò chơi hoàn chỉnh trên windows. Tuy nhiên, mục tiêu của chúng ta là khiến chƣơng trình đó chạy đƣợc trên các thiết bị Android. Để làm đƣợc điều đó, chúng ta cần phải tiến hành chuyển sang Android OS. Để làm đƣợc điều đó ta cần phải cài đặt các thành phần khác nhau trên hệ thống này. 5.1. Chuyển sang Android 5.1.1 Cài đặt phần mềm Để tạo môi trƣờng phát triển trên Android ta cần cài đặt các công cụ sau: - Java SDK: yêu cầu để chạy ứng dụng Java. - Cygwin 1.7 trở về sau: dùng để giả lập môi trƣờng phát triển linux, gcc và chạy NDK. - Android SDK: cần thiết để biên dịch, đóng gói ứng dụng Android. Ngoài ra Android SDK còn cung cấp cho chúng ta các công cụ để tƣơng tác với thiết bị di động, và bộ giả lập. - Android NDK: Dùng để biên dịch mã nguồn C ra thƣ viện từ đó gọi từ java. 5.1.2. Hoạt động của JNI và quy trình biên dịch Nhƣ chúng ta đều biết, ứng dụng android chạy trên nền chính là Java. Muốn chạy C/C++ ta có hai giải pháp: - Sử dụng JNI: từ android 1.5 trở về sau. - Sử dụng Native Activity: từ android 2.3 trở về sau. Native Activity là phƣơng án lựa chọn tốt hơn, bởi vì chƣơng trình sẽ không tốn chi phí giao dịch giữa máy ảo Java và C/C++. Tuy nhiên, tới thời điểm hiện tại, số lƣợng các thiết bị hổ trợ Android 2.3 tƣơng đối hiếm nên chúng ta sẽ sử dụng giải pháp JNI. Hoạt động của JNI đƣợc mô tả nhƣ sau: - Các phƣơng thức JNI đƣợc đánh dấu bằng từ khóa native. - Các phƣơng thức này đƣợc viết bằng C++ và biên dịch ra thƣ viện liên kết động .so. - Thƣ viện liên kết động đƣợc Load lên trong chƣơng trình Java bằng lời gọi System.loadLibrary( ); SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 67
  68. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android - Khi trong chƣơng trình Java có lời gọi tới hàm native, máy ảo Java sẽ tìm kiếm trong thƣ viện động xem hàm này đã đƣợc cài đặt chƣa, sau đó các đối tƣợng Java sẽ đƣợc chuyển thành C++ để thực hiện lời gọi tới C++. - Trong C++ cũng cung cấp các thƣ viện cho phép giao tiếp tới máy ảo và chƣơng trình Java.  Quy trình xây dựng một chƣơng trình có sử dụng JNI nhƣ sau: - Khai báo phƣơng thức native ở trong lớp Java. - Khai báo và cài đặt phƣơng thức này trong C. (Nếu C++ thì phải sử dụng extern “C” để tránh sửa tên trong C++). Quy tắc đặt tên hàm đó nhƣ sau: tengoi_tenlop_tenphuongthuc - Sau đó dùng NDK để biên dịch mã nguồn C thành thƣ viện liên kết động và thƣ viện này đƣợc tự động bỏ vào thƣ mục lib của dự án android. - Viết chƣơng trình java gọi các hàm native này. - Dùng bộ SDK để biên dịch thành ứng dụng apk. Do các bƣớc sử dụng NDK để biên dịch đƣợc thực hiện trên dấu nhắc lệnh, do đó chúng ta sẽ tạo tập tin lệnh để thực hiện điều này. 5.1.3. Đồ họa Android hổ trợ OpenGLES 2.0 trong NDK từ phiên bản 2.1 trở về sau. Và trong ví dụ NDK có sẵn ví dụ thực thi với OpenGL ES 2.0 nên ta có thể sử dụng ví dụ này, sau đó thay đổi các thành phần trong đó để tải ứng dụng C++ và chạy lên. Ngoài ra để biên dịch với OpenGL ES 2.0 thì trong make file của dự án NDK ta phải thêm dòng LOCAL_LDLIBS := -llog -lz -lGLESv2. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 68
  69. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 5.1.4. Âm thanh NDK không hổ trợ chơi âm thanh cho đến Android phiên bản 2.2 trở về sau. Do đó chúng ta sẽ sử dụng Java để chạy các tập tin âm thanh. Phần tải các tập tin âm thanh, Play Sound và StopSound đƣợc cài đặt trong Java: Trong C++, ta cài đặt các hàm PlaySound và Stop Sound bằng cách gọi tới hàm PlaySound trong đối tƣợng Java. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 69
  70. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 5.1.5. Cảm ứng chạm Trong ứng dụng Android, ta nhận sự kiện cảm ứng chạm thông qua hàm OnTouchEvent. Từ đó ta gọi đến các hàm native trong C++ và xử lí nó. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 70
  71. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 5.1.6. Giao diện ứng dụng Ứng dụng Java đƣợc viết theo Activity. Trong ứng dụng Java, chúng ta tải một GLSurfaceView để thể hiện giao diện OpenGL ES 2.0. Trong các hàm này, chúng ta thêm các phƣơng thức để gọi chƣơng trình C/C++ của chúng ta từ thƣ viện native lên và thực hiện. Các phương thức: - onSurfaceCreate: đƣợc gọi khi đối tƣợng GLSurfaceView đƣợc tạo ra, tại đây ta cần gọi hàm app->Init(), và app->StartGame(). - onDrawFrame: hàm đƣợc gọi khi đối tƣợng đƣợc vẽ ra. Tại đây ta cần gọi các hàm app- >Update(), và app->Render. 5.1.7. Xử lí file Các tập tin trong res/raw sẽ truy cập đƣợc từ Android bằng lệnh fdopen(). Tuy nhiên, ta cần phải biết các thông số ID để thực hiện truy xuất này.  Từ Java ta có thể lấy các thông số này và truyền vào C/C++:  Trong C++ ta lƣu lại các tham số này.  Sau đó sử dụng lúc cần thiết. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 71
  72. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android Vậy là ta có thể đọc các tập tin tài nguyên và hiển thị lên trong trò chơi. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 72
  73. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android CHƢƠNG 6 QUÁ TRÌNH CÀI ĐẶT HỆT THỐNG TRÊN MOBIE 6.1. Cài đặt hệ thống trên Android Có 2 cách để cài đặt  Dùng Thẻ nhớ Copy file apk sau khi build ra vào thẻ nhớ của điện thoại. Sau đó vào điện thoại. Chọn chƣơng trình vừa copy vào thẻ nhở để cài đặt.  Dùng câu lệnh Cắm điện thoại vào máy tính để cho máy tính kết nối với điện thoại Android. Dùng câu lệnh: adb devices để kiểm tra xem máy tính đã kết nối với điện thoại chƣa. Sau khi điện thoại Android đã kết nối với máy tính. Ta dùng lệnh: Adb install -r để cài đặt trên điện thoại. Cách hủy bỏ game đã cài đặt Chúng ta vào mục setting -> Applications->Manage application. Rồi sau đó chọn vào ứng dụng game mà chúng ta đã cài đặt trên máy. Chọn Unstill để gỡ ứng dụng game đó. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 73
  74. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android CHƢƠNG 7 MỘT SỐ KẾT QUẢ VÀ DEMO CỦA GAME 7.1. Kết quả demo trên Windows  Màn Hình main menu Hình 36. Kết quả demo về main menu ở trên Windows SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 74
  75. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android  Ở màn hình lúc đang chơi game Hình 37. Kết quả demo giao diện lúc đang chơi game trên windows SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 75
  76. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android  Lúc người dùng chạm vào trái cây đang chuyển động Hình 38. Kết quả demo lúc người chơi chạm vào trái cây trên windows SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 76
  77. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android  Màn hình lúc bị Game over Hình 39. Kết quả demo lúc Game over trên windows SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 77
  78. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android  Màn hình Highscore Hình 40. Demo giao diện màn hình highscore trên windows SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 78
  79. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android 7.2. Kết quả demo trên Android (điện thoại Galaxy mini)  Biểu tượng Icon của game Hình 41. Kết quả demo biểu tượng icon của game trên Android  Màn hình Mainmenu Hình 42. Kết quả demo màn hình mainmenu trên Android SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 79
  80. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android  Màn hình Gameplay Hình 43. Kết quả demo màn hình game play trên Android  Màn hình Higscore Hình 44. Kết quả demo màn hình highScore trên Android SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 80
  81. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android  Màn hình GameOver Hình 45. Kết quả demo màn hình GameOver trên Android  Màn hình About Hình 46. Kết quả demo màn hình About trên Android SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 81
  82. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android CHƢƠNG 8 KẾT LUẬN 8.1. Kết quả đạt được Tìm hiểu đƣợc cách xây dựng một game đa nền tảng, và quả trình chuyển game từ windows sang Android. Biết đƣợc cấu trúc của một game 3D. Xây dựng thành công một game 3D trên hệ điều hành Windows và ĐTDĐ có HĐH Android với giao diện thân thiện và dễ sử dụng. 8.2. Những vấn đề còn tồn đọng Các tính năng của game còn khá đơn giản. 8.3. Hướng phát triển của đề tài Xây dựng thêm các tính năng mới của game : xuất nhập tên ngƣời chơi, Tạo thêm các hiệu ứng cho game. Và đặc biệt là phát triển để game có thể chuyển qua Không chỉ có windows, Adroid mà trên còn nhiều hệ điều hành khác nữa. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 82
  83. Xây dựng game 3D chém trái cây trên Windows và ĐTDĐ sử dụng HĐH Android TÀI LIỆU THAM KHẢO [1] Trang web: [2] Lê Phong: Hƣớng dẫn lập trình OpenGL căn bản. [3] Trang web: [4] Lê Tấn Hùng, Huỳnh Quyết Thắng: kỹ thuật đồ họa. Nhà xuất bản khoa học và kỹ thuật, Hà Nội-2000. [5] Donald Hearn, M. Pauline Baker: Computer Graphics, Prentice-Hall, Inc., Englewood Cliffs, New Jersey, 1986. [6] Trang web: www.vietnamandroid.com, [7] Và một số tài liệu khác. SVTH: Nhữ Thị Trà My- 08CNTT02 Trang 83