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

Báo cáo bài tập lớn Xây dựng game 2d

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 (1.88 MB, 31 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ÁO CÁO BÀI TẬP LỚN
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Đề Tài: Xây Dựng Game 2D
Giảng viên Hướng Dẫn: TS. Vũ Thị Hương Giang
ThS. Trịnh Thành Trung
Nhóm sinh viên thực hiện:
Nguyễn Văn Thịnh MSSV: 20122512
Nguyễn Duy Nhất MSSV: 20120690
Bùi Mạnh Thắng MSSV: 20120884
La Quốc Anh MSSV: 20121195
Đỗ Đình Nam MSSV: 20122099

Hà Nội 05/2015
1
NHÓM 35 LỚP KSCLC K57
MỤC LỤC
Hà Nội tháng 05 năm 2015
Nhóm 35 lớp KSCLC K57
Danh sách thành viên:
Nguyễn Văn Thịnh
Nguyễn Duy Nhất
Đỗ Đình Nam
La Quốc Anh
Bùi Mạnh Thắng
PHÂN CÔNG THÀNH VIÊN TRONG NHÓM
Thời
gian
thực
hiện


Nguyễn Văn
Thịnh
Nguyễn
Duy Nhất
La Quốc
Anh
Đỗ Đình Nam Bùi Mạnh
Thắng
Tuần 1 -Tích lũy đầy
đủ kiến thức
java cơ bản
-Thiết kế hệ
thống các lớp
quái vật và
quản lý quái
vật
-Tích lũy
đầy đủ
kiến thức
java cơ
bản
-Thiết kế
cấu trúc
chương
trình
-Tích lũy
đầy đủ
kiến thức
java cơ
bản

-Tìm
hiểu và
xây dựng
thuật
-Tích lũy đầy
đủ kiến thức
java cơ bản
-Thiết kế cấu
trúc
background
cho mỗi map
và tìm hiểu
cách xây dựng
-Tích lũy
đầy đủ
kiến thức
java cơ
bản
-Tìm hiểu
phân tích
thiết kế hệ
thống âm
2
NHÓM 35 LỚP KSCLC K57
chính bao
gồm vòng
lặp và lớp
quản lý
chính tất
cả các

map
toán xử
lý các
loại va
chạm
giao diện khi
khởi chạy
thanh
trong
game
Tuần 2 Tìm hiểu tích
lúy đầy đủ kiến
thức về java
graphics,swing
,
Xây dựng kết
cuầ tòa
chương trình.
Tìm hiểu
tích lũy
đầy đủ về
java
graphics ,
swin timer
và đa
luồng
Tìm hiểu
tích lỹ
đày đủ
kiến thức

về
graphics
và áp
dụng các
thuật
toán va
chạm,
chuyển
động của
nhân vật
Tìm hiểu tích
lũy đầy đủ kiến
thức về
grpahicsjava
swing jpanel,
jframe,button

Tìm hiểu
và tích lũy
đầy đủ
kiến thức
Về java
clip,
sound,
Graphics…
Tuần 3 Thực hiện viết
mã nguồn các
lớp quản lý va
chạm và
chuyển động

của quái,các
lớp quản lý các
quái và các lớp
quái.
Viết mã
nguồn các
lớp người
chơi và
lớp quản
lý game
chính
chứa
vòng lặp
vô hạn
của
game, xây
dựng
phương
thức
update
Xây
dựng
thêm các
thuộc
tính
phương
thức
trong các
lớp
người

chơi và
quái vật
để kết
nối xử lý
va chạm
giữa
Viết mã nguồn
giao diện bằng
netbean. Viết
lớp
background để
quản lý
background
mỗi map
Viết mã
nguồn các
âm thanh
cho từng
sự kiên.
Tái cấu
trúc lại mã
nguồn toàn
chương
trình
3
NHÓM 35 LỚP KSCLC K57
chúng
trong
game
Tuần 4 Xây dựng cụ

thể các lớp
quái, load
sprite sheet
mỗi quái, xây
dựng các
phương thức
skill khác nhau
cho mỗi quái.
Xây dựng
phương thức
đuổi theo
người chơi.
Xây dựng
hoàn
chính lớp
board
quản lý
toàn bộ
game, xây
dựng lớp
cha cơ
bản
character
để các
lớp con
khác kế
thừa
Lắp gép
các sự
kiện va

chạm
giữa
người và
quái
thông
qua các
phương
thức
update
Lắp gép giao
diện với các
thành phần
còn lại của
game,
Lắp ghép
chuển động
của back
ground theo
nhân vật tương
ứng mỗi map
Xây dựng
Các lớp bổ
trợ trong
game như
helicopter
và xử lý va
chạm nhân
vật với các
thành phần
phụ trong

game như
hộp máu,
hộp dame
Tuần 5 Xây dựng các
lớp đạn và
quản lý đạn
Tổng quát
hóa
chuyển
động của
các thành
phần
thông qua
lớp
animation
Xây
dựng bổ
sung các
phương
thức
chuyển
động của
nhan vật
và các
skill
Hoàn thiệ giao
diện và các lớp
load sprite
sheet. Tham
gia thảo luận

và xây dựng
kết nối các
thành phần
chương trình
Hoàn thiện
nốt các xử
lý về âm
thanh, các
thành phần
game và
hoàn thiện
một phần
lớp nhân
vật
Tuần 6 Thảo luận và
hoàn thiện lớp
người chơi và
các lớp đạn
Thảo luận
và xây
dựng kết
cấu lại
toàn bộ
hệ thống
chương
trình.
Sửa mã
nguồn
phù hợp
với kết

cấu mới
Sửa mã nguồn
phù hợp với
kết cấu mới
Sửa mã
nguồn phù
hợp với
kết cấu
mới
Tuần 7 Tinh chỉnh,
đánh giá và
Tính
chính,
Tính
chính,
Tính chính,
đánh giá và
Tính chính,
đánh giá
4
NHÓM 35 LỚP KSCLC K57
test, và làm
báo cáo, viết
tài liệu.
đánh giá
và test, và
làm báo
cáo, viết
tài liệu.
đánh giá

và test,
và làm
báo cáo,
viết tài
liệu.
test, và làm
báo cáo, viết
tài liệu.
và test, và
làm báo
cáo, viết
tài liệu.
Đánh
giá
chung
tích cực tham
gia thảo luận,
đóng góp ý
kiến, xây dựng
hệ thống. Hoàn
thành công
việc đúng thời
gian quy định.
Ý thức tốt
tích cực
tham gia
thảo luận,
đóng góp
ý kiến,
xây dựng

hệ thống.
Hoàn
thành
công việc
đúng thời
gian quy
định.
Ý thức tốt
tích cực
tham gia
thảo
luận,
đóng góp
ý kiến,
xây dựng
hệ thống.
Hoàn
thành
công
việc
đúng
thời gian
quy định.
Ý thức
tốt
tích cực tham
gia thảo luận,
đóng góp ý
kiến, xây dựng
hệ thống.

Hoàn thành
công việc đúng
thời gian quy
định.
Ý thức tốt
tích cực
tham gia
thảo luận,
đóng góp ý
kiến, xây
dựng hệ
thống.
Hoàn
thành công
việc đúng
thời gian
quy định.
Ý thức tốt
CHƯƠNG 1: MÔ TẢ YÊU CẦU
1.1 Mô tả yêu cầu bài toán:
- Xây dựng game đối kháng giữa người chơi và quái.
- Người chơi có thể: lựa chọn start,help,quit, tấn công quái vật theo 2 skill là
Q và W, di chuyển, nhảy…
- Người chơi có thể lựa chọn các map khi ở giao diện map chinh!.
1.2 Biểu đồ USE CASE
Tác nhân: người chơi
USE case:
- Start game
- Select map
- Quit game

5
NHÓM 35 LỚP KSCLC K57
- Help
- Select skill
- Move
- Attack
- Exit
Use Case Diagram
Hình 1: biểu đồ use case
6
NHÓM 35 LỚP KSCLC K57
SELECT MAP
START SELECT SKILL
HELP
QUIT
EXIT
MOVE
ATTACK
1.3 Đặc tả use case
1.3.1 Start game:
a) Mô tả:
Người dung sử dụng use này để bắt đầu chơi game
b) Dòng sự kiện
Người dung bắt đầu chơi game click START
Hệ thống hiển thị map để người chơi lựa chọn vào các màn
1.3.2 Quit game
a) Mô tả:
Người dung sử dụng use case này để thoát khỏi game
b) Dòng sự kiện:
Người dung thoát khỏi game bằng cách nhất QUIT

