Tải bản đầy đủ (.docx) (35 trang)

Báo cáo bài tập lớn môn Java PTIT

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 (607.46 KB, 35 trang )

Phân cơng các thành viên trong nhóm

Họ và tên

Cơng việc thực hiện
-Phân tích thiết kế mã nguồn

Hồn thành
100%

-Phát triển mã nguồn
-Làm báo cáo
-Thuyết trình
-Phân tích thiết kế mã nguồn

100%

-Phát triển mã nguồn
-Thiết kế bản đồ
- Vẽ sơ đồ lớp
-Phân tích thiết kế mã nguồn

100%

-Phát triển mã nguồn
-Thiết kế bản đồ
-Làm báo cáo
-Phân tích thiết kế mã nguồn
-Phát triển mã nguồn
-Thiết kế bản đồ
-Làm báo cáo



100%


I.

KHẢO SÁT, ĐẶC TẢ U CẦU BÀI TỐN
1. Mơ tả yêu cầu bài toán

Bài toán yêu cầu xây dựng 1 game mà người chơi điểu khiển nhân vật trong một bản
đồ 2D được lưu bởi mảng 2 chiều, trong đó mỗi ô tương ứng với một phần bản đồ với
dạng khác nhau như: đá, cỏ, ..và các nhân vật như: quái vật, người chơi có thể di
chuyển trên bản đồ.
Các nhân vật người chơi và kẻ thù có các thuộc tính , chỉ số về thể lực như: Attack,
Speed, máu,…Người chơi có thể tấn cơng kẻ thù và dùng skill đặc biệt.
Kẻ thù sẽ có thể phát hiện người chơi trong 1 phạm vi tầm nhìn nhất định, có thể đi
theo tấn công người chơi.
Để chiến thắng, người chơi cần tiêu diệt hết kẻ thù theo từng màn. Game được chia
thành 4 màn, theo độ tăng của màn thì địa hình bản đồ sẽ càng khó, nhiều kẻ thù hơn
nên địi hỏi người chơi phải tập trung cao và có kĩ năng chơi tốt để có thể giành chiến
thắng. Trong mỗi màn người chơi có thể tăng chỉ số nhân vật bằng cách phá các hộp,
thùng trên đường và nhặt các bình thuốc.

2. Nội dung đã cải tiến


Bản đồ

Bản đồ đơn giản, tẻ nhạt, địa hình


Bản đồ địa hình khó dần qua từng

bằng phẳng, ít kẻ thù.

màn, nhiều qi vật và bẫy hơn, địi
hỏi người chơi có kỹ năng chơi tốt
hơn

Di chuyển

Người chơi có thể di chuyển sang

Người chơi có thể di chuyển sang

trái, phải, nhảy chéo trái, chéo

trái, phải, nhảy chéo trái, chéo phải.

phải.

Người chơi có thể tăng tốc khi nhấn
nút E

Số màn

Độ trễ

3 màn với địa hình gần giống

4 màn với mỗi cấp sẽ có địa hình


nhau

khó hơn và nhiều trở ngại hơn

Hơi lag

khắc phục được độ trễ, khung hình
ổn định

Phân tích hệ thống

II.
1.

Dữ liệu hình ảnh
Các hình ảnh về game được xây dựng dựa trên các hình ảnh có sẵn trên
youtube.

-

Bản đồ được được tạo thành bằng các lấy các ô 32x32 từ img lớn(Hình 1) . Sau
đó vẽ bản đồ theo ý muốn của mình bằng phần mềm GIMP.


Hình 1. outside

-

Về player và kẻ thù, menu được xây dựng dựa trên các hình ảnh có sẵn trên

youtube. Nhóm em sử dụng các tấm ảnh dạng spritesheet để tạo ra các
animation chuyển động.

Hình 2. Player_Sprites


Hình 3. Crabby_Sprites

Hình 4. Objects_Sprites


Hình 5. Potion_sprites

Hình 6. Menu

Hình 7. Button_menu

2.

Biểu đồ gói và biểu đồ lớp

2.1. Giới thiệu hệ thống các package


entities : chứa class để tạo thành các thực thể động như: người chơi, kẻ thù,..




Gamestates: Mô tả, định dạng trạng thái của game như đang chơi hay đang sử

dụng mục menu…



Inputs: package này xử lí đầu vào từ bàn phím và thao tác với chuột.



levels: package chứa các class để tạo thành bản đồ của game



main: là package chứa class Main và class GamePanel quản lí tồn bộ các
trạng thái, hành động, hình ảnh, mọi thứ liên quan về game.



objects: chứa các class để tạo thành đồ vật trong game như hộp, thùng, bình
thuốc, …



ui: chứa các class tạo các giao diện menu, chọn chế độ chơi, các button,…



utilz: Chứa các class và interface hỗ trợ các class khác thực hiện công việc 1
cách dễ dàng hơn, như helpmethods, giúp vẽ ảnh qua tên file như LoadSave

2.2. Biểu đồ lớp



3.

Chi tiết các lớp
3.1 Class Crabby


Đây là lớp con kế thừa từ lớp Enemy, dùng để tạo hitbox và attackbox của quái vật,
giúp xử lý va chạm và vùng tấn công của quái vật.
+ Crabby(float x, float y) : Vẽ ra quái vật có chiều cao, độ rộng theo đơn vị pixel ,
khung hitbox và attackbox của quái vật.


+ initAttackBox() : Dùng để tạo vùng tấn công của quái vật, nếu người chơi trong
vùng này sẽ bị chịu sát thương.


+ updateAttackBox(): Cập nhật lại vùng tấn công của quái vật.
+ updateBehavior(int[][] lvlData, Player player) : Dùng để cập lại hành vi của quái vật
tuỳ thuộc theo từng trạng thái của quái vật.


