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

BÀI tập lớn môn lập TRÌNH HƯỚNG đối TƯỢNG đề tài xây dựng game battle ship

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.6 MB, 34 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

ĐỀ TÀI: Xây dựng game Battle Ship
Nhóm sinh viên thực hiện:
Tên sinh viên
Đinh Duy Anh
Đỗ Vũ Tùng Lâm
Nguyễn Đắc Hoàng Anh
Cao Thành Huy
Nguyễn Viết Toàn
Giáo viên hướng dẫn: ThS. Nguyễn Mạnh Tuấn

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng
Hà Nội, tháng 6 năm 2022

MỤC LỤC
MỤC LỤC
....................................................................................................................................
2

LỜI NĨI ĐẦU
....................................................................................................................................
3



PHÂN CƠNG THÀNH VIÊN TRONG NHĨM
....................................................................................................................................
4

CHƯƠNG 1.

KHẢO SÁT, ĐẶC TẢ U CẦU BÀI TỐN
5

1.1. Mơ tả yêu cầu bài toán
5

1.2. Biểu đồ use case
5

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

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

1.3. Đặc tả use case
7

CHƯƠNG 2.

PHÂN TÍCH THIẾT KẾ BÀI TOÁN
11


2.1. Thiết kế Cơ sở dữ liệu hoặc Cấu trúc tệp dữ liệu
11
2.2. Biểu đồ trình tự
11
2.3. Biểu đồ lớp
13
2.4. Thiết kế chi tiết lớp
18
CHƯƠNG 3.

THUẬT TOÁN SỬ DỤNG
24

3.1. Cơng nghệ sử dụng
24
3.2. Các thuật tốn đã sử dụng
24


CHƯƠNG 4.

XÂY DỰNG CHƯƠNG TRÌNH MINH HỌA
25

4.1. Kết quả chương trình minh họa
25
4.2. Giao diện chương trình
25
4.3. Kiểm thử các chức năng
28

4.3.1. Kiểm thử cho chức năng 1
28
4.3.2. Kiểm thử cho chức năng 2
29
4.3.3. Kiểm thử cho chức năng 3
29
4.3.4. Kiểm thử cho chức năng 4
29
4.3.5. Kết luận
29
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
....................................................................................................................................
30
TÀI LIỆU THAM KHẢO
....................................................................................................................................
31
2

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng

20212

PHỤ LỤC................................................................................................................... 32

LỜI NĨI ĐẦU

Trò chơi bắn tàu, hay còn gọi là BattleShip là một trị chơi thú vị, đồng thời có

cách chơi đơn giản, dễ hiểu nhưng để đạt được chiến thắng cũng không phải một
việc dễ dàng. Ngay khi tiếp xúc với đề tài này, chúng em đã nhận thấy đây là một đề
tài phù hợp để triển khai các kiến thức được học về lập trình hướng đối tượng, cũng
như tạo ra một game giải trí bổ ích dành cho các bạn sau những giờ học căng thẳng.
Game BattleShip là một tựa game không quá nặng về mặt đồ họa về đồ họa,
hiệu ứng mà chủ yếu tập trung vào nội dung, thuật tốn, cách tổ chức Class trong
Java. Nhóm làm game đã cố gắng áp dụng những kiến thức về lập trình hướng đối
tượng và các cấu trúc dữ liệu, thuật tốn để hồn thành bài tập lớn này.
Với những yêu cầu của bài toán, chúng em đã cố gắng nỗ lực suy nghĩ hình
thành những đoạn chương trình tốt nhất để phục vụ nhu cầu thực tế này. Sau nhiều
tuần cùng học tập, trao đổi và làm việc, chúng em đã hồn thành chương trình
cũng như bài báo cáo và hướng dẫn sử dụng chương trình này.
Nhóm chúng em xin chân thành cảm ơn thầy giáo Nguyễn Mạnh Tuấn, và các
thầy cô trong Trường Công nghệ thông tin và truyền thông, Đại học Bách Khoa Hà
Nội đã đưa ra đề tài thú vị, hấp dẫn và hữu ích này cũng như đã giúp chúng em hoàn
thành đề tài này.

3

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng

