Đồ án Lập Trình Di động Lập Trình Game Code Java - Tài Liệu Text

Tải bản đầy đủ (.docx) (60 trang)
  1. Trang chủ
  2. >>
  3. Công nghệ thông tin
  4. >>
  5. Lập trình
Đồ án lập trình di động Lập trình game code java

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.02 MB, 60 trang )

MỤC LỤCGVHD: ThS. Trịnh Thị Vân Anh 1 SVTH: Nguyễn Đức Hải – D09CNPM1DANH MỤC CÁC HÌNH VẼ, SƠ ĐỒGVHD: ThS. Trịnh Thị Vân Anh 2 SVTH: Nguyễn Đức Hải – D09CNPM1MỞ ĐẦUĐất nước ta đang trong thời kỳ công nghiệp hóa, hiện đại hóa, đời sống người dân không ngừng cải thiện, kéo theo đó là nhu cầu về vật chất và tinh thần được nâng cao. Trong số đó phải kể đến nhu cầu về các thiết bị di động. Ngày nay, việc sử dụng thiết bị di động (điện thoại di động, máy tính bảng ) đã trở nên rất phổ biến đối với mọi lứa tuổi, mọi tầng lớp trong xã hội. Bởi vậy, có thể dễ dàng nhận ra thị trường di động là một thị trường rất tiềm năng mà nhiều cá nhân, tập thể, doanh nghiệp muốn nhắm tới. Cùng với sự ra đời những sản phẩm thiết bị di động công nghệ cao của Apple, Nokia, Samsung, LG, HTC và sự phát triển của các hệ điều hành Android, iOS, Window Phone các thiết bị di động ngày càng thu hút một số lượng lớn người dùng trên toàn thế giới. Và một yếu tố quan trọng trong sự thu hút đó phải kể đến game mobile – trò chơi trên thiết bị di động.Game từ lâu đã là một dịch vụ giải trí rất phổ biến đối với người dùng Việt Nam. Dịch vụ game có thể được phát triển trên nhiều nền tảng như PC, mobile, browser Cùng với game PC và game browser, ngày nay, game dành cho các thiết bị di động cũng đang thực sự bùng nổ.Ở Việt Nam, hệ điều hành Android của Google sử dụng trên các thiết bị di động thông minh đang là một trong những hệ điều hành được ưa chuộng nhất. Có nhiều cách thức phát triển dịch vụ game trên hệ điều hành Android. Trong đó, AndEngine nổi bật lên như một công cụ đơn giản và hiệu quả bậc nhất để hỗ trợ việc phát triển game với đồ họa đẹp mắt. Trong phạm vi đồ án của mình, em xin trình bày một số kiến thức cơ bản về AndEngine, và cách thức xây dựng “PTITit Game” sử dụng AndEngine trên hệ điều hành Android. Game chủ yếu tập trung chú ý vào việc sử dụng các đối tượng mà AndEngine hỗ trợ, khả năng thể hiện đồ họa trong AndEngine Game được phát triển theo 2 level. Level 1 sử dụng những Sprite động và tĩnh, cùng với bộ đếm thời gian và cách tính điểm đơn giản. Level 2 áp dụng thêm thành phần mở rộng về vật lý của AndEngine để làm game hấp dẫn hơn. Bên cạnh đó, “PTITit Game” cũng thể hiện một cách làm việc đơn giản với CSDL sqlite hay lưu dữ liệu trên thiết bị với SharedPreferences.Với mục tiêu như vậy, bố cục của đồ án sẽ bao gồm năm chương theo cấu trúc như sau:Chương 1: Giới thiệu chung về game và game trên thiết bị di độngTrình bày một số hiểu biết chung về game và game trên thiết bị di động. Các thành phần cơ bản của một game, cũng như những lưu ý khi xây dụng một game trên thiết bị di động.Chương 2: Giới thiệu về AndEngineTrình bày các kiến thức về AndEngine. Vòng đời của một game AndEngine, và các thành phần AndEngine hỗ trợ để phát triển game như Sprite, Font, Text, PhysicsBox2D Chương 3: Phân tích và thiết kế “PTITit Game”“PTITit Game” là một game được viết bằng AndEngine, dành cho sinh viên khoa công nghệ thông tin Học viện Công nghệ Bưu chính Viễn thông. Chương này trình bày cụ thể về quá trình thực hiện việc xây dựng “PTITit Game” về kịch bản, cách chơi, cách xây dựng giao diện cũng như các thành phần trong game qua từng level.Chương 4: Cài đặt “PTITit Game”Trình bày cách thức xử lý đồ họa, xử lý âm thanh và xử lý dữ liệu dùng trong Game. Nêu ra những yêu cầu cho phần cài đặt và chạy game. Chương 5: Kết luận và hướng phát triểnGVHD: ThS. Trịnh Thị Vân Anh 3 SVTH: Nguyễn Đức Hải – D09CNPM1Tổng kết, tóm tắt những kết quả đã đạt được và còn chưa đạt được. Từ đó đề xuất mục tiêu hướng tới cũng như hướng nghiên cứu, phát triển tiếp theo.GVHD: ThS. Trịnh Thị Vân Anh 4 SVTH: Nguyễn Đức Hải – D09CNPM1LỜI CẢM ƠN Lời đầu tiên em xin bày tỏ lòng biết ơn sâu sắc tới cô giáo Trịnh Thị Vân Anh, cô đã tận tình hướng dẫn, chỉ bảo và giúp đỡ em trong suốt những năm học vừa qua cũng như trong quá trình làm đồ án tốt nghiệp. Em xin bày tỏ lòng biết ơn tới các thầy, cô giáo trong khoa Công nghệ thông tin 1 - Học viện Công Nghệ Bưu chính Viễn thông cơ sở Hà Đông. Các thầy cô đã chỉ bảo, dạy dỗ và truyền đạt cho em những kiến thức cần thiết, luôn tạo điều kiện học tập tốt nhất cho em trong suốt hơn 4 năm học tập tại trường. Cuối cùng, tôi xin chân thành cảm ơn các bạn trong tập thể lớp D09CN1 đã nhiệt tình giúp đỡ cũng như đóng góp những ý kiến có giá trị giúp tôi hoàn thành được đồ án này. Hà Nội, ngày 20 tháng 11 năm 2013 Nguyễn Đức Hải GVHD: ThS. Trịnh Thị Vân Anh 5 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 1. Giới thiệu chung về game và game trên thiết bị di đôngCHƯƠNG 1. GIỚI THIỆU CHUNG VỀ GAME VÀ GAME TRÊN THIẾT BỊ DI ĐỘNG1.1. Khái quát về gameKể từ khi máy tính xuất hiện, game đã trở thành một trong những ứng dụng phổ biến nhất trên thị trường. Trong cuốn sách Reality Is Broken, tác giả Jane McGonigal đã nêu ra 4 thuộc tính của phần lớn game trên thị trường:+ Mục tiêu: Game chỉ ra một mục tiêu rõ ràng cho người chơi để họ đạt được. Mục tiêu là những thử thách đối với người chơi, nhưng họ có thể vượt qua. Người chơi sẽ cảm thấy hứng thú nhất nếu mục tiêu đó phù hợp với khả năng của mình, không quá khó, không quá dễ. Mục tiêu rõ ràng, thú vị cũng là yếu tố quan trọng thu hút người chơi đến với game.+ Quy tắc: Game cũng có những quy tắc bắt buộc mà tất cả người chơi phải tuân theo. Các quy tắc này thường làm cho việc đạt được mục tiêu nêu trên khó khăn hơn. Điều đó cũng khuyến khích sự sáng tạo của mỗi người. + Phản hồi: Game cần phản hồi cho người chơi biết rằng họ đang làm công việc của mình tốt hay không. Một điều đáng lưu ý rằng, hệ thống phản hồi chính là chìa khóa để làm trò chơi thú vị.+ Tham gia một cách tự nguyện: một trò chơi sẽ không còn là một trò chơi đúng nghĩa nếu bạn không thực sự thích chơi nó. Điều này ngụ ý rằng người chơi phải chấp nhận được mục tiêu, các quy tắc, và hệ thống phản hồi của trò chơi. Các thể loại game cơ bảnNhững người phát triển game không chủ động phân loại các trò chơi của họ. Và tất nhiên, không có danh sách chuẩn nào về việc phân loại game. Mặc dù vậy, theo thời gian, các trò chơi cũng dần được phân loại vào các lớp khác nhau theo những cách khác nhau. Việc phân loại chính xác rất khó khăn. Tuy vậy, chúng ta có thể kể đến một số loại game điển hình như sau:+ Game hành động hay kỹ năng: Người chơi phải sử dụng một số kỹ năng trong thời gian thực (VD: bắn vào một vật đang di chuyển ) để đạt được mục tiêu.+ Game về chiến lược: Người chơi ít phải sử dụng kỹ năng hơn, và chủ yếu tập trung đưa ra những quyết định lựa chọn chiến lược hợp lý để vượt qua màn chơi.+ Game phiêu lưu hay có cốt truyện: Những game này được xây dựng dựa trên một cốt truyện hấp dẫn, với các nhân vật được chau chuốt cùng với một cốt truyện cụ thể. Cốt truyện đó cũng định nghĩa ra mục tiêu cho người chơi trong thể loại game này.+ Game mô phỏng: Thông thường, game thuộc thể loại này mô tả lại một yếu tố có trong thực tế (VD như lái một chiếc xe, chơi tennis )+ Game câu đố: Một số trò chơi truyền tải trực tiếp câu đố đến với người chơi. Tuy nhiên, trong một số game phức tạp, những câu đố này có thể ẩn dưới nhiều hình thức khác nhau. Có thể hiểu như một game nhỏ, trong một game lớn hơn GVHD: ThS. Trịnh Thị Vân Anh 6 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 1. Giới thiệu chung về game và game trên thiết bị di đôngCác thành phần cơ bản của một game+ Opening (Splash) Screen:Để tối ưu hóa hiệu năng hoạt động, trước khi game sẵn sàng, đồ họa của level thường được nạp vào trước khi level đó bắt đầu. Quá trình nạp dữ liệu có thể kéo dài đến vài giây. Trong thời gian đó, bạn không muốn để người dùng phải nhìn vào một màn hình trống. Vậy nên, hãy hiển thị một màn hình chờ (splash screen). Nó cho người dùng biết game vẫn đang hoạt động bình thường. + Menu Screen:Khi game đã sẵn sàng, chúng ta cần cung cấp cho người dùng nơi để họ có thể đưa ra những lựa chọn (Ví dụ như bật/tắt âm thanh, xem hướng dẫn chơi ). Điều này được thực hiện ở Menu Screen.+ Âm nhạc (Music)Đối với bất kì ai, âm nhạc có ảnh hưởng mạnh đến cảm xúc. Bởi vậy, nhạc nền đóng vai trò quan trọng trong việc giữ nhịp cho game, và cũng giúp cho việc chuyển đổi giữa các phần khác nhau trong game được liên tục, không bị ngắt quãng.+Hiệu ứng âm thanh (Sound Effects)Những hiệu ứng âm thanh sẽ làm cho game trở nên thú vị hơn nhiều. Ví dụ như khi hai vật thể va chạm, người chơi muốn được nghe một tiếng động nào đó thể hiện sự va chạm này. Âm thanh sẽ làm cho game thân thiện hơn với người chơi.+ Thời gianHầu hết các trò chơi đều kết hợp thời gian. Yếu tố thời gian thôi thúc người chơi hoàn thiện mình qua từng màn chơi để có thể đáp ứng được mục tiêu của màn chơi.+ Mạng (Lives)Game sẽ trở nên hấp dẫn hơn nếu có thêm những thử thách. Bởi vậy, hãy thêm vào trong game giới hạn về số lượt chơi. Như vậy, người chơi sẽ cảm thấy được thách thức, game sẽ vui hơn nhiều.+ Chướng ngại vật (Obstacles)Mỗi thể loại game khác nhau sẽ sử dụng những chướng ngại vật khác nhau. Hãy lựa chọn chướng ngại vật phù hợp để tăng độ khó cũng như thử thách người chơi.+ Cấp độ (Levels)Thử thách trong game là một phần thúc đẩy người chơi. Nhưng hãy biết cách giới hạn nó! Hãy chia những thử thách thành nhiều cấp độ. Người chơi bắt đầu với những màn chơi dễ dàng, rồi dần dần làm quen, nâng cao kỹ năng, để chiến thắng được những cấp độ khó hơn. + Người chơi (Player)Người chơi luôn là phần quan trọng nhất của bất kỳ game nào. Game sẽ chỉ thành công khi luôn giữ được sự thú vị, lôi cuốn đối với người chơi. Người chơi cần được thử thách bởi các thành phần trong game, nhưng không được quá thách thức khiến họ từ bỏ game trong thất vọng. Game cần bao gồm đủ nhiều yếu tố để duy trì sự quan tâm từ phía người chơi!GVHD: ThS. Trịnh Thị Vân Anh 7 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 1. Giới thiệu chung về game và game trên thiết bị di đông+ Màn chơi (Scenes)Nếu coi trò chơi như một bộ phim, thì mỗi màn hình hiển thị cho người chơi cũng giống như một cảnh trong phim. Ở đó có sự thay đổi về nền đồ họa trong mỗi cảnh, nhưng không quá nhiều dù điểm nhìn của người chơi thay đổi. Sau đó, ta thêm vào những thứ chuyển động, cùng với những chướng ngại vật để tạo ra một màn hình game hoàn chỉnh.1.2. Game trên thiết bị di động Cùng với sự đa dạng và phong phú về thể loại game có thể lựa chọn, chúng ta cần tập trung vào những yếu tố phù hợp nhất với nền tảng di động (điện thoại di động, máy tính bảng ), đặc biệt quan tâm đến những game có thể phát triển bằng một nhóm ít người. Với tiềm năng to lớn của thị trường di động, không ngạc nhiên khi có rất nhiều nghiên cứu và tư tưởng được đưa ra nhằm mục đích tạo nên một game di động tốt. Cùng với việc tiếp tục áp dụng những nguyên tắc thông thường khi thiết kế game trên máy tính, ta cần quan tâm đến một số đặc điểm của game được thiết kế trên các thiết bị di động:+ Không lãng phí thời gian của người chơi.+ Cung cấp sự trợ giúp cần thiết cho người chơi.+ Làm cho mục tiêu của trò chơi dễ hiểu.+ Hiển thị các trạng thái trong game một cách rõ ràng.+ Người dùng di động thường chỉ chơi game trong một thời gian ngắn.+ Người chơi có thể dễ dàng tạm dừng hay tiếp tục game khi cần thiết.+ Người chơi có thể đạt được tiến bộ trong một thời gian ngắn.+ Những hạn chế của thiết bị di động ảnh hưởng đến việc xây dựng game:• Kích thước màn hình nhỏ, và đa dạng về kích thước màn hình, độ phân giải • Có rất nhiều cách thức nhập dữ liệu từ người dùng (bàn phím, cảm ứng, cảm ứng đa điểm, )• Hạn chế về khả năng tính toán.• Hạn chế về pin.• 1.3. Sơ lược quy trình phát triển game trên di độngMột đội phát triển game trên thiết bị di động thường có những vị trí sau:+ Người viết kịch bản+ Lập trình viên+ Người thiết kế đồ họa+ Người soạn nhạc và hiệu ứng âm thanh+ Người kiểm tra và đóng gói sản phẩmCần có một tài liệu thật tốt để mọi người trong nhóm có chung tiếng nói, hiểu được mục tiêu chung và cùng nhau phát triển tốt sản phẩm game. GVHD: ThS. Trịnh Thị Vân Anh 8 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 1. Giới thiệu chung về game và game trên thiết bị di đôngXét về mặt tổng quát, có thể chia phát triển game thành 4 giai đoạn:GĐ1: Giai đoạn tiền sản phẩm/ý tưởng Ở giai đoạn này, từng thành viên phát triển ý tưởng, sau đó thống nhất với cả đội để xác định ý tưởng chủ đạo của sản phẩm. Qua giai đoạn này, các ý tưởng cho lập trình, nội dung, thể loại game (action, puzzle, adventure, platform, sport, RPG ), phong cách đồ họa và âm nhạc dần được hình thành thể hiện qua biểu đồ, đặc tả, các thông số thử nghiệm, hình vẽ tay về nhân vật (sketch), giai điệu nhạc được lựa chọn và thống nhất xuyên suốt các giai đoạn phát triển.GĐ2: Đặc tả cho lập trìnhĐây là một giai đoạn rất quan trọng trong quá trình thiết kế game. Bạn càng bỏ nhiều thời gian cho giai đoạn này thì khi lập trình, gỡ lỗi càng tiết kiệm thời gian. Lập trình viên chuyên nghiệp hiểu rằng lỗi xuất hiện trong quá trình thiết kế sẽ thiệt hại hơn nhiều so với lỗi được phát hiện trong giai đoạn này.Bạn cần giấy, bút hay chương trình văn bản và cùng với một vài người khác chơi thử game. Khi “chơi thử” bằng cách ghi ra giấy, các ưu/khuyết của thiết kế sẽ lộ rõ và bạn có thể chỉnh sửa cho đến khi cảm thấy vừa ý.GĐ3: Thực hiện viết code, thiết kế đồ họa và chọn nhạc, hiệu ứng âm thanhVới đặc tả đã có, hãy dự tính thời lượng cho việc lập trình, tính toán ngày công kỹ càng để có thể ước tính khối lượng công việc và dễ theo dõi tiến độ. Và phải đảm bảo việc code đúng với những gì đã đặc tả trong game.Bên cạnh việc viết code, thiết kế đồ họa trong game cũng cần đặc biệt lưu tâm. Do độ phân giải của màn hình điện thoại di động khá nhỏ nên mọi vật thể đồ họa trong game đều được thực hiện bằng đồ họa điểm ảnh (pixel art), vì vậy người thiết kế đồ họa ngoài kiến thức về vẽ tay, đổ bóng còn phải có kỹ năng thao tác tỉ mỉ. Âm thanh trong game là một phần rất quan trọng tạo nên cái hồn của game. Việc lựa chọn hay mix nhạc phù hợp sẽ tạo sự hào hứng với người chơi, tăng độ hấp dẫn cho game của bạn. Hiện tại cũng có nhiều chương trình giúp cho việc soạn nhạc dễ dàng mà không cần biết nhiều về nhạc lý, bạn chỉ cần lựa vài hợp âm, nhạc cụ, tempo, điệu nhạc , và chương trình sẽ tạo bản nhạc cho bạn.GĐ4: Kiểm tra và đóng gói sản phẩmKiểm tra: Nhóm lập trình sẽ cùng chơi thử, cảm nhận và ghi lại tất cả các ưu và khuyết. Sửa các lỗi nếu có. Phát hành bản beta cho game thủ chơi thử và lấy ý kiến của họ.Đóng gói: game cho di động phải được “xuất” hay đóng gói cho các dòng máy khác nhau (do các dòng máy này khác nhau về phím nhấn, bộ nhớ và thư viện hỗ trợ).1.4. Một số framework hỗ trợ việc phát triển game trên AndroidDo nhu cầu không ngừng của người chơi game cũng như của những nhà phát triển, ngày nay trên thị trường có rất nhiều framework hỗ trợ việc xây dựng và phát triển game trên các thiết bị di động, đặc biệt là trên hệ điều hành Android.Tùy theo yêu cầu và đặc điểm của từng game, mà lập trình viên lựa chọn cho mình framework thích hợp để lập trình. Một số framework cơ bản có thể kể đến như:GVHD: ThS. Trịnh Thị Vân Anh 9 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 1. Giới thiệu chung về game và game trên thiết bị di đông+ Libgdx: Libgdx framework được phát triển dựa trên nghiên cứu về game development cross-platform. Nghĩa là game của bạn khi viết ra bằng Libgdx framework, nó sẽ chơi đượ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 framework 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ý tài nguyên được viết bằng Native code. Libgdx framework có phần tài liệu hướng dẫn rất tuyệt vời và được hỗ trợ qua forum một cách nhanh chóng và nhiệ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.Ligdx framework thích hợp để xây dựng những game chơi được trên nhiều platform, và những game hành động đòi hỏi di chuyển mượt mà + AndEngine: AndEngine là một bộ các công cụ để phát triển video game, được phát triển bởi Nicolas Gramlich. Nó bao gồm đầy đủ các thuộc tính quan trọng nhất của OpenGL, ngay cả khi bạn không có kinh nghiệm với OpenGL - bạn vẫn có thể tạo ra 1 game có đồ họa đẹp và đầy đủ tính năng hoặc 1 ứng dụng đẹp mắt sử dụng công cụ này. Tất cả các phương diện quan trọng của một game đều được định nghĩa sẵn trong AndEngine, và rất dễ dàng để sử dụng. AndEngine có thể làm việc trên nhiều thiết bị khác nhau, với độ phân giải khác nhau. Hỗ trợ cảm ứng đa điểm, và hình nền động. Bằng những lợi thế đó, AndEngine rất thích hợp để xây dựng những game yêu cầu đồ họa cùng những hiệu ứng đẹp mắt.Trong khuôn khổ đồ án này, chúng ta sẽ tập trung tìm hiểu về AndEngine GLES2.GVHD: ThS. Trịnh Thị Vân Anh 10 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’CHƯƠNG 2. GIỚI THIỆU VỀ ANDENGINE2.1. Các khái niệm chính trong lập trình AndEngineĐể có thể hiểu và làm việc tốt với AndEngine, trước hết chúng ta xem xét một số khái niệm chính thường được nhắc đến khi lập trình với AndEngine:2.1.1. CameraCác "camera" của trò chơi xác định giao diện được trình bày cho người chơi. Nó giống như một máy quay phim trong không gian hai chiều. Chiếc máy quay này có thể giãn và phóng trên các cảnh để thay đổi khung nhìn trình bày. Sự co dãn và phóng to có thể được thực hiện dưới sự kiểm soát của người chơi hoặc được điều khiển theo chương trình.2.1.2. SceneMột trò chơi, giống như một bộ phim, bao gồm một loạt các cảnh nơi hành động diễn ra. Trong một bộ phim, những cảnh được biên tập lại với nhau theo một cách cố định. Trong trò chơi, trình tự của cảnh được dẫn dắt bởi lối chơi của trò chơi. Trò chơi giống như bộ phim được chỉnh sửa từ trên cao nhìn xuống.2.1.3. LayerCảnh bao gồm các lớp đồ họa. Các lớp được chồng lên nhau, giống như các tế bào hoạt hình được sử dụng để làm phim hoạt hình theo cách cổ điển. Các lớp cũng có thể được sử dụng để giới thiệu hiệu ứng 2½D, ví dụ như việc điều chỉnh máy quay, các lớp gần hơn chuyển động nhanh hơn các lớp ở xa.2.1.4. SpriteNhững Sprite là những đại diện trực quan của các diễn viên trong bộ phim của chúng ta. Dù cho các sprite là hình động hay tĩnh, chúng vẫn thường di chuyển trong những màn chơi. Kết cấu Sprite thường được nạp từ một hình ảnh lớn mà bao gồm một tập hợp các hình ảnh họa tiết, được gọi là một sprite sheet.2.1.5. EntityTrong AndEngine, các thực thể là tất cả những thứ được vẽ trên màn hình. Các thực thể có thể là các sprite, các hình dạng hình học, hay các dòng kẻ trên màn hình. Tất cả các thực thể đều có các thuộc tính, chẳng hạn như màu sắc, góc quay, độ lớn,vị trí, và có thể được thay đổi bằng các Modifier.2.1.6. ModifierCác modifier thay đổi các thuộc tính của một thực thể, và chúng là công cụ rất mạnh mẽ được sử dụng trong AndEngine. Chúng có thể được áp dụng trên bất kỳ thực thể nào, và sự thay đổi mà chúng gây ra có thể là trực tiếp hoặc diễn ra từ từ trong một thời gian nhất định. Trong trò chơi, chúng ta thường sẽ sử dụng các modifier để tạo hiệu ứng với các sprite và các thực thể khác.GVHD: ThS. Trịnh Thị Vân Anh 11 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’2.1.7. TextureMột texture là một kết cấu 2D, thường là đồ họa dạng bitmap. Textures xác định hình dạng các thực thể, và phần lớn môi trường đồ họa OpenGL được xây dựng xung quanh việc sử dụng các texture.2.1.8. Texture RegionMột texture định nghĩa một hình ảnh bitmap hoàn tất, và một texture region định nghĩa một tập hợp con các vùng texture đó. 2.1.9. EngineMỗi scene được chạy trên một engine. Nó điều khiển các hình ảnh động và các modifier biết khi nào phải cập nhật trạng thái, điều phối các bản vẽ thực tế, xử lý các sự kiện đầu vào người dùng (cảm ứng, phím, bộ cảm biến), và nói chung là quản lý tiến trình của trò chơi. Engine cũng giống như các nhà sản xuất / đạo diễn của bộ phim của chúng ta, nói với mọi người những gì họ cần phải làm.2.1.10. BaseGameActivityLớp này, được mở rộng của lớp Activity Android, sẽ là cơ sở của mỗi scene trong trò chơi của chúng ta. BaseGameActivity làm các công việc chung cho tất cả các scene, thiết lập các công cụ trò chơi, phù hợp với các yêu cầu vòng đời hoạt động Android.2.1.11. Box2D Physics EnginePhysics Box2D là một thành phần mở rộng của AndEngine, nó hỗ trợ việc mô phỏng sự tương tác thực tế giữa các đối tượng vật lý trong các trường hợp sau đây:+ Mô phỏng các tính chất vật lý của các vật rắn.+ Ổn định xếp chồng.+ Trọng lượng.+ Các đơn vị được người dùng xác định.+ Giải quyết hiệu quả cho sự tương tác / liên lạc.+ Trượt ma sát.+ Làm việc với các hình học: Hộp, hình tròn, đa giác.+ Một số loại liên kết: khoảng cách, lăng trụ, ròng rọc, + Trạng thái ngủ (loại bỏ cơ thể bất động từ các mô phỏng cho đến khi chạm vào) .2.2. Vòng đời của một game AndEngine2.2.1. BaseGameActivityĐiều quan trọng đầu tiên, cần lưu ý đến việc khởi tạo game. Nhu cầu cơ bản của một game khi khởi tạo bao gồm việc tạo ra engine, nạp tài nguyên của game, và thiết lập màn hình khởi tạo. Mỗi một game viết bằng AndEngine được thể hiện thông qua class BaseGameActivity. BaseGameActivity là một lớp con kế thừa từ class Activity của Android. Để hiểu được quá trình hoạt động của BaseGameActivity, ta xem xét vòng đời của nó.GVHD: ThS. Trịnh Thị Vân Anh 12 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’Một class BaseGameActivity chứa một số phương thức mà chúng ta cần phải ghi đè trực tiếp. Đó là:+ onCreateEngineOptions(): Sử dụng để khởi tạo các thành phần cơ bản của một game AndEngine như khởi tạo engineOptions, camera.+ onCreateResources(): Sử dụng để khởi tạo tài nguyên cho game như khởi tạo texture, region, âm thanh, font chữ …+ onCreateScene(): Khởi tạo các màn hình chơi, các nhân vật và các thành phần trong game như sprite, animatedSprite …+ onPopulateScene(): Là nơi chúng ta gắn các entity con cho scene tương ứng. Hình 2.1: Ví dụ một cấu trúc đơn giản của BaseGameActivity.2.2.2. SimpleBaseGameActivityỞ phần này chúng ta xem xét đến class SimpleBaseGameActivity là subclass của class BaseGameActivity trong AndEngine GLES2.Nếu đã làm việc với AndEngine GLES1, ta có thể nhìn thấy việc khai báo một lớp extends từ BaseGameActivity. Tuy nhiên, với AndEngine GLES2, lại xuất hiện một class mới là SimpleBaseGameActivity. Vì có rất nhiều nhầm lẫn về việc sử dụng class nào cho phù hợp, vậy chúng ta hãy nói về sự khác biệt giữa BaseGameActivity và SimpleBaseGameActivity .Đầu tiên cần lưu ý BaseGameActivity cho GLES2 và BaseGameActivity cho GLES1 gần như khác nhau hoàn toàn về cấu trúc cũng như cách sử dụng. Khi AndEngine cập nhật và thay đổi được thực hiện trên BaseGameActivity, rất nhiều người từng sử dụng GLES1 tỏ ra GVHD: ThS. Trịnh Thị Vân Anh 13 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’không hài lòng về thay đổi này và muốn làm việc với một lớp họ đã quen thuộc. Bởi vậy, SimpleBaseGameActivity được tạo ra cho AndEngine GLES2. SimpleBaseGameActivity được cho là giống với BaseGameActivity trong AndEngine GLES1, và đã đáp ứng được điều mà rất nhiều người phát triển AndEngine muốn vào thời điểm đó.Điều làm nên sự khác biệt cho BaseGameActivity (GLES2) là chúng ta có nhiều quyền kiểm soát hơn đối với ứng dụng của mình, vì các phương thức sẽ không được gọi một cách tự động (bên cạnh việc thiết lập các tùy chọn engine). Phần lớn các phương thức được thực hiện tương tự khi sử dụng BaseGameActivity trong GLES1, nhưng bạn sẽ phải cung cấp một lời gọi lại (callback). Một callback cho chương trình biết rằng chúng ta đã làm việc xong với phương thức, nó sẽ chuyển sang phương pháp tiếp theo. Điều này giúp chúng ta linh hoạt hơn rất nhiều trong việc nạp tài nguyên game. Hình 2.2: Cấu trúc của một SimpleBaseGameActivity trong AndEngine GLES2.Dưới đây là một ví dụ về SimpleBaseGameActivity:+ onCreateEngineOptions():Hình 2.3: Ví dụ về phương thức onCreateEngineOptions()GVHD: ThS. Trịnh Thị Vân Anh 14 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’Ví dụ: Chúng ta tạo một Camera có kích thước WIDTH x HEIGHT, bắt đầu từ vị trí (0,0) của màn hình. Sau đó khởi tạo engineOptions có hàm khởi tạo như trên với ý nghĩa là: true: chế độ toàn màn hình; ScreenOrientation.LANDSCAPE_FIXED: xoay màn hình theo chiều ngang;new FillResolutionPolicy(): điền kín màn hình, bỏ qua tỉ lệ;+ onCreateResources():Hình 2.4: Ví dụ về phương thức onCreateResources()Ví dụ: Chúng ta nạp dữ liệu là font chữ có tên “VNFFuturaRegular.ttf” trong thư mục assets/font/ vào trong Font mFont, sau đó load font này vào ITexture mFontTexture.+ onCreateScene():Hình 2.5: Ví dụ về phương thức onCreateScene()Ví dụ: Chúng ta tạo scene chứa đối tượng score là một Text và add vào trong scene của game thông qua phương thức attachChild().PTITit Game nói đến ở chương 3 là một game được lập trình bằng cách sử dụng class SimpleBaseGameActivity của AndEngine GLES2.2.3. Một số thành phần của AndEngine được dùng trong PTITit Game2.3.1. Camera / EngineOptions Camera và EngineOptions là hai đối tượng cơ bản đầu tiên, cần được thiết lập ngay từ khi khởi tạo game để tạo ra camera hiển thị, cũng như các tùy chọn cho camera đó.a. CameraHàm khởi tạo được sử dụng:GVHD: ThS. Trịnh Thị Vân Anh 15 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’Camera(final float pX, final float pY, final float pWidth, final float pHeight)Trong đó:+ pX, pY: là tọa độ bắt đầu của Camera trong màn hình hiển thị của thiết bị.+ pWidth, pHeight: là kích thước chiều ngang và chiều dọc của Camera.b. EngineOptionsHàm khởi tạo được sử dụng: EngineOptions(final boolean pFullscreen, final ScreenOrientation pScreenOrientation, final IResolutionPolicy pResolutionPolicy, final Camera pCamera)Trong đó:+ pFullscreen: là chế độ toàn màn hình.+ pScreenOrientation: Chiều của màn hình.pScreenOrientation có thể nhận các giá trị:ScreenOrientation.PORTRAIT_FIXED: màn hình xoay theo chiều dọcScreenOrientation.LANDSCAPE_FIXED: màn hình xoay theo chiều ngang+ pResolutionPolicy: cho biết cách thức làm việc với các màn hình khác nhau.pResolutionPolicy có thể là:RatioResolutionPolicy(final float pWidthRatio, final float pHeightRatio): mở rộng đồ họa để điền vào nhiều nhất có thể các phần trong màn hình mà vẫn duy trì tỉ lệ ban đầu của đối tượng đồ họa.FillResolutionPolicy(): lấp đầy đồ họa trong màn hình, không quan tâm đến tỉ lệ.FixedResolutionPolicy(final int pWidth, final int pHeight): sử dụng kích thước cố định ban đầu, và không thay đổi cho bất kì loại màn hình nào.RelativeResolutionPolicy(final float pWidthScale, final float pHeightScale): sử dụng một quy mô cố định trên một kích thước ban đầu. Ta nên sử dụng cách này nếu muốn tối ưu trên một số thiết bị cụ thể.2.3.2. BitmapTextureAtlas / Texture Bất cứ khi nào chúng ta muốn nạp một đối tượng đồ họa vào trong game AndEngine, điều bắt buộc phải làm đó là khai báo cho đối tượng đồ họa đó một nơi để chứa thông tin các điểm ảnh. Trong AndEngine, BitmapTextureAtlas có thể hiểu như một khung tranh, còn Texture sẽ đóng vai trò như một bức hình để vào trong khung tranh BitmapTextureAtlas đó. Các BitmapTextureAtlas và các Texture phải được nạp vào lúc khởi tạo game, sẽ được đặt trong hàm onCreateResources();a. BitmapTextureAtlasHàm khởi tạo được sử dụng:BitmapTextureAtlas(final TextureManager pTextureManager, final int pWidth, final int pHeight, final TextureOptions pTextureOptions) Trong đó:GVHD: ThS. Trịnh Thị Vân Anh 16 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’+ pTextureManager: là bộ quản lý các Texture, ám chỉ đến game của chúng ta. Thông thường được khai báo là mGame.getTextureManager().+ pWidth, pHeight: là kích thước chiều ngang và chiều dọc của khung tranh.+ pTextureOption: là cách thức khung tranh sẽ được hiển thị.b. Textureo TextureRegionTextureRegion được sử dụng để chứa thông tin đồ họa của những Sprite tĩnh.Cách khai báo được sử dụng:TextureRegion createFromAsset(final BitmapTextureAtlas pBitmapTextureAtlas, final Context pContext, final String pAssetPath, final int pTextureX, final int pTextureY)Trong đó: + pBitmapTextureAtlas: là khung tranh BitmapTextureAtlas sẽ chứa tấm hình này.+ pContext: là Activity chứa đối tượng này.+ pAssetPath: đường dẫn đến bức hình.+ pTextureX, pTextureY: hai tọa độ đầu tiên trong khung tranh BitmapTextureAtlas để đặt tấm hình này.o TiledTextureRegionTiledTextureRegion được sử dụng để nạp thông tin đồ họa của những Sprite động, tức là những TiledSprite. Trong mỗi bức hình có nhiều phần nhỏ, mỗi phần là một trạng thái của Sprite theo thời gian.Hình 2.6: Ví dụ về TiledTextureRegion true_TTR sử dụng trong PTITit Game: Cách khai báo được sử dụng:TiledTextureRegion createTiledFromAsset(final BitmapTextureAtlas pBitmapTextureAtlas, final Context pContext, final String pAssetPath, final int pTextureX, final int pTextureY, final int pTileColumns, final int pTileRows)Trong đó: + pBitmapTextureAtlas: là khung tranh BitmapTextureAtlas sẽ chứa tấm hình này.+ pContext: là Activity chứa đối tượng này.GVHD: ThS. Trịnh Thị Vân Anh 17 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’+ pAssetPath: đường dẫn đến bức hình.+ pTextureX, pTextureY: hai tọa độ đầu tiên trong khung tranh BitmapTextureAtlas để đặt tấm hình này.+ pTileColumns, pTileRows: là số cột, số hàng của bức hình.2.3.3. Sprite / AnimatedSprite Sprite là thành phần chính trong game. Bất kì game nào cũng cần có Sprite, thậm chí là nhiều Sprite trong mỗi màn chơi. Sprite có thể ở dạng tĩnh (Sprite) – không thay đổi hình dạng, hay động (AnimatedSprite) – thay đổi hình dạng theo thời gian.Việc khai báo Sprite / AnimatedSprite sẽ được đặt trong hàm onCreateScene();a. SpriteCác hàm khởi tạo được sử dụng:public Sprite(final float pX, final float pY, final ITextureRegion pTextureRegion, final VertexBufferObjectManager pVertexBufferObjectManager) (1)public Sprite(final float pX, final float pY, final float pWidth, final float pHeight, final ITextureRegion pTextureRegion, final VertexBufferObjectManager pVertexBufferObjectManager) (2)Trong đó:+ pX, pY: là tọa độ bắt đầu của Sprite đặt trong Scene+ pWidth, pHeight: là kích thước chiều ngang và chiều dọc của Sprite.Trong trường hợp sử dụng hàm khởi tạo (1), tức là không khai báo pWidth, pHeight thì kích thước của Sprite sẽ chính là kích thước của đối tượng ảnh được nạp vào.+ pTextureRegion: là tấm hình sẽ được nạp vào cho Sprite đó.+ pVertexBufferObjectManager: là đối tượng quản lý bộ đệm để tải các dữ liệu về đồ họa. Thông thường được khai báo là mGame.getVertexBufferObjectManager().b. AnimatedSpriteĐể tạo được một Sprite động (ví dụ AnimatedSprite true_SP với đồ họa như hình 2.1), thay vì dùng Sprite thông thường, ta cần sử dụng AnimatedSprite.Hàm khởi tạo được sử dụng:AnimatedSprite(final float pX, final float pY, final ITiledTextureRegion pTiledTextureRegion, final VertexBufferObjectManager pVertexBufferObjectManager) (1)AnimatedSprite(final float pX, final float pY, final float pWidth, final float pHeight, final ITiledTextureRegion pTiledTextureRegion, final VertexBufferObjectManager pVertexBufferObjectManager) (2)Trong đó:+ pX, pY: là tọa độ bắt đầu của AnimatedSprite đặt trong Scene+ pWidth, pHeight: là kích thước chiều ngang và chiều dọc của Sprite.GVHD: ThS. Trịnh Thị Vân Anh 18 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’Trong trường hợp sử dụng hàm khởi tạo (1), tức là không khai báo pWidth, pHeight thì kích thước của AnimatedSprite sẽ chính là kích thước của đối tượng ảnh được nạp vào.+ pTiledTextureRegion: là tấm hình tiled sẽ được nạp vào cho AnimatedSprite đó.+ pVertexBufferObjectManager: là đối tượng quản lý bộ đệm để tải các dữ liệu về đồ họa. Thông thường được khai báo là mGame.getVertexBufferObjectManager().2.3.4. Font Trong game chắc chắn bạn sẽ phải sử dụng những đoạn text để thể hiện nội dung, ví dụ hiển thị dialog, đưa ra trợ giúp cho người chơi Thay vì sử dụng font mặc định của hệ thống, AndEngine cũng cho phép chúng ta sử dụng font tùy chọn của riêng bạn. Điều này vừa tạo ra nét riêng cho game, đồng thời tăng hiệu quả về đồ họa cho game. Hình 2.7: Ví dụ về font UVFBarmBrack.ttf được sử dụng trong PTITit GameĐể thay đổi một font chữ cho đối tượng trong AndEngine, chúng ta sử dụng class Font. Việc cài đặt và tải font được thực hiện trong phương thức onCreateResources().Cách khai báo được sử dụng:Font createFromAsset(final FontManager pFontManager, final ITexture pTexture, final AssetManager pAssetManager, final String pAssetPath, final float pSize, final boolean pAntiAlias, final int pColor)Trong đó:+ pFontManager: bộ phận quản lý font. Thông thường được khai báo là mGame.getFontManager();+ pTexture: tương tự như một đối tượng đồ họa, font cũng cần được tải vào trong một texture để sau đó đưa vào sử dụng.+ pAssetManager: bộ phận quản lý các tài nguyên trong asset. Thông thường được khai báo là mGame.getFontManager();+ pAssetPath: đường dẫn đến font trong thư mục asset của project.+ pSize: cỡ chữ.+ pAntiAlias = true: bật chế độ anti-alias+ pColor: màu sắc của chữ.2.3.5.TextSau khi đã tải xong font, chúng ta có thể sử dụng font đó để format cho các đoạn text trong game. AndEngine cung cấp cho chúng ta đối tượng Text để thể hiện các chuỗi kí tự. Việc sử dụng Text cũng tương tự như sử dụng một đối tượng Sprite, và được đặt trong phương thức onCreateScene() của game activity.GVHD: ThS. Trịnh Thị Vân Anh 19 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’Hàm khởi tạo được sử dụng:Text(final float pX, final float pY, final IFont pFont, final CharSequence pText, final int pCharactersMaximum, final VertexBufferObjectManager pVertexBufferObjectManager)Trong đó:+ pX, pY: là tọa độ bắt đầu của Text đặt trong Scene.+ pFont: là font đã được nạp trong phương thức onCreateResource().+ pText: nội dung đoạn text.+ pCharactersMaximum: Số kí tự tối đa của text.+ pVertexBufferObjectManager: là đối tượng quản lý bộ đệm để tải các dữ liệu về đồ họa. Thông thường được khai báo là mGame.getVertexBufferObjectManager().2.3.6.Physics Box2Da. Sơ lược về PhysicBox2DTrong phát triển game, cụm từ “vật lý” (physics) dùng để chỉ tập hợp mô phỏng các tương tác vật lý giống với ngoài đời thực. Không phải game nào cũng yêu cầu vật lý. Ví dụ những game câu đố, chúng ta không cần sử dụng bất kì yếu tố vật lý nào. Tuy vậy, đây cũng là một trong những thành phần quan trọng làm nên hiệu quả cho game, đặc biệt trong những game hành động.Trong AndEngine hỗ trợ một physics engine rất đầy đủ, được coi như một phần engine mở rộng của AndEngine, có tên gọi là Physics Box2D. Physics Box2D Engine ban đầu được viết bởi Erin Catto bằng ngôn ngữ C++. Kể từ khi ra đời đến nay, nó đã được dịch sang rất nhiều ngôn ngữ lập trình, và áp dụng vào rất nhiều engine game 2D.b. Các bước để thiết lập một thế giới vật lý trong game AndEngineB1: Tạo một đối tượng PhysicsWorld.Hàm khởi tạo được sử dụng:PhysicsWorld(final Vector2 pGravity, final boolean pAllowSleep)Trong đó:+ pGravity: gia tốc trọng trường trong thế giới vật lý đó.+ pAllowSleep: cho phép mô phỏng trạng thái không hoạt động trong thế giới vật lý.Trong PhysicsBox2D có 3 trạng thái của một đối tượng trong PhysicsWorld là: + BodyType.StaticBody: Đối tượng nằm yên, không di chuyển.+ BodyType.DynamicBody: Đối tượng di chuyển và phản ứng với các đối tượng khác.+ BodyType.KinematicBody: Đối tượng di chuyển nhưng không bị ảnh hưởng bởi các đối tượng khác.B2: Tạo một số mô phỏng đối tượng tĩnh, được thực hiên qua 2 giai đoạn.+ Tạo ra hình khối cho đối tượng.GVHD: ThS. Trịnh Thị Vân Anh 20 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’+ Sau đó tạo trạng thái (body) cho đối tượng, rồi gán trạng thái này cho hình khối của đối tượng trong môi trường vật lý của chúng ta.B3: Gắn hình khối đã tạo ở trên vào trong Scene để hiển thị chúng.B4: Kết nối các Sprite với vật lý thông qua PhysicsConnectors.B5: Đăng ký Box2D PhysicsWorld như một UpdateHandler cho Scene, qua đó ta có thể cập nhật trạng thái, vị trí các Sprite.Hình 2.8: Tạo hình chữ nhật bao quanh là các StaticBody của level 2 trong PTITit Game+ Tạo ra hình khối cho đối tượng.+ Sau đó tạo trạng thái (body) cho đối tượng, rồi gán trạng thái này cho hình khối của đối tượng trong môi trường vật lý của chúng ta.Chúng ta sẽ tìm hiểu kỹ hơn các sử dụng PhysicsBox2D trong game AndEngine ở các chương sau.GVHD: ThS. Trịnh Thị Vân Anh 21 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’CHƯƠNG 3. PHÂN TÍCH VÀ THIẾT KẾ ‘PTITIT GAME’3.1. Giới thiệu chungTên game: PTITit GameLà một game viết cho đối tượng sinh viên ngành công nghệ thông tin đã hoặc đang học tập trong Học viện Công nghệ Bưu chính Viễn thông.Game được chia thành 3 màn chơi tương ứng với 3 môn học: + Môn học 1: Lập trình C/C++; + Môn học 2: Lập trình Java; + Môn học 3: Lập trình Web. Trong mỗi môn học tương ứng sẽ có 2 level:+ Level 1: mô phỏng một game câu đố, tính thời gian.+ Level 2: mô phỏng một game hành động có sử dụng vật lý, tính thời gian.3.2. Level 13.2.1. Thể loại: Game câu đố, lật hình, tính thời gian 3.2.2. Mô tả kịch bảnMỗi lần chơi sẽ có 9 câu hỏi trắc nghiệm liên quan đến môn học và tương ứng với 9 miếng ghép hình. Mỗi câu hỏi trắc nghiệm sẽ đưa ra 3 phương án trả lời, và yêu cầu người chơi chỉ chọn 1 phương án đúng. Bức hình phía sau là ảnh của một giáo viên dạy môn học tương ứng. Bức hình này sẽ được ẩn đi bằng 9 miếng ghép hình nêu trên. Mục đích của level này là người chơi phải trả lời đúng càng nhiều câu hỏi càng tốt để đạt được một số điểm nhất định và mở được tấm hình phía sau. Cách tính điểm (tối đa đạt được 100 điểm):+ Khi bắt đầu, người chơi sẽ có 10 điểm làm vốn.+ Lần lượt trả lời 9 câu hỏi trắc nghiệm, với thời gian mỗi câu là 10 giây.+ Mỗi câu trả lời đúng, điểm số được cộng thêm 10 điểm và miếng ghép hình tương ứng với câu hỏi đó sẽ được mở ra.+ Mỗi câu trả lời sai, điểm số bị trừ đi 5 điểm và chuyển sang câu hỏi tiếp theo.+ Bất kì khi nào điểm của bạn nhỏ hơn 0, màn chơi sẽ ngay lập tức kết thúc.+ Nếu hết 10 giây mà người chơi không đưa ra câu trả lời cho câu hỏi thì điểm số sẽ bị trừ 5 điểm và chuyển sang câu hỏi tiếp theo, đồng hồ được bắt đầu đếm lại từ 10 giây. Người chơi được coi là vượt qua level này nếu đạt điểm số lớn hơn hoặc bằng mức điểm mà môn học đề ra. Tương ứng với mỗi màn chơi (hay môn học) sẽ yêu cầu một mức điểm khác nhau, và độ khó tăng dần:+ Môn học 1 (Lập trình C/C++) yêu cầu 35 điểm để vượt qua.+ Môn học 2 (Lập trình Java) yêu cầu 50 điểm để vượt qua.+ Môn học 3 (Lập trình Web) yêu cầu 65 điểm để vượt qua.GVHD: ThS. Trịnh Thị Vân Anh 22 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’3.2.3. Thiết kế chi tiết3.2.3.1. Phân tích kịch bản+ Vì là một game câu đố, thử thách người chơi bằng các câu hỏi trắc nghiệm. Bởi vậy chúng ta cần một phần màn hình để thể hiện câu hỏi và các đáp án.+ Ngoài ra, game còn có thêm phần hình ảnh để làm tăng tính hấp dẫn với người chơi, bởi vậy cần bố trí thêm một phần màn hình để biểu diễn hình ảnh đó.+ Các miếng ghép hình sẽ được bố trí nằm đè lên trên bức hình, khi trả lời đúng, lần lượt từng miếng ghép sẽ được ẩn đi để hiển thị ra bức hình phía dưới.+ Vì game có yếu tố tính thời gian và tính điểm, bởi vậy cần bố trí thêm một phần màn hình cho 2 yếu tố này, sao cho người chơi dễ quan sát3.2.3.2. Phác thảo giao diện của level 1:Hình 3.1: Giao diện phác thảo Level 1Trong giao diện phác thảo Level 1:+ Phần (1) là dự kiến phần đặt hình ảnh. Các miếng ghép được đặt phía trên hình ảnh đó, và yêu cầu phải che kín bức hình phía dưới.+ Phần (2) là dự kiến phần đặt câu hỏi. Các phương án trả lời được đặt ở các phần (A), (B), (C) tương ứng.+ Phần (Thời gian + Điểm) là dự kiến phần bố trí hiển thị điểm số và thời gian. + Ngoài ra, để giao diện không bị trống, cần set ảnh nền cho màn hình phía sau.3.2.3.3. CodeGVHD: ThS. Trịnh Thị Vân Anh 23 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’Hình 3.2: Cấu trúc các thành phần của Level 1a. LaunchLevel1.javaLà phần thân chính của game, một lớp được extends từ SimpleBaseGameActivity của AndEngine GLES2. Đây là nơi nạp dữ liệu ban đầu, tải các tài nguyên, sắp xếp và phân bổ vị trí cũng như kích thước các đối tượng.Một số phần trong source code:+ Khai báo biến:Hình 3.3: Các biến sử dụng trong LaunchLevel1.javaCác biến sử dụng trong LaunchLevel1:mHinhNen: đối tượng này sẽ tạo ảnh nền cho Level1.mKhungHinhAnh: đối tượng này thể hiện phần (1) trong giao diện phác thảo Level 1 (Hình 3.1).mKhungCauHoi: đối tượng này thể hiện phần (2) trong giao diện phác thảo Level 1 (Hình 3.1).timer: luồng điều khiển đếm ngược thời gian.mThoiGianDemNguoc: là một đối tượng chứa đoạn text thể hiện thời gian đếm ngược trong game, được biểu diễn ở phần (Thời gian) trong giao diện phác thảo Level 1 (Hình 3.1).mDiem: là một đối tượng chứa đoạn text thể hiện điểm số trong game, được biểu diễn ở phần (Điểm) trong giao diện phác thảo level 1 (Hình 3.1)+ Một số phương thức:Phương thức onCreate(Bundle savedInstanceState);Đây là phương thức của một Activity thông thường, có tác dụng khởi tạo các thành phần được sử dụng bên trong game.GVHD: ThS. Trịnh Thị Vân Anh 24 SVTH: Nguyễn Đức Hải – D09CNPM1ĐỒ ÁN TỐT NGHIỆP Chương 3. Phân tích và thiết kế ‘PTITit Game’Hình 3.4: phương thức onCreate() của LaunchLevel1.javaPhương thức onCreateEngineOptions();Hình 3.5: Phương thức onCreateEngineOptions() của LaunchLevel1.javaCác biến sử dụng trong onCreateEngineOptions():o mCamera: khởi tạo một Camera mới với kich thước màn hình là CAMERA_WIDTH x CAMERA_HEIGHT. Hai biến này có giá trị tương ứng với kích thước chiều dài và chiều rộng của màn hình thiết bị di động, được xử lý trong lớp Config.o engineOption: Khởi tạo và truyền các thuộc tính tùy chọn cho engine. Các thành phần bên trong đã được trình bày ở phần 2.3.1.b khi nói về EngineOptions.GVHD: ThS. Trịnh Thị Vân Anh 25 SVTH: Nguyễn Đức Hải – D09CNPM1

