Tải bản đầy đủ (.pdf) (46 trang)

Báo cáo Game nhập vai RPG

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.49 MB, 46 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THƠNG
──────── * ───────

BÀI TẬP LỚN
MƠN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Xây Dựng Một Game Nhập Vai Đơn Giản SimpleRPG
Sinh viên thực hiện:
Nguyễn Bá Duy

20194261

Lê Thị Nguyệt

20194343

Hoàng Thị Nhung

20194349

Trần Văn Phúc

20194354

Trần Văn Quang

20194147

Lớp
:124159 – K64
Giáo viên hướng dẫn : ThS. Nguyễn Mạnh Tuấn



Hà Nội, tháng 5 năm 2021


Simple RPG Game
Lời nói đầu ........................................................................................................................... 1
Phân cơng thành viên trong nhóm ....................................................................................... 2
CHƯƠNG 1.

Khảo sát đặc tả yêu cầu bài tốn .............................................................. 3

1.1. Mơ tả u cầu bài tốn ........................................................................................... 3
1.2. Biểu đồ Use Case ................................................................................................... 3
1.2.1.

Biểu đồ use case tổng quan .......................................................................... 3

1.2.2.

Biểu đồ use case phân rã mức 2 ................................................................... 4

1.3. Đặc tả Use Case ..................................................................................................... 4
1.3.1.

Danh sách Actor........................................................................................... 4

1.3.2.

Danh sách Use Case ..................................................................................... 4


1.3.3.

Đặc tả Use Case ........................................................................................... 5

CHƯƠNG 2.

Phân tích thiết kế bài tốn ........................................................................ 6

2.1. Biểu đồ trình tự ...................................................................................................... 6
2.2. Biểu đồ lớp ............................................................................................................. 8
2.2.1.

Biểu đồ các lớp ............................................................................................ 8

2.2.2.

Biểu đồ các lớp và package liên quan........................................................ 15

2.3. Thiết kế chi tiết Pakage và Class ......................................................................... 21
2.3.1.
CHƯƠNG 3.

Các lớp quan trọng ..................................................................................... 21
Công nghệ và thuật tốn sử dụng ........................................................... 32

3.1. Ngơn ngữ lập trình và các nền tảng cơng nghệ .................................................... 32
3.2. Kỹ thuật, cấu trúc dữ liệu và thuật toán ............................................................... 32
CHƯƠNG 4.

Xây dựng chương trình minh họa........................................................... 35


4.1. Kết quả chương trình minh hoạ ........................................................................... 35
4.2. Giao diện chương trình ........................................................................................ 35
4.3. Kiểm thử các chức năng đã thực hiện .................................................................. 41
4.3.1.

Chức năng: Di chuyển và phát hiện va chạm ............................................ 41

4.3.2.

Chức năng: Hệ thống tấn công, HP, Mana của người chơi và quái .......... 42

4.3.3.

Chức năng: Game over và win game ......................................................... 42

Kết luận và hướng phát triển ............................................................................................. 43
Tài liệu tham khảo ............................................................................................................. 44


Lời nói đầu
Ngày nay, ngành cơng nghệ thơng tin đang phát triển một cách vũ bão trên mọi
lĩnh vực của đời sống. Trong đó ngành cơng nghệ game hiện đang bùng nổ, ngày
càng có nhiều sản phẩm game mới ra đời để đáp ứng nhu cầu giải trí, sử dụng của
con người. Từ xu hướng đó thì nhóm chúng em đã quyết định cùng nhau tạo ra một
tựa game nhập vai đơn giản để thầy và các bạn cùng thử sức.
Với đề tài số 1 là Xây dựng một game nhập vai đơn giản SimpleRPG. Đề tài
này cho ta cái nhìn tổng quát nhất về Lập trình hướng đối tượng. Nó cho ta biết cách
xây dựng và thiết kế các đối tượng, liên kết chúng với nhau lại như thế nào và cách
để hồn thiện một chương trình là như thế nào.

