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

33 11 0
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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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 Mã sinh viên 20200013 20204574 20204510 20204656 20200545 Lớp 132623 132623 132623 132623 132623 Giáo viên hướng dẫn: ThS Nguyễn Mạnh Tuấn Khóa 65 65 65 65 65 IT3100 – Lập trình hướng đối tượng 20212 Hà Nội, tháng năm 2022 MỤC LỤC MỤC LỤC LỜI NÓI ĐẦU PHÂN CÔNG THÀNH VIÊN TRONG NHÓM .4 CHƯƠNG KHẢO SÁT, ĐẶC TẢ YÊU CẦU BÀI TOÁN .5 1.1 Mô tả yêu cầu toán 1.2 Biểu đồ use case 1.2.1 Biểu đồ use case tổng quan 1.2.2 Biểu đồ use case phân rã mức .6 1.3 Đặc tả use case CHƯƠNG PHÂN TÍCH THIẾT KẾ BÀI TỐN 11 2.1 Thiết kế Cơ sở liệu Cấu trúc tệp 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 THUẬT TOÁN SỬ DỤNG 24 3.1 Công nghệ sử dụng .24 3.2 Các thuật toán sử dụng 24 CHƯƠNG XÂY DỰNG CHƯƠNG TRÌNH MINH HỌA 25 4.1 Kết chương trình minh họa 25 4.2 Giao diện chương trình 25 4.3 Kiểm thử chức .28 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5 Kiểm thử cho chức .28 Kiểm thử cho chức .29 Kiểm thử cho chức .29 Kiểm thử cho chức .29 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 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 gọi BattleShip trò chơi thú vị, đồng thời có cách chơi đơn giản, dễ hiểu để đạt chiến thắng việc dễ dàng Ngay tiếp xúc với đề tài này, chúng em nhận thấy đề tài phù hợp để triển khai kiến thức học lập trình hướng đối tượng, tạo game giải trí bổ ích dành cho bạn sau học căng thẳng Game BattleShip tựa game không nặng mặt đồ họa đồ 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 Java Nhóm làm game cố gắng áp dụng kiến thức lập trình hướng đối tượng cấu trúc liệu, thuật tốn để hồn thành tập lớn Với yêu cầu toán, chúng em cố gắng nỗ lực suy nghĩ hình thành đoạn chương trình tốt để phục vụ nhu cầu thực tế Sau nhiều tuần học tập, trao đổi làm việc, chúng em hồn thành chương trình báo cáo hướng dẫn sử dụng chương trình Nhóm chúng em xin chân thành cảm ơn thầy giáo Nguyễn Mạnh Tuấn, thầy cô Trường Công nghệ thông tin truyền thông, Đại học Bách Khoa Hà Nội đưa đề tài thú vị, hấp dẫn hữu ích giúp chúng em hoàn thành đề tài IT3100 – Lập trình hướng đối tượng 20212 PHÂN CƠNG THÀNH VIÊN TRONG NHĨM Họ tên Email Công việc thực Đánh giá Đinh Duy Anh anh.dd200013@sis.hust.edu.vn Khảo sát đặc tả yêu Hoàn cầu toán thành Thiết kế tổng quan lớp quan trọng Điều phối lên lịch công việc Xây dựng chương trình chi tiết Thuyết trình demo sản phẩm Đỗ Vũ Tùng Lâm lam.dvt204574@sis.hust.edu.vn Xây dựng chương trình Hồn chi tiết thành Xây dựng thư mục hình ảnh âm Viết slide Nguyễn Đắc anh.ndh204510@sis.hust.edu.vn Hồng Anh Phân tích tốn Vẽ biểu đồ lớp Hồn thành Viết báo cáo Kiểm thử chương trình Cao Thành Huy huy.ct204656@sis.hust.edu.vn Kiểm thử chương trình Hồn Tham gia viết số thành chức Nguyễn Viết Tồn toan.nv200545@sis.hust.edu.vn Tìm kiếm tài liệu Hồn Tìm kiếm cơng nghệ thành thuật tốn cần thiết IT3100 – Lập trình hướng đối tượng 20212 CHƯƠNG KHẢO SÁT, ĐẶC TẢ YÊU CẦU BÀI TỐN 1.1 Mơ tả u cầu 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 chức chính: + Cho phép người chơi lựa chọn tàu chiến, xếp đội hình (mỗi loại tàu chiến có kích thước điểm số khác nhau) + Đánh dấu tọa độ bắn trật , bắn trúng lượt chơi + Lưu lại kết điểm số đạt (điểm số số lần dự đoán người chơi thực hiện) lịch sử trận chiến (các bước dự đoán người chơi kết 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ễ khó + Cấu hình game: tắt bật âm / â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 IT3100 – Lập trình hướng đối tượng 20212 1.2.2 Biểu đồ use case phân rã mức Phân rã use case Start, ta use case: + Play + Set Sound + Set Mode + View Rule + View High Score + Exit Phân rã use case Prepare, ta use case + Select Ship + Place Ship IT3100 – Lập trình hướng đối tượng 20212 Phân tích use case Fight, ta use case: + Shoot + Information 1.3 Đặc tả use case - Đặc tả use case Start Mã UC (UC #) BS007 Tên usecase Start Tác nhân Người chơi (Player) Điều kiện trước Người chơi chạy chương trình Luồng thực thi No Thực Hành động Player Click vào nút easy/ hard System Thay đổi chế độ chơi khó / dễ Player Click vào nút GameRule System Hiển thị hướng dẫn chơi Player Click vào nút HighScore System Hiển thị hình lịch sử điểm cao Player Click vào nút Sound on/ off System Bật/ tắt âm Player Click vào nút Play 10 System Khởi tạo giao diện xếp tàu lên đồ 11 Player Click vào nút Exit 12 System Thốt khỏi chương trình Điều kiện sau Người chơi ấn nút Play IT3100 – Lập trình hướng đối tượng 20212 - Đặc tả use case Prepare Mã UC (UC #) BS008 Tác nhân Điều kiện trước Luồng thực thi No Người chơi (Player) Người chơi click vào nút Play giao diện MainMenu Thực Player System Player System Player System Tên usecase Prepare Hành động Kéo tàu từ container chứa tàu vào Map Hiển thị vị trí tàu người chơi kéo vào Kéo tàu từ vị trí cũ đến vị trí Map Hiển thị vị trí tàu người chơi vừa kéo thả Click vào nút auto Sắp xếp tàu container vào Map cách ngẫu nhiên Click vào nút back Khởi tạo giao diện MainMenu Click vào nút ready Khởi tạo giao diện PlayGame 10 Luồng thực thi mở rộng 1a Player System Player System Mã UC (UC #) BS009 Tác nhân Điều kiện trước Người chơi (Player) Người chơi click vào nút ready giao diện xếp tàu tất tàu xếp lên Map Đổi hướng tàu player ấn chuột phải 1b System Trả tàu vị trí cũ player thả tàu ngồi map 1c System Trả tàu vị trí cũ player thả tàu vào tàu khác 2a System Đổi hướng tàu player ấn chuột phải 2b System Trả tàu vị trí cũ player thả tàu ngồi map 2c System Trả tàu vị trí cũ player thả tàu vào tàu khác Điều kiện sau Tất tàu xếp lên Map - Đặc tả use case Fight Luồng thực thi System Tên usecase Fight IT3100 – Lập trình hướng đối tượng No Thực Player System Player System System System System System Player 10 System 11 12 System Player 13 System Luồng thực thi mở rộng 4a System 4b System 5a System 5b System 6a System 6b System 20212 Hành động Click vào nút back Đóng cửa sổ PlayGame cửa sổ với giao diện MainMenu Click vào ô đồ Kiểm tra ô đánh hay chưa Kiểm tra ô chọn có tàu hay khơng Kiểm tra xem có tàu bị hạ hoàn toàn chưa Kiểm tra người chơi máy thắng chưa Chọn ô ngẫu nhiên để bắn tàu người chơi Click nút “Play Again” player máy thắng Lưu kết điểm số người chơi vào liệu điểm Quay trở Menu Click nút Highscore player máy thắng Hiển thị hình lịch sử điểm cao Khơng thực chọn chọn trước Nếu chưa chọn, thực luồng thực thi số 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 luồng thực thi Nếu có tàu, thay đổi biểu tượng thành hình ảnh màu đỏ, thực luồng thực thi Nếu chưa, thực luồng thực thi Nếu rồi, thay hình ảnh vị trí tàu thành hình ảnh tàu, thực IT3100 – Lập trình hướng đối tượng 7a 7b 8a 10a 10b 13a 13b Điều kiện sau 20212 luồng thực thi System Nếu chưa, thực luồng thực thi System Nếu rồi, hiển thị kết người chơi chờ người chơi lựa chọn trở menu xem lịch sử điểm cao System Thực luồng thực thi System Nếu điểm người chơi cao số điểm cao liệu cập nhật lại điểm cao System Nếu điểm người chơi thấp điểm cao khơng cập nhật System Nếu người chơi ấn nút reset, xóa lịch sử điểm cao System Quay giao diện MainMenu người chơi ấn nút back Người chơi xem điểm cao quay gia diện MainMenu 10 IT3100 – Lập trình hướng đối tượng 20212 Là lớp thực nhiệm vụ hiển thị Menu với 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, khỏi trị chơi, hướng dẫn chơi Lớp Menu có JFrame để chứa hình lựa chọn cho người chơi, JFrame bao gồm JLabel menu1 chứa button tương ứng với chức để người chơi sử dụng + PLAY: khởi tạo đối tượng Creator, hình xếp tàu để người chơi xếp đội hình + EASY/HARD: chọn chế độ khó/ dễ (nếu button hiển thị 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 + EXIT: thoát khỏi chương trình + Lớp MainMenu cịn bao gồm đối tượng lớp Creator, đối tượng khởi tạo người chơi bấm vào nút Play đối tượng lớp HighScore, đối tượng khởi tạo ấn vào nút HighScore + Biến clip với kiểu liệu Clip lớp MainMenu có chức phát âm trò chơi, biến static isPlaySound có kiểu boolean, giúp chương trình nhận biết âm bật hay tắt + Lớp có phương thức khởi tạo với tham số truyền vào biến (w, h, playSound) với w, h chiều dài, chiều rộng frame, playSound biến boolean giúp nhận biết âm bật hay tắt (isPlaySound = playSound) Trong phương thức khởi tạo này, hình menu1 khởi tạo, đồng thời âm (clip) khởi tạo người chơi bật âm + Phương thức loadImage() với tham số truyền vào (s,w,h): trả hình ảnh lấy từ đường dẫn s é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 với tham số truyền vào chuỗi ký tự thể đường dẫn đến file + Các button class MaiMenu cài đặt kiện (actionListener) + Phương thức actionPerformed() xử lý kiện button Đối với button Play, người chơi click vào đối tượng lớp Creator khởi tạo, chương trình chuyển qua phần sếp tàu chiến; với button HighScore, đối tượng HighScore 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 người chơi ấn vào label showRules set visible ấn lại vào button gameRule label showRules xóa bỏ; cuối ấn vào button Exit khỏi chương trình Lớp HighScore Lớp HighScore có phương thức khởi tạo với tham số truyền vào w, h playSound, dùng để add frame button reset (xóa lịch sử điểm cao) back (quay menu chính) + Phương thức resetHighScore(): dùng để sửa file high.txt để giá trị + Phương thức showScore(): đọc file high.txt hiển thị lịch sử điểm lần điểm cao + Phương thức loadImage(): với tham số truyền vào (s,w,h): trả hình ảnh lấy từ đường dẫn s é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 với tham số truyền vào chuỗi ký tự thể đường dẫn đến file Lớp Creator Lớp Creactor kế thừa lớp JLabel, có chức hiển thị tàu hiển thị hình ảnh đồ để người chơi xếp tàu lên Lớp Creator bao gồm: + JFrame (frame) dùng để chứa Label button để hiển thị lên hình Các Label bao gồm: shipContainer dùng để chứa hình ảnh tàu, đồ (map) Các button bao gồm back (quay trở lại hình menu lớp MainMenu), auto (tự động xếp tàu đồ theo thuật toán cài sẵn), ready (chuyển sang hình PlayGame người chơi xếp hết tàu lên map) + Mảng ship[] mảng đối tượng lớp Ship, dùng để lưu hình ảnh tàu với kích thước khác để dán lên label shipContainer Mảng lengShip[] lưu chiều dài cảu tàu + Các biến static: X,Y dùng để bắt tọa độ chuột kéo thả tàu lên đồ xLeft, xRight, yUp, yDown dùng để lưu tọa độ góc map frame xStart, yStart dùng để lưu tọa độ ban đầu tàu người chơi bắt đầu tương tác chuột với tàu Mảng boolean M[][] dùng để đánh dấu map có tàu hay không Mảng xS[], yS[] dùng để lưu tọa độ ban đầu tàu (là Label) chưa kéo thả Mảng boolean isNgang[] dùng để kiểm tra xem tàu nằm ngang hay dọc + Biến boolean isHard để lưu độ khó trị chơi (true khó false dễ) isPlaySound dùng để kiểm tra xem âm bật hay tắt + Mảng ArrayList A, B dùng để mã hóa tọa độ điểm bắt tàu Mảng A B giúp chương trình nhận biết tàu nằm ô đồ map + Biến clip với kiểu liệu Clip dùng để phát âm trị chơi + Lớp Creator có phương thức khởi tạo với tham số truyền vào là: w, h dùng để cài đặt kích thước cho frame; gameMode chế độ chơi (khó hay dễ); playSound để kiểm tra âm bật hay tắt Trong phương thức khởi tạo này, thuộc tính lớp Creator khởi tạo, Label button add vào + Phương thức init() khởi tạo mảng M, isNgang xS, yS Mảng M ban đầu phần tử fasle (chưa có tàu map), mảng isNgang ban đầu có phần tử true, tức mặc định ban đầu tàu ngang + Phương thức build() gọi từ phương thức khởi tạo, dùng để add button, add kiện (ActionListener) vào button, add label shipContainer để chứa hình ảnh tàu + Phương thức loadImage() với tham số truyền vào (s,w,h): trả hình ảnh lấy từ đường dẫn s ép kích thước sang (w,h) + Phương thức put() với kiểu trả boolean, trả true đặt tàu vào vị trí thành cơng, false đặt tàu khơng thành công Các tham số truyền vào phương thức bao gồm: tmp số tàu mảng ship[], x,y tọa độ để đặt tàu, i j số hàng ngang – hàng dọc tọa độ đặt tàu đồ 10x10, isNgang dùng để kiểm tra xem tàu ngang hay dọc + Phương thức putForRandom() tương tự phương thức put(), phương thức dùng để đặt tàu lên đồ sử dụng thuật toán random Phương thức có thêm tham số truyền vào isForPlayer, dùng để nhận biết hàm random dùng để xếp tàu cho người chơi hay cho máy leng để xác định chiều dài 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 mã hóa theo vị trí tàu đặt, dùng cho máy, mảng B mã hóa + Phương thức setRandom() dùng để xếp ngẫu nhiên tàu lên đồ theo thứ tự mảng ship[] Phương thức lấy tàu từ mảng ship[], chọn ngẫu nhiên ô (i, j) đặt thử tàu vào phương thức putForRandom() Phương thức kết thúc thực tàu nằm đồ Tham số truyền vào isForPlayer, dùng để nhận biết thuật toán random sử dụng cho người chơi hay cho máy tính + Các phương thức xử lý kiện chuột: MouseDragged, MousePressed, MouseClicked, MouseReleased dùng để xử lý kiện người chơi kéo thả tàu + Phương thức actionPerformed() xử lý kiện button ready, auto, back Khi người chơi chọn back, chương trình quay lại hình menu lớp MainMenu Khi chọn auto, chương trình xếp tự động 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 map hết chưa phương thức isReady(), chuyển sang PlayGame + Phương thức isReady() với kiểu trả boolean dùng để kiểm tra xem tàu nằm map hết chưa + Phương thức getFinalMap() dùng để lưu tọa độ tàu vào đối tượng SmallMap trả đối tượng SmallMap + Phương thức goToPlay() dùng để khởi tạo đối tượng PlayGame người chơi ấn nút ready + Phương thức playSound dùng để khởi tạo âm Lớp PlayGame Lớp PlayGame kế thừa lớp JLabel hiển thị hình chơi game, bao gồm đồ đối tượng lớp Map (đặt tên playerMap computerMap) + Người chơi thực bắn tàu computerMap máy thực bắn playerMap Đồng thời hình hiển thị thơng tin bắn người chơi 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 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 tính điểm kết thúc game, biến boolean isPlayer để kiểm tra lượt chơi người hay máy, mảng boolean markP[][], markC[][] đánh dấu ô computerMap playerMap 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 hay khơng Biến boolean isNgangPlayer isNgangComputer đánh dấu tàu ngang hay dọc + Hàng đợi Queue Q: Lưu tọa độ liên quan ô bị bắn trúng tàu (dùng cho chế độ khó) + Biến clip với kiểu liệu Clip dùng để phát âm trị chơi + Lớp PlayGame có phương thức khởi tạo Khởi tạo frame, add đồ người chơi máy, hiển thị thông tin người chơi Trong có phương thức init() khởi tạo vị trí bắn người chơi máy false (chưa bắn) phương thức addAction() + Phương thức updateHistoryText() cập nhật lại thơng số (bắn trúng hay trượt, vị trí bắn, số lần bắn) người chơi sau lượt bắn 21 IT3100 – Lập trình hướng đối tượng 20212 + Phương thức shot() có tham số truyền vào i, j, dùng để bắn ô (i, j) Phương thức trả true chưa bị bắn false ô bị bắn từ trước + Phương thức hitRandom() chọn ngẫu nhiên ô đồ để bắn biến Radom rd ( dùng cho chế độ dễ) + Phương thức hitRandomHard() chọn ô đồ để bắn (dùng cho chế độ khó), phương thức có sử dụng hàng đợi Q để thêm liên quan có có tàu bị bắn trúng (giả sử ô (i, j) bắn trúng (i+1, j), (i-1, j), (i, j+1), (i, j-1) + Phương thức addActon() thêm ActionListener button computerMap + Phương thức checkDeadOnComputerMap() kiểm tra số tàu bị hạ hồn tồn computerMap Nếu có tàu bị hạ hoàn toàn cho hiển thị tàu lên + Phương thức isPlayerWin() kiểm tra người chơi thắng hay chưa trả giá trị boolean tương ứng (kiểm tra biến playerHit sumHit) + Phương thức isComputerWin() kiểm tra máy thắng hay chưa trả giá trị boolean tương ứng (kiểm tra biến computerHit sumHit) + Phương thức loadImage() với tham số truyền vào (s,w,h): trả hình ảnh lấy từ đường dẫn s ép kích thước sang (w,h) + Phương thức actionPerformed() xử lý kiện button + Phương thức gameOver() hiển thị hình over người chơi máy chiến thắng + Phương thức setHighScore() cập nhật lại file điểm cao phương thức gameOver gọi + Phương thức playSound() dùng để khởi tạo âm Lớp EndScreen Lớp EndScreen kế thừa JLabel hiển thị hình kết sau người chơi máy bắn hết tàu đối phương trước Lớp EndScreen có phương thức khởi tạo với tham số w, h, isPlayWin, score, playSound độ rộng, chiều cao frame, người chơi thắng hay thua, số điểm người chơi đạt thiết lập tắt/bật âm thắng thua Ngồi có button Highscore để hiển thị lịch sử điểm cao Play Again để quay menu Lớp EndScreen có phương thức loadImage() với tham số truyền vào (s,w,h): trả hình ảnh lấy từ đường dẫn s ép kích thước sang (w,h) playSound() dùng để khởi tạo âm từ tham số đường link 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 lớp MainMenu Tổng quan trình tự khởi tạo đối tượng lớp + Đầu tiên người chơi bắt đầu khởi chạy trò chơi, đối tượng lớp MainMenu khởi tạo Màn hình menu có kích thước 1120 x 690, âm mặc định false + Khi người chơi cài đặt thông số từ menu (âm thanh, chế độ khó hay dễ) nhấn Play, đối tượng lớp Creator khởi tạo add vào JFrame lớp MainMenu Màn hình xếp tàu hiển thị + Nếu người chơi bấm vào nút back hình xếp tàu, frame lớp MainMenu gỡ đối tượng lớp Creator quay hình lớp MainMenu Đối tượng lớp Creator bị gỡ 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 xếp hết tàu lên map bấm vào nút ready hình xếp đội hình (ứng với đối tượng class Creator), đối tượng lớp Map (đặt tên playerMap computerMap) khởi tạo để lưu lại tọa độ tàu người chơi máy tính (các tàu máy tính xếp random) Đối tượng lớp Creator gỡ bỏ khỏi hình chơi, thay vào hình chơi game (ứng với đối tượng lớp PlayGame khởi tạo) PlayerMap computerMap add vào frame PlayGame, người chơi lựa chọn bắn computerMap + Khi trị chơi kết thúc, đối tượng lớp PlayGame thu hồi, đối tượng lớp EndScreen khởi tạo hiển thị hình kết người chơi thắng hay thua, lúc hình có nút score play again + Nếu người chơi ấn score khởi tạo đối tượng lớp HighScore, hình hiển thị lịch sử lần điểm cao Khi có tiếp nút reset back Nếu người chơi ấn reset xóa lịch sử điểm cao, ấn back khởi tạo đối tượng MainMenu, hiển thị hình menu + Nếu người chơi ấn play again, đối tượng MainMenu khởi tạo, menu hiển thị lên hình + Khi người chơi bấm vào nút exit (ở hình menu chính) tắt cửa sổ trị chơi, chương trình dừng hoạt động, đối tượng lớp chạy thu hồi 23 IT3100 – Lập trình hướng đối tượng 20212 CHƯƠNG THUẬT TỐN SỬ DỤNG 3.1 Cơng nghệ sử dụng Để giải tốn giao diện đồ họa, nhóm sử dụng công nghệ Java Swing Java AWT 3.2 Các thuật toán sử dụng 3.2.1 Thuật toán xếp tàu vào đồ Sau ấn vào nút Play menu, người chơi chuyển sang hình xếp tàu vào vị trí đồ Tại đây, mảng boolean M[][] khởi tạo với giá trị ban đầu false + Khi người chơi giữ chuột vào tàu để chuẩn bị kéo thả, phương thức mousePressed gọi Tại đây, biến xStart, yStart nhận giá trị tọa độ tàu (tọa độ điểm góc bên trái tàu) , biến X,Y nhận giá trị tọa độ chuột + Khi người chơi kéo tàu đồ, phương thức MouseDragged gọi, hình ảnh tàu di chuyển theo chuột + Khi người chơi vừa kéo tàu vừa ấn chuột phải, đồng thời phương thức mouseClicked phương thức mousePressed gọi, tàu xoay theo lần ấn chuột phải + Khi người chơi thả chuột ra, phương thức MouseReleased kiểm tra xem vị trí thả chuột, tàu có nằm vùng đồ hay không Nếu không đồ, tàu đượt di chuyển vị trí xStart yStart (2 biến tính tốn MousePressed) Nếu tàu nằm vùng đồ, chương trình kiểm tra xem vị trí có tàu khác nằm hay chưa Nếu có tàu khác, tàu di chuyển xStart yStart Nếu chưa có tàu khác, tàu chuyển đến tọa độ mới, mảng M cập nhật lại 3.2.2 Thuật toán chơi game chế độ dễ Ở chế độ dễ, lượt máy bắn ô đồ nhờ vào phương thức hitRandom biến random rd 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 hàng đợi Q để lưu tọa độ ô đồ, 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 ô đồ Nếu có tàu, gọi ô (i,j) ô (i+1,j) , (i-1,j), (i, j+1) (i, j-1) 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 đầu hàng đợi để bắn Nếu có tàu, gọi (i,j) (i+1,j), (i-1,j), (i, j+1) (i, j-1) thêm vào hàng đợi để chờ lượt bắn sau 24 IT3100 – Lập trình hướng đối tượng 20212 CHƯƠNG XÂY DỰNG CHƯƠNG TRÌNH MINH HỌA 4.1 Kết chương trình minh họa Chương trình thực chức sau: + Cho phép người chơi lựa chọn tàu chiến, xếp đội hình (mỗi loại tàu chiến có kích thước, hướng khác nhau) + Đánh dấu tọa độ bắn trật, bắn trúng lượt chơi + Thống kê số lần bắn, bắn trúng hay trượt, vị trí bắn + Lưu lại điểm số người chơi + Xây dựng thuật tốn cho máy chơi chế độ khó dễ + Chơi với máy, xem lịch sử điểm cao + Cấu hình game: tắt bật âm thanh, reset điểm cao 4.2 Giao diện chương trình Giao diện bắt đầu khởi chạy game 25 IT3100 – Lập trình hướng đối tượng 20212 Giao diện xem lịch sử điểm cao Giao diện xếp tàu lên đồ 26 IT3100 – Lập trình hướng đối tượng 20212 Giao diện chơi game Giao diện kết thúc game 27 IT3100 – Lập trình hướng đối tượng 20212 4.3 Kiểm thử chức Các chức cần kiểm thử: + Cho phép người chơi xếp đội hình (mỗi loại tàu chiến có kích thước khác nhau, thay đổi hướng tàu) + Lưu lại điểm số người chơi + Xem lịch sử điểm cao, reset điểm cao 28 IT3100 – Lập trình hướng đối tượng 20212 + Tắt, bật âm + Xem hướng dẫn chơi 4.3.1 Kiểm thử cho chức Chức năng: cho phép người chơi lựa chọn, xếp, xoay tàu chiến Số lượng tàu chiến loại tàu quy định sẵn tàu với kích thước (độ dài tàu ứng với số ô đồ tàu độ dài 1, 2, 3, 4, 5) Kết kiểm thử xếp tàu chiến STT input Exception Kết Các tàu chưa nằm Xử lý: không cho người chơi OK hết map bấm vào nút ready Các tàu nằm Xử lý: cho phép người chơi OK map bấm nút ready 4.3.2 Kiểm thử cho chức Chức năng: Lưu lại điểm số, xem lịch sử điểm số, reset điểm cao Kết kiểm thử STT input File highscore.txt không tồn File highscore.txt nhập thành công Exception Xử lý: tạo file highscore.txt Không xử lý Kết OK OK 4.3.3 Kiểm thử cho chức Chức năng: bật tắt âm Kết kiểm thử STT input File sound.wav không tồn File sound.wav tồn Exception Xử lý: bỏ qua âm Kết OK Không xử lý OK 4.3.4 Kiểm thử cho chức Chức năng: xem hướng dẫn chơi 29 IT3100 – Lập trình hướng đối tượng Kết kiểm thử STT input File gamerule.txt khơng tồn File gamerule.txt tìm thấy 20212 Exception Xử lí: khơng hướng dẫn chơi Khơng xử lí Kết OK OK 4.3.5 Kết luận Chương trình chạy ổn định, lỗi logic xảy Nếu có lỗi xảy đa phần file input bị thiếu lỗi KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Chương trình hồn thành u cầu tốn Ưu điểm: + Khơng có lỗi logic + Giao diện dễ nhìn + Nhẹ, tốn tài ngun Nhược điểm: + Một số hình ảnh game chưa thực đẹp + Các lớp chương trình cịn sử dụng nhiều thuộc tính Hướng phát triền cho đề tài: + Giảm thiểu thuộc tính cho lớp biến cục + Tìm kiếm thêm hình ảnh để giao diện game trau chuốt + Thêm hướng dẫn chơi để người chơi dễ hiểu Mặc dù cịn số thiếu sót, thu từ tập lớn lần giúp chúng em tự tin để tiếp tục đam mê lập trình Chúng em mong nhận đánh giá 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 TÀI LIỆU THAM KHẢO [1] [2] [3] [4] [5] [6] [7] Lập trình hướng đối tượng với Java, Đồn Văn Ban, NXB Khoa học kỹ thuật Slide giảng lập trình hướng đối tượng, Ths Nguyễn Mạnh Tuấn Trang web viettus.vn Trang web docs.oracle.com Trang web stackoverflow.com Trang web github.com Youtube.com 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 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 IDE hỗ trợ java khác 33

Ngày đăng: 19/07/2022, 19:32

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan