Lý do chọn và tầm quan trọng của đề tài
Khi bắt đầu với lập trình hướng đối tượng, việc sử dụng các ví dụ rõ ràng về đối tượng là phương pháp hiệu quả Game nhập vai, mặc dù không mới, vẫn thu hút đông đảo người chơi và là một ví dụ điển hình cho lập trình hướng đối tượng Nhóm chúng tôi đã chọn đề tà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, với ngôn ngữ lập trình Java, một ngôn ngữ thuần đối tượng.
Nhóm chúng em đang làm quen với ngôn ngữ Java và lập trình hướng đối tượng, nên vẫn còn một số hạn chế trong chương trình Chúng em rất mong nhận được nhận xét từ thầy về đề tài của nhóm để có thể cải thiện và khắc phục những vấn đề cò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 đã lựa chọn đề tài dựa trên sở thích và năng lực của các 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 lên ý tưởng và thảo luận để chọn lựa đề tài phù hợp.
PHÂN CÔNG THÀNH VIÊN TRONG NHÓM
Họ và tên Email Điện Công việc thực Đánh giá thoại hiện
Phan Ngọc khai.pn194302@sis.hust.edu.vn
Nguyễn hoa.nhq194054@sis.hust.edu.vn
Từ Hoàng giang.th183518@sis.hust.edu.vn
Nguyễn lam.nt194313@sis.hust.edu.vn
Trần Đức 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 sẽ đ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ó sự hiện diện của các quái vật có khả năng di chuyển.
Trong trò chơi, 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 các kỹ năng đặc biệt, trong khi quái vật cũng có thể chủ động tìm đến và tấn công người chơi.
Người chơi có khả năng di chuyển giữa các bản đồ khác nhau, như M0, M1, M2, và có thể tiến đến khu vực kết thúc trò chơi, được đánh dấu là END trên bản đồ.
- 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ó khả năng bắn đạn từ xa, và các loại boss mạnh mẽ Mỗi loại quái vật đều mang đến những thách thức và trải nghiệm độc đáo cho người chơi.
- 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 Bắt đầu game
Chơi game Dừng game Thoát Game
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ụ.
Bài viết mô tả cấu trúc các lớp trong gói phần mềm trò chơi, 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, quản lý các giao diện điều khiển như Menu, Tutorial và MainGame thông qua card layout; Lớp MainGame hiển thị màn hình chơi game, nơi có các nhân vật và quái vật; Các lớp Tutorial, Menu và End hiển thị màn hình hướng dẫn, menu điều khiển và kết thúc game; Lớp MyMap lưu trữ thông tin về bản đồ và quái vật, với 4 bản đồ thử nghiệm; 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 môi trường; và Lớp StatusBar kế thừa từ JPanel để hiển thị 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 này chịu trách nhiệm lưu giữ thông tin về các đối tượng nhân vật trong game, bao gồm các lớp chính như Lớp Abstract Actor, lưu trữ các thuộc tính cơ bản như HP, MP và phương thức chung như move và kill Lớp Abstract LongRange kế thừa từ lớp Actor, dành cho các nhân vật có tầm đánh xa và sở hữu vũ khí là Bullet Ngược lại, Lớp Abstract ShortRange cũng kế thừa từ lớp Actor, nhưng dành cho các nhân vật có tầm đánh ngắn, với phương thức tấn công dựa vào va chạm Các lớp thực thi như Hunter, Ghost, Monster và Dog đại diện cho 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 cung cấp 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 Mô tả mẫu CRC:
Tạo bản đồ, quái vật.
Setup vị trí và số lượng quái trong từng màn.
Hiển thị giao diện điều khiển cho người chơi ( Menu, tutorial, end, maingame,…)
Thiết lập các chỉ số: HP, MP, MainGame
Speed, atk,…các image ứng với LongRange 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 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.
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,…
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
MyMapMonsterHunterMyAdapterManagerDogGhost
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
Thuật Toán
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 linh hoạt và tấn công quái vật từ xa bằng súng, trong khi người chơi 2 có thể đốt quái trong phạm vi gần, dịch chuyển đến vị trí của người chơi 1 và hồi phục sức khỏe cho cả hai.
- 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ó thể di chuyển bằng các phím W, S, A, D và sở hữu kỹ năng thiêu đốt quái vật xung quanh Để dịch chuyển đến nhân vật 1, người chơi sử dụng phím B, và để hồi máu, phím N sẽ được kích hoạt.
- 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 sẽ bắt đầu hành trình của mình ở một màn chơi không có quái vật, giúp họ làm quen với các cơ chế của game như 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, trong khi Monster HP thể hiện lượng máu của nhân vật 2 Đồng thời, Monster MP là lượng mana cần thiết để nhân vật 2 sử dụng các kỹ năng.
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)
5 Quái tấn công : 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 Hiển thị giao diện Không xử lý OK ở màn hình chính hướng dân game
2 Chọn chế độ Play Hiển thị giao diện game Không xử lý OK
EASY ở màn hình mới ở chế độ dễ chính
3 Chon chế độ Play Hiển thị giao diện game Không xử lý OK
Hard ở màn hình mới ở chế độ dễ chính
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 Player di chuyển lên Không xử lý OK nhân vật 1 và W phía trên đối với nhân vật 2
2 Nhấn ↓ đối với Player di chuyển xuống Không xử lý OK nhân vật 1 và S đối phía dưới với nhân vật 2
3 Nhấn ← đối với Player di chuyển sang Không xử lý OK nhân vật 1 và A trái đối với nhân vật 2
4 Nhấn → đối với Player di chuyển sang Không xử lý OK nhân vật 1 và D phải đối với nhân vật 2
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 là điều cần thiết; nếu máu của quái vật giảm xuống dưới 0, quái vật sẽ biến mất khỏi bản đồ Lưu ý rằng mỗi lần tấn công sẽ giảm 1 MP.
Bảng 4 : Kỹ năng của Player 2
STT input output Exception Kết quả
1 Dịch chuyển đến Cập nhật vị trí của nhân Không xử lý FAIL nhân vật 1 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 Lượng máu của nhân Không xử lý OK vật 1 ( Phím 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 Quái vật bị trừ lượng Không xử lý OK đốt ở xung quanh 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 ở Lượng máu của nhân Không xử lý OK cạnh nhân vật vật bị trừ đi 20HP/s
2 Hồi máu cho nhân Lượng máu của nhân Không xử lý OK vật 1 ( Phím N) vật 1 trên thanh công cụ tăng 100 ( Ti
3 Đốt quái trong tầm Quái vật bị trừ lượng Không xử lý OK đốt ở xung quanh 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 Giao diện chuyển đến Chưa tiêu diệt OK ở bụi cỏ bên phải map tiếp theo sau hết quái vật màn hình sau khi di
Nhóm 14 26 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 Hiển thị “Press Space to Không xử lý OK phím P để dừng play” đồng thời dừng game trong lúc mọi hoạt động của game chơi
2 Người chơi nhấn Hiển thị lại giao diện Không xử lý OK
Space để tiếp tục còn dở ở lần nhấn P lúc chơi game (Sau khi trước nhấn P)
STT input output Exception Kết quả
Khi nhân vật trong trò chơi có chỉ số HP bằng 0, giao diện sẽ hiển thị thông báo dừng và cung cấp cho người chơi hai 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, dẫn đến nhiều hạn chế như các lỗi chưa được kiểm tra hoặc kiểm thử không phát hiện lỗi, 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, đảm bảo không gặp quá 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.