Sau khi chọn đề tài nhóm bắt đầu tìm hiểu và đọc các tài liệu liên quan đến đề
tài, tìm hiểu cách xây dựng, thiết kế một tựa game 2D. Khi đã tìm hiểu thì nhóm đã
có 1 cuộc họp để phân chia công việc cho các thành viên dựa trên điểm mạnh của
mỗi người. Sau gần một học kì, từ sự cố gắng tìm kiếm tài liệu, tích cực trao đổi
thông tin với nhau của các thành viên trong nhóm, nhóm đã cho ra đời phiên bản đầu
tiên của game nhập vai SimpleRPG, mặc dù còn nhiều chức năng chưa hồn thiện
tuy nhiên nó cũng đã có cơ bản đầy đủ chức năng của một game đơn giản để có thể
đáp ứng nhu cầu giải trí của mọi người.
Vì là chương trình đầu tiên nên khơng thể tránh khỏi những sai sót trong q
trình xây dựng chương trình. Nên nhóm rất hi vọng nhận được những phản hồi, đánh
giá và góp ý tích cực của thầy cũng như của các bạn trong lớp để chương trình được
hồn thiện hơn. Nhóm xin chân thành cảm ơn !!!

Nhóm IX

1


Phân cơng thành viên trong nhóm
Họ và tên

Email

Nguyễn Bá Duy



Cơng việc thực hiện

Kiểm thử, làm slide,

tìm hiểu thuật tốn
Lê Thị Nguyệt
Xử lí thuật tốn, làm
báo cáo, kiểm thử
Hồng Thị Nhung Code chính, làm báo
cáo, trưởng nhóm
Trần Văn Phúc
Làm báo cáo, âm
thanh, code phụ
Trần Văn Quang Xử lí đồ họa, làm
slide

Đánh
giá
Tốt
Tốt
Tốt
Tốt
Tốt

Nhóm IX

2


CHƯƠNG 1. Khảo sát đặc tả yêu cầu bài toán
1.1. Mơ tả u cầu bài tốn
Người chơi điều khiển một hoặc nhiều nhân vật trong một bản đồ được lưu
trong một cấu trúc dữ liệu, ví dụ: mảng hai chiều, trong đó mỗi ơ tương ứng với một
dạng bản đồ khác nhau (đất, cỏ, nước...) Trên bản đồ có các quái vật có thể di chuyển

được. Các nhân vật người chơi điều khiển và quái vật có các chỉ số xác định tình
trạng và thể lực (ví dụ HP, MP, Attack, Defense, Speed...). Người chơi có thể tấn
cơng qi vật và sử dụng các kỹ năng đặc biệt. Tương tự, qi vật cũng có thể tìm
đến và tấn cơng người chơi. Người chơi có thể di chuyển qua lại giữa các bản đồ
khác nhau (ví dụ khi đi vào vùng M0, M1, M2... trên bản đồ) hoặc đi đến kết thúc
của trị chơi (ví dụ khi đi vào vùng END trên bản đồ).

1.2. Biểu đồ Use Case
1.2.1. Biểu đồ use case tổng quan

Nhóm IX

3


1.2.2. Biểu đồ use case phân rã mức 2

1.3. Đặc tả Use Case
1.3.1. Danh sách Actor
Tên Actor
Actor

Ý Nghĩa
Người Chơi Game

1.3.2. Danh sách Use Case
Tên Use Case
Start
Level
Character

Help

Ý nghĩa
Đưa người chơi vào chơi game
Chọn mức độ chơi game dễ hoặc khó
Chọn nhân vật để chơi game
Hướng dẫn chơi game

Nhóm IX

4


1.3.3. Đặc tả Use Case
1.3.3.1.

Use case Start
Thực hiện
User
System

Hành động
Ấn vào button Start
Hiển thị giao diện
GameState

STT
1
2


Thực hiện
User
System

3

User

4

System

