Mô tả đề tài Game nhập vai ESCAPE-GHOST gồm có: • Menu: hiển thị cho phép người chơi lựa chọn thông tin Xem hướng dẫn,chọn chế độ chơi,… • Người chơi Player: Game có 2 người chơi hỗ trợ
Lý do chọn và tầm quan trọng của đề tài
Khi mới bắt đầu làm quen với lập trình hướng đối tượng, cách tiếp cận hiệu quả nhất là học qua các ví dụ cụ thể, nơi ranh giới giữa các đối tượng rõ ràng Trong đó, game nhập vai là thể loại game quen thuộc và hấp dẫn, giúp các thành viên dễ dàng hiểu hơn về môn học này Chúng tôi chọn đề tài “Xây dựng game nhập vai Simple RPG” để thực hành môn học, đặc biệt là qua dự án Escape-Ghost demo, được phát triển hoàn toàn bằng ngôn ngữ lập trình Java – ngôn ngữ hướng đối tượng nổi bật.
Do còn mới tiếp cận với ngôn ngữ Java và lập trình hướng đối tượng, nhóm chúng em gặp phải những hạn chế trong quá trình phát triển dự án Chúng em rất mong nhận được ý kiến phản hồi từ thầy để có thể khắc phục các hạn chế và hoàn thiện đề tài một cách tốt nhất.
Mô tả đề tài
Game nhập vai ESCAPE-GHOST gồm có:
• Menu: hiển thị cho phép người chơi lựa chọn thông tin ( Xem hướng dẫn, chọn chế độ chơi,…)
• Người chơi (Player): Game có 2 người chơi hỗ trợ nhau trong quá trình chơi
• Kẻ địch (Enemy): có khả năng gây sát thương cho player, tấn công và di chuyễn ngẫu nhiên trên bản đồ
• Bản đồ (Map): bao gồm đường đi, đất, nước,…
Quá Trình Tiếp Cận
Chúng tôi chọn đề tài dựa trên sở thích và khả năng của các thành viên trong nhóm, đảm bảo phù hợp và có thể phát triển tốt Quá trình hoàn thiện đề tài kéo dài khoảng 3 tháng, bao gồm các bước lên ý tưởng, thảo luận và lựa chọn đề tài phù hợp nhất Việc này giúp nhóm xây dựng nội dung chất lượng, sáng tạo và phù hợp với xu hướng tìm kiếm của khách hàng.
PHÂN CÔNG THÀNH VIÊN TRONG NHÓM
KHẢO SÁT, ĐẶC TẢ YÊU CẦU BÀI TOÁN
Miêu tả yêu cầu bài toán
Người chơi điều khiển một hoặc nhiều nhân vật trên bản đồ trong trò chơi, được lưu trữ trong các cấu trúc dữ liệu tối ưu để quản lý vị trí và trạng thái của các nhân vật cũng như quái vật Trên bản đồ, có các quái vật di chuyển và tương tác, tạo nên trải nghiệm game hấp dẫn và chiến thuật Quản lý dữ liệu chính xác giúp cung cấp trải nghiệm chơi mượt mà và sinh động hơn cho người chơi.
Trong các trò chơi, nhân vật người chơi và quái vật đều có các chỉ số quan trọng như HP, MP, Attack, Defense, và Speed để xác định trạng thái và thể lực của họ Người chơi có thể tấn công quái vật và sử dụng các kỹ năng đặc biệt để chiến đấu hiệu quả Ngược lại, quái vật cũng có khả năng tìm đến và tấn công người chơi, tạo ra các trận chiến đầy kịch tính và hấp dẫn.
Người chơi có thể dễ dàng di chuyển giữa các bản đồ khác nhau như M0, M1, M2, nhằm khám phá các khu vực mới trong trò chơi Ngoài ra, họ còn có khả năng tiến đến đích cuối cùng của trò chơi bằng cách đi đến vùng END trên bản đồ Khả năng di chuyển linh hoạt này giúp tăng trải nghiệm độc đáo và thúc đẩy sự thú vị trong quá trình chơi game.
Đáp ứng yêu cầu bài toán bao gồm:
- Thể hiện bản đồ và các đối tượng trên bản đồ trên giao diện đồ họa
- Điều khiển nhân vật di chuyển
- Có các thao tác để tấn công quái vật
Quái vật trong game có khả năng di chuyển linh hoạt và tấn công người chơi một cách đa dạng Các loại quái vật gồm có quái vật tấn công cận chiến, quái vật có khả năng tấn công hoặc bắn đạn từ xa, và các boss mạnh mẽ với đòn tấn công đặc biệt Sự đa dạng về loại hình và khả năng của quái vật tạo nên trải nghiệm chơi game hấp dẫn và thử thách hơn.
- Game có hai chế độ chơi dễ / khó theo mức độ “thông minh”, “di chuyển nhanh” hoặc “lượng máu” của quái vật
Biểu đồ use case
1 Biểu đồ use case tổng quan
- Tác nhân : người chơi 1, người chơi 2
- Các use case đối với mỗi người chơi
2 Biểu đồ use case phân rã mức 2
Hình 2 Use case “Bắt đầu game” phân rã
Hình 3 Use case “chơi game” phân rã đối với người chơi 1
Hình 4 Use case “chơi game” phân rã đối với người chơi 2
Đặc Tả Use Case
Mã UC UC01 Tên Bắt đầu game
Tác nhân Người dung chương trình Điều kiện trước Không có
No Thực hiện Hành động
2 System Hiện thị giao diện chọn chế độ chơi
4 System Khởi tạo game với chế độ đã chọn
5 System Hiển thị giao diện Điều kiện sau Không cóchơi
Mã UC UC02 Tên Chơi Game
Tác nhân Người dung chương trình Điều kiện trước Tác nhân đã bắt đầu game
No Thực hiện Hành động
2 System Hiển thị giao diện
3 Player1 Di chuyển hoặc tấnchơi
4 System Cập nhật vị trí củacông nhân vật
5 System Cập nhật quái vật bị bắn trúng Điều kiện sau Không có
Mã UC UC03 Tên Chơi game
Tác nhân Người dung chương trình Điều kiện trước Tác nhân đã bắt đầu game
No Thực hiện Hành động
2 System Hiển thị giao diện chơi game
3 Player2 Dịch chuyển đến người chơi 1 hoặc di chuyển
4 System Cập nhật vị trí của người chơi 2
6 System Cập nhật lại máu của nhân vật Điều kiện sau Không có
PHÂN TÍCH THIẾT KẾ BÀI TOÁN
Biểu đồ trình tự
Hình 1 : Biểu đồ tuần tự
Biểu đồ gói và biểu đồ lớp
Hình 2 : Biểu đồ lớp tổng quát
- Gói Image: Gồm hình ảnh các đối tượng đồ họa dưới dạng các file *.png
- Gói Actor: Gồm mã của nhân vật gồm người chơi, quái vật, boss,
- Gói GUI: Gồm mã của những đối tượng đồ họa
- Gói map: Gồm mã của bản đồ cùng với quái vật cho từng màn chơi
- Gói weapons: Gồm mã của các loại vũ khí
- Gói Manager: Gồm mã của lớp Manager chịu trách nhiệm xử lí va chạm, xử lí qua màn, kết thúc và bắt đầu game
2.2.1 Tổng Quát gói Gui, Manager, Map, Weapons
Hình 3 : Sơ đồ lớp tổng quát gói GUI, Manager, Map, Weapons
Có các đối tượng thể hiện các menu, hiển thị nhân vật và các hiệu ứng động.
Các lớp trong gói được thiết kế để xây dựng và quản lý giao diện cũng như chức năng của trò chơi Lớp Frame kế thừa từ JFrame để hiển thị giao diện chính của trò chơi, trong khi lớp Container kế thừa từ JPanel chịu trách nhiệm hiển thị các giao diện điều khiển như Menu, Tutorial, MainGame thông qua card layout, và các mối quan hệ kết tập với các lớp con của JPanel Lớp MainGame thể hiện màn hình chơi game chính, nơi các đối tượng như nhân vật và quái vật xuất hiện, đều kế thừa từ JPanel Các lớp như Tutorial, Menu, End cũng là các JPanel, đảm nhiệm việc hiển thị các màn hình hướng dẫn, điều khiển và kết thúc trò chơi Lớp MyMap lưu giữ dữ liệu về bản đồ màn chơi dưới dạng mảng 2 chiều và các danh sách ArrayList chứa quái vật cho từng cấp độ, với tổng số bản đồ gồm 4 map trong quá trình thử nghiệm Lớp Manager xử lý các thao tác va chạm, tương tác của người chơi với môi trường và các đối tượng khác trong game Cuối cùng, lớp StatusBar kế thừa từ JPanel, dùng để hiển thị các thông số của nhân vật như máu, điểm số, v.v.
Hình 4 : Sơ đồ lớp tổng quát
Gói thuộc tầng nghiệp vụ.
Gói chịu trách nhiệm lưu giữu thông tin về các đối tượng nhân vật
Các lớp trong gói được thiết kế theo cấu trúc rõ ràng nhằm phù hợp với các đặc điểm của từng loại nhân vật Lớp Abstract Actor giữ các thuộc tính cơ bản như HP, MP và speed, cùng các phương thức chung như move và kill Lớp Abstract LongRange kế thừa từ Actor, dành cho các đối tượng có tầm đánh xa, sở hữu một đối tượng vũ khí là Bullet Lớp Abstract ShortRange cũng kế thừa từ Actor, dành cho các đối tượng có tầm đánh gần, thực hiện tấn công dựa trên va chạm gây sát thương Các lớp Hunter, Ghost, Monster, Dog thể hiện các nhân vật người chơi và quái vật, kế thừa từ các lớp abstract phù hợp Cuối cùng, lớp MyAdapter chứa các phương thức lắng nghe sự kiện điều khiển nhằm xử lý các tác động từ người chơi.
2.2.3 Biểu đồ lớp cụ thể từng phần
Thiết kế chi tiết lớp
Các lớp quan trọng: MyMap, Container, Ghost, Manager, Actor, MainGame.
MyMap Tạo bản đồ, quái vật.
Setup vị trí và số lượng quái trong từng màn.
Container Hiển thị giao diện điều khiển cho MainGame người chơi ( Menu, tutorial, end, Tutorial maingame,…) Menu
Ghost Thiết lập các chỉ số: HP, MP,
Speed, atk,…các image ứng với các trạng thái di chuyển.
Thiết lập di chuyển cho nhân vật
Xử lí va chạm, tương tác với người Bullet chơi Dog
Xử lí tương tác của nhân vật với địa Hunter hình, quái vật và nhân vật khác MainGame
Actor Tạo các thuộc tính cho nhân vật và quái như: HP, Max_HP, MP,
Max_MP, defaultSpeed, speed, atk, defense, status, dead, type,…
MainGame Hiển thị nhân vật, quái vật, map,… MyMap trên màn hình chơi game Monster
Thiết lập chức năng phím tắt Hunter
Kiểm tra trạng thái nhân vật, quái MyAdapter vật Manager
CÔNG NGHỆ VÀ THUẬT TOÁN SỬDỤNG
Công Nghệ
- Môi trường lập trình : Eclipse
- Phần mềm quản lý mã nguồn : Github
Kiến Thức
Bài tập lớn gồm lượng lớn kiến thức về phân tích và thiết kế hướng đối tượng Cụ thể như sau:
- Mô hình lập trình: hướng đối tượng
- Các nguyên lý trong lập trình hướng đối tượng: đóng gói, kế thừa, đa hình, interface,…
- Ngôn ngữ: ngôn ngữ lập trình hướng đối tượng Java
- Cơ bản về cơ sở dữ liệu và thiết kế cơ sở dữ liệu cho game
XÂY DỰNG CHƯƠNG TRÌNH MINH HỌA
Kết quả chương trình minh họa
Nhìn chung sản phẩm minh họa khá thành công vì đã thực hiện được hầu hết các yêu cầu đưa ra:
- Thể hiện bản đồ và các đối tượng trên bản đồ trên giao diện đồ họa - Điều khiển nhân vật di chuyển
- Có 2 người chơi với phím di chuyển và kỹ năng khác nhau :
Người chơi 1 có khả năng di chuyển và tấn công quái bằng súng
Người chơi 2 có khả năng đốt quái ở trong phạm vi gần, dịch chuyển đến vị trí người chơi 1 và hồi máu cho cả 2
- Quái vật có khả năng di chuyển và tấn công người chơi
- Game có hai chế độ hơi dễ/khó theo mức độ “thông minh”, “di chuyển nhanh” hoặc “lượng máu” của quái vật
- Có thể dừng game để tiếp tục sau 1 khoảng thời gian
Game nhập vai Escape Ghost có chức năng chính như sau :
- Giao diện khi vào game có Tutorial giúp người chơi có thể biết được kỹ năng của mỗi người chơi và hiểu về cách thức để chiến thắng game
- Khi vào game người chơi có thể chọn 2 chế độ chơi :
Play Easy : trong chế độ này người chơi 1 không thể tấn công được người chơi 2, quái vật có chỉ số thấp hơn
Play Hard : ở chế độ này người chơi 1 có thể tấn công người chơi 2 đồng thời tang chỉ số của quái vật
- Người chơi có thể dừng game với phím P và tiếp tục game sau khi nhấn nút
- Người chơi vượt qua mỗi màn chơi bằng cách đi vào bụi cỏ ở bên phải màn hình sau khi tiêu diệt quái vật
- Nhân vật 1 được điều khiển di chuyển bằng các phím ↓ ↑ ← → và tấn công quái vật bằng phím Enter
- Nhân vật 2 được điều khiển di chuyển bằng các phím W S A D và có các kỹ năng như thiêu đốt quái xung quanh, dung phím B để dịch chuyển đến nhân vật
1 và hồi máu bằng phím N
- Người chơi có thể bị xử thua sau khi 1 trong 2 nhân vật hết lượng máu (HP) của mình
Giao diện chương trình
- Trên giao diện chính của game gồm có 3 chức năng chính :
TUTORIAL : Xem hướng dẫn game
Hình 6 : Giao diện hướng dẫn
PLAY EASY : Chơi ở chế độ dễ
PLAY HARD : Chơi ở chế độ khó
Dù lựa chọn chế độ chơi nào đi chăng nữa, người chơi cũng bắt đầu với một màn đấu không có quái vật để làm quen với cách chơi, bao gồm các thao tác di chuyển và sử dụng kỹ năng của từng nhân vật Điều này giúp người chơi dễ dàng làm quen với cơ chế game trước khi đối mặt với những thử thách thực sự Việc bắt đầu từ những màn chơi không có quái vật giúp tăng khả năng làm quen và nâng cao kỹ năng điều khiển nhân vật, đảm bảo trải nghiệm game mượt mà hơn.
Hình 7 : Giao diện màn giới thiệu
Sau khi vượt qua màn giới thiệu giao diện trong game sẽ thay đổi vào giao diện mỗi map
Hình 8 : Giao diện map cụ thể
Trong màn giới thiệu và kể cả màn chơi thông số của nhân vật 1 và nhân vật 2 đều được nêu rõ ở thanh dưới màn hình
Hình 9 : Thanh chỉ số của mỗi nhân vật
Ghost HP là lượng máu của nhân vật 1
Ghost MP là mana dùng để tấn công của nhân vật 1 ( có thể hồi lại khi đạn trúng vật cản hoặc đi ra ngoài map)
Ghost-ATK là chỉ số tấn công của nhân vật 1
Monster HP là lượng máu của nhân vật 2
Monster MP là lương mana để sử dụng kỹ năng của nhân vật 2
Monster-ATK là số dame đốt quái xung quanh mỗi giây của nhân vật 2
Monster AT-Ranger là phạm vi đốt quái vật của nhân vật 2
4.2.2 Giao diện dừng trò chơi
Hình 10 : Giao diện dừng trò chơi
Hình 11 : Giao diện chiến thắng
4.2.4 Giao diện xử thua cuộc
Hình 12 : Giao diện thua cuộc
4.3 Kiểm thử các chức năng đã thực hiện
2 Di chuyển đối với mỗi nhân vật
3 Tân công (đối với Player 1)
4 Kỹ năng của nhân vật 2 ( Gồm : dịch chuyển đến nhân vật 1, hồi máu cho nhân vật 1, đốt quái xung quanh)
Quái vật tầm gần Quái vật tầm xa
Bảng 1 : Kết quả kiểm thử chức năng Bắt đầu game
STT input output Exception Kết quả
1 Chọn TUTORIAL ở màn hình chính Hiển thị giao diện hướng dân game Không xử lý OK
Hiển thị giao diện game mới ở chế độ dễ
Hiển thị giao diện game mới ở chế độ dễ
Bảng 2 : Kết quả kiểm thử chức năng di chuyển đói với mỗi nhân vật
STT input output Exception Kết quả
1 Nhấn ↑ đối với nhân vật 1 và W đối với nhân vật 2
Player di chuyển lên phía trên Không xử lý OK
2 Nhấn ↓ đối với nhân vật 1 và S đối với nhân vật 2
Player di chuyển xuống phía dưới
3 Nhấn ← đối với nhân vật 1 và A đối với nhân vật 2
Player di chuyển sang trái Không xử lý OK
4 Nhấn → đối với nhân vật 1 và D đối với nhân vật 2
Player di chuyển sang phải
Bảng 3 : Tấn công đối với Player 1
STT input output Exception Kết
Khi nhấn Enter để cập nhật lượng máu của quái vật, nếu máu của chúng giảm xuống dưới 0, quái vật sẽ biến mất khỏi bản đồ Lượng MP của quái vật cũng sẽ giảm đi 1 sau mỗi lần tấn công, ảnh hưởng đến khả năng chiến đấu của chúng.
Bảng 4 : Kỹ năng của Player 2
STT input output Exception Kết quả
1 Dịch chuyển đến nhân vật 1 Cập nhật vị trí của nhân vật 2 trên bản đồ trùng với nhân vật 1 (Tiêu hao
2 Hồi máu cho nhân vật 1 ( Phím N)
Lượng máu của nhân vật 1 trên thanh công cụ tăng 100 (Tiêu hao 20 MP)
3 Đốt quái trong tầm đốt ở xung quanh Quái vật bị trừ lượng máu tương ứng số lần đốt ( 3 Hp/s)
STT input output Exception Kết quả
1 Quái tầm gần ở cạnh nhân vật Lượng máu của nhân vật bị trừ đi 20HP/s Không xử lý OK
2 Hồi máu cho nhân vật 1 ( Phím N)
Lượng máu của nhân vật 1 trên thanh công cụ tăng 100 ( Ti
3 Đốt quái trong tầm đốt ở xung quanh
Quái vật bị trừ lượng máu tương ứng số lần đốt ( 3 Hp/s)
STT input output Exception Kết quả
1 Cả 2 nhân vật đều ở bụi cỏ bên phải Giao diện chuyển đến map tiếp theo sau Chưa tiêu diệt hết quái vật OK chuyển đến sẽ xảy ra lỗi
Bảng 7 : Dừng và tiếp tục game
STT input output Exception Kết quả
1 Người chơi nhấn phím P để dừng game trong lúc chơi
Hiển thị “Press Space to play” đồng thời dừng mọi hoạt động của game
Space để tiếp tục chơi game (Sau khi nhấn P)
Hiển thị lại giao diện còn dở ở lần nhấn P lúc trước
STT input output Exception Kết quả
1 Một trong hai nhân vật có Hp bằng 0 Hiển thị giao diện dừng trò chơi và đưa ra lựa chọn cho người chơi 2 lựa chọn “Go Menu” hoặc “Again”
Kết luận
- Các chức năng thử nghiệm đều ổn định và không gặp bất cứ lỗi hay phải xử lý ngoại lệ.
Quá trình thử nghiệm mang tính chủ quan cao, gây ra nhiều hạn chế như các lỗi chưa được phát hiện trong quá trình kiểm thử, hoặc kiểm thử không phát hiện lỗi nhưng khi vận hành thực tế lại gây ra sự cố.
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Những mặt đã đạt được
- Hiểu và làm viêc được
- Cơ hội làm quen với lập trình game cơ bản, được xây dựng chương trình cụ thể
Game được thiết kế với đồ họa dễ nhìn, tạo trải nghiệm trực quan và thân thiện với người chơi Cách chơi đơn giản, dễ tiếp cận, phù hợp với mọi đối tượng người dùng Ngoài ra, trò chơi không gặp nhiều lỗi kỹ thuật, đảm bảo vận hành mượt mà và ổn định Bên cạnh đó, game tích hợp nhiều tính năng hấp dẫn, giúp nâng cao trải nghiệm người chơi và đáp ứng các tiêu chí đề ra về chất lượng và độ hấp dẫn của sản phẩm.