Hệ thống sẽ dừng hoạt động
1.3.3 Help
a) Mô tả
Người dung sử dụng use case này để xem phần trợ giúp và hướng dẫn
chơi game
b) Dòng sự kiện:
Người dung click HELP
Hệ thống sẽ mở ra một dialog chứa đoạn text hướng dẫn chơi game
và giới thiệu về game
Người dung click X để thoát dialog và trở lại
1.3.4 Select Map
a) Mô tả:
Người dùng sử dụng use case này để lựa chọn màn chơi game
b) Dòng sự kiện:
Người chơi click vào các map là các hình elip tương ứng với mỗi
hòn đảo để lựa chọn map
Sau khi người chơi click vào map hệ thống sẽ mở ra giao diện chơi
game để người chơi bắt đầu chơi.
Người chơi click vào nút back
Hệ thống sẽ quay trở lại menu start
1.3.5 SELECT SKILL
7
NHÓM 35 LỚP KSCLC K57
Hình 2: biểu đồ use case phân giã 1
1.3.6 MOVE
8
NHÓM 35 LỚP KSCLC K57
NHẤN các phím skill
Nhấn W
Nhấn Q

Nhân vật trong game sẽ tung ra skill
Chém bổ dọc có sát thương cao
Nhân vật trong game sẽ tung ra skill
Chém ngang có sát thương bình
thườn
Hình 3: biểu đồ use case phân giã 2
1.3.7 ATTACK
a) Mô tả:
Người chơi sử dụng use case này để tấn công quái vật
b) Dòng sự kiện
Khi người chơi sử dụng các phím MOVE để tiến lại gần quái vật và nhấn các phím
skill Q,W tấn côn quái vật
Khi người chơi tấn công trúng vào quái vật hệ thống sẽ trừ điểm HP của quái vật khi
HP quái vật =0 người chơi sẽ dành chiến thắng
1.3.8 EXIT
a) Mô tả:
Người chơi dùng use case này để thoát khỏi màn hình chơi game
b) Dòng sư kiện
Khi người chơi nhấn phím F
Hệ thống sẽ xác nhận là người chơi thua và quay trở lại màn hình select map
9
NHÓM 35 LỚP KSCLC K57
Nhân vật nhảy lên
Nhân vật di chuyển
sang trái
Nhân vật di chuyển
sang phải
Người chơi nhấn các phím di
chuyển hình mũi tên
CHƯƠNG 2: THIẾT KẾ CHI TIẾT