Trích đoạn

  • Màn hình các module game đã hoàn thiện.
  • CHƯƠNG 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Tài liệu liên quan

  • lập dự toán đồ án công trình trường cao đẳng Công Nghệ Đà Nẵng lập dự toán đồ án công trình trường cao đẳng Công Nghệ Đà Nẵng
    • 11
    • 526
    • 0
  • lập dự án cho phần ngầm đồ án công trình trung tâm công nghệ quốc tế Hà Nội - HITC lập dự án cho phần ngầm đồ án công trình trung tâm công nghệ quốc tế Hà Nội - HITC
    • 7
    • 534
    • 2
  • Đồ án Đồ án "Lập trình thiết bị di động trên J2ME"
    • 106
    • 736
    • 3
  • Đồ án thông tin di động Quy Hoạch Mạng CDMA Cho Các Quận Huyện Thành Phố Đà nẵng pptx Đồ án thông tin di động Quy Hoạch Mạng CDMA Cho Các Quận Huyện Thành Phố Đà nẵng pptx
    • 24
    • 963
    • 1
  • Đồ án Lập trình hệ thống- Mô phỏng lệnh Type Đồ án Lập trình hệ thống- Mô phỏng lệnh Type
    • 7
    • 794
    • 3
  • Đồ án lập trình di động Lập trình game code java Đồ án lập trình di động Lập trình game code java
    • 60
    • 2
    • 6
  • Đồ án: Lập trình giao tiếp máy tính qua cổng RS232 pps Đồ án: Lập trình giao tiếp máy tính qua cổng RS232 pps
    • 79
    • 521
    • 1
  • Đồ án lập chương trinh asembly Đồ án lập chương trinh asembly
    • 156
    • 335
    • 0
  • Đồ án thông tin di động và phương pháp xử lý nhiễu trạm BTS Đồ án thông tin di động và phương pháp xử lý nhiễu trạm BTS
    • 76
    • 611
    • 0
  • ĐỒ ÁN LẬP TRÌNH QUẢN LÝ ĐỀ TÀI QUẢN LÝ TIỆM VÀNG ĐỒ ÁN LẬP TRÌNH QUẢN LÝ ĐỀ TÀI QUẢN LÝ TIỆM VÀNG
    • 17
    • 901
    • 0

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

(7.32 MB - 60 trang) - Đồ án lập trình di động Lập trình game code java Tải bản đầy đủ ngay ×

Từ khóa » đồ án Game Java