Niên luận cơ sở — Trò chơi NIM: lý thuyết trò chơi tổ hợp.
Dự án cài đặt trò chơi NIM — một trò chơi tổ hợp công bằng hai người chơi.
Sản phẩm cho học phần Niên luận cơ sở:
- Giao diện đồ họa cho 2 người chơi hoặc người-máy
- Sinh trạng thái game ngẫu nhiên, lưu/tải trạng thái hiện hành
- Chức năng máy tự chơi với người
- Ứng dụng dạng desktop
Đã hoàn thành
- Luật chơi NIM đầy đủ — luật thường và luật misère
- Định lý Bouton — máy chơi tối ưu
- Minimax + cắt tỉa alpha-beta — máy chơi bằng duyệt cây, dùng để đối chiếu với công thức đóng
- Sinh trạng thái ngẫu nhiên có kiểm soát cho người đi trước
- Lưu / tải ván đang chơi
- Undo nước đi, gợi ý nước đi kèm debug nim-sum hiện tại
- Client console để chơi và kiểm thử thủ công
- Giao diện đồ họa JavaFX: các đống item đặt trên mặt bàn, theme sáng/tối
- Hệ thống chuyển động thống nhất (
Motion): hover/nhấn nút, chọn vật phẩm, đổi lượt, bật/tắt panel, hộp thoại, kết quả ván - Quy trình thao tác chuẩn: xác nhận trước khi bỏ ván đang dở, hộp thoại lỗi/hướng dẫn (F1), chú thích phím tắt, trạng thái tự lưu
- Ván mới tùy chỉnh (chế độ, luật, mức máy, thứ tự đi, thế mở màn, số đống/vật phẩm)
- Gợi ý, hoàn tác, lịch sử nước đi, bảng điểm theo phiên
- Chế độ phân tích nim-sum (nhị phân + XOR) để học định lý Bouton
- Lưu/mở ván bằng hộp thoại, tự lưu và khôi phục ván dở
- Bộ test JUnit 5 đối chiếu cài đặt với lý thuyết trên tập thế cờ vét cạn
- Công cụ tự đấu (AI vs AI), xuất số liệu
Đang phát triển
- Đóng gói cài đặt bằng
jpackage - Chế độ 1vs1 online qua server riêng
- Hình ảnh low-poly dựng từ Blender (Optional)
- Trò chơi tổ hợp công bằng
- Định lý Bouton
- Luật misère
- Minimax + alpha-beta
| Công cụ | Phiên bản |
|---|---|
| JDK | 21 (LTS) trở lên |
| Gradle |
git clone https://github.com/K-Rakuya/Project-NIM
cd Project-NIM
# Build toàn bộ dự án
./gradlew build
# Chạy ứng dụng desktop (JavaFX)
./gradlew :nim-desktop:run
# Chạy client console
./gradlew :nim-cli:run --console=plain -qTrên Windows: gõ
chcp 65001trong terminal trước khi chạy để hiển thị đúng tiếng Việt.
./gradlew :nim-core:testBộ test bao gồm:
- Đối chiếu
NimTheoryvới kết quả duyệt vét cạn trên tập thế cờ nhỏ - Đối chiếu
MinimaxAivớiNimTheory, và với chính nó khi bật/tắt cắt tỉa alpha-beta
- Chọn chế độ: người vs máy, người vs người, hoặc tải ván đã lưu
- Nhập nước đi theo cú pháp
<số đống> <số items>— ví dụ2 3nghĩa là bốc 3 items ở đống 2 - Lệnh phụ:
hint(gợi ý nước đi),undo(lùi nước),save <file>(lưu ván),quit(thoát)
- Di chuột vào một vật phẩm để xem trước, bấm để chọn, bấm lần nữa (hoặc nút Bốc / phím Enter) để xác nhận. Chọn một vật phẩm nghĩa là bốc nó và mọi vật phẩm phía trên nó trong cùng đống.
- Phím tắt:
←→chọn đống,↑↓đổi số lượng,Enterxác nhận,Eschủy chọn. Ctrl+Nván mới,Ctrl+Omở,Ctrl+Slưu,Ctrl+Zhoàn tác,Hgợi ý,F1hướng dẫn.- Ván đang chơi tự lưu tại
~/.nim/autosave.nimvà được khôi phục lần mở sau.
| Module | Nội dung |
|---|---|
nim-core |
Luật chơi, lý thuyết Bouton, AI, Match/GameConfig (không phụ thuộc giao diện), lưu/tải |
nim-cli |
Client console và công cụ benchmark |
nim-desktop |
Ứng dụng JavaFX |
- C. L. Bouton, Nim, A Game with a Complete Mathematical Theory, Annals of Mathematics, 1902.
- R. Sprague, P. M. Grundy — lý thuyết Sprague–Grundy cho trò chơi tổ hợp.