2.1 Thiết Kế Lớp
2.1.1 Biểu Đồ Lớp
Các lớp bao gồm:
Class OnepieceFrame
Class board
Class LUFFY
Class Enermy
Class background
Class demon
Class animation
Class character
Hình 5: biểu đổ lớp 2
Hình 5: biểu đổ lớp 2
H
10
NHÓM 35 LỚP KSCLC K57
Hình 4 Biểu đồ lớp 1
11
NHÓM 35 LỚP KSCLC K57
Hình 5: biểu đổ lớp 2
2.1.2 Thiết Kế Chi Tiết Lớp
MỘT SỐ LỚP CHÍNH:
Lớp character là lớp cha có các thuộc tính:
HP,ManaHP,MAXMana,speed,x,y,dx,dy,visible,right,currentFrame,gtr;
Các getert,setert tương tứng và các Abstract method
TopRect(),BotRect(),BoundsRect(),EspaceRect();
12
NHÓM 35 LỚP KSCLC K57
Xây dựng lớp Board: extends JPanel,implement Runnable
Thuộc tính:

- sound(soundMap)
- ingame,win,lose(Boolean)
- luffy(LUFFY)
- min1(Enemy)
- bg(Background)
- bullet(bulletSkill)
- level,delay,x0,h,w(int)
- opFrame(OnepieceFrame)
Phương thức
- Board(int level) khới tạo mỗi Board theo từ level
- iniBoard(int level) để thực hiện phương thức Board() ở trên
- paint(Grapichs g): để vẽ lên panel, trong phương thức paint được dùng để vẽ nhân vật,
quái vật, background, mà một số thành phần khác của map
- run(): để thực hiện luồng được implement từ Runnable trong phương thức run() sử
dụng vòng lặp và Thread.sleep() và gọi đến các hàm update của luffy,min1,bullet,bg và
hàm repaint() đẻ vẽ lại jpanel mỗi khi lặp lại.
- Iner class TAdapter extends KeyAdapter là mội class trong dùng để nghe các sự kiện
- Ngoài ra còn có các phương thức getert và setert của các thuộc tính tương ứng
Xây dựng lớp LUFFY extends Character
Thuộc tính
- Sound(soundPlayer)
- Exp(int)
- MaxExp,dameQ,dameW(int)
- countJump,countBeaten(int)
- flag,beaten,rightBefore(Boolean)
- stand,jump,walk,skillQ,skillW(Boolean)
- IsShot(Boolean)
- Level(int)
- Luf(luffy_sprites)
- BoundsRect(Rectangle)