Hành động
Ấn vào button Level
Hiển thị giao diện
Choose Level
Chọn 1 trong level: easy
và hard
Đưa về giao diện ban đầu

STT

Thực hiện

Hành động

1

User


Ấn vào button Character

2

System

Hiển thị giao diện choose
Character

3

User

Chọn 1 trong 5 Character

4

System

Đưa về giao diện ban đầu

Thực Hiện
User

Hành động
Ấn vào button Help

STT
1
2


1.3.3.2.

1.3.3.3.

1.3.3.4.
STT
1

Use Case Level

Use Case Character

Use Case Help

Nhóm IX

5


2

System

Hiển thị giao diện hướng
dẫn chơi

3
4


User
System

Ấn vào button Restart
Đưa về giao diện ban đầu

CHƯƠNG 2. Phân tích thiết kế bài tốn
2.1. Biểu đồ trình tự

Mơ tả chi tiết về Use Case Play Game
- Khi bắt đầu chương trình, người chơi sẽ được đưa đến màn hình MenuState
có 4 nút chọn:
• Help : Hướng dẫn chơi.
• Choose : Chọn nhân vật (có 5 nhân vật để người chơi tùy chọn).
• Level : Chọn độ khó cho Game (có 2 mức độ : Easy và Hard).

Nhóm IX

6


• Start : Bắt đầu và khởi động trò chơi. Nếu người chơi khơng setting
các đặc tính của nhân vật và game như Character, Level thì hệ thống
sẽ tự tạo mặc định người chơi chọn Gao White và Easy Level.
- Sau khi Start Game, hệ thống sẽ chuyển sang giao diện chơi game. Người
chơi có thể nhấn các nút W, A, S, D để di chuyển; nhấn các nút mũi tên Up,
Down, Left, Right để tấn công bằng cách phi đao.
Nếu người chơi tấn cơng trúng qi vật thì sẽ được tăng MP, MP>0 sẽ được
mở tính năng tấn cơng bằng cầu lửa có sức sát thương cao hơn (cầu lửa bắn
trúng qi vật thì khơng được tăng MP, qua mỗi lần bắn cầu lửa MP sẽ

giảm).
Game có 3 màn chơi, quái vật khi chết sẽ rơi ra vật phẩm. Có 2 loại vật
phẩm : vật phẩm tăng máu và vật phẩm mở màn mới. Với map1 và map2 chỉ
cần lấy được đủ số lượng vật phẩm có thể mở màn mới. Sang map3, nhân
vật cần tấn công Boss chết thì sẽ thắng.
Khi nhân vật chết hoặc thắng sẽ có 2 lựa chọn : chơi lại hoặc thốt game.

Nhóm IX

7


2.2. Biểu đồ lớp
2.2.1. Biểu đồ các lớp

Nhóm IX

8


Nhóm IX

9


Giới thiệu về các class trong biểu đồ
• Game: có chức năng khởi tạo cho các đối tượng quản lý các đổi tượng khác
trong chương trình, là lớp cơ sở.
• Display: có chức năng tạo ra Frame với các thuộc tính như tên frame, chiều
dài, chiều rộng frame.

• Handler: tạo ra các phương thức getter, setter cho các đối tượng quan trọng,
giúp cho việc quản lý và phát triển chương trình một cách dễ dàng hơn.
• GameCamera: có chức năng giữ cho nhân vật ln ở chính giữa màn hình
khi hiển thị.
• AudioPlayer: có chức năng quản lý và thêm các hiệu ứng âm thanh cho
game.
• Package Input
- KeyManager: có chức năng quản lý các ký tự cần dùng từ bàn phím
nhập vào.
- mouseManager: có chức năng quản lý các hoạt động của chuột như
click, vị trí.
• MenuState: có chức năng hiển thị State Menu để người chơi lựa chọn. Được
khởi tạo và run ngay tại lớp Game. Đảm bảo là State đầu tiên hiện lên khi
người chơi run chương trình.
• GameState: sau khi hồn thành các bước khởi tạo các giá trị cụ thể cho đối
tượng và đọc hướng dẫn ở Menu, khi bấm Start, chương trình sẽ chạy lớp
tiếp theo là GameState.
Các lớp trên đều là thành phần có vai trị tạo nên lớp Game cơ sở.

