Khoa CNTT KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG BỘ MÔN CÔNG NGHỆ PHẦN MỀM NIÊN LUẬN CƠ SỞ NGÀNH KTPM TRÒ CHƠI SUDOKU SỬ DỤNG THUẬT TOÁN VÉT CẠN Đại học Cần Thơ i NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN Khoa CNTTTT, Đại học Cần Thơ ii MỤC LỤC CHƯƠNG 1 TỔNG QUAN 1 I MÔ TẢ BÀI TOÁN 1 II MỤC TIÊU CẦN ĐẠT ĐƯỢC 1 III HƯỚNG GIẢI QUYẾT 1 IV KẾ.
KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG BỘ MÔN CÔNG NGHỆ PHẦN MỀM NIÊN LUẬN CƠ SỞ NGÀNH KTPM TRỊ CHƠI SUDOKU SỬ DỤNG THUẬT TỐN VÉT CẠN Sinh viên thực Giảng viên hướng dẫn Họ tên: Trương Phúc Vĩnh Ths Phan Huy Cường MSSV: B1906809 Lớp: DI1996A5 HỌC KỲ II, 2021-2022 NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN Khoa CNTT&TT, Đại học Cần Thơ i MỤC LỤC CHƯƠNG TỔNG QUAN I MƠ TẢ BÀI TỐN II MỤC TIÊU CẦN ĐẠT ĐƯỢC III HƯỚNG GIẢI QUYẾT .1 IV KẾ HOẠCH THỰC HIỆN CHƯƠNG LÝ THUYẾT I KHÁI NIỆM ĐƯỢC SỬ DỤNG .3 2.1.1 Trò chơi sudoku gì? 2.1.2 Thuật toán vét cạn 2.1.3 Khái niệm JVM 2.1.4 Mơ hình MVC II KẾT QUẢ VẬN DỤNG LÝ THUYẾT VÀO ĐỀ TÀI .4 CHƯƠNG ỨNG DỤNG I PHÂN TÍCH YÊU CẦU BÀI TOÁN 3.1.1 Yêu cầu chức .7 3.1.2 Yêu cầu phi chức .10 3.1.3 Yêu cầu phần mềm 10 II XÂY DỰNG CẤU TRÚC DỮ LIỆU 10 3.2.1 Tổ chức liệu cần thiết 10 3.2.2 Thiết kế giải thuật 14 III GIỚI THIỆU CHƯƠNG TRÌNH .18 IV QUY TRÌNH SỬ DỤNG 21 CHƯƠNG KẾT LUẬN ĐÁNH GIÁ 22 I KẾT QUẢ ĐẠT ĐƯỢC 22 II HẠN CHẾ 22 III HƯỚNG PHÁT TRIỂN 22 PHỤ LỤC 23 I CÀI ĐẶT ỨNG DỤNG 23 II HƯỚNG DẪN SỬ DỤNG .23 TÀI LIỆU THAM KHẢO 29 Khoa CNTT&TT, Đại học Cần Thơ ii DANH MỤC HÌNH Hình 2.1: Minh họa chu trình thực chương trình Java Hình 3.1: Sơ đồ usecase ứng dụng Hình 3.2: Tổ chức cấu trúc liệu gói Model 11 Hình 3.3: Tổ chức cấu trúc liệu gói View 12 Hình 3.4: Tổ chức liệu gói Controller 13 Hình 3.5: Lưu đồ thuật tốn tự sinh ngẫu nhiên số 15 Hình 3.6: Lưu đồ thuật tốn vét cạn để giải ô số 17 Hình 3.7: Giao diện sảnh trị chơi 18 Hình 3.8: Giao diện chọn cấp độ 19 Hình 3.9: Giao diện bàn cờ 19 Hình 3.10: Giao diện xem xếp hạng 20 Hình 3.11: Giao diện xem giới thiệu .20 Hình 3.12: Quy trình sử dụng chức ứng dụng .21 Khoa CNTT&TT, Đại học Cần Thơ iii DANH MỤC BẢNG Bảng 1.1: Kế hoạch thực đề tài Bảng 3.1: Yêu cầu chức hiển thị xếp hạng .7 Bảng 3.2: Yêu cầu chức xem giới thiệu Bảng 3.3: Yêu cầu chức điền giá trị vào ô số Bảng 3.4: Yêu cầu chức chọn cấp độ câu đố Bảng 3.5: Yêu cầu chức quay lại Bảng 3.6: Yêu cầu chức xem lời giải Bảng 3.7: Yêu cầu chức cảnh báo trùng số Bảng 3.8: Yêu cầu chức lưu thời gian giải 10 Khoa CNTT&TT, Đại học Cần Thơ iv Trị chơi Sudoku sử dụng thuật tốn vét cạn CHƯƠNG Chương TỔNG QUAN I MÔ TẢ BÀI TỐN Trong thời đại ngày có nhiều ứng dụng, trò chơi đời Tuy nhiên, có trị chơi xuất lâu, không cuồng nhiệt, bùng nổ đem lại sức hút lạ thường đơn giản lơi nó, trị chơi Sudoku Sudoku trò chơi đòi hỏi tư logic, với tính kiên trì tập trung cao độ người chơi Xuất Việt Nam khoảng năm 2005, chiếm lĩnh vị trí quan trọng thị trường trị chơi giải trí nước ta hệ trẻ u thích Ngồi hấp dẫn số, kích thích tư duy, suy nghĩ logic, Sudoku cịn hấp dẫn giới trẻ lý chơi lúc nơi, xe buýt, chơi, chí du lịch Trước đây, cơng nghệ chưa phát triển người chơi Sudoku thường chơi theo cách truyền thống quyến sách, vở, hay báo chí ngày mà nhà, gia đình có trang bị máy tính nên việc chơi Sudoku trở nên vơ dễ dàng, tiện lợi Vì thế, việc xây dựng ứng dụng trò chơi để sử dụng máy tính cần thiết Để xây dựng ứng dụng việc lựa chọn thuật tốn, giải pháp để tạo số cho trị chơi hỗ trợ giải số vơ quan trọng Có nhiều thuật tốn dùng cho việc xây dựng ứng dụng Sudoku nhiên thuật tốn áp dụng thuật tốn vét cạn Thuật tốn áp dụng cho việc sinh ngẫu nhiên ô số hỗ trợ giải câu đố II MỤC TIÊU CẦN ĐẠT ĐƯỢC Nắm bắt vấn đề cần giải với mong muốn ứng dụng kiến thức học vào thực tiễn Do mục tiêu đề tài xây dựng trò chơi đơn giản vận dụng kiến thức học Bên cạnh trị chơi cần có giao diện đồ họa cho phép người dùng giải thủ công ô số cung cấp tiện ích hỗ trợ giải trị chơi Sudoku Ngồi cần có chức nhập số tự sinh ô số cho bàn cờ Sudoku Đặc biệt trị chơi cần phải áp dụng thuật tốn vét cạn vào đề tài để giải ô số III HƯỚNG GIẢI QUYẾT Sử dụng mảng hai chiều 9x9 để lưu ô số bàn cờ Sudoku Bước đầu tạo bàn cờ Sudoku cách chọn ngẫu nhiên số từ đến để điền vào ô số hàng cột tương ứng mảng chiều 9x9 Nếu số không thỏa điều kiện lặp lại việc sinh số ngẫu nhiên Giao diện đồ họa người dùng xây dựng Java Swing, thân thiện, dễ sử dụng Khoa CNTT&TT, Đại học Cần Thơ Trị chơi Sudoku sử dụng thuật tốn vét cạn Chương IV KẾ HOẠCH THỰC HIỆN Để thực đề tài cần lập kế hoạch cho cơng việc để đảm bảo hồn thành thời hạn Sau bảng kế hoạch thiết kế cho đề tài (Bảng 1.1): Bảng 1.1: Kế hoạch thực đề tài STT Công việc thực Thời gian thực Xác định yêu cầu, phân tích yêu cầu cần thiết tìm kiếm tài liệu liên quan trò chơi Sudoku Tuần - 2 Củng cố kiến thức thuật toán “vét cạn” nghiên cứu cách vận dụng vào đề tài Tuần - Thiết kế giao diện, mơ hình tổng thể ứng dụng, chức ứng dụng Tuần - Lập trình thuật tốn ứng dụng Tuần – 11 Lập trình giao diện đồ họa ứng dụng Tuần 12 - 14 Kiểm thử ứng dụng hoàn thiện báo cáo Tuần 15 - 18 Khoa CNTT&TT, Đại học Cần Thơ Trị chơi Sudoku sử dụng thuật tốn vét cạn CHƯƠNG Chương LÝ THUYẾT I KHÁI NIỆM ĐƯỢC SỬ DỤNG 2.1.1 Trị chơi sudoku gì? Trị chơi Sudoku ban đầu có tên Number Place trò chơi xếp chữ số dựa logic theo tổ hợp Mục tiêu trò chơi điền chữ số vào lưới 9×9 cho cột, hàng, phần số chín lưới 3×3 tất chữ số từ đến Điều kiện chữ số điền vào không xuất lần hàng, cột lưới 3x3 Bàn cờ điền số ô, nhiệm vụ người chơi tiếp tục điền số vào ô trống tất ô điền giá trị thỏa mãn 2.1.2 Thuật toán vét cạn Thuật toán “vét cạn” số kỹ thuật quay lui Do trước tìm hiểu thuật tốn vét cạn cần biết kỹ thuật quay lui Kỹ thuật quay lui (backtracking) trình phân tích xuống quay lui trở lại theo đường qua Khi chưa tìm thấy điểm dừng tiếp tục phân tích xuống Nếu tìm thấy điểm dừng hay hiểu nơi xác định lời giải, xác định khơng thể (hoặc khơng nên) tiếp tục phân tích theo hướng nữa, lúc quay ngược lại theo đường vừa qua để tìm hướng phân tích khác thích hợp Đối với thuật tốn “vét cạn” khơng xác định nên hay không nên tiếp tục mà phân tích đến tất điểm dừng xác định tiếp tục thực quay lui trở lại theo đường qua Thuật toán “vét cạn” kỹ thuật hay qua hết tất trường hợp để tìm lời giải, đảm bảo cho lời giải xác 2.1.3 Khái niệm JVM JVM (Java Virtual Machine ) máy ảo Java dùng để chuyển mã byte code (.class) thành mã máy tương ứng (.exe) để thực thi hệ điều hành kiến trúc CPU khác Máy ảo chứa tập lệnh logic để xác định hoạt động máy tính, xem hệ điều hành thu nhỏ Source code JDK Byte code JVM Mã thực java Biên dịch class Thơng dịch exe Hình 2.1: Minh họa chu trình thực chương trình Java 2.1.4 Mơ hình MVC Mơ hình MVC mẫu thiết kế nhằm tách biệt logic ứng dụng khỏi giao diện người dùng Chia ứng dụng thành ba phần tương tác với nhau, thành phần có Khoa CNTT&TT, Đại học Cần Thơ Trò chơi Sudoku sử dụng thuật toán vét cạn Chương nhiệm vụ riêng biệt độc lập với thành phần khác, để dễ quản lý, phát triển bảo trì Ba phần là: • Model: quản lý, xử lý liệu • View: giao diện, xác định cách trình bày ứng dụng • Controller: quản lý tương tác Model View II KẾT QUẢ VẬN DỤNG LÝ THUYẾT VÀO ĐỀ TÀI Dựa kiến thức học thuật toán “vét cạn” để áp dụng vào việc giải câu đố bàn cờ Sudoku cụ thể sau: 9 8 5 2 9 5 2 9 3 4 9 2 Cần điền vào tất ô trống giá trị từ đến thỏa ba điều kiện: 1) Không trùng với số có hàng 2) Khơng trùng với số có cột 3) Khơng trùng với lưới 3x3 bàn cờ 9x9 Mô tả phương pháp giải: Vận dụng kiến thức thuật toán “vét cạn” ta duyệt qua ô số bàn cờ Nếu số có giá trị bỏ qua, ô số trống thực chọn số số nhỏ khoảng từ đến để điền vào ô trống số chọn thỏa ba điều kiện đề duyệt Nếu khơng thỏa ba điều kiện thực tăng giá trị số chọn lên đơn vị Kiểm tra lại xem có thỏa điều kiện hay khơng Nếu thỏa duyệt Nếu khơng thỏa tiếp tục tăng giá trị số chọn lên đến giá trị chọn số mà khơng thỏa mãn điều kiện thực quay lui ô vừa duyệt trước tiếp tục tăng giá trị lên kiểm tra điều kiện Tiếp tục tất ô điền giá trị thỏa mãn điều kiện Khoa CNTT&TT, Đại học Cần Thơ Trò chơi Sudoku sử dụng thuật toán vét cạn Chương Giải chi tiết: Ta đặt matrix[i][j] tương ứng với ô hàng i cột j, i j có giá trị từ đến Đặt k giá trị chọn để điền vào ô trống, k nhận giá trị từ đến Duyệt matrix[0][5]: • K=1 => Thỏa điều kiện => Duyệt ô trống Duyệt matrix[3][0]: • • • • • • K=1 => Không thỏa điều kiện K=2 => Không thỏa điều kiện K=3 => Không thỏa điều kiện K=4 => Không thỏa điều kiện K=5 => Không thỏa điều kiện K=6 => Thỏa điều kiện => Duyệt ô trống Duyệt matrix[3][5]: • • • • • • • • • K=1 => Không thỏa điều kiện K=2 => Không thỏa điều kiện K=3 => Không thỏa điều kiện K=4 => Không thỏa điều kiện K=5 => Không thỏa điều kiện K=6 => Không thỏa điều kiện K=7 => Không thỏa điều kiện K=8 => Không thỏa điều kiện K=9 => Không thỏa điều kiện => Quay lui Quay lui matrix[3][0]: • K=7 => Thỏa điều kiện => Duyệt trống Duyệt matrix[3][5]: • • • • • • K=1 => Không thỏa điều kiện K=2 => Không thỏa điều kiện K=3 => Không thỏa điều kiện K=4 => Không thỏa điều kiện K=5 => Không thỏa điều kiện K=6 => Thỏa điều kiện => Duyệt trống Duyệt matrix[5][0]: • K=1 => Khơng thỏa điều kiện • K=2 => Khơng thỏa điều kiện Khoa CNTT&TT, Đại học Cần Thơ Trị chơi Sudoku sử dụng thuật tốn vét cạn Chương • Lưu đồ thuật tốn: Hình 3.5: Lưu đồ thuật tốn tự sinh ngẫu nhiên số Khoa CNTT&TT, Đại học Cần Thơ 15 Trò chơi Sudoku sử dụng thuật toán vét cạn Chương Giải thuật giải ô số thuật toán vét cạn Đầu vào: Một mảng ô số Sudoku chưa giải Đầu ra: Một mảng số Sudoku giải • Mã giả: function SOLVEGAME(b): FOR i=0 TO i