Phương thức
- LUFFY(),LUFFY(int level) hai hàm khởi tạo
- upDate(Enemy min, bulletSkill bullet,Background bg) phương thức dùng để cật nhật dữ
liệu cho lớp LUFFY mỗi khi lặp lại trong phương thức có xây dựng các thuật toán
chuyển động stand,jump,walk ,các thuật toán tấn công skill,skill1,skillulti và các thuật
toán sử lý va chạm với quái vật hay các thành phần khác trong map
- keyPressed(KeyEvent e) bắt sự kiện nhấn phím
- keyReleased(KeyEvent e) bắt sự kiện khi nhả phím
- TopRect() trả về hình chữ nhật chứa nửa thân trên của nhân vật
- BotRect() trả về hình chữ nhật chứa nửa thân dưới của nhân vật
- BoundsRect() trả về hình chữ nhật chứa đường bao ngoài toàn hình của nhân vật
- EspaceRect() trả về hình chữ nhật thể hiện vùng đánh quái
13
NHÓM 35 LỚP KSCLC K57
- Ngoài ra còn có các phương thức geter,seter tương tứng với các thuộc tính
Xây dựng lớp Enemy
Thuộc tính:
- Sound(soundEnemy)
- Delay,delaySkill(int)
- Stand,jump,jumpBefore,skill,skill1,beaten,rightBefore,skillulti,skillultiBullet(Boolean)
- Count,dame,countJump,coutSkillUlti(int)
- I(int)
Phương thức
- Enemy(int level) phương thức khởi tạo quái vật theo từng level
- update(LUFFY luffy) trong phương thức xây dựng các thuật toán chuyển động của quái
đuổi theo nhân vật, khi vào một khoảng nhất định quái sẽ tung ra các skill,skill1 để tấn
công nhân vật và khi được một quảng thời gian nhất định quái sẽ nhảy lùi lại tung ra
skillulti tấn công nhân vật
reong phương thức sử dụng các biến trạng thái boolean để xác định hành động của
quái diễn ra

- ngoài ra còn xây dựng các phương thức geter và seter tương ứng với các thuộc tính
2.2 Thiết Kế Giao Diện Tương Tác Ban Đầu
Giao diện được thiết kế trong lớp OnepieceFrame
Thuốc tính
JButton close;
JDialog help;
JButton jButton1;
JButton jButton2;
JButton jButton3;
JButton jButton4;
JEditorPane jEditorPane1;
JPanel jPanel1;
JPanel jPanel2;
JPanel jPanel3;
JScrollPane jScrollPane1;
JLabel map0;
JLabel map1;
14
NHÓM 35 LỚP KSCLC K57
JLabel map2;
JLabel map3;
JLabel map4;
JLabel map5;
JLabel map6;
JLabel map7;
JLabel map8;
JLabel map9;
soundBackground sound;
int key=0;
Phương thức:

15
NHÓM 35 LỚP KSCLC K57
initComponents()
phương thức dùng để khởi tạo frame có chứa 2 panel là Jpanel1 và Jpanel2
Jpanel1 có chứa các button start help quit trên mỗi button được đăng ký để nghe các sự
kiện click chuộn
Jpanel 2: có chứa button back và các label từ 0 đến 9
Button và label được gắn các sự kiện chuột để trở lại và vào map chơi game
Các phương thức sử lý sự kiện click chuột.
Started(int level)
Được thực hiện khi có sự kiện click chuột trên mỗi label ở jpanel 2
Main()
Là phương thức chính dùng để chạy khi JVM bắt đầu
Run()
Để thực hiện luồng
CHƯƠNG 3: CHƯƠNG TRÌNH MINH HỌA
Xây dựng chương trình
- Giới thiệu về công nghệ đã sử dụng để xây dựng chương trình minh họa
o Công nghệ sử dụng: JAVA
o Tính năng, ưu điểm của các công nghệ này: Kiến trúc thiết kế tốt, cộng đồng
mạnh, do là công nghệ mở, chạy tốt trên nhiều platform khác nhau (nhất là trên
linux).
o Lý do lựa chọn/sử dụng công nghệ: các ứng dụng có khả năng chạy thống nhất
trên nhiều nền tảng mà chỉ cần biên dịch một lần.
- Môi trường lập trình: NetBean IDE và Eclipse IDE.
Kết quả chương trình
- Một số hình ảnh demo thực hiện các chứng năng chính của chương trình. Trên mỗi giao
diện đều có các phím bấm tương ứng với các chức năng của chương trình.
16
NHÓM 35 LỚP KSCLC K57