Nhóm IX

10


Giới thiệu về các class trong biểu đồ
• GameState: có chức năng khởi tạo World cho Game và có thể gọi đến
GameState1 nếu đã đáp ứng đủ các yêu cầu của GameState (sang màn mới).
• World: có chức năng khởi tạo và chạy các đối tượng quan trọng trong Game
như: Player, Monster, ObjectRPG (các vật thể được thêm vào như cây cối,
xe cộ, ...), Sword, Item (vật phẩm rớt ra khi giết Monster) và các đối tượng

quản lý như: EntityManager, ItemManager; đọc và hiển thị map từ file txt
trong đường dẫn.
• EntityManager: có chức năng quản lý các đối tượng kế thừa từ lớp Entity
• ItemManager: có chức năng quản lý các đối tượng Item.

Nhóm IX

11


Nhóm IX

12


Giới thiệu về các class trong biểu đồ
• Entity: lớp trừu tượng của tất cả vật thể trong chương trình, thể hiện các thao
tác cơ bản của một vật thể.
• Creature: lớp trừu tượng, thể hiện các thao tác cơ bản của các đối tượng
thuộc package Character.
- Player: (kế thừa từ Creature) có chức năng khởi tạo các thuộc tính cho
Player, Player có thể chọn các Character khác nhau ở lớp menu, các
phương thức có chức năng làm cho Player có thể di chuyển tương ứng
với dữ liệu nhận được từ bàn phím, thể hiện các thuật tốn va chạm
thích hợp.
Các Player được chọn lựa:

- Monster: (kế thừa từ Creature) có chức năng khởi tạo các thuộc tính
cho Monster, các phương thức có thể làm cho Monster có thể di
chuyển với độ dời random, nếu nhân vật đi vào khu vực của Monster

thì khởi động thuật tốn tìm kiếm, thể hiện các thuật tốn va chạm
thích hợp.
Xuất hiện ở tất cả các map.
Hp = 10.
Monster rơi ra vật phẩm tăng hp.

Monster có thể rơi ra 1 trong 3 vật
phẩm.
Xuất hiện ở map1.
Hp = 10.

Nhóm IX

13


Monster có thể rơi ra một trong 2
vật phẩm.
Xuất hiện ở map2 và map3.
Hp = 10.

Monster xuất hiện trong map3.
Giữ cờ winFlag, nếu giết được quái
vật này sẽ thắng.
Hp = 30.

• Weapon: lớp trừu tượng, thể hiện các thao tác cơ bản của các đối tượng
thuộc package Weapon
- Sword1: (kế thừa từ Sword) có chức năng tạo ra weapon bình thường,
làm cho kiếm di chuyển với độ dời tương ứng với dữ liệu nhận được

từ bàn phím, trừ máu của Monster khi va chạm với Sword1, tăng mp
cho Player.
Weapon bình thường.
Mức sát thương: hp (-1).

- Sword2: (kế thừa từ Sword) có chức năng tạo ra weapon đặc biệt, làm
cho kiếm di chuyển với độ dời tương ứng với dữ liệu nhận được từ
bàn phím, trừ máu của Monster khi va chạm với Sword2 (sát thương
cao hơn Sword1), giảm mp của Player.

Nhóm IX

14


Weapon đặc biệt.
Mức sát thương: hp (-2).

