Lý do chọn và tầm quan trọng của đề tài
Khi bắt đầu tìm hiểu lập trình hướng đối tượng, việc sử dụng các ví dụ rõ ràng về các đối tượng là cách tiếp cận hiệu quả Game nhập vai, mặc dù không phải là thể loại mới, vẫn luôn thu hút nhiều người chơi Chúng tôi chọn phát triển trò chơi "Xây dựng một game nhập vai Simple RPG" để thực hiện chương trình Escape-Ghost demo cho bài tập lớn Dự án này được viết hoàn toàn bằng ngôn ngữ lập trình Java, một ngôn ngữ thuần đối tượng, giúp các thành viên trong nhóm hiểu rõ hơn về lập trình hướng đối tượng.
Chúng em đang trong quá trình làm quen với ngôn ngữ Java và lập trình hướng đối tượng, do đó vẫn còn một số hạn chế trong chương trình Vì vậy, nhóm chúng em rất mong nhận được ý kiến phản hồi từ thầy về đề tài của mình để có thể cải thiện và khắc phục những vấn đề tồn tại.
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 em đã chọn đề tài dựa trên sở thích và năng lực của từng thành viên trong nhóm Quá trình hoàn thiện đề tài diễn ra trong 3 tháng, bao gồm việc phát triển ý tưởng và thảo luận để lựa chọn đề tài phù hợp.
PHÂN CÔNG THÀNH VIÊN TRONG NHÓM
Họ và tên Email Điện thoại
Công việc thực hiện Đánh giá
Khải khai.pn194302@sis.hust.edu.vn
Hòa hoa.nhq194054@sis.hust.edu.vn
Giang giang.th183518@sis.hust.edu.vn
Tiến Lâm lam.nt194313@sis.hust.edu.vn
Hải hai.td194270@sis.hust.edu.vn
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 một bản đồ được lưu trữ trong cấu trúc dữ liệu, nơi có các quái vật có khả năng di chuyển.
Trong trò chơi, các nhân vật do người chơi điều khiển và quái vật đều có các chỉ số quan trọng như HP, MP, Attack, Defense, và Speed để xác định tình trạng và thể lực Người chơi có khả năng tấn công quái vật và sử dụng kỹ năng đặc biệt, trong khi quái vật cũng sẽ chủ động tấn công người chơi.
Người chơi có khả năng di chuyển linh hoạt giữa các bản đồ khác nhau, chẳng hạn như M0, M1, M2, và có thể tiến đến vùng kết thúc của trò chơi, được đánh dấu là END trên bản đồ.
Đá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 trò chơi có khả năng di chuyển linh hoạt và tấn công người chơi, được phân loại thành nhiều loại khác nhau Có những quái vật tấn công gần, quái vật có thể tấn công hoặc bắn đạn từ xa, và các loại boss mạnh mẽ.
- 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
- 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
1.2.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 chơi Điều kiện sau Không có
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 chơi
3 Player1 Di chuyển hoặc tấn công
4 System Cập nhật vị trí của 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 gói trong biểu đồ trên thuộc tầng giao diện, nghiệp vụ.
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.
Bài viết này tổng quan về các lớp trong gói game, bao gồm: Lớp Frame kế thừa từ JFrame để hiển thị giao diện trò chơi; 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 và MainGame thông qua card layout; Lớp MainGame, nơi diễn ra màn chơi với các nhân vật và quái vật, cũng kế thừa từ JPanel; Các lớp Tutorial, Menu và End là các JPanel hiển thị hướng dẫn, menu điều khiển và màn hình kết thúc game; Lớp MyMap lưu trữ thông tin về bản đồ dưới dạng mảng 2 chiều cùng với ArrayList quái vật cho từng màn chơi, với 4 bản đồ và 1 bản đồ khởi động; Lớp Manager xử lý va chạm, thao tác người dùng và tương tác giữa nhân vật với địa hình; Cuối cùng, Lớp StatusBar kế thừa từ JPanel, hiển thị các thông số của nhân vật.
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
Trong gói lớp, lớp Abstract Actor giữ các thuộc tính và phương thức cơ bản của nhân vật như HP, MP, và tốc độ, cùng với các phương thức chung như di chuyển và tiêu diệt Lớp Abstract LongRange, kế thừa từ lớp Actor, lưu giữ các thuộc tính của nhân vật tầm xa và sở hữu vũ khí là Bullet Lớp Abstract ShortRange, cũng kế thừa từ Actor, dành cho nhân vật tầm ngắn, với phương thức tấn công gây sát thương khi va chạm Các lớp thực thi như Hunter, Ghost, Monster, và Dog đại diện cho nhân vật người chơi và quái vật, kế thừa từ các lớp Abstract Cuối cùng, lớp MyAdapter chứa các phương thức để lắng nghe điều khiển nhân vật và tín hiệu tạm dừng game 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.
Hiển thị giao diện điều khiển cho người chơi ( Menu, tutorial, end, maingame,…)
Tạo bản đồ, quái vật.
Setup vị trí và số lượng quái trong từng màn.
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
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,… trên màn hình chơi game.
Thiết lập chức năng phím tắt.
Kiểm tra trạng thái nhân vật, quái vật
MyMap Monster Hunter MyAdapter Manager Dog Ghost
Xử lí va chạm, tương tác với người chơi.
Xử lí tương tác của nhân vật với địa hình, quái vật và nhân vật khác.
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ó
Người chơi bắt đầu trải nghiệm game ở một màn chơi không có quái vật, giúp họ làm quen với cách di chuyển và sử dụng kỹ năng của từng nhân vật, bất kể chế độ chơi nào.
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
Kiểm thử các chức năng đã thực hiện
Các chức năng đã được xây dựng trong chương trình :
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)
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
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
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
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 quả
Để cập nhật lượng máu của quái vật, hãy nhấn Enter; nếu lượng máu giảm xuống dưới 0, quái vật sẽ biến mất khỏi bản đồ Mỗi lần tấn công, lượng MP sẽ giảm đi 1.
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
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 màn hình
Giao diện chuyển đến map tiếp theo sau
Chưa tiêu diệt hết quái vật sau khi di
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 thường mang tính chủ quan cao, dẫn đến nhiều hạn chế như chưa phát hiện được lỗi, hoặc các lỗi không xuất hiện trong quá trình kiểm thử nhưng có thể xuất hiện khi sử dụng thực tế.
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 và cách chơi đơn giản, giúp người chơi dễ dàng tiếp cận mà không gặp nhiều lỗi Ngoài ra, game còn tích hợp nhiều tính năng hấp dẫn, đáp ứng đầy đủ các tiêu chí đã đề ra.