intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Tóm tắt Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng game 2D trên Unity

Chia sẻ: Anhnangchieuta | Ngày: | Loại File: PDF | Số trang:21

83
lượt xem
20
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Mục tiêu nghiên cứu của đề tài là xây dựng được game hoàn chỉnh; tạo hiệu ứng và âm thanh; tìm hiểu về ngôn ngữ lập trình C#, đối tượng hỗ trợ C# và Unity. Mời các bạn cùng tham khảo!

Chủ đề:
Lưu

Nội dung Text: Tóm tắt Đồ án tốt nghiệp Công nghệ thông tin: Xây dựng game 2D trên Unity

  1. TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG VIỆT - HÀN KHOA ……………………. TÊN ĐỀ TÀI XÂY DỰNG GAME 2D TRÊN UNITY TÓM TẮT ĐỒ ÁN TỐT NGHIỆP NGÀNH: ỨNG DỤNG PHẦN MỀM Sinh viên thực hiện: Nguyễn Văn Quỳnh Mã sinh viên: CCCT17A017 Giảng viên hướng dẫn: Nguyễn Thanh Cẩm Khóa đào tạo: 2017- 2020 Đà Nẵng - 12/2020 1
  2. MỞ ĐẦU 1. Lý do chọn đề tài Thị trường game di động tại Việt Nam đang phát triển và có tiềm năng lớn. Trong thời đại công nghệ thông tin như hiện nay, sản phẩm công nghệ ngày càng chịu sự đánh giá khắt khe hơn từ phía những người dùng, đặc biệt là về sản phẩm Game được nhận rất nhiều sự đánh giá từ phía các Game thủ, hay chỉ là những người chơi bình thường. Ngành công nghiệp Game hiện nay có thể nói là bùng nổ, với tốc độ phát triển đến chóng mặt, rất nhiều những Game hay và hấp dẫn đã được ra đời trong thời gian qua. Vì thế em chọn đề tài này để xây dựng game đưa đến cho người dùng trải nghiệm và tìm hiểu kỹ hơn về xây dựng game. 2. Mục tiêu nghiên cứu 2.1. Mục tiêu - Xây dựng được game hoàn chỉnh. - Tạo hiệu ứng và âm thanh. - Tìm hiểu về ngôn ngữ lập trình C#, đối tượng hỗ trợ C# và Unity. 2.2. Nhiệm vụ nghiên cứu - Tìm hiểu xây dựng kịch bản game trên Unity. 3. Đối tƣợng và phạm vi nghiên cứu 3.1. Đối tƣợng nghiên cứu - Lập trình game trên Unity. 3.2. Phạm vi nghiên cứu - Xây dựng game hoàn thành ở mức độ cơ bản. 4. Phƣơng pháp nghiên cứu - Nghiên cứu lý thuyết. - Tham khảo internet. - Xây dựng game theo mục tiêu đề ra. 5. Ý nghĩa khoa học và thực tiễn của đề tài 5.1. Ý nghĩa khoa học - Tìm hiểu về thị trường game. - Nghiên cứu cách làm game 2D. 5.2. Ý nghĩa thực tiễn - Học hỏi và tích lũy kinh nghiệm về làm game. - Biết được cách tạo ra game. 2
  3. 6. Bố cục đề tài Chương I: Cơ sở lý thuyết Chương II: Phân tích thiết kế hệ thống Chương III: Cài đặt chương trình và đánh giá 3
  4. CHƢƠNG I: CƠ SỞ LÝ THUYẾT 1.1. Giới thiệu Game Đặc trưng của dòng game mà em đã xây dựng tại một thời điểm chỉ có một người chơi, trò chơi sẽ có một màn hình chơi, người chơi sẽ điều khiển di chuyển máy bay lên, xuống, qua trái, qua phải để tránh đạn và bắn hạ gục máy bay địch. Nếu người chơi để máy bay trúng đạn thì máu sẽ mất và cho đến khi hết máu. Quy luật chơi: Người chơi sẽ phải điều khiển máy bay tránh đạn của địch, đồng thời bắn hạ gục máy bay địch. Nếu trúng đạn sẽ bị mất máu, hạ gục được máy bay địch sẽ được cộng điểm. Khi hết máu trò chơi sẽ kết thúc. 1.2. Tổng quan về Android Android có mã nguồn mở và Google phát hành mã nguồn theo Giấy phép Apache. Chính mã nguồn mở cùng với một giấy phép không có nhiều ràng buộc đã cho phép các nhà phát triển thiết bị, mạng di động và các lập trình viên nhiệt huyết được điều chỉnh và phân phối Android một cách tự do. Ngoài ra, Android còn có một cộng đồng lập trình viên đông đảo chuyên viết các ứng dụng để mở rộng chức năng của thiết bị, bằng một loại ngôn ngữ lập trình Java có sửa đổi. Tháng 10 năm 2012, có khoảng 700.000 ứng dụng trên Android, và số lượt tải ứng dụng từ Google Play, cửa hàng ứng dụng chính của Android, ước tính khoảng 25 tỷ lượt. Những yếu tố này đã giúp Android trở thành nền tảng điện thoại thông minh phổ biến nhất thế giới, vượt qua Symbian OS vào quý 4 năm 2010, và được các công ty công nghệ lựa chọn khi họ cần một hệ điều hành không nặng nề, có khả năng tinh chỉnh, và giá rẻ chạy trên các thiết bị công nghệ cao thay vì tạo dựng từ đầu. Kết quả là mặc dù được thiết kế để chạy trên điện thoại và máy tính bảng, Android đã xuất hiện trên TV, máy chơi game và các thiết bị điện tử khác. Bản chất mở của Android cũng khích lệ một đội ngũ đông đảo lập trình viên và những người đam mê sử dụng mã nguồn mở để tạo ra những dự án do cộng đồng quản lý. Những dự án này bổ sung các tính năng cao cấp cho những người dùng thích tìm tòi hoặc đưa Android vào các thiết bị ban đầu chạy hệ điều hành khác. 1.3. Tổng quan về Unity Chỉ với khoản tiền bỏ ra khá khiêm tốn (1.500 USD) là phiên bản pro đã nằm trong tay của chúng ta, dĩ nhiên tại Việt Nam số tiền này vẫn là quá lớn nhưng thật 4
  5. may là đã có phiên bản Unity Free. Tuy nhiên, nhiều tính năng quan trọng (Network) bị cắt giảm nhưng đó không phải là vấn đề quá lớn nếu muốn phát triển một tựa game tầm trung. Vào năm 2009, Unity nằm trong top 5 game engine tốt nhất cho việc sản xuất game với chỉ sau 4 năm phát triển. Unity đứng thứ 4, xếp sau Unreal Engine 3, Gamebryo Engine (được VTC Studio mua về phát triển SQUAD) và Cry Engine 2. Lượng tài liệu hướng dẫn Unity rất phong phú. Hơn thế nữa nó còn có sẵn một cộng đồng cực lớn với diễn đàn riêng. Bất cứ điều gì không hiểu chúng ta đều có thể thoải mái hỏi và nhận được câu trả lời nhanh chóng, tận tâm. Quá trình tạo địa hình cũng như truy xuất từ các phần mềm 3DSMax, Maya, Cinema4D... rất nhanh chóng. Sức mạnh và sự tiện lợi của Unity là vô cùng lớn. Sức mạnh: Unity có thể tạo ra được nhiều loại game 2D, 3D đa dạng dễ sử dụng với người làm game chưa chuyên nghiệp, chất lượng cao, chạy hầu hết trên các hệ điều hành. Sự tiện lợi: nếu chúng ta là một người chuyên dùng 3Dmax, hay Maya hoặc phần mềm mã nguồn mở Blender thì quả là thật tuyệt, chúng ta sẽ có một lợi thế lớn khi viết game trên Unity này, bởi công việc tạo các mô hình 2D, 3D sẽ trở lên dễ dàng hơn rất nhiều, việc kết hợp giữa người lập trình và người thiết kế các mô hình sẽ nhanh và hiệu quả hơn. Trong Unity chúng ta có thể import trực tiếp các file mô hình đang thiết kế và sẽ thiết kế hoàn thiện tiếp nếu chưa xong trong khi đó công việc import chỉ diễn ra một lần. Không như việc phải dùng các công cụ khác để thực hiện viết game chúng ta sẽ phải xuất chúng ra một dạng nào đó và mỗi lần sửa lại phần mô hình chúng ta lại phải import lại, và như thế là quá mất thời gian trong việc tạo và chỉnh sửa các mô hình theo ý muốn. Ngoài ra Unity còn cho chúng ta trực tiếp tạo các mô hình nếu muốn. Việc đặt các thuộc tính vật lý trong Unity cũng cực kỳ dễ dàng và hỗ trợ sẵn nhiều chức năng. 1.3.1. Các thành phần trong Unity Assets: Assets là tài nguyên xây dựng nên một dự án trên Unity. Những tài nguyên có thể là hình ảnh, âm thanh, mô hình 2D, 3D, chất liệu (material), texture, … hoặc cả một project hoàn chỉnh. Các asset do chính những nhà phát triển game tạo ra và có thể được download miễn phí hoặc trả phí trên Unity Asset Store. Đây là một trong những tính năng rất hay của Unity. Các asset này sẽ giúp giảm thiểu rất nhiều thời gian cho việc thiết kế và lập trình game. 5
  6. Scenes: là một cảnh chơi (hoặc một phân đoạn) là những màn chơi riêng biệt, một khu vực trong game hoặc thành phần có trong nội dung của trò chơi (các menu). Các thành phần này được gọi là Scene. Bằng cách tạo ra nhiều Scenes, chúng ta có thể phân phối thời gian và tối ưu tài nguyên, kiểm tra các phân đoạn trong game một cách độc lập. Game Objects: Khi Asset được sử dụng trong các Scene, Unity định nghĩa đó là Game Object. Đây là một thuật ngữ thông dụng, đặc biệt trong mảng lập trình. Tất cả các Game Object đều chứa ít nhất một thành phần cơ bản là Transform, lưu trữ thông tin về vị trí, góc xoay và tỉ lệ của Game Object. Thành phần Transform có thể được tuỳ biến và chỉnh sửa trong quá trình lập trình. Components: Components là các thành phần trong game, bổ sung tính năng cho các Game Object. Mỗi Component có chức năng riêng biệt. Đa phần các Component phụ thuộc vào Transform, vì nó lưu trữ các thông số cơ bản của Game Object. Bản chất của Game Object là không có gì cả, các đặc tính và khả năng của Game Object nằm hoàn toàn trong các Component. Do đó chúng ta có thể xây dựng nên bất kỳ Game Object nào trong game mà chúng ta có thể tưởng tượng được. Scripts: Scripts được Unity xem như một Component. Đây là thành phần thiết yếu trong quá trình phát triển game. Bất kỳ một game nào, dù đơn giản nhất đều cần đến Scripts để tương tác với các thao tác của người chơi, hoặc quản lý các sự kiện để thay đổi chiều hướng của game tương ứng với kịch bản game. Unity cung cấp cho lập trình viên khả năng viết Script bằng các ngôn ngữ: JavaScript, C#. Unity không đòi hỏi lập trình viên phải học cách lập trình trong Unity, nhưng trong nhiều tình huống, chúng ta cần sử dụng Script trong mỗi phần của kịch bản game. Để viết Script, chúng ta có thể làm việc với một trình biên tập Script độc lập của Unity, hoặc làm việc trên Mono Developer được tích hợp vào Unity trong những phiên bản gần đây. Mono Developer là một IDE khá tốt, cung cấp nhiều chức năng tương tự Visual Studio. Mã nguồn viết trên Mono Developer sẽ đươc cập nhật và lưu trữ trong dự án trên Unity. Prefabs: Prefabs thực chất là Game Object được lưu trữ lại để tái sử dụng. Các Game Object được nhân bản từ một prefab sẽ giống nhau hoàn toàn, ngoại trừ thành phần Transform để phân biệt và quản lý được tốt hơn. Để tạo ra một prefab, ta đơn giản chỉ cần kéo một Game Object vào cửa sổ Project. 1.3.2. Sơ lƣợc về giao diện Unity 6
  7. Giao diện Unity, giống như nhiều môi trường làm việc khác, layout có thể tùy chỉnh. Layout của Unity bao gồm nhiều tab khác nhau và có thể bật tắt. 1.4. Tìm hiểu về công cụ hỗ trợ Visual Studio 1.4.1. Giới thiệu Visual Studio là (IDE – Integrated Development Environment) một bộ công cụ phát triển phần mềm do Microsoft phát triển. Visual Studio cũng là một phần mềm được sử dụng bởi các lập trình viên để xây dựng nên các sản phẩm phần mềm. 1.4.2. Lý do nên dùng Visual Studio - Hỗ trợ lập trình trên nhiều ngôn ngữ như C/C++, C#, F#, Visual Basic, HTML, CSS, JavaScript. Phiên bảnVisual Studio 2015 có hổ trợ ngôn ngữ Python. - Visual Studio là một công cụ hỗ trợ việc Debug một cách mạnh mẽ, dễ dàng nhất (Break Point, xem giá trị của biến trong quá trình chạy, hỗ trợ debug từng câu lệnh). - Giao diện Visual Studio rất dễ sử dụng đối với người mới bắt đầu. - Visual Studio hỗ trợ phát triển ứng dụng desktop MFC, Windows Form, Universal App, ứng dụng mobileWindows Phone 8/8.1, Windows 10, Android (Xamarin), iOS và phát triển website Web Form, ASP.NET MVC và phát triển Microsoft Office. - Visual Studio hỗ trợ kéo thả để xây dựng ứng dụng một cách chuyên nghiệp, giúp các bạn mới bắt đầu có thể tiếp cận nhanh hơn. - Visual Studio cho phép chúng ta tích hợp những extension từ bên ngoài như Resharper (hổ trợ quản lý và viết mã nhanh cho các ngôn ngữ thuộc .Net), hay việc cài đặt thư viện nhanh chóng thông qua Nuget. - Visual Studio được sử dụng đông đảo bởi lập trình viên trên toàn thế giới. 1.5. Tổng quan về C# C# là một ngôn ngữ lập trình theo phương pháp lập trình hướng đối tượng và lập trình trực quan được phát triển bởi Microsoft. C# ra đời năm 2000, được thiết kế chủ yếu bởi Anders Hejlsberg – kiến trúc sư phần mềm nổi tiếng với các sản phẩm Turbo Pascal, Delphi… Được xây dựng trên nền tảng của hai ngôn ngữ lập trình mạnh nhất đó là C++ và Java. Do đó C# được miêu tả là ngôn ngữ có sự cân bằng giữa C++, Pascal, Delphi và Java. 7
  8. C# với sự hỗ trợ mạnh mẽ của .NET Framework giúp cho việc tạo một ứng dụng Windows Forms hay WPF (Windows Presentation Foundation ) … trở nên rất dễ dàng. 1.5.1. Các đặc điểm của C# - Là một ngôn ngữ hướng đối tượng, trực quan. - Tám mươi từ khóa và hơn mười kiểu dữ liệu được dựng sẵn. - Cung cấp những đặc tính hướng thành phần (component - oriented) như là Property, Event. - C# không khuyến khích sử dụng con trỏ như C++. - C# có bộ Garbage Collector (thu gom rác) sẽ tự động thu gom vùng nhớ khi không còn sử dụng nữa. - C# đã loại bỏ đa kế thừa trong C++ mà thay vào đó C# sẽ hỗ trợ thực thi giao diện interface. Nguyên nhân lựa chọn C# là vì:  C# là một ngôn ngữ đơn giản.  C# là một ngôn ngữ hiện đại.  C# là một ngôn ngữ mạnh mẽ và mềm dẻo.  C# là một ngôn ngữ ít từ khóa.  C# là một ngôn ngữ phổ biến.  C# mang sức mạnh của nhiều ngôn ngữ (C++, Java…) 1.5.2. Ƣu điểm và nhƣợc điểm của C# Ƣu điểm: - Dễ học hơn c ++ - Dễ đọc mã hơn C ++ - Phát triển nhanh hơn và có khả năng ít lỗi hơn so với c ++ hoặc java (bạn có các loại không dấu, bạn có ref / out, bạn có thể tạo các loại giá trị của riêng mình, bạn có những thứ hữu ích khác mà java bỏ qua có nghĩa là bạn ít nhảy qua vòng có nghĩa là độ phức tạp mã ít cần thiết hơn). - Tất cả mọi thứ được truyền bằng tham chiếu ngoại trừ các loại giá trị, theo mặc định. - Công cụ thu gom rác dọn dẹp đồ vật một khi chúng không còn được sử dụng, vì vậy bạn không phải tự mình theo dõi mọi thứ. 8
  9. - Chương trình được biên dịch thành các nhị phân riêng được tối ưu hóa cho nền tảng khi nó được chạy (và nó chạy chậm hơn một chút so với mã c ++). - Dễ dàng tạo nhiều chủ đề Có nhiều phương tiện tạm dừng các luồng để chờ tín hiệu và như vậy. - lock (someObject) {code), giống như java được đồng bộ hóa nhưng có thể được sử dụng ở bất cứ đâu và yêu cầu một đối tượng. - P/ Gọi dễ sử dụng hơn JNI rất nhiều - nhưng có lẽ chúng tôi sẽ không sử dụng nó vì chúng tôi muốn trở thành đa nền tảng. - Có một IDE miễn phí tuyệt vời (visual c # express) - nhưng chỉ trên windows (xem khuyết điểm). - Bạn có thể tạo các loại giá trị, theo mặc định là truyền theo giá trị thay vì truyền bằng tham chiếu, bằng cách tạo cấu trúc thay vì một lớp. - Bạn có các từ khóa 'ref và 'out' cho phép bạn chuyển tham chiếu đến tham số cho hàm, với ý nghĩa là tham số đó phải được gán bởi hàm trước khi trả về. Về cơ bản, ref / out cho phép hàm sửa đổi biến được truyền dưới dạng tham số, giống như chuyển tham chiếu trong c ++. - Đa nền tảng với mono và / nhưng mono vẫn đang được cải thiện. - Có số nguyên không dấu (c ++, java không). - Nếu chương trình gặp sự cố, nó sẽ bật lên một hộp thoại cho người dùng biết mã ở đâu và tại sao (trên windows) hoặc ghi dấu vết ngăn xếp vào bàn điều khiển (với mono nếu chạy với --debug). - Các chương trình được biên dịch thành các tệp .exe và không cần phải biên dịch lại cho các HĐH khác - mono có thể chạy trực tiếp exes .NET. Nhƣợc điểm: - Sử dụng nhiều bộ nhớ hơn c ++ - Trình thu gom rác sử dụng chu kỳ và bộ nhớ CPU - (nhưng hầu như không có, ít nhất là thời gian CPU) - Một số thứ không hoạt động trong các chức năng gọi đơn trong một số cửa số sẽ không tồn tại trên linux, việc triển khai các biểu mẫu đơn của windows cần có cách giải quyết trong mã (nhưng có lẽ chúng ta sẽ không sử dụng chúng) - Mono chưa hoàn hảo. 9
  10. - Phải sử dụng net 2.0 cho thuốc generic (trong số những thứ khác), 1.1. không có chúng Không thể sử dụng bất cứ thứ gì mới hơn 2.0 vì hỗ trợ thả 3.0 trở lên cho windows 98, ME và có thể 2000. - Không thể khai báo các chức năng được đồng bộ hóa. - Không có IDE tốt trên các cửa số không. Eclipse có plugin ac # nhưng nó có thể không hỗ trợ hầu hết các tính năng của Eclipse. - Không có con trỏ, nhưng chúng được thay thế bởi các tham số ref và out, vì vậy chúng không cần nhiều. - Phương thức gọi thông qua các đại biểu chậm hơn đáng kể so với cách gọi phương thức bình thường (hoặc con trỏ hàm trong c ++, có lẽ). - Yêu cầu (phiên bản chính xác của) .NET framework phải được cài đặt để chạy chương trình, đây là một bản tải xuống vài giờ khi quay số. 10
  11. CHƢƠNG II: PHÂN TÍCH THIẾT KẾ HÊ THỐNG 2.1. Tạo và cấu hình game 2D 2.1.1. Tạo dự án Bật Unity lên, vào menu File/New Project Chọn loại project là 2D sau đó gõ tên project xong nhấn Create Project. Kết quả như sau: 11
  12. 2.1.2. Cấu hình dự án 2D: Sau khi tạo dự án xong, ở Hierarchy sẽ có một đối tượng là Main Camera. Chúng ta cần điều chỉnh kiểu hiển thị Scene là 2D. Ở cửa sổ Hierarchy chọn Main Camera. Ở cửa sổ Inspector sẽ hiển thị các thông số của camera, ta sẽ chọn lại giá trị Projection hay phép chiếu là phép chiếu vuông gócthay cho phép chiếu phối cảnh. 12
  13. Tiếp theo, ở cửa sổ Project, ta sẽ tạo sẵn các thư mục để chứa tất cả các tài nguyên có sử dụng trong game sau này lần lượt là: Animations, Prefabs, Scripts, Sprites, Sounds, Scenes.R-Click vào thư mục Assets ở cửa sổ Project, ta chọn Create, chọn Folder. Kết quả như hình sau: 2.2. Load Backgroud Game 2D được xây dựng từ nhiều mô hình 2D được đặt lên không gian 2 chiều sao cho hài hòa với nhau để tạo thành cảnh vật trong game. Do đó việc nạp và hiển thị được mô hình 2D trong game là vô cùng quan trọng. Engine Unity hỗ trợ rất nhiều định dạng mô hình 2D, 3D khác nhau như: PNG, JPG... khi mô hình được load vào project ta sẽ chuyển mô hình sang mục Prefab để có thể tái sử dụng nhiều lần. Unity có hỗ trợ load mô hình bằng cách kéo thả Prefab vào vị trí bất kỳ trong Scene. Tuy nhiên, để linh hoạt hơn thì chúng ta có thể xử lý bằng code. Trước tiên, ta 13
  14. tạo ra một file script và gắn nó vào đối tượng Back ground để đoạn script có thể thức thi. Trong file script này, ta khai báo để khởi tạo Back ground này để có thể đổ màu tự động nên back ground. 2.3. Sự kiện thực hiện phép toán Một số xử lý cơ bản: Public float speed thì player chỉ di chuyển được tới những ô cách nó 1 đơn vị trên trục tọa độ. Public fireRate là tốc độ bắn. Public float timer là tạo bộ đếm thời gian. Public float deathTimer là bộ đếm thời gian kết thúc. Khởi tạo, cập nhật được gọi một lần trên mỗi khung hình và thu thập đạn rác và phá hủy chúng sau một thời gian nhất định. Một số code của game: 14
  15. Đường đạn của máy bay địch 15
  16. Kiểm soát người chơi 16
  17. Đường đạn Tăng cường sức mạng lá chắn 17
  18. Điều khiển nhạc Siêu đạn 18
  19. Tăng sức mạnh cho siêu đạn Màn hình menu 19
  20. CHƢƠNG III: CHƢƠNG TRÌNH DEMO 3.1. Kết quả đạt đƣợc 3.1.1. Cài đặt - Ứng dụng được Build dưới dạng file.apk. - Copy file.apk vào điện thoại chạy hệ điều hành Android. - Mở file.apk đã copy vào để fiel tự cài đặt trên diện thoại. 3.1.2. Kết quả - Game có giao diện thân thiện, đẹp mắt, dễ sử dụng. - Game đã đạt được yêu cầu cơ bản của trò chơi. 3.1.3. Ƣu điểm - Hiểu được cấu trúc, cách thức hoạt động, cách thức phát triển ứng dụng trên Unity. - Nâng cao kiến thức lập trình và tiếng anh chuyên ngành thông qua những tài liệu về Unty bằng tiếng anh. - Tổ chức load các màn tương ứng thông qua các button. - Xây dựng các chức năng như điểm, màn chơi thông qua ngôn ngữ lập trình C# trên MonoDevelop. - Tạo âm thanh cho cho trò chơi và 1 số chức năng khác. 3.1.4. Nhƣợc điểm - Do kiến thức của em về Unity còn hạn hẹp nên các chức năng trong game còn nghèo nàn. - Chưa xây dựng được hoàn chỉnh 1 game như mong muốn. 3.2. Hƣớng phát triển - Tối ưu hóa các xử lý giúp game chạy nhanh hơn. -Tăng thêm số lượng màn chơi để người chơi thêm nhiều lựa chọn. -Cung cấp thêm các công cụ để người chơi có thể trợ giúp các câu khó hoặc tạo ra nhiều mức độ chơi khác nhau, hiệu ứng âm thanh, … 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2