+ flipX(), flipW(): Dùng để xử lý logic lật ảnh quái vật lúc quái gặp tường và quay
đầu trong hành vi Patrol(tuần tra).
3.2 Class Enemy:

Đây là lớp cha quan trọng để cho các lớp con quái vật có thể kể kế thừa lại.
Trong class này cho biết trạng thái của quái vật, hướng di chuyển của nhân vật, quái
vật có còn tồn tại,.. Một số phương thức quan trọng như:



+

move(int[][] lvlData): Giúp hitbox của quái vật có thể di chuyển tương ứng với
qi, nếu có thể di chuyển( khơng vướng vật cản và khơng phải là vực) thì qi
vật sẽ di chuyển, nếu vướng vật cản thì quái vật sẽ đổi hướng ngược lại


+

changeWalkDir():Hàm giúp đảo ngược chiều đi của quái vật


+

canSeePlayer(int[][] lvlData, Player player):Kiểm tra xem player có nằm trong
tầm nhìn của qi vật hay khơng


+

isPlayerInRange(Player player):Kiểm tra xem người chơi có nằm trong vùng
quái vật kiểm soát


+

isPlayerCloseForAttack(Player player):Kiểm tra xem người chơi có nằm trong
vùng tấn công của quái vật không



+

hurt(int amount): Trừ máu của quái vật khi bị người chơi tấn công, chuyển
trạng thái của quái vật khi quái vật chết hoặc bị đánh


+


Logic cho hành vi của quái vật để nhận diện khi người chơi khi trong phạm vi
có thể tấn cơng.



bắt đầu game thì sẽ cập nhật vị trí của qi vật kiểm tra xem qi vật có đang
trên khơng khí để cho quái vật rơi xuống sàn. Khi ở dưới sàn thì quái vật sẽ
chuyển sang trạng thái IDLE rồi chuyển luôn sang trạng thái RUNNING. trong
lúc quái vật đang RUNNING tuần tra nếu phát hiện người chơi trong vùng
kiểm sốt (isPlayerInSight) thì nó sẽ di chuyển đến đến gần nhân vật(move
towards player), Đến một khoảng cách nhất định quái vật sẽ kiểm tra xem nhân
vật có đủ gần để chuyển sang trạng thái tấn cơng (isPlayerInRang) nếu khơng
thì tiếp tục di chuyển đến lại gần nhân vật. Khi trạng thái ATTACKING được
kích hoạt thì qi vật sẽ thực hiện animation tấn công


3.3 Class Entity:

Đây là lớp cha quan trọng để cho các lớp con thực thể động như: người chơi, kẻ thù

kế thừa. Trong lớp này, ngoài những phương thức cơ bản như getter, setter thì nhóm
em xây dựng các thuộc tính liên quan đến tọa độ của các object, các biến lưu hoạt
ảnh, biến đếm, …Một số phương thức quan trọng như:
+

initHitbox(int width, int height): vẽ hitbox thực thể.

+

getState(): hàm get trạng thái.

+

drawAttackBox( ): hàm vẽ box tấn công.


3.4 Class player:
Là lớp con biểu tượng cho người chơi được kế thừa từ lớp cha Entity
+

update( ): cập nhật trạng thái của người chơi như: thanh máu, vị trí và cập nhật
hoạt ảnh

+

setAnimation( ): từ trạng thái hiện tại của người chơi set lại hoạt ảnh của nhân
vật.

+


loadAnimations( ): Xử lý việc tạo hiệu ứng chuyển động cho nhân vật khi
đứng im, di chuyển, tấn công

+

checkAttack(): Kiểm tra xem nhân vật đã gây sát thương chưa

+

updateAttackBox(): Thay đổi vùng tấn công của nhân vật khi nhân vật di
chuyển, nhảy

+

updateHealthBar(): Cập nhật thanh máu của người chơi

+

drawUI(Graphics g): Vẽ thanh máu và thanh năng lượng cho nhân vật

+

updatePos(): Thay đổi vị trí của nhân vật khi di chuyển

+

resetAll( ): đưa nhân vật về trạng thái IDLE, thanh máu max

3.5 Class Menu
+


loadBackground(): cài đặt chiều cao, chiều rộng cho background và
chiều rộng, chiều cao cho nút option

+

loadButton(): khởi tạo các nút lựa chọn cho menu

+

update(): cập nhật lại menu và option

+

draw(Graphic g): vẽ bảng menu và nút option của game

+

resetButtons: đưa các nút về trạng thái ban đầu

+

keyPressed(KeyEvent e): nhấn giữ phím để bắt đầu chơi game

+

keyReleased(KeyEvent e): thả phím


3.6 Class Playing:

loadNextLevel(): khởi tạo một cấp chơi mới tiếp theo khó hơn cấp cũ
loadStartLevel(): khởi tạo cấp độ của bắt đầu của các đối tượng
calcLvOffset(): tính tốn cấp độ chơi
initClasses(): mở rộng quy mô của người chơi
update(): cập nhật lại trạng thái
checkCloseToBorder(): kiểm tra độ gần với đường biên
draw(Graphics g): vẽ toàn bộ các phần như background, layout, nhân vật, map..
drawClouds(Graphic g): Vẽ ra background mây nền đằng sau khung trò chơi
resetAll(): Thực hiện việc reset các giá trị boolean, quái vật, người chơi và vật
phẩm khi qua màn mới
setGameOver(), setLevelCompleted(boolean LevelCompleted),
setMaxLvlOffset(int lvlOffset):Các setter để thay đổi các giá trị boolean hỗ trợ
logic của việc trị chơi có hồn thành hay thất bại


×