PHÂN CƠNG THÀNH VIÊN TRONG NHĨM
Họ và tên
Đinh Duy
Anh

Đỗ Vũ

Tùng Lâm

Nguyễn Đắc
Hồng Anh

Cao Thành
Huy
Nguyễn
Viết Toàn

4

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng

CHƯƠNG 1. KHẢO SÁT, ĐẶC TẢ U CẦU BÀI TỐN
1.1. Mơ tả u cầu bài tốn
Xây dựng trị chơi bắn tàu, cho phép người chơi chơi với máy, bao gồm các chức năng
chính:
+ Cho phép người chơi lựa chọn tàu chiến, sắp xếp đội hình (mỗi loại tàu chiến có
kích thước và điểm số khác nhau)
+ Đánh dấu tọa độ bắn trật , bắn trúng của mỗi lượt chơi
+ Lưu lại kết quả điểm số đạt được (điểm số và số lần dự đoán người chơi đã thực
hiện) và lịch sử trận chiến (các bước dự đoán của người chơi và kết quả bắn
trúng / bắn trượt)
+ Xây dựng thuật toán cho máy chơi ở hai mức độ dễ và khó
+ Cấu hình game: tắt bật âm thanh / âm nhạc / reset điểm số
+ Giới thiệu luật chơi


1.2. Biểu đồ use case
1.2.1. Biểu đồ use case tổng quan
- Tác nhân: Player
- Các usecase:
+ Start
+ Prepare
+ Fight
+ End Game

5

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng

1.2.2. Biểu đồ use case phân rã mức 2
Phân rã use case Start, ta được các use case:
+ Play
+ Set Sound
+ Set Mode
+ View Rule
+ View High Score
+ Exit

Phân rã use case Prepare, ta được các use case
+ Select Ship
+ Place Ship


6

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng
Phân tích use case Fight, ta được các use case:
+ Shoot
+ Information