Hình 6: giao diện khi bắt đầu vào game
17
NHÓM 35 LỚP KSCLC K57
Hình 7: Dialog Help
18
NHÓM 35 LỚP KSCLC K57
Hình 8: giao diện lựa chọn map
19
NHÓM 35 LỚP KSCLC K57
Hình 9: Giao diện khi Chơi game 1
20
NHÓM 35 LỚP KSCLC K57
Hình 10: Giao diện khi chơi game 2
21
NHÓM 35 LỚP KSCLC K57
Hình 11: Giao diện khi chơi game 3
22
NHÓM 35 LỚP KSCLC K57
Hình 12: Giao diện khi chơi game 4
23
NHÓM 35 LỚP KSCLC K57
CHƯƠNG 4: KIỂM CHỨNG CHÉO
Đối tượng kiểm chứng (Verification)
Kiểm chứng cho nhóm nào gồm các thành viên nào, đề tài gì.
Kiểm chứng cách trình bày báo cáo
Theo các tiêu chí đánh giá
- Chú ý tránh các lỗi trình bày/lỗi chính tả. Không được phép vi phạm các lỗi
trình bày cơ bản, VD: các dấu câu phải đi liền với chữ phía trước và cách
chữ phía sau 1 dấu cách…
- Cách thức trình bày khoa học, sáng sủa, dễ theo dõi, có gắn kết giữa các

phần, đầy đủ các phần theo mẫu.
Kiểm chứng thiết kế và kỹ năng lập trình
Theo các tiêu chí đánh giá
- Thiết kế và mã nguồn chương trình cần đáp ứng các yêu cầu tối thiểu của
các nguyên lý công nghệ hướng đối tượng: Mức độ trừu tượng hoá, đóng gói,
mô-đun hoá và phân cấp.
- Phong cách lập trình thống nhất, tuân thủ các quy ước lập trình chung.
- Bắt và xử lý ngoại lệ tốt.
Kiểm thử tích hợp
Kiểm thử chức năng chương trình, coi chương trình như hộp đen, chơi thử
chương trình game để kiểm tra lỗi
Theo các tiêu chí đánh giá
- Giao diện dễ nhìn, dễ sử dụng và hợp lý
- Các chức năng của chương trình
Với mỗi chức năng use case của chương trình, cần đưa ra các trường hợp kiểm
thử (test case) cần được thực hiện. Mỗi trường hợp kiểm thử cần đặc tả chi tiết
bao gồm những thông tin sau:
- Tên use case (tên chức năng)
- Tên trường hợp kiểm thử
- Người lập trình (tên thành viên nhóm kia trực tiếp lập trình chức năng này)
- Người kiểm thử (tên thành viên nhóm này thực hiện kiểm thử tích hợp)
24
NHÓM 35 LỚP KSCLC K57
- Trạng thái: Còn lỗi, Chạy thông
Nếu còn lỗi, cần có thêm thông tin: Các bước cần thực hiện để tái tạo lỗi.
Ví dụ về bảng kiểm thử chức năng:
Mã lỗi Tên lỗi Use case
Trạng
thái
Người

tạo
Loại lỗi
Các bước tái tạo lỗi /
Dữ liệu kiểm thử
Kết quả thực tế
UC01-01
Các thông báo lỗi
không là màu đỏ
- Thêm/sửa môn thi
- Thêm/sửa bài thi
Còn lỗi LongNV
2- Giao diện
người dùng
• Nhập dữ liệu sai ít
nhất 1 trường
• Nhấn nút Thêm
mới/Cập nhật
• Thông báo lỗi hiện
lên là màu đen
• File ảnh đính kèm: 1-
StyleDo.jpg
UC01-02
Không xử lý
validate cho trường
Thời gian thi
Cập nhật bài thi Còn lỗi TrangNT
1- Chức
năng (logic)
• Gõ thời gian thi gồm
cả ký tự

• Nhập các trường
khác bình thường
• Nhấn nút Cập nhật
• Thông báo: "Có lỗi
nghiêm trọng xảy ra.
Input string was not
in a correct format"
• File ảnh đính kèm: 2-
ThoiGianThi.jpg
UC02-01
Chức năng Print
không hoạt động
Thi thật Còn lỗi NhungTT
1- Chức
năng (thiếu
chức năng)
• Tiến hành chọn bài
thi và thi
• Nhấn nút Kết thúc
• Nhấn nút Print
Không thực hiện gì
25
NHÓM 35 LỚP KSCLC K57

×