00:00
Huỳnh Lê Duy Linh

Nhật ký phát triển (Devlog) - Tác giả: Huỳnh Lê Duy Linh

Hello anh em. Sudoku là bộ môn mình thêm vào AdvCaro Ecosystem để phục vụ cho các "chiến thần não to" thích chơi đùa với những con số. Dưới đây là những chia sẻ chi tiết của mình về luật chơi, mẹo giải nhanh và cách mình đã lập trình ra trò chơi cực kỳ hại não này.

Sudoku Cổ Điển: Đâu Phải Cứ Giỏi Toán Mới Chơi Được?

Nhiều người khi nhìn thấy bảng cờ Sudoku với chằng chịt các con số từ 1 đến 9 thì auto có suy nghĩ: "Ôi, game tính toán khô khan, pass!". Nhưng sự thật là Sudoku (tên tiếng Nhật có nghĩa là "Con số độc nhất") KHÔNG CẦN BẤT KỲ PHÉP TÍNH NÀO CẢ. Nó không phải là Toán học, nó là tư duy logic loại trừ (Deductive Reasoning). Thậm chí, nếu bạn thay thế các con số bằng 9 loại trái cây khác nhau, hay 9 ký tự hình học, bạn vẫn có thể chơi và giải đố bình thường!

Sudoku được phát minh vào cuối thế kỷ 19 ở châu Âu với tên gọi ban đầu là "Number Place" (Vị trí các con số), nhưng nó chỉ thực sự bùng nổ và trở thành hiện tượng toàn cầu khi được người Nhật phổ biến vào thập niên 1980. Kể từ đó, nó trở thành bài tập thể dục não bộ quen thuộc trên các trang báo giấy mỗi buổi sáng.

Nguyên lý "Ba Không Lặp Lại" Cốt Lõi Của Sudoku

Để giải quyết một bảng Sudoku kích thước tiêu chuẩn 9x9 (tổng cộng 81 ô vuông), bạn chỉ cần khắc cốt ghi tâm nguyên lý "Ba không lặp lại". Nhiệm vụ của bạn là điền các con số từ 1 đến 9 vào các ô trống sao cho:

Nỗi khổ của Lập Trình Viên khi code thuật toán sinh đề (Generator)

Làm game Caro hay Cờ Gánh, phần khó nhất là viết AI để đánh với người chơi. Nhưng đối với game giải đố như Sudoku Online, thử thách khó nhằn nhất lại là viết hàm tạo đề bài (Generator). Một đề Sudoku đạt chuẩn quốc tế phải tuân thủ nguyên tắc vàng: DUY NHẤT MỘT ĐÁP ÁN. Nếu hệ thống tạo ra một cái đề mà người chơi có thể giải ra thành 2 hoặc 3 đáp án khác nhau, thì coi như thuật toán đó vứt đi.

Để giải quyết bài toán này, mình đã áp dụng thuật toán Backtracking (Quay lui). Đầu tiên, thuật toán sẽ điền ngẫu nhiên các số từ 1-9 vào mảng 81 ô sao cho hợp lệ hoàn toàn. Sau khi có một bảng hoàn chỉnh (đáp án), hệ thống bắt đầu tiến hành "đục lỗ" (xóa các số) một cách ngẫu nhiên. Điều kỳ diệu ở đây là: Sau mỗi lần xóa 1 ô, thuật toán lại tự động nhảy vào đóng vai người chơi để "giải thử" (Solver) xem bảng cờ lúc này có xuất hiện đa nghiệm hay không. Nếu có, nó sẽ hoàn tác (Undo) và xóa ở ô khác.

Quá trình đục lỗ này quyết định độ khó của ván game. Nếu xóa ít (còn lại khoảng 40-50 số), ta có chế độ Dễ (Easy). Nếu xóa nhiều (chỉ còn khoảng 20-30 số), ta có chế độ Khó (Hard). Trải nghiệm tạo ra một bảng Sudoku hàng ngàn tỷ khả năng thực sự là một điều rất thú vị đối với một người lập trình.

❓ Cẩm nang giải đố nhanh (FAQ)

1. Cây Bút Chì (Pencil/Notes) trong game có tác dụng gì?

Cây bút chì là tính năng Ghi chú nháp (Pencil Mark) không thể thiếu đối với các tín đồ Sudoku. Ở những level Khó hoặc Chuyên gia, bạn không thể nhẩm hết các khả năng trong đầu được. Bật chế độ bút chì lên, bạn có thể điền nhiều số nhỏ vào một ô (ví dụ ô này có thể là số 2, 4 hoặc 7). Tính năng thông minh của AdvCaro sẽ tự động xóa các nháp dư thừa khi bạn điền một con số chính thức vào hàng, cột hoặc khối tương ứng, giúp bạn dễ dàng loại trừ hơn rất nhiều.

2. Kỹ thuật "Cross-hatching" (Quét ngang dọc) là gì?

Đây là kỹ thuật vỡ lòng giúp bạn giải quyết chế độ Dễ cực nhanh. Bạn nhắm vào một con số (ví dụ số 1). Tìm xem trên bảng hiện có bao nhiêu số 1. Dùng ánh mắt phóng các đường thẳng ngang dọc từ các số 1 đó đi xuyên qua một khối 3x3 trống. Bạn sẽ dễ dàng khóa (loại trừ) được các ô mà số 1 không thể xuất hiện, từ đó tìm ra ô trống duy nhất còn lại bắt buộc phải là số 1.

3. Lợi ích sức khỏe khi chơi Sudoku mỗi ngày?

Khoa học đã chứng minh, việc giữ não bộ hoạt động bằng các trò chơi logic như Sudoku giúp cải thiện trí nhớ ngắn hạn, tăng khả năng tập trung (sự tĩnh tâm) và đặc biệt là làm chậm quá trình lão hóa não bộ (phòng ngừa hội chứng Alzheimer) ở người cao tuổi. Chơi Sudoku 15 phút mỗi sáng là cách khởi động não bộ tuyệt vời trước một ngày làm việc căng thẳng.