• StaticEntity: lớp trừu tượng, thể hiện các thao tác cơ bản của các đối tượng
thuộc pakage StaticEntity
- ObjectRPG: (kế thừa từ StaticEntity) có chức năng khởi tạo các đối
tượng không di chuyển như cây cối, xe cộ, nhà cửa, ...
- Gate: (kế thừa từ StaticEntity) có chức năng khởi tạo đối tượng Gate –
cổng dịch chuyển đặt ở vị trí có thể chuyển map nếu đạt được đủ điều
kiện được quy định ở mỗi GameState khác nhau.
• EntityManager: lớp quản lý các đối tượng kế thừa từ Entity, có các phương
thức hiển thị và kiểm tra va chạm giữa các vật thể.

2.2.2. Biểu đồ các lớp và package liên quan


Nhóm IX

15


Nhóm IX

16


• Package Graphics: xử lý các hình ảnh ban đầu liên quan đến đồ họa
- GameCamera: có chức năng giữ cho nhân vật ln ở chính giữa màn
hình khi hiển thị.
- Animation: hiển thị liên tục các hình ảnh với tốc độ speed tạo chuyển
động chân thực của các vật thể.
- LoadImage: load ảnh từ đường dẫn vào game.
- SpriteSheet: trả lại các ảnh load từ LoadImage, cung cấp phương thức
crop để cắt ảnh
- Asset: cung cấp tất cả các ảnh dùng cho giao diện đồ họa của Game.
Sử dụng các phương thức và đối tượng của 2 lớp SpriteSheet và
LoadImage để cắt và chỉnh sửa ảnh.
• Package State: cung cấp các State cho chương trình chạy
- MenuState, ChooseState, LevelState, LooseState, HelpState,
WinState: (kế thừa từ State) cung cấp giao diện người dùng với
background và các nút để giao tiếp với người chơi. Các nút có vai trị
điều hướng đối với các State.
- GameState, GameState1, GameState2: (kế thừa từ State) State cung
cấp giao diện trị chơi chính của chương trình tương ứng với 3 map
khác nhau. Các cổng Gate có vai trò điều hướng giữa các GameState,
phương thức loose và win điều hướng giữa GameState và các State

khác, cụ thể là WinState và LooseState.

Nhóm IX

17


Nhóm IX

18


• Package Tile
- Tile: map được xây dựng theo nguyên lý lát gạch, mỗi Tile là một
viên gạch. Class Tile đóng vai trị khởi tạo nhiều viên gạch với các ID
khác nhau. Cung cấp phương thức mặc định isSolid trả về false, nếu
isSolid trả về true thì viên gạch này Creature không đi qua được.
- bound, Brick1, Brick2, Grass1, Grass2, ... : (kế thừa từ Tile) có chức
năng set hình ảnh cho Tile (viên gạch) của mình, override lại phương
thức isSolid để quy định khả năng đi qua của mỗi viên gạch riêng biệt.

• Package Item
- Item: có khả năng khởi tạo Item mới ứng với mỗi Monster khác nhau.
Mỗi Item có các chức năng khác nhau như cộng máu hoặc là vật phẩm
đặc biệt
Vật phẩm thường, hiện ra trong mọi
map nếu giết được Buffalo Monster.
Cộng hp cho Player: hp (+80)

Các vật phẩm đặc biệt.

Sau khi nhặt sẽ được lưu vào
Inventory, có thể mở ra xem tùy ý.

Nhóm IX

19


- ItemManager: Quản lý các Item với các phương thức thêm, xóa Item.

Nhóm IX

20


• Package UI
- UIObject: lớp trừu tượng, thể hiện các chức năng cơ bản cho những
class kế thừa từ UIObject như tạo đối tượng mới, phương thức
onClick.
- UIImageButton: (kế thừa từ UIObject) có khả năng khởi tạo các
Button với hình ảnh từ đường dẫn, cung cấp phương thức nhận biết
khi Click chuột, điều hướng đến các State khác nhau.
- UIBackGround: (kế thừa từ UIObject)có khả năng khởi tạo
BackGround cho các State.
- ClickListener: cung cấp phương thức Click cho các class sử dụng.
- UIManager: quản lý các đối tượng thuộc package UI với các phương
thức như lập một List UIObject và thêm các UIObject.
• Utils
- Utils: cung cấp phương thức load file từ đường dẫn cho trước với mục
đích tạo thành mảng Tile và hiển thị lên màn hình game (được thực

hiện trong class World); phương thức chuyển từ String sang một số
kiểu int.
• Audio
- AudioClip: lớp trừu tượng, thể hiện các chức năng cơ bản cho những
class kế thừa như tạo đối tượng mới và getVolume.
- SoundClip: (kế thừa từ AudioClip): tạo hiệu ứng âm thanh cho Game.
- MusicClip: (kế thừa từ AudioClip): tạo hiệu ứng âm thanh cho Game.
- AudioPlayer: quản lý các đối tượng kế thừa từ AudioPlayer.

