Professional Documents
Culture Documents
MỤC LỤC
MỤC LỤC.................................................................................................................... 2
2
IT3100 – Lập trình hướng đối tượng 20212
PHỤ LỤC................................................................................................................... 32
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 toá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 toán để hoà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 đã hoà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
IT3100 – Lập trình hướng đối tượng 20212
4
IT3100 – Lập trình hướng đối tượng 20212
5
IT3100 – Lập trình hướng đối tượng 20212
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
6
IT3100 – Lập trình hướng đối tượng 20212
Phân tích use case Fight, ta được các use case:
+ Shoot
+ Information
7
IT3100 – Lập trình hướng đối tượng 20212
- Đặc tả use case Prepare
8
IT3100 – Lập trình hướng đối tượng 20212
chính
No. Thực hiện Hành động
1 Player Click vào nút back
2 System Đóng cửa sổ PlayGame và
hiện cửa sổ với giao diện
MainMenu
3 Player Click vào 1 ô bất kỳ trên bản
đồ.
4 System Kiểm tra ô đó đã được đánh
hay chưa.
5 System Kiểm tra ô được chọn có tàu
hay không
6 System Kiểm tra xem có tàu nào bị
hạ hoàn toàn chưa
7 System Kiểm tra người chơi hoặc
máy đã thắng chưa
8 System Chọn 1 ô ngẫu nhiên để bắn
tàu người chơi
9 Player Click nút “Play Again” khi
player hoặc máy đã thắng
10 System Lưu kết quả điểm số của
người chơi vào dữ liệu điểm
11 System Quay trở về Menu
12 Player Click nút Highscore khi
player hoặc máy đã thắng
13 System Hiển thị màn hình lịch sử
điểm cao
Luồng thực thi
mở rộng
4a System Không thực hiện gì nếu ô
được chọn đã được chọn
trước đó.
4b System Nếu ô đó chưa được chọn,
thực hiện luồng thực thi số 5
5a System Nếu ô không có tàu, thay đổi
ô đó thành biểu tượng ô màu
trắng (không có tàu). Thực
hiện luồng thực thi 8
5b System Nếu ô có tàu, thay đổi biểu
tượng ô thành hình ảnh ô
màu đỏ, thực hiện luồng thực
thi 6
6a System Nếu chưa, thực hiện luồng
thực thi 8
6b System Nếu rồi, thay hình ảnh các ô
tại vị trí con tàu đó thành
hình ảnh của con tàu, thực
9
IT3100 – Lập trình hướng đối tượng 20212
hiện luồng thực thi 7
7a System Nếu chưa, thực hiện luồng
thực thi 8
7b System Nếu rồi, hiển thị kết quả của
người chơi và chờ người chơi
lựa chọn trở về menu hoặc
xem lịch sử điểm cao
8a System Thực hiện luồng thực thi 4.
10a System Nếu điểm của người chơi cao
hơn 1 số điểm cao trong dữ
liệu thì cập nhật lại điểm cao
10b System Nếu điểm người chơi thấp
hơn các điểm cao thì không
cập nhật.
13a System Nếu người chơi ấn nút reset,
xóa lịch sử điểm cao
13b System Quay về giao diện của
MainMenu nếu người chơi ấn
nút back
Điều kiện sau Người chơi xem điểm cao hoặc quay về gia diện MainMenu
10
IT3100 – Lập trình hướng đối tượng 20212
11
IT3100 – Lập trình hướng đối tượng 20212
12
IT3100 – Lập trình hướng đối tượng 20212
+ Lớp Ship
+ Lớp PlayGame
13
IT3100 – Lập trình hướng đối tượng 20212
+ Lớp Creator
14
IT3100 – Lập trình hướng đối tượng 20212
+ Lớp MainMenu
15
IT3100 – Lập trình hướng đối tượng 20212
+ Lớp HighScore
+ Lớp EndScreen
+ Lớp BattleShip
- Biểu đồ lớp
16
IT3100 – Lập trình hướng đối tượng 20212
17
IT3100 – Lập trình hướng đối tượng 20212
2.4. Thiết kế chi tiết lớp
Phân tích: để giải quyết bài toá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,
thoá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 đồ đó. Ngoà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.
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
IT3100 – Lập trình hướng đối tượng 20212
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, thoá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: thoá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ẽ thoá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
IT3100 – Lập trình hướng đối tượng 20212
+ 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 toá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 toá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
IT3100 – Lập trình hướng đối tượng 20212
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
IT3100 – Lập trình hướng đối tượng 20212
+ 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ạ hoàn toàn trên
computerMap. Nếu có tàu bị hạ hoàn toà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. Ngoà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
IT3100 – Lập trình hướng đối tượng 20212
+ 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
IT3100 – Lập trình hướng đối tượng 20212
24
IT3100 – Lập trình hướng đối tượng 20212
25
IT3100 – Lập trình hướng đối tượng 20212
26
IT3100 – Lập trình hướng đối tượng 20212
27
IT3100 – Lập trình hướng đối tượng 20212
Số lượng tàu chiến của từng loại tàu được quy định sẵn là 5 tàu với 5 kích thước (độ
dài tàu ứng với số ô trên bản đồ là tàu độ dài 1, 2, 3, 4, 5).
Kết quả kiểm thử sắp xếp tàu chiến
STT input Exception Kết quả
1 Các tàu chưa nằm Xử lý: không cho người chơi OK
hết trong map. bấm vào nút ready
2 Các tàu đã nằm Xử lý: cho phép người chơi OK
trên map bấm nút ready
Chức năng: Lưu lại điểm số, xem lịch sử điểm số, reset điểm cao
Kết quả kiểm thử
Mặc dù còn một số thiếu sót, tuy vậy những gì thu được từ bài tập lớn lần này giúp
chúng em tự tin hơn để tiếp tục đam mê trong lập trình.
Chúng em rất mong nhận được những đánh giá của thầy.
Chúng em xin chân thành cảm ơn!
30
IT3100 – Lập trình hướng đối tượng 20212
31
IT3100 – Lập trình hướng đối tượng 20212
32
IT3100 – Lập trình hướng đối tượng 20212
PHỤ LỤC
Hướng dẫn cài đặt
+ Giải nén file BattleShip.zip
+ Chạy file BattleShip.exe trong thư mục vừa giải nén
+ Để xem source code, import thư mục vừa giải nén vào eclipse hoặc các IDE hỗ trợ
java khác.
33