Thứ Bảy, 3 tháng 3, 2012

Lập trình trò chơi sudoku

-thiết kế CSDL cho trò chơi sudoku.
-học nukeviet
-thiết kế module admin quản lý cho https://travel.com.vn


Hướng dẫn giải thuật sudoku.
Demo:

Quy luật:
Bài toán:
Giả sử cho ma trận N x N
=> Các phần tử của ma trận được xắp xếp sao cho không trùng với phần tử nào của dòng & cột giao với phần tử đó.





Quy ước
Phần tử được đặt trên ma trận N x N.
Phần tử ở vị trí dòng $i & cột $j thì ký hiệu: ($i, $j)
Vị trí được tính bắt đầu tử 0.

 [FALSE]: xẩy ra trong trường hợp thêm phần tử nhưng không hợp lệ theo luật của trò chơi.
[DONE]: xẩy ra khi các phần tử trong bàn sudoku đã lấp đầy.
-mầu xanh: thuộc về javascript.

Overview:
Toàn bộ trương trình sử dụng 1 file để chạy (index.php).

Querystring:
Truyền vào site theo phương thức GET.
do
-Nếu không có tham số do or tham số do=’game’ thì chạy game sudoku.
-Nếu tham số do=’check_item’ thì kiểm tra phần tử đó có hợp lệ so với ma trận sudoku đã thiết lập ban đầu không ?
-Nếu do=’suggest_item’ thì gợi ý phần tử cho player.
matrix
Chuỗi mảng ma trận được mã hóa: ma trận khuyết thiếu ban đầu & trong quá trình chơi game.
i
Chỉ định dòng i của phần tử: vị trí phần tử muốn thiết lập or cần gợi ý.
j
Chỉ định cột j của phần tử: vị trí phần tử muốn thiết lập or cần gợi ý.
a
Giá trị của phần tử muốn thiết lập.
size
Kích thước sudoku.
matrix_origin
Ma trận gốc.

Đối tượng (Elements):
Id= matrix_string
Hứng kết quả chuỗi ma trận mới trong quá trính chơi game.
Nếu thiết lập phần tử thành công thì thêm phần tử đó, ngược lại thì xóa phần tử đó. Thiết lập chuỗi ma trận mới vào đối tượng này.
Note: nếu phần tử thiết lập không hợp lệ thì có thêm chuỗi [FALSE].
Id=sudoku
Bảng chứa bàn sudoku.
Name=auto_check
Hộp kiểm cho phép game có kiểm tra phần tử ngay sau khi player nhập hay không?
Name=size
Thay đổi kích thước sudoku.
reset
Nút nạp lại thiết lập.

Global variables
$size
Kích thước ma trận vuông sudoku.
__item

Mảng 2 phần tử:
Phần tử 1: chuỗi xác định vị trí phần tử sẽ gợi ý.ie: 2-1
Phần tử 2: đối tượng <input> của phần tử.
_enabled_valid=false
Bật tắt tính năng kiểm tra ngay.

get_col_items($n)
Lấy mảng các phần tử của cột $n. (được tính từ 0)
get_row_items($n)
Lấy mảng các phần tử của dòng $n. (được tính từ 0)
rand_rows()
Hoán đổi ngẫu nhiên các dòng trong ma trận $grid.
generate_item($i,$j)
Tính toán đưa ra phần tử ở vị trị dòng $i, cột $j.
Giải thích:
-lấy hợp dòng cột của ($i, $j). (1)
-tìm các phần tử ở top-right của phần tử ($i,$j). (2)
+nếu (2) không tìm thấy thì lấy 1 số ngẫu nhiên trong đoạn [1, $size] trừ các phần tử ở (1).
+còn lại:
   Xóa các phần tử của (2) có trong (1) à
          *sau khi xóa nếu có phần tử:
           -còn lại hơn 1 phần tử thì lấy giao với các phần tử của cột tiếp theo. à lấy 1 phần tử ngẫu nhiên trong kết quả đó.
          *nếu không có phần tử thì lấy ngẫy nhiên trong [1, $size] trừ (1).

group_top_right_items($i,$j)
Lấy các phần tử ở phía bên phải & ở đỉnh (top-right) tính tử phần tử ở vị trí thứ dòng $i, cột $j.
Ie: figure-1.png
Trả về các phần tử trùng nhiều nhất or các phần tử không trùng. Nếu không tìm thấy phần tử nào thì trả về false.
à Các phần tử ở top-right của phần tử ($i, $j).
get_total_items($i,$j)
Trả về hợp các phần tử trên dòng & cột giao nhau của phần tử được xác định bởi dòng $i, cột $j.
à Hợp dòng cột của ($i, $j).
Note: nếu tồn tại phần tử ở vị trí ($i, $j) thì xóa nó đi.
init()
Khởi tạo ma trận sudoku.
show_game($opt1=true,$opt2=’miss_items’)
Hiển thị trò chơi $grid. Với ma trận đã khuyết 1 vài phần tử ngẫu nhiên.
Nếu $opt=true thì hiển thị trò chơi.
$opt2=’miss_items’: Hàm trả về chuỗi các phần tử đã bị khuyết.
i-j,…’.
Còn lại trả về ma trận của game đã bị khuyết. (Note: không làm ảnh hưởng đến kết $grid kết quả)
valid_item($i,$j,$a)
Kiểm tra sử hợp lệ của phần tử ở vị trí ($i,$j) có giá trị $a.
suggest_result($opt=true,$id='sudoku')
Hiển thị toàn bộ ma trận sudoku gốc. Nếu $opt=true thì hiển thị. Thiết lập $id cho sudoku.
Hàm trả về chuỗi html hiển thị.
matrix_string()
Mã hóa ma trận $grid thành chuỗi.
_input_item_event(O)
Hàm sự kiện của phần tử khi thay đổi giá trị.
disable_all(opt)
opt=true/false (Enabled/disabled) ô nhập phần tử khuyết.
suggest_item(p)

Gợi ý phần tử, khi chọn phần tử & click vào nút suggest.
focus_item(p)
Sự kiện kích hoạt tính năng gợi ý cho phần tử <input>
Note: lưu vị trí của phần tử vào biến item.
parse_text(html)
Lấy kết quả trả về khi gọi site. Là giá trị của <textarea> đầu tiên.

Một số hàm khác: cross_array, get_rand_item, pick_rand_number, shift,… tham khảo hphp.php.docx

0 nhận xét:

Đăng nhận xét

 
Copyright © hoangit