1.3. Đặc tả use case
- Đặc tả use case Start
Mã UC (UC #)
Tác nhân
Điều kiện trước
Luồng thực thi
chính
No.
1
2
3
4
5
6
7
8
9
10
11
12

Điều kiện sau
7

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng
- Đặc tả use case Prepare
Mã UC (UC #)
Tác nhân
Điều kiện trước
Luồng thực thi
chính
No.
1
2
3
4
5
6
7
8
9
10
Luồng thực thi
mở rộng
1a
1b
1c
2a

2b
2c
Điều kiện sau
- Đặc tả use case Fight
Mã UC (UC #)
Tác nhân
Điều kiện trước
Luồng thực thi

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng
chính
No.
1
2
3
4
5
6
7
8
9
10
11
12
13
Luồng thực thi
mở rộng

4a
4b
5a

5b

6a
6b

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng
7a
7b

8a
10a
10b
13a
13b
Điều kiện sau

10

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng


CHƯƠNG 2. PHÂN TÍCH THIẾT KẾ BÀI TOÁN
2.1. Thiết kế Cơ sở dữ liệu hoặc Cấu trúc tệp dữ liệu
Khơng có

2.2. Biểu đồ trình tự
-Biểu đồ trình tự của use case Prepare

11

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng

-Biểu đồ trình tự của use case Fight

12

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng

2.3. Biểu đồ lớp
- Các lớp trong chương trình:

+ Lớp Map

+ Lớp Ship


+ Lớp PlayGame

13

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng

+ Lớp Creator

14

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng

+ Lớp MainMenu

15

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng

+ Lớp HighScore

+ Lớp EndScreen


+ Lớp BattleShip

- Biểu đồ lớp
16

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng

17

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng

2.4. Thiết kế chi tiết lớp
Phân tích: để giải quyết bài tốn này chúng ta xây dựng 8 lớp:
Lớp Ship: chứa hình ảnh của các con tàu với các kích thước khác nhau
Lớp Map: là một bản đồ có kích thước 10x10, mỗi đối tượng của lớp Map là một
bản đồ.
Lớp MainMenu: hiển thị các thành phần của Menu để người chơi lựa chọn, bao
gồm: bật/ tắt âm thanh, chọn chế độ chơi (khó hay dễ), xem điểm cao, bắt đầu vào trị
chơi, thốt trò chơi và hướng dẫn chơi
Lớp HighScore: hiển thị điểm cao mà người chơi đã đạt được, nếu muốn xóa các điểm
cao đã đạt được thì người chơi ấn nút reset, nếu ấn nút back thì quay về MainMenu
Lớp Creator: hiển thị khung chứa các tàu chiến và hiển thị bản đồ để người chơi có
thể đặt các con tàu lên bản đồ đó. Ngồi ra người chơi có thể sử dụng nút Auto để tự

động sắp xếp tàu với vị trí ngẫu nhiên.
Lớp PlayGame: hiển thị 2 bản đồ (bản đồ của người chơi và bản đồ của máy). Người
chơi sẽ lựa chọn tọa độ để bắn trên bản đồ của máy và ngược lại (máy sẽ bắn trên bản
đồ của người chơi được cài đặt từ Creator), đồng thời hiển thị các thơng số game như:
vị trí người chơi đã bắn, bắn trúng hay bắn trượt
Lớp EndScreen: hiển thị số điểm của người chơi, tạo âm thanh, hiển thị kết quả
thắng thua của người chơi, nút Highscore để vào HighScore, nút Play Again để quay
về MainMenu
Lớp BattleShip: khởi tạo đối tượng MainMenu để bắt đầu thực thi trò chơi.
Chi tiết từng lớp:
1. Lớp Ship
Chứa hình ảnh của các con tàu ( ship: Image) với chiều dài 1,2,3,4,5 (chiều dài
tính theo số ơ trên bản đồ, 1 ơ tương đương với chiều dài là 1)
- Lớp ship có 1 phương thức khởi tạo với tham số truyền vào là (length, w, h, isNgang)
lần lượt là chiều dài con tàu (ứng trên bản đồ), chiều dài và rộng của hình ảnh con tàu đó
(ứng với màn hình của người chơi) và tham số kiểm tra tàu ngang hay dọc
- Phương thức rotateShip() với 4 tham số truyền vào là (length, w, h, isNgang) để lấy
đường dẫn tương ứng với tàu ngang hay dọc và theo chiều dài của tàu
- Phương thức loadImage() với 3 tham số truyền vào (s,w,h): trả về hình ảnh được lấy
từ đường dẫn s và được ép kích thước sang (w,h).
2. Lớp Map
Lớp này kế thừa lớp JPanel, bao gồm các thành phần:
- Mảng mapPiece[][] với kiểu dữ liệu là JButton, đây là mảng có kích thước
10x10, ứng với 10x10 ô trên bản đồ
- Mảng boolean isShip[][]: đánh dấu xem ơ (i,j) trên bản đồ có tàu ở đó hay
khơng. Lớp Map có 1 phương thức khởi tạo:
+ constructor với 2 tham số truyền vào là w, h ứng với kích thước dài, rộng của bản đồ.
Trong constructor này có khởi tạo mảng mapPiece và isShip, mảng mapPiece được add
vào JPanel để hiển thị các nút bấm trên bản đồ (phục vụ cho người chơi khi chơi)
+ Phương thức init() khởi tạo mảng isShip ban đầu là false, để đánh dấu các ô trên

bản đồ đều chưa xuất hiện tàu nào
3. Lớp MainMenu
18

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng
Là lớp thực hiện nhiệm vụ hiển thị Menu với các lựa chọn cho người chơi, bao gồm:
bắt đầu chơi, bật/tắt âm thanh, chọn chế độ chơi (khó/dễ), xem điểm cao, thốt khỏi
trị chơi, hướng dẫn chơi. Lớp Menu có 1 JFrame để chứa màn hình lựa chọn cho
người chơi, JFrame bao gồm 1 JLabel menu1 chứa các button tương ứng với các chức
năng để người chơi sử dụng như trên đó là
+ PLAY: khởi tạo đối tượng của Creator, màn hình xếp tàu được hiện ra để người chơi
sắp xếp đội hình
+ EASY/HARD: chọn chế độ khó/ dễ (nếu button hiển thị là easy -> chế độ dễ, hard
-> chế độ khó)
+ GAME RULE: hiển thị hướng dẫn luật chơi
+ HIGHSCORE: hiển thị lịch sử điểm cao
+ SOUND OFF/ON: bật/ tắt âm thanh
+ EXIT: thốt khỏi chương trình
+ Lớp MainMenu cịn bao gồm 1 đối tượng của lớp Creator, đối tượng này sẽ được
khởi tạo khi người chơi bấm vào nút Play và 1 đối tượng của lớp HighScore, đối tượng
này cũng sẽ được khởi tạo khi ấn vào nút HighScore
+ Biến clip với kiểu dữ liệu Clip trong lớp MainMenu có chức năng phát âm thanh
trong trị chơi, biến static isPlaySound có kiểu boolean, giúp chương trình nhận biết
âm thanh đang bật hay tắt
+ Lớp có 1 phương thức khởi tạo với các tham số truyền vào lần lượt là các biến (w, h,
playSound) với w, h là chiều dài, chiều rộng của frame, playSound là biến boolean
giúp nhận biết âm thanh đang bật hay tắt (isPlaySound = playSound). Trong phương

thức khởi tạo này, màn hình menu1 được khởi tạo, đồng thời âm thanh (clip) có thể
được khởi tạo nếu người chơi bật âm thanh
+ Phương thức loadImage() với 3 tham số truyền vào (s,w,h): trả về hình ảnh được lấy
từ đường dẫn s và được ép kích thước sang (w,h).
+ Phương thức playSound() dùng để khởi tạo đối tượng clip để phát âm thanh
với tham số truyền vào là chuỗi ký tự thể hiện đường dẫn đến file.
+ Các button trong class MaiMenu đều được cài đặt sự kiện (actionListener).
+ Phương thức actionPerformed() xử lý sự kiện trên các button. Đối với button Play,
khi người chơi click vào thì đối tượng của lớp Creator sẽ được khởi tạo, chương trình
sẽ chuyển qua phần sắp sếp tàu chiến; còn với button HighScore, đối tượng của
HighScore được khởi tạo, chương trình chuyển qua phần hiển thị lịch sử điểm cao;
button sound dùng để bật/ tắt âm thanh; button gameMode để chọn chế độ khó/ dễ; với
button gameRule khi người chơi ấn vào thì label showRules được set visible và khi ấn
lại vào button gameRule thì label showRules sẽ được xóa bỏ; và cuối cùng nếu ấn vào
button Exit thì sẽ thốt khỏi chương trình
4. Lớp HighScore
Lớp HighScore có phương thức khởi tạo với 3 tham số truyền vào là w, h và
playSound, dùng để add frame và các button là reset (xóa lịch sử điểm cao) và back
(quay về menu chính)
+ Phương thức resetHighScore(): dùng để sửa file high.txt để các giá trị đều bằng 0
+ Phương thức showScore(): đọc file high.txt và hiển thị lịch sử điểm của 5 lần điểm
cao nhất
+ Phương thức loadImage(): với 3 tham số truyền vào (s,w,h): trả về hình ảnh được
lấy từ đường dẫn s và được ép kích thước sang (w,h).
19

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng

+ Phương thức playSound() dùng để khởi tạo đối tượng clip để phát âm thanh với
tham số truyền vào là chuỗi ký tự thể hiện đường dẫn đến file.
5. Lớp Creator
Lớp Creactor kế thừa lớp JLabel, có chức năng hiển thị tàu và hiển thị hình ảnh bản
đồ để người chơi có thể xếp tàu lên đó.
Lớp Creator bao gồm:
+ 1 JFrame (frame) dùng để chứa các Label và button để hiển thị lên màn hình. Các
Label chính bao gồm: shipContainer dùng để chứa hình ảnh của tàu, bản đồ (map).
Các button bao gồm back (quay trở lại màn hình menu của lớp MainMenu), auto (tự
động sắp xếp tàu trên bản đồ theo thuật tốn được cài sẵn), ready (chuyển sang màn
hình PlayGame khi người chơi đã sắp xếp hết các con tàu lên map).
+ Mảng ship[] là mảng các đối tượng của lớp Ship, dùng để lưu hình ảnh các con
tàu với kích thước khác nhau để dán lên label shipContainer. Mảng lengShip[] lưu
chiều dài cảu con tàu.
+ Các biến static: X,Y dùng để bắt tọa độ của chuột khi kéo thả các con tàu lên bản đồ.
xLeft, xRight, yUp, yDown dùng để lưu tọa độ 4 góc của map trên frame. xStart, yStart
dùng để lưu tọa độ ban đầu của con tàu khi người chơi bắt đầu tương tác chuột với con
tàu đó. Mảng boolean M[][] dùng để đánh dấu các ơ trên map có tàu hay khơng. Mảng
xS[], yS[] dùng để lưu tọa độ ban đầu của các con tàu (là các Label) khi chưa kéo thả.
Mảng boolean isNgang[] dùng để kiểm tra xem con tàu đó nằm ngang hay dọc.
+ Biến boolean isHard để lưu độ khó của trị chơi (true nếu là khó và false nếu là dễ).
isPlaySound dùng để kiểm tra xem âm thanh bật hay tắt.
+ Mảng ArrayList <String> A, B dùng để mã hóa tọa độ của điểm bắt của các con
tàu. Mảng A và B giúp chương trình nhận biết con tàu nằm bắt đầu từ ô bao nhiêu trên
bản đồ map.
+ Biến clip với kiểu dữ liệu Clip dùng để phát âm thanh trong trị chơi.
+ Lớp Creator có 1 phương thức khởi tạo với các tham số truyền vào lần lượt là: w, h
dùng để cài đặt kích thước cho frame; gameMode là chế độ chơi (khó hay dễ);
playSound để kiểm tra âm thanh bật hay tắt. Trong phương thức khởi tạo này, các
thuộc tính của lớp Creator được khởi tạo, các Label và button được add vào

+ Phương thức init() khởi tạo mảng M, isNgang và xS, yS. Mảng M ban đầu các
phần tử đều là fasle (chưa có tàu trên map), mảng isNgang ban đầu có các phần tử
đều là true, tức là mặc định ban đầu đều là tàu ngang
+ Phương thức build() được gọi từ phương thức khởi tạo, dùng để add button, add các
sự kiện (ActionListener) vào các button, add label shipContainer để chứa hình ảnh các
tàu
+ Phương thức loadImage() với 3 tham số truyền vào (s,w,h): trả về hình ảnh được lấy
từ đường dẫn s và được ép kích thước sang (w,h).
+ Phương thức put() với kiểu trả về là boolean, trả về true nếu đặt con tàu vào vị trí
mới thành cơng, false nếu đặt con tàu không thành công. Các tham số truyền vào
của phương thức này bao gồm: tmp là chỉ số của con tàu trong mảng ship[], x,y là
tọa độ mới để đặt con tàu, i và j là chỉ số hàng ngang – hàng dọc của tọa độ đặt tàu
trên bản đồ 10x10, isNgang dùng để kiểm tra xem tàu ngang hay dọc
+ Phương thức putForRandom() tương tự như phương thức put(), phương thức này
dùng để đặt con tàu lên bản đồ khi sử dụng thuật tốn random. Phương thức này có
thêm 1 tham số truyền vào là isForPlayer, dùng để nhận biết hàm random này dùng để
sắp xếp tàu cho người chơi hay cho máy và leng để xác định chiều dài của tàu. Nếu
20

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng
dùng cho người chơi, mảng A sẽ được mã hóa theo vị trí các con tàu được đặt,
nếu dùng cho máy, mảng B sẽ được mã hóa.
+ Phương thức setRandom() dùng để sắp xếp ngẫu nhiên các con tàu lên bản đồ theo
thứ tự trong mảng ship[]. Phương thức này sẽ lấy tàu từ mảng ship[], chọn ngẫu nhiên
1 ô (i, j) và đặt thử con tàu vào đó bằng phương thức putForRandom(). Phương thức sẽ
kết thúc thực hiện khi các con tàu đều đã nằm trên bản đồ. Tham số truyền vào là
isForPlayer, dùng để nhận biết thuật toán random đang sử dụng cho người chơi hay

cho máy tính.
+ Các phương thức xử lý sự kiện chuột: MouseDragged, MousePressed,
MouseClicked, MouseReleased dùng để xử lý sự kiện khi người chơi kéo thả các
con tàu.
+ Phương thức actionPerformed() xử lý sự kiện trên các button ready, auto, back. Khi
người chơi chọn back, chương trình sẽ quay lại màn hình menu của lớp MainMenu.
Khi chọn auto, chương trình sẽ sắp xếp tự động các con tàu cho người chơi. Khi
người chơi chọn ready, chương trình kiểm tra xem tàu đã nằm trên map hết chưa bằng
phương thức isReady(), nếu rồi thì chuyển sang PlayGame.
+ Phương thức isReady() với kiểu trả về là boolean dùng để kiểm tra xem tàu đã
nằm trên map hết chưa.
+ Phương thức getFinalMap() dùng để lưu tại tọa độ của các con tàu vào các
đối tượng SmallMap và trả về đối tượng SmallMap đó.
+ Phương thức goToPlay() dùng để khởi tạo đối tượng PlayGame khi người chơi ấn
nút ready.
+ Phương thức playSound dùng để khởi tạo âm thanh.
6. Lớp PlayGame
Lớp PlayGame kế thừa lớp JLabel hiển thị màn hình chơi game, bao gồm 2 bản đồ
là đối tượng của lớp Map (đặt tên là playerMap và computerMap).
+ Người chơi sẽ thực hiện bắn tàu trên computerMap và máy thực hiện bắn trên
playerMap. Đồng thời trên màn hình hiển thị thơng tin đã bắn của người chơi là
bắn trúng hay trượt, vị trí bắn
+ Các biến static: playerHit, computerHit lưu số điểm bắn trúng hiện tại, sumHit lưu
tổng số điểm cần bắn trúng, biến sumTurn lưu số lượt đã bắn, biến Score lưu kết quả
tính điểm khi kết thúc 1 game, biến boolean isPlayer để kiểm tra lượt chơi hiện tại là
của người hay máy, mảng boolean markP[][], markC[][] đánh dấu từng ô trên
computerMap và playerMap đã được bắn hay chưa. Biến boolean isHard kiểm tra chế
độ chơi (khó hay dễ), biến boolean isPlaySound để kiểm tra có bật âm thanh hay
khơng. Biến boolean isNgangPlayer và isNgangComputer đánh dấu là tàu ngang hay
dọc

+ Hàng đợi Queue <String> Q: Lưu tọa độ liên quan của ơ bị bắn trúng tàu (dùng
cho chế độ khó).
+ Biến clip với kiểu dữ liệu Clip dùng để phát âm thanh trong trị chơi.
+ Lớp PlayGame có 1 phương thức khởi tạo. Khởi tạo frame, add các bản đồ của
người chơi và máy, hiển thị thông tin của người chơi. Trong đó có phương thức init()
khởi tạo các vị trí đã bắn của cả người chơi và máy đều là false (chưa được bắn) và
phương thức addAction()
+ Phương thức updateHistoryText() cập nhật lại các thông số (bắn trúng hay trượt, vị
trí đã bắn, số lần đã bắn) của người chơi sau mỗi lượt bắn.
21

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng
+ Phương thức shot() có 2 tham số truyền vào là i, j, dùng để bắn ô (i, j). Phương thức
trả về true nếu ô đó chưa bị bắn và false nếu ô đã bị bắn từ trước.
+ Phương thức hitRandom() chọn ngẫu nhiên 1 ô trên bản đồ để bắn bằng biến
Radom rd ( dùng cho chế độ dễ)
+ Phương thức hitRandomHard() chọn 1 ô trên bản đồ để bắn (dùng cho chế độ
khó), phương thức có sử dụng hàng đợi Q để thêm các ơ liên quan khi có 1 ơ có tàu bị
bắn trúng. (giả sử ô (i, j) bắn trúng thì các ơ (i+1, j), (i-1, j), (i, j+1), (i, j-1)
+ Phương thức addActon() thêm các ActionListener trên các button của computerMap
+ Phương thức checkDeadOnComputerMap() kiểm tra số tàu bị hạ hồn tồn trên
computerMap. Nếu có tàu bị hạ hồn tồn sẽ cho hiển thị con tàu đó lên.
+ Phương thức isPlayerWin() kiểm tra người chơi thắng hay chưa và trả về giá trị
boolean tương ứng. (kiểm tra bằng biến playerHit và sumHit)
+ Phương thức isComputerWin() kiểm tra máy thắng hay chưa và trả về giá trị
boolean tương ứng. (kiểm tra bằng biến computerHit và sumHit)
+ Phương thức loadImage() với 3 tham số truyền vào (s,w,h): trả về hình ảnh được lấy

từ đường dẫn s và được ép kích thước sang (w,h).
+ Phương thức actionPerformed() xử lý sự kiện trên các button.
+ Phương thức gameOver() hiển thị màn hình over khi người chơi hoặc máy
chiến thắng
+ Phương thức setHighScore() cập nhật lại file điểm cao khi phương thức
gameOver được gọi.
+ Phương thức playSound() dùng để khởi tạo âm thanh.
7. Lớp EndScreen
Lớp EndScreen kế thừa JLabel hiển thị màn hình kết quả sau khi người chơi hoặc máy
bắn hết tàu của đối phương trước.
Lớp EndScreen có phương thức khởi tạo với các tham số w, h, isPlayWin, score,
playSound lần lượt là độ rộng, chiều cao của frame, người chơi thắng hay thua, số
điểm người chơi đạt được và thiết lập tắt/bật âm thanh thắng thua. Ngồi ra có các
button Highscore để hiển thị lịch sử điểm cao và Play Again để quay về menu chính.
Lớp EndScreen cũng có phương thức loadImage() với 3 tham số truyền vào (s,w,h):
trả về hình ảnh được lấy từ đường dẫn s và được ép kích thước sang (w,h) và
playSound() dùng để khởi tạo âm thanh từ tham số là đường link
8. Lớp BattleShip

Lớp BattleShip chứa hàm main, bắt đầu trị chơi thơng qua khởi tạo đối tượng của
lớp MainMenu.
9. Tổng quan về trình tự khởi tạo đối tượng của các lớp
+ Đầu tiên khi người chơi bắt đầu khởi chạy trò chơi, 1 đối tượng của lớp MainMenu
được khởi tạo. Màn hình menu có kích thước 1120 x 690, âm thanh mặc định là false.
+ Khi người chơi cài đặt các thông số từ menu (âm thanh, chế độ khó hay dễ) và
nhấn Play, đối tượng của lớp Creator được khởi tạo và được add vào JFrame của lớp
MainMenu. Màn hình sắp xếp tàu sẽ hiển thị.
+ Nếu người chơi bấm vào nút back trên màn hình sắp xếp tàu, frame của lớp
MainMenu sẽ gỡ đối tượng của lớp Creator ra và quay về màn hình của lớp
MainMenu. Đối tượng của lớp Creator bị gỡ ra này sẽ được trình dọn rác

(Garbage Collection) thu dọn.
22

TIEU LUAN MOI download :


IT3100 – Lập trình hướng đối tượng
+ Khi người chơi đã sắp xếp hết các tàu lên map và bấm vào nút ready trên màn hình sắp
xếp đội hình (ứng với đối tượng của class Creator), 2 đối tượng của lớp Map (đặt tên là
playerMap và computerMap) được khởi tạo để lưu lại tọa độ các tàu của người chơi và
máy tính (các tàu của máy tính được sắp xếp bằng random). Đối tượng của lớp Creator
này được gỡ bỏ khỏi màn hình chơi, thay vào đó là màn hình chơi game (ứng với đối
tượng của lớp PlayGame được khởi tạo). PlayerMap và computerMap được add vào
frame của PlayGame, người chơi sẽ lựa chọn các ô bắn trên computerMap.
+ Khi trò chơi kết thúc, đối tượng của lớp PlayGame được thu hồi, đối tượng của
lớp EndScreen được khởi tạo mới và hiển thị ra màn hình kết quả người chơi thắng
hay thua, lúc này trên màn hình có 2 nút là score và play again
+ Nếu người chơi ấn score thì sẽ khởi tạo đối tượng của lớp HighScore, màn hình sẽ
hiển thị lịch sử 5 lần điểm cao nhất. Khi đó sẽ có tiếp 2 nút là reset và back. Nếu người
chơi ấn reset sẽ xóa lịch sử điểm cao, nếu ấn back sẽ khởi tạo đối tượng của
MainMenu, hiển thị màn hình menu chính
+ Nếu người chơi ấn play again, đối tượng của MainMenu được khởi tạo, menu
chính sẽ hiển thị lên màn hình
+ Khi người chơi bấm vào nút exit (ở màn hình menu chính) hoặc tắt cửa sổ trị chơi,
chương trình sẽ dừng hoạt động, các đối tượng của các lớp đang chạy được thu hồi.

23

TIEU LUAN MOI download :



IT3100 – Lập trình hướng đối tượng

CHƯƠNG 3. THUẬT TỐN SỬ DỤNG
3.1. Cơng nghệ sử dụng
Để giải quyết bài tốn về giao diện đồ họa, nhóm sử dụng cơng nghệ Java Swing và
Java AWT

3.2. Các thuật toán đã sử dụng
3.2.1 Thuật toán sắp xếp tàu vào bản đồ
Sau khi ấn vào nút Play ở menu, người chơi sẽ được chuyển sang màn hình sắp xếp
các con tàu vào từng vị trí trên bản đồ. Tại đây, mảng boolean M[][] được khởi tạo với
các giá trị ban đầu là false.
+ Khi người chơi giữ chuột vào 1 con tàu nào đó để chuẩn bị kéo thả, phương thức
mousePressed sẽ được gọi. Tại đây, biến xStart, yStart nhận giá trị tọa độ của con tàu
(tọa độ của điểm góc trên bên trái của tàu) , biến X,Y nhận giá trị là tọa độ của chuột.
+ Khi người chơi kéo con tàu trên bản đồ, phương thức MouseDragged được gọi,
hình ảnh con tàu sẽ di chuyển theo chuột.
+ Khi người chơi vừa kéo tàu ra vừa ấn chuột phải, đồng thời phương thức
mouseClicked và phương thức mousePressed sẽ được gọi, tàu sẽ xoay theo mỗi lần
ấn chuột phải
+ Khi người chơi thả chuột ra, phương thức MouseReleased sẽ kiểm tra xem tại vị trí
thả chuột, con tàu có nằm trong vùng bản đồ hay không. Nếu không trong bản đồ, con
tàu sẽ đượt di chuyển về vị trí xStart và yStart (2 biến đã được tính tốn trong
MousePressed). Nếu con tàu nằm trong vùng bản đồ, chương trình kiểm tra xem tại vị
trí mới đã có tàu khác nằm ở đó hay chưa. Nếu đã có tàu khác, tàu sẽ được di chuyển
về xStart và yStart. Nếu chưa có tàu khác, tàu sẽ được chuyển đến tọa độ mới, mảng
M sẽ được cập nhật lại.
3.2.2 Thuật toán chơi game chế độ dễ
Ở chế độ dễ, mỗi lượt máy bắn sẽ là 1 ô bất kỳ trên bản đồ nhờ vào phương thức

hitRandom và biến random rd trong phương thức.
3.2.3 Thuật toán chơi game chế độ khó
Ở chế độ khó, chương trình sử dụng 1 hàng đợi Q để lưu tọa độ các ô trên bản đồ,
xuất phát từ Q rỗng.
Khi đến lượt máy bắn, chương trình kiểm tra hàng đợi Q rỗng hay khơng:
+ Nếu Q rỗng, chương trình sử dụng biến random để bắn một ô bất kỳ trên bản đồ.
Nếu ô này có tàu, gọi đó là ơ (i,j) thì 4 ô (i+1,j) , (i-1,j), (i, j+1) và (i, j-1) sẽ được
thêm vào hàng đợi để chờ lượt bắn sau.
+ Nếu Q có phần tử, chương trình lấy ra ơ ở đầu hàng đợi để bắn. Nếu ơ này có tàu,
gọi đó là ơ (i,j) thì 4 ơ (i+1,j), (i-1,j), (i, j+1) và (i, j-1) sẽ được thêm vào hàng đợi
để chờ lượt bắn sau.

24

TIEU LUAN MOI download :


×