- Các thư viện GUI và đồ họa: PyQt6 - Framework GUI để tạo giao diện người dùng Pygame - Thư viện để tạo giao diện game và xử lý đồ họa - Các thư viện Python tiêu chuẩn: random
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
BỘ MÔN LẬP TRÌNH PYTHON
BÁO CÁO BÀI TẬP LỚN
Đề tài : Lập trình game Cờ Vua
Giảng viên: Nguyễn Quỳnh Chi Nhóm môn học: 03
Nhóm Bài tập lớn: 02
Sinh viên thực hiện:
Hà Nội – 2024
Trang 2Mục lục
I GIỚI THIỆU ĐỀ TÀI: 1
II CÔNG NGHỆ VÀ THƯ VIỆN SỬ DỤNG: 1
III CẤU TRÚC TRÒ CHƠI CÁC CLASS VÀ CHỨC NĂNG TRONG GAME: 1
1 Các file py chính 1
a ChessStart.py: 1
b LearnMode.py: 2
c ChessMain.py: 2
d ChessMainAI.py: 3
e ChessEngine.py: 3
f ChessTemp.py: 4
g FindAI1.py: 4
h Main.py 5
i login.py 5
j register.py 5
2 Các file.ui chính 5
a ChessStart.ui : 5
b LearnMode.ui : 5
c register.ui: 5
d login.ui : 5
IV GIAO DIỆN VÀ DEMO HỆ THỐNG: 6
3 Giao diện bắt đầu 6
4 Chế độ “Chơi với máy” và “Chơi 2 người” 9
5 Giao diện trò chơi khi ở chế độ “Learn Mode”: 13
V Phân chia công việc 14
Trang 3I GIỚI THIỆU ĐỀ TÀI:
- Game cờ vua diễn ra trên một bàn cờ gồm 8x8 ô vuông, với mỗi người chơi điều khiển 16 quân cờ thuộc một trong hai màu (trắng hoặc đen) Mục tiêu của trò chơi
là chiếu hết (checkmate) vua của đối phương, khiến vua không thể thực hiện nước
đi hợp lệ nào để thoát khỏi bị chiếu
- Nhóm người chơi:
Những người mới chơi - hướng dẫn cơ bản, chơi với AI dễ, gợi ý nước đi hợp
lệ
Chế độ chơi 2 người giúp người chơi có thể giao lưu học hỏi với nhau dễ dàng
II CÔNG NGHỆ VÀ THƯ VIỆN SỬ DỤNG:
liệu MySQL Ứng dụng sử dụng MySQLdb để lưu trữ và truy xuất thông tin người dùng, bao gồm tên người dùng và mật khẩu
- Các thư viện GUI và đồ họa:
PyQt6 - Framework GUI để tạo giao diện người dùng
Pygame - Thư viện để tạo giao diện game và xử lý đồ họa
- Các thư viện Python tiêu chuẩn:
random - Để tạo các nước đi ngẫu nhiên cho AI
threading - Xử lý đa luồng
subprocess - Thực thi và quản lý các tiến trình con
sys - Cung cấp các biến và hàm liên quan đến hệ thống
III CẤU TRÚC TRÒ CHƠI CÁC CLASS VÀ CHỨC NĂNG
TRONG GAME:
1 Các file py chính
a ChessStart.py:
- Tạo màn hình khởi động với 3 chế độ: Play Computer, 2 People, Learn Mode
class Ui_MainWindow: lớp chịu trách nhiệm thiết lập giao diện chính của ứng dụng Bao gồm hình nền, các nút điều khiển (QPushButton) và tiêu đề (QLabel)
Trang 4 Phương thức setupUI: dùng để thiết lập giao diện và kết nối sự kiện
ChessMain.py và ChessMainAI.py
b LearnMode.py:
- Tạo 1 giao diện học tập với các bài học hướng dẫn về cách chơi cờ vua
Class Ui_MainWindow: Lớp này định nghĩa giao diện và các chức năng cho chế
độ học tập
Nhóm "DI CHUYỂN":
Nút như Tốt, Tượng, Hậu, v.v được kết nối với các bài học tương ứng (Pawn.py, Bishop.py, Queen.py, )
Nhóm "KIỂM TRA":
Nút như Chiếu, Chiếu tướng, Thoát khỏi chiếu được kết nối với các tệp kiểm tra tình huống (Check.py, Check1.py, )
Nhóm "KHÁI NIỆM CƠ BẢN":
Học cách bắt quân hoặc ký hiệu thông qua các tệp riêng (Capturing.py, Notation.py)
Nhóm "DI CHUYỂN ĐẶC BIỆT":
Hỗ trợ học các nước đi đặc biệt như nhập thành (Kingside.py, Queenside.py), phong cấp (Promotion.py), bắt tốt qua đường (EnPassant.py)
những nút bấm, click vào nút, sẽ mở file python tương ứng
c ChessMain.py:
Sử dụng cho chế độ 2 người khởi tạo các giá trị cố định như kích thước bàn cờ, số
ô vuông, màu sắc của các ô, tốc độ khung hình(FPS), và images lưu trữ các ảnh quân cờ
lớp ChessTemp là một module được nhập vào từ tệp ChessTemp.py và đóng vai trò quan trọng trong việc xử lý logic của trò chơi
Các hàm như drawBoard(), drawPieces(), highlightSquare() giúp vẽ lại bàn cờ, các quân cờ, và tô màu các ô đã chọn, ô hợp lệ để di chuyển
nếu có thăng cấp (promotion), người chơi sẽ chọn quân cờ mới qua các ô thăng cấp
Trang 5 showTurn() hiển thị lượt đi hiện tại (Trắng hay Đen) trên màn hình, cùng với các thông báo như "Check" nếu một bên bị chiếu, hoặc thông báo kết thúc trò chơi (checkmate, stalemate)
Hàm checkBackButtonClick: Kiểm tra nếu người chơi nhấn nút "Back" trong menu trò chơi
animateMove() xử lý hoạt ảnh di chuyển quân cờ từ ô cũ đến ô mới
d ChessMainAI.py:
Sử dụng cho chế độ chơi với máy khởi tạo các giá trị cố định như kích thước bàn
cờ, số ô vuông, màu sắc của các ô, tốc độ khung hình(FPS), và images lưu trữ các ảnh quân cờ
ChessMainAI có các hàm tương tự như ChessMain và có thêm các hàm:
Hàm choose_difficulty: Chứa vòng lặp cho phép người chơi chọn độ khó (mức
1 hoặc mức 2) Sau khi người chơi chọn độ khó, thông tin sẽ được trả về
AI Move Logic (FindAI1): một module FindAI1 với các hàm như findBestMove
và findRandomMove để AI thực hiện các nước đi AI có thể chọn giữa hai mức
độ khó: một mức dễ và một mức khó (dựa trên chiến lược tìm kiếm nước đi tốt nhất hoặc tìm ngẫu nhiên)
e ChessEngine.py:
Xây dựng một game engine cờ vua hoàn chỉnh, quản lý trạng thái trò chơi, sinh nước
đi và luật chơi cờ
lớp GameState: quản lý logic và trạng thái trò chơi.Nó lưu trữ các thông tin cần thiết để mô tả 1 ván cờ:
Bàn cờ: Được biểu diễn bằng một ma trận hai chiều, mỗi phần tử chứa thông tin
về quân cờ ở ô đó
Lượt đi: Xác định xem quân trắng hay quân đen đang đi
Lịch sử các nước đi: Lưu trữ các nước đi đã thực hiện để có thể quay lại các bước trước đó
Vị trí của các quân cờ: Đặc biệt là vị trí của vua, để xác định các tình huống chiếu, chiếu hết
Các quy tắc đặc biệt: Như nhập thành, bắt tốt qua đường,
Trạng thái của ván cờ: Đang diễn ra, hòa, chiếu hết
Các hàm chính
Trang 6o makeMove: Thực hiện một nước đi, cập nhật trạng thái của bàn cờ và các thông tin liên quan
o undoMove: Hủy bỏ nước đi cuối cùng, đưa bàn cờ về trạng thái trước đó
o getValidMoves: Tìm tất cả các nước đi hợp lệ cho quân cờ đang đi
o inCheck, checkmate, stalemate: Kiểm tra các tình huống chiếu, chiếu hết
và hòa
o Các hàm getPawnMoves, getRookMoves, : Tìm các nước đi hợp lệ cho từng loại quân
lớp Move: đại diện cho 1 nước đi trong cờ vua Lớp này lưu thông tin về nước
đi, bao gồm vị trí bắt đầu và kết thúc, quân cờ đang di chuyển, quân bị bắt, và các cờ đặc biệt như thăng cấp quân tốt, en passant, hay castling (nhập thành)
f ChessTemp.py:
ChessTempMain: kế thừa từ lớp GameState và khởi tạo bàn cờ với các quân cờ
cơ bản, chỉ có quân tốt được đặt trên bàn cờ Các quân còn lại được giữ nguyên như trong một trò chơi cờ vua tiêu chuẩn
GameState và chỉ định một bàn cờ đặc biệt với một quân cờ duy nhất:
Các lớp tình huống đặc biệt (Check, Stalemate, Promotion, EnPassant ) Những lớp này mô phỏng các tình huống đặc biệt trên bàn cờ
Lớp ChessTempMove: Lớp này kế thừa từ lớp Move và bổ sung một số tính năng tùy chỉnh
o init : Khởi tạo một nước đi với vị trí bắt đầu và kết thúc, và bàn cờ
o getChessNotation: Phương thức này ghi đè phương thức gốc từ lớp Move để thay đổi ký hiệu cờ vua cho nước đi
o displayMoveDetails: Phương thức này hiển thị chi tiết về nước đi, bao gồm thông tin về vị trí bắt đầu và kết thúc của nước đi
g FindAI1.py:
Lớp này dùng để tính toán và chọn nước đi tốt nhất trong cờ vua dựa trên vật chất, xét tới cả phản ứng của đối thủ
sách các nước đi hợp lệ
Trang 7 findBestMove(gs, validMoves): Hàm này tìm nước đi tốt nhất cho người chơi hiện tại bằng cách đánh giá các nước đi có thể có
scoreMaterial(board): Hàm này tính toán điểm số của bàn cờ hiện tại dựa trên giá trị của các quân cờ Điểm số của các quân cờ được xác định trong pieceScore
h Main.py
Đây là tệp cốt lõi xử lý logic trò chơi chính và luồng giữa các màn hình
Nó quản lý các trạng thái và tương tác khác nhau trong trò chơi, bao gồm cả việc chơi với máy tính, chơi với người khác và chế độ học tập
Nó cũng xử lý logic đăng nhập, đăng ký, thêm người dùng mới vào cơ sở dữ liệu và chuyển đổi giữa các màn hình
i login.py
Tệp này tạo ra màn hình đăng nhập mà người dùng nhìn thấy
Nó có các trường để người dùng nhập tên người dùng và mật khẩu của họ
Nó không thực hiện logic đăng nhập thực tế, nó chỉ gửi thông tin đăng nhập đến Main.py khi người dùng nhấp vào nút đăng nhập
j register.py
Tệp này tạo ra màn hình đăng ký
Nó cho phép người dùng tạo tài khoản mới bằng cách nhập tên người dùng, mật khẩu và xác nhận mật khẩu
Nó cũng xử lý việc thêm người dùng mới vào cơ sở dữ liệu
2 Các file.ui chính
a ChessStart.ui :
Giao diện sau khi đăng nhập game
b LearnMode.ui :
Giao diện của chế độ học tập
c register.ui:
Giao diện của phần đăng ký tài khoản
d login.ui :
Giao diện của phần đăng nhập tài khoản
Trang 8IV GIAO DIỆN VÀ DEMO HỆ THỐNG:
3 Giao diện bắt đầu
Các hình ảnh giao diện trò chơi:
Giao diện trò chơi khi mới bắt đầu là màn hình giao diện đăng nhập trò chơi:
Màn hình giao diện đăng ký tài khoản:
Trang 9 Màn hình thông báo lỗi khi không đăng kí thành công:
Màn hình thông báo khi đăng nhập thành công:
Trang 10 Sau khi đăng nhập: màn hình giao diện hiện ra giao diện với 3 chế độ cho người dùng lựa chọn:
1 Chế độ: “Play computer”: chế độ chơi với máy
2 Chế độ: “2 peoples” : chế độ đối kháng giữa 2 người chơi
3 Chế độ: “Learn mode”: giúp người chơi hiểu rõ hơn về luật chơi chuẩn trong
cờ vua
Trang 114 Chế độ “Chơi với máy” và “Chơi 2 người”
Đối với Chế độ “Chơi với máy” thì giao diện sẽ hiện ra : Có 2 chế độ khó tương ứng với 2 nút chọn Người chơi có thể chọn 1 trong 2 để tiếp tục trò chơi
Trang 12 Giao diện khi bắt đầu 2 chế độ chơi, giao diện lượt chơi bên trắng
Đến lượt trắng hay đen hiện ở bên phải, khi trắng đi sẽ đến lượt đen:
Giao diện bàn cờ khi con tốt được phong:
Trang 13 Giao diện khi 1 trong 2 bên bị đối phương chiếu tướng:
Giao diện bàn cờ khi 1 trong 2 bên thắng và kết thúc trò chơi:
Trang 14 Màn hình giao diện khi 2 bên hòa nhau:
Trang 155 Giao diện trò chơi khi ở chế độ “Learn Mode”:
Màn hình sẽ hiện ra từng bảng tương ứng với từng nội dung, luật chơi cơ bản cho từng con
cờ
Giao diện khi bấm vào bảng con tốt:
Trang 16 Bấm Next để đọc nội dung, khi hiển thị hình ảnh ngón tay trỏ vào thì có thể di chuyển quân cờ đang trỏ:
Hiển thị các nút:
o Nút “ back”: trở lại phần giao diện trước đó
o Nút “next” : chuyển tiếp đến phần nội dung tiếp theo (nếu có), trở về màn hình giao diện learn mode ( nếu không có nội dung tiếp theo)
V Phân chia công việc
Nguyễn Thế Dương Lên ý tưởng, thiết kế giao diện; xử lý thuật toán,logic của
trò chơi
Bùi Đức Đại Xử lý thuật toán, logic của trò chơi; làm báo cáo
Đỗ Mạnh Cường Xử lý thuật toán, logic của trò chơi; làm báo cáo
Thái Đức Huy Xử lý thuật toán, logic của trò chơi; làm báo cáo
Bùi Thiện Thái Xử lý thuật toán, logic của trò chơi; làm báo cáo
-