2.3. Thiết kế chi tiết Pakage và Class
2.3.1. Các lớp quan trọng

• Lớp Game

Nhóm IX

21


Lớp game tạo ra “xương sống” cho chương trình, tạo
ra các đối tượng quản lý các thành phần khác của
game.
Các biến title, width, height quy định những thông số
cho display(chiều dài, độ rộng, tên của Frame).
Running: biến đánh dấu, nếu running = false thì thốt
khỏi chương trình.
display: tạo ra frame trò chơi.
menuState: tạo một menu State ngay từ đầu để người
chơi lựa chọn.
keyManager: quản lý ký tự nhập từ keyboard.

mouseManager: quản lý click và vị trí chuột.
gameCamera: giữ cho màn nhân vật ở trung tâm
frame.
audioPlayer: quản lý các hiệu ứng âm thanh cho trò
chơi.
handler: quản lý các thành phần khác như key, mouse,
audio, entity, ..., tạo cấu trúc dễ sử dụng cho lập trình.
init(): khởi tạo các đối tượng đã được khai báo ở phần
đầu.
tick(): cập nhật thông số cho tất cả object mà nó quản
lý.
render(): hiển thị ra màn hình các object đã được tạo
theo trạng thái hiện tại của nó.
run(): game loop để quản lý sự vận hành của game.
start(): running = true, cho phép chạy chương trình.
stop(): running = false, u cầu dừng chương trình.

• Lớp State

State là lớp trừu tượng.
isMap: biến xác định loại GameState hiện đang chạy,
dùng cho việc tạo quái ở lớp World.
tick(): phương thức trừu tượng.
render(): phương thức trừu tượng.
setState(State): chuyển State đang chạy thành State
muốn set.
getState(): trả về State hiện đang chạy.

Nhóm IX


22


• Lớp MenuState
MenuState kế thừa từ State, tạo ra giao diện menu.
uiManager: đối tượng thuộc lớp UIManager để quản
lý các đối tượng liên quan đến giao diện người dùng
như BackGround, Button. Đối với lớp này là quản lý
background của MenuState và các nút của nó.
tick(): override lại phương thức của State, cập nhật
thông số mới cho MenuState:
- Nếu chọn Start -> new GameState.
- Nếu chọn Level -> new LevelState.
- Nếu chọn Character -> new ChooseState.
- Nếu chọn Help -> new HelpState.
render(Graphics): hiển thị ra màn hình trạng thái hiện
tại của State.

• Lớp GameState
GameState kế thừa từ State
World: đối tượng thuộc lớp World, tạo ra và load tất cả
các thành phần trong game chính thức như: player,
monster, static entity, map, ...
Color: biến quy định loại nhân vật được chọn ở
ChooseState.
mustHaveItem: biến static quy định số vật phẩm nhân
vật phải sở hữu để có thể chuyển sang map mới.
uiManager: quản lý nút hiển thị Inventory.
tick(): override lại phương thức của State, nếu thu thập
đủ vật phẩm có thể qua map2 bằng cách setState(new

GameState1), nếu nhân vật chết thì chuyển sang
LooseState.
render(Graphics): hiển thị ra màn hình trạng thái hiện tại
của GameState.

Nhóm IX

23


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

Tải bản đầy đủ ngay
×