TRƯỜNG ĐẠI HỌC KIẾN TRÚC ĐÀ NẴNG
KHOA CÔNG NGHỆ THÔNG TIN – NGÀNH CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN
ĐỀ TÀI : XÂY DỰNG ỨNG DỤNG ĐÁNH CỜ VUA VỚI MÁY TÍNH
Môn học : Trí tuệ nhân tạo
GVHD : Nguyễn Năng Hùng Vân
Lớp : 22CT1
Họ và tên : Lê Văn Thái
MSSV : 2251220232
Đà Nẵng, Tháng 5 năm 2025
Mục lục
I. GIỚI THIỆU .................................................................................................................. 2
1. Trí tuệ nhân tạo là gì ? ............................................................................................ 3
2. ng dụng đánh cờ vua với máy nh ..................................................................... 4
3. Cờ vua ..................................................................................................................... 4
II. LUT CHƠI .................................................................................................................. 4
1. Bàn cờ vua .............................................................................................................. 4
2. Cách Di Chuyển Của Từng Quân Cờ ....................................................................... 4
3. Phân định thắng - thua .......................................................................................... 5
III. NGÔN NGỮ LẬP TRÌNH VÀ THƯ VIỆN ...................................................................... 6
1. Python ..................................................................................................................... 6
2. Thư viện .................................................................................................................. 7
IV. THUT TOÁN ............................................................................................................. 7
V. LẬP TRÌNH ỨNG DỤNG .............................................................................................. 8
1. Thiết kế giao diện (UI-User Interface) ................................................................... 8
2. Xử lý thuật toán ...................................................................................................... 9
3. Luồng chơi chính (Game Loop) ............................................................................ 12
4. Demo ứng dụng .................................................................................................... 13
I.GIỚI THIỆU
1. Trí tuệ nhân tạo là gì ?
Trí tuệ nhân tạo (AI - Arcial Intelligence) là lĩnh vực nghiên cứu và phát
triển các hệ thống máy nh có khả năng thực hiện các nhiệm vụ mà
thường cần đến trí thông minh của con người. AI bao gồm nhiều công nghệ
và kỹ thuật khác nhau, như:
- Machine Learning (Học máy): Hệ thống có khả năng học hỏi từ dữ
liệu và cải thiện hiệu suất theo thời gian mà không cần lập trình lại.
- Natural Language Processing (Xử lý ngôn ngữ tự nhiên): Cho phép
máy nh hiểu, phân ch và tạo ra ngôn ngữ con người, như trong
chatbots hay trợ lý ảo.
- Computer Vision (Thị giác máy nh): Giúpy nh nhận diện
phân ch hình ảnh hoặc video.
- Robocs (Ngành robot): Kết hợp AI để tạo ra các robot có khả năng tự
động hóa và thực hiện các nhiệm vụ phức tạp.
AI được áp dụng rộng rãi trong nhiều lĩnh vực, từ chăm sóc sức khỏe, tài
chính, đến giao thông và giải trí, mang lại nhiều lợi ích và ềm năng đổi
mới.
Lĩnh vực và ứng dụng
AI ứng dụng rộng rãi trong nhiều lĩnh vực, từ y khoa, tài chính, sản xuất,
cho đến giáo dục và nghệ thuật. Một số ứng dụng phổ biến bao gồm xe tự
lái, hệ thống gợi ý, robot tự động, và trợ lý ảo
Phân loại công nghệ AI
- Công nghệ AI phản ứng (Reacve Machine)
Công nghệ AI phản ứng công nghệ khả năng phân ch được những
hành động của bản thân và đối thủ. Từ đó đưa ra được những chiến lược
hoàn hảo nhất. - Công nghệ AI với bộ nhớ hạn chế
Công nghệ AI này có thể tự nhận biết được những trường hợp bất ngờ.
Ngoài ra nó còn có thể đưa ra được những hướng xử lý tốt nhất.
- Lý thuyết về trí tuệ nhân tạo
Đây là một thuật ngữ tâm lý. Công nghệ AI này có thể tự mình suy nghĩ và
học hỏi những thứ xung quanh để áp dụng cho chính bản thân nó cho một
việc cụ thể. Loại công nghệ AI này chưa khả thi hiện nay.
- Công nghệ tự nhận thức
Công nghệ AI này có ý thức về chính mình và có những cư xử như người.
Ngoài ra nó còn có được cảm xúc của chính con người, nó có thể chia sẻ
buồn vui với người dùng. Tất nhiên, loại công nghệ AI này vẫn chưa khả thi.
2. ng dụng đánh cờ vua với máy nh
ng dụng đánh cờ vua với máy nh được xây dựng với mục đích cung cấp
một công cụ để người chơi có thể thực hành và cải thiện kỹ năng chơi cờ
của mình mọi lúc mọi nơi mà không cần một đối thủ thực sự. Mục êu này
không chỉ ớng tới việc tạo ra một đối thủ có khả năng thách thức người
chơi, mà còn nhằm mục đích nghiên cứu và phát triển các thuật toán trí
tuệ nhân tạo ên ến. Việc xây dựng ứng dụng này cũng giúp nhà phát
triển hiểu sâu hơn về cả quy tắc chơi cờ vua cũng như cách thức xây dựng
một hệ thống phức tạp có khả năng tương tác với người dùng và giải quyết
vấn đề.
3. Cờ vua
Cờ vua là một trò chơi chiến thuật cổ điển, được biết đến với độ phc tạp
và sâu sắc. Nó không chỉ là trò chơi giải trí mà còn là công cụ để phát triển
tư duy chiến lược và phản xạ. Trò chơi này bao gồm hai người chơi, mỗi
người điều khiển 16 quân cờ trên một bàn cờ 8x8. Mục êu cuối cùng là
chiếu bí Vua của đối phương. Để đạt được điều này, người chơi cần phi
hiểu rõ cách di chuyển của từng quân cờ và phát triển chiến lược dựa trên
nh hình trò chơi hiện tại.
II. LUT CHƠI
1. Bàn cờ vua
Bàn cờ vua bao gồm 8 ô dọc và 8 ô ngang, như vậy có tổng số 4 ô chia
làm 2 màu đen và trắng.
Dĩ nhiên các quân chỉ được phép di chuyển trong bài cờ vua. Mỗi quân
sẽ có kiểu di chuyển riêng tôi sẽ ớng dẫn sau.
Không giống như cờ ớng có cung và sông. Cờ vua xác định vị trí quân
cờ bằng tọa độ được đánh dấu bên lề bàn cờ.
2. Cách Di Chuyển Của Từng Quân Cờ
Tốt
Quân cờ cơ bản nhất trong cờ vua (mỗi bên có 8 quân Tt). Trong lần di
chuyển đầu ên, Tốt có thể ến về phía trước một hoặc hai ô, nhưng
chđược ến lên một ô trong các lần sau đó. Tốt chỉ tấn công được các
quân khác nằm chéo về phía trước một ô và không thể đi lùi.
Xe
Xe trông giống như một tòa tháp trong lâu đài. Nó có thể đi ngang hoặc
đi dọc tùy ý nếu không bị cản. Xe có thể tấn công các quân nằm trên
đường đi của nó.
Biểu tượng của Mã là hình con ngựa. Đây cũng là quân cờ phức tạp
nhất. Mã đi theo hình chữ ‘L’ được tạo bởi hai ô ngang và một ô dọc,
hoặc một ô ngang và hai ô dọc, chữ ‘L’ này có thể ngả theo mọi hướng.
Mã là quân duy nhất có thể nhảy qua đầu các quân khác. Nó chỉ tấn
công những quân nằm trong các ô mà nó có thnhảy tới.
ng
ợng chỉ đi chéo, nhưng có thể đi bao nhiêu ô tùy ý trừ phi bị cản.
Quân cờ này có hình như chiếc mũ của vị giám mục Thiên Chúa giáo.
Di chuyển theo những đường chéo. Có thể đi ến hoặc lùi. Quân Tượng
không giới hạn các ô chi chuyển trên đường chéo. Quân Tượng không
thnhảy qua các đầu quân khác.
Hậu
Hậu là quân quyền lực nhất trên bàn cờ (thường có vương miện nữ nh
hơn quân Vua). Nó có thể đi ngang, dọc, hoặc chéo tùy ý và tấn công
theo mọi hướng.
Vua
Vua chỉ có thể đi một ô mỗi lượt, di chuyển theo mọi hướng. Cách quân
Vua tấn công cũng tương tự như vậy. Đây là quân cờ mà bạn bằng mọi
giá không thể để mất, vì bạn sẽ thua cuộc nếu mất Vua.
3. Phân định thắng - thua
Chiếu hết
Nếu Vua của bạn bị chiếu, tức Vua của bạn đang bị đối phương tấn
công. Khi Vua bị chiếu, bạn buộc phải hóa giải nước chiếu ngay trong
ớc sau đó. Bạn có thể hóa giải nước chiếu bằng ba cách sau:
Di chuyển quân Vua tới một ô an toàn. Ô an toàn là vị trí mà Vua
không bị chiếu.
Bắt quân đang chiếu tướng.
Chặn đường chiếu bằng quân cờ khác. Cách này không có tác dụng
nếu quân đang chiếu tướng là Tốt hoặc Mã.
Trong trường hợp bạn không thể tránh hay cản phá được nước chiếu
của đối thủ. Vua của bạn bị bắt đồng nghĩa với ván cờ sẽ kết thúc.
Hết nước đi
Stalemate – ván cờ kết thúc với kết quả hòa. Hết ớc đi xảy ra khi Vua
bạn ở vào nh thế không bị chiếu nhưng cũng không còn ô an toàn nào để
đi tới. Một vài trường hơp xử hòa
Thỏa thuận hòa: Nếu hai người chơi cùng đồng ý rằng không bên
nào có thể thắng hoặc không còn cách nào để thắng, họ có thể đồng
ý hòa.
Thế cờ lặp lại: Nếu một thế cờ y hệt được lặp đi lặp lại tại ba thời
điểm khác nhau trong ván cờ, hai bên được tuyên hòa. Ví dụ, nếu
hai bên ếp tục di chuyển quân Mã đi qua đi lại trên một số ô, ván
cờ đó có kết quả hòa.
Hòa bằng luật 50 nước đi: Nếu cả hai người chơi không di chuyển
một quân Tốt nào hoặc không ăn quân nào trong 50 lượt liên tục,
ván cđược tuyên là hòa. Luật này khiến các bên không kéo dài ván
cờ và cũng ngăn các bên cố ý làm cho bên kia kiệt sức.
Khi không đủ lực lượng: Nếu cả hai bên đều không còn đủ lực
ợng để chiếu hết Vua đối phương, ván cờ được coi là hòa. Ví dụ,
một Mã và một Vua không thchiếu hết quân Vua đơn độc của đối
phương.
Nếu tất c các quân khác trừ quân Vua đã bị bắt và bị loại khỏi ván
cờ. Đây là một ví dụ của trường hợp không đủ lực lượng, vì một
quân Vua không thể tự mình chiếu hết hoặc thậm chí chiếu tướng
quân Vua kia. Ván cờ sẽ có kết quả hòa.
III. NGÔN NGỮ LẬP TRÌNH VÀ THƯ VIỆN
1. Python
Việc sử dụng Python để lập trình ứng dụng đánh cờ vua với máy nh là
một lựa chọn phổ biến, đặc biệt trong các dự án cá nhân, học thuật hoặc
nguyên mẫu (prototype), vì một số lý do sau:
Dễ học, dễ viết, cú pháp ngắn gọn
Thích hợp cho người mới hoặc lập trình nhanh nguyên mẫu (prototyping).
Thư viện hỗ trợ phong phú
Có sẵn rất nhiều thư viện phục vụ:
o Pygame: vẽ bàn cờ, xử lý giao diện game.
o python-chess: xử lý logic luật cờ, kiểm tra hợp lệ ớc đi, checkmate,
stalemate...
o Minimax, Alpha-Beta pruning: dễ cài đặt thuật toán AI cơ bản.
o NumPy: xử lý ma trận bàn cờ hiệu quả.
Dễ kiểm thử và sửa lỗi
Python có khả năng in debug dễ dàng, giúp theo dõi quá trình AI "nghĩ" nưc
đi.
Tính linh hoạt và mở rộng
Dễ ch hợp AI nâng cao (machine learning, neural network) nếu muốn sau
này.
2. Thư viện
Để xây dựng ứng dụng đánh cờ vua, việc lựa chọn thư viện phù hợp là
rất quan trọng. Dưới đây là một số thư viện Python thông dụng và
cách chúng được sử dụng trong việc xây dựng ứng dụng python-chess
python-chess là một thư viện cực kỳ mạnh mẽ và linh hoạt trong việc
xử lý các nhiệm vụ liên quan đến cờ vua. Nó không chỉ cung cấp các
công cụ để tạo và quản lý trng thái bàn cờ, mà còn hỗ trợ đọc và viết
PGN (Portable Game Notaon), FEN (Forsyth-Edwards Notaon), và
thậm chí cả việc giải quyết các bài toán cờ vua. Thư viện này thường
được sử dụng như là nền tảng cơ bản để phát triển các ứng dụng cờ
vua.
Pygame và Tkinter
Pygame và Tkinter là hai thư viện cho phép xây dựng giao diện người
dùng đồ họa (GUI). Pygame chủ yếu được sử dụng cho việc phát triển
trò chơi với các nh năng đồ họa và âm thanh tốt, trong khi Tkinter là
một thư viện giao diện người dùng êu chuẩn của Python, thích hp
cho việc xây dựng các ứng dụng đơn giản và nhẹ.
Pygame cung cấp một môi trường phong phú với đầy đủ các chức năng
cần thiết để tạo ra một trò chơi cờ vua đồ họa đẹp mắt và mượt mà.
Trong khi đó, Tkinter cung cấp các công cụ cơ bản để tạo ra các cửa sổ,
nút bấm, và các phần tử tương tác khác mà mt ứng dụng cờ vua cần
có.
IV. THUT TOÁN
Giải thuật Minimax Hai người chơi trong game được đại diện là MAX và MIN.
MAX đại diện cho người chơi luôn muốn chiến thắng và cố gắng tối ưu hóa ưu
thế của mình còn MIN đại diện cho người chơi cố gắng cho người MAX giành
số điểm càng thấp càng tốt. Giải thuật Minimax thể hiện bằng cách định trị các
Node trên cây trò chơi: Node thuộc lớp MAX thì gán cho nó giá trị lớn nhất của
con Node đó. Node thuộc lớp MIN thì gán cho nó giá trị nhnhất của con
Node đó. Từ các giá trị này người chơi sẽ lựa chọn cho mình nước đi ếp theo
hợp lý nhất.
Thuật Tn Minimax và Cải Tiến trong cờ vua
Minimax: Thuật toán Minimax là một thuật toán m kiếm trò chơi tổng
quát dùng cho trò chơi hai người có thông n hoàn chỉnh, như cờ vua. Nó
đi qua cây trò chơi để m nước đi tối ưu bằng cách giả định rằng đối thủ
cũng chơi tối ưu. Trong cờ vua, nó nh toán đến một độ sâu nhất định và
sử dụng một hàm đánh giá để xác định giá trị của mỗi vị trí.
Cải Tiến: Alpha-beta pruning là một cải ến của thuật toán Minimax, giúp
giảm đáng k số ợng nút cần phải xem xét. Nó "cắt tỉa" các nhánh ca
y không cần thiết để không cần phải đánh giá.
Tính Toán Điểm và Đánh Giá Vị T
Mỗi vị trí trên bàn cờ được đánh giá dựa trên nhiều yếu tố như số ợng
và loại quân còn lại, vị trí của quân cờ, cấu trúc pawns, an toàn của vua, và
nhiều hơn nữa
V. LẬP TRÌNH ỨNG DỤNG
1. Thiết kế giao diện (UI-User Interface)
Tạo hình quân cờ , thiết lập màu sắc và sử dụng thư viện chess để tạo
bàn cờ
Vẽ bàn cờ các quân cờ lên màn hình, hiển thị gợi ý nước đi hợp lệ
và ô đang được chọn.
Tô màu các ô theo bàn cờ chuẩn (nâu trắng).
Hiển thị:
Quân cờ tương ứng.
ớc đi hợp lệ (dấu chấm xanh).
ớc đi ăn quân địch (ô đỏ).
Ô đang được chọn (viền vàng).
Cách hoạt động:
Duyệt qua từng hàng (row) và cột (col) → Tính được ô tương
ứng bằng chess.square(col, 7 - row) (do khác trục giữa pygame
và chess).
Kiểm tra nếu ô nằm trong danh sách nước đi (legal_moves) → tô
màu phù hợp.
V hình ảnh quân cờ bằng screen.blit(...)
2. Xử lý thuật toán
Đánh giá tổng điểm bàn cờ hiện tại, giúp AI hiểu ai đang có lợi thế.
Mỗi quân cờ có giá trị:
o Tốt = 1, Mã/Tượng = 3, Xe = 5, Hậu = 9.
o Vua = 0 (vì không nên đánh giá theo vua).
Nếu là quân trắng → cộng điểm, đen → trừ đim.
Kết quả dương: người chơi đang lợi thế, âm: máy đang
lợi thế.
Thuật toán AI dùng đchọn nước đi tốt nhất.
Cơ chế:
Duyệt toàn bộ ớc đi hợp lệ.
Với mỗi nước đi:
o Thực hiện (board.push()). o Gọi đệ quy để đánh giá các nước
ếp theo.
o Quay lại trạng thái cũ (board.pop()).
Alpha-Beta giúp cắt bỏ những nhánh không cần thiết, giúp tăng tốc.
Cho máy đi nước cờ bằng cách gọi minimax
Gọi minimax với depth=3: AI sẽ “nghĩ” 3 lượt trước.
Nếu m được nước đi tốt nhất (move) thì thực hiện board.push(move)
Hiển thị thông báo kết thúc trò chơi (thắng, thua, hòa).
Tạo text bằng pygame.font.SysFont.
Hiển thị lên giữa màn hình.
Dừng lại 3 giây (pygame.me.wait(3000)).
3. Luồng chơi chính (Game Loop)
Tương tác người chơi (User Input) Khi người chơi
nhấn chuột:
Chương trình xác định vị trí chuột ứng với ô trên bàn cờ.
Nếu chưa chọn quân, thì xem quân ở ô đó có phải của người chơi
không → nếu có thì lưu lại và đánh dấu các nước đi hợp lệ.
Nếu đã chọn quân, thì kiểm tra xem nước đi có hợp lệ không → nếu
hợp lệ, thực hiện nước đi và chuyển lượt sang máy.
ợt của máy (AI Turn)
Khi đến lượt máy (player_turn == False), hàm ai_move() được gọi.
Đây là nơi bạn sẽ cài đặt thuật tn AI (ví dụ: Minimax, Alpha-Beta
pruning, hay thư viện sẵn có như chess.engine).
Sau khi máy thực hiện nước đi, nó trợt về cho người chơi
(player_turn = True).
Kiểm tra kết thúc trò chơi
Mỗi vòng lặp đều kiểm tra nếu trò chơi kết thúc:
Dùng board.is_game_over() đkiểm tra ván cờ đã hết chưa (theo lut
cờ vua).
Nếu có, gọi board.result() để biết ai thắng:
o "1-0" → trắng thắng (người) o "0-
1" → đen thắng (máy) o "1/2-1/2" →
hòa
Hiển thị thông điệp kết thúc và kết thúc vòng lp.
4.
Demo ứng dụng
Giao Diện Người Dùng:
Bàn cờ vua 8x8 với quân cờ đưc hiển thị rõ ràng.
Người chơi có thể chọn quân cờ và di chuyển chúng trên bàn cờ theo
luật chơi.
Hiển thị thông n về trạng thái hiện tại của trò chơi
(lượt đi, chiếu, chiếu bí,...)
Hot Động:
Người chơi di chuyển quân cờ trên bàn cờ.
Máy nh sử dụng AI để nh toán và thực hiện nước đi ếp theo.
Trò chơi ếp tục cho đến khi kết thúc (chiếu bí, hoà, hoặc một
trong hai bên bỏ cuc).
Tính Năng Khác:
• Có thể có các tùy chọn để xem lại trò chơi, đặt lại bàn cờ, hoặc điều
chỉnh mức độ khó của AI. Giao diện ban đầu của trò chơi
Giao diện khi người chơi chọn vào quân cờ để di chuyển
Giao diện khi quân mình có thể ăn quân địch
HẾT

Preview text:

TRƯỜNG ĐẠI HỌC KIẾN TRÚC ĐÀ NẴNG
KHOA CÔNG NGHỆ THÔNG TIN – NGÀNH CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN
ĐỀ TÀI : XÂY DỰNG ỨNG DỤNG ĐÁNH CỜ VUA VỚI MÁY TÍNH
Môn học : Trí tuệ nhân tạo
GVHD : Nguyễn Năng Hùng Vân Lớp : 22CT1
Họ và tên : Lê Văn Thái MSSV : 2251220232
Đà Nẵng, Tháng 5 năm 2025 Mục lục
I. GIỚI THIỆU .................................................................................................................. 2
1. Trí tuệ nhân tạo là gì ? ............................................................................................ 3
2. Ứng dụng đánh cờ vua với máy tính ..................................................................... 4
3. Cờ vua ..................................................................................................................... 4
II. LUẬT CHƠI .................................................................................................................. 4
1. Bàn cờ vua .............................................................................................................. 4
2. Cách Di Chuyển Của Từng Quân Cờ ....................................................................... 4
3. Phân định thắng - thua .......................................................................................... 5
III. NGÔN NGỮ LẬP TRÌNH VÀ THƯ VIỆN ...................................................................... 6
1. Python ..................................................................................................................... 6
2. Thư viện .................................................................................................................. 7
IV. THUẬT TOÁN ............................................................................................................. 7
V. LẬP TRÌNH ỨNG DỤNG .............................................................................................. 8
1. Thiết kế giao diện (UI-User Interface) ................................................................... 8
2. Xử lý thuật toán ...................................................................................................... 9
3. Luồng chơi chính (Game Loop) ............................................................................ 12
4. Demo ứng dụng .................................................................................................... 13 I.GIỚI THIỆU
1. Trí tuệ nhân tạo là gì ?
Trí tuệ nhân tạo (AI - Artificial Intelligence) là lĩnh vực nghiên cứu và phát
triển các hệ thống máy tính có khả năng thực hiện các nhiệm vụ mà
thường cần đến trí thông minh của con người. AI bao gồm nhiều công nghệ
và kỹ thuật khác nhau, như:
- Machine Learning (Học máy): Hệ thống có khả năng học hỏi từ dữ
liệu và cải thiện hiệu suất theo thời gian mà không cần lập trình lại.
- Natural Language Processing (Xử lý ngôn ngữ tự nhiên): Cho phép
máy tính hiểu, phân tích và tạo ra ngôn ngữ con người, như trong chatbots hay trợ lý ảo.
- Computer Vision (Thị giác máy tính): Giúp máy tính nhận diện và
phân tích hình ảnh hoặc video.
- Robotics (Ngành robot): Kết hợp AI để tạo ra các robot có khả năng tự
động hóa và thực hiện các nhiệm vụ phức tạp.
AI được áp dụng rộng rãi trong nhiều lĩnh vực, từ chăm sóc sức khỏe, tài
chính, đến giao thông và giải trí, mang lại nhiều lợi ích và tiềm năng đổi mới.
Lĩnh vực và ứng dụng
AI ứng dụng rộng rãi trong nhiều lĩnh vực, từ y khoa, tài chính, sản xuất,
cho đến giáo dục và nghệ thuật. Một số ứng dụng phổ biến bao gồm xe tự
lái, hệ thống gợi ý, robot tự động, và trợ lý ảo
Phân loại công nghệ AI
- Công nghệ AI phản ứng (Reactive Machine)
Công nghệ AI phản ứng là công nghệ có khả năng phân tích được những
hành động của bản thân và đối thủ. Từ đó đưa ra được những chiến lược
hoàn hảo nhất. - Công nghệ AI với bộ nhớ hạn chế
Công nghệ AI này có thể tự nhận biết được những trường hợp bất ngờ.
Ngoài ra nó còn có thể đưa ra được những hướng xử lý tốt nhất.
- Lý thuyết về trí tuệ nhân tạo
Đây là một thuật ngữ tâm lý. Công nghệ AI này có thể tự mình suy nghĩ và
học hỏi những thứ xung quanh để áp dụng cho chính bản thân nó cho một
việc cụ thể. Loại công nghệ AI này chưa khả thi hiện nay.
- Công nghệ tự nhận thức
Công nghệ AI này có ý thức về chính mình và có những cư xử như người.
Ngoài ra nó còn có được cảm xúc của chính con người, nó có thể chia sẻ
buồn vui với người dùng. Tất nhiên, loại công nghệ AI này vẫn chưa khả thi.
2. Ứng dụng đánh cờ vua với máy tính
Ứng dụng đánh cờ vua với máy tính được xây dựng với mục đích cung cấp
một công cụ để người chơi có thể thực hành và cải thiện kỹ năng chơi cờ
của mình mọi lúc mọi nơi mà không cần một đối thủ thực sự. Mục tiêu này
không chỉ hướng tới việc tạo ra một đối thủ có khả năng thách thức người
chơi, mà còn nhằm mục đích nghiên cứu và phát triển các thuật toán trí
tuệ nhân tạo tiên tiến. Việc xây dựng ứng dụng này cũng giúp nhà phát
triển hiểu sâu hơn về cả quy tắc chơi cờ vua cũng như cách thức xây dựng
một hệ thống phức tạp có khả năng tương tác với người dùng và giải quyết vấn đề. 3. Cờ vua
Cờ vua là một trò chơi chiến thuật cổ điển, được biết đến với độ phức tạp
và sâu sắc. Nó không chỉ là trò chơi giải trí mà còn là công cụ để phát triển
tư duy chiến lược và phản xạ. Trò chơi này bao gồm hai người chơi, mỗi
người điều khiển 16 quân cờ trên một bàn cờ 8x8. Mục tiêu cuối cùng là
chiếu bí Vua của đối phương. Để đạt được điều này, người chơi cần phải
hiểu rõ cách di chuyển của từng quân cờ và phát triển chiến lược dựa trên
tình hình trò chơi hiện tại. II. LUẬT CHƠI 1. Bàn cờ vua
Bàn cờ vua bao gồm 8 ô dọc và 8 ô ngang, như vậy có tổng số 4 ô chia làm 2 màu đen và trắng.
Dĩ nhiên các quân chỉ được phép di chuyển trong bài cờ vua. Mỗi quân
sẽ có kiểu di chuyển riêng tôi sẽ hướng dẫn sau.
Không giống như cờ tướng có cung và sông. Cờ vua xác định vị trí quân
cờ bằng tọa độ được đánh dấu bên lề bàn cờ.
2. Cách Di Chuyển Của Từng Quân Cờ Tốt
Quân cờ cơ bản nhất trong cờ vua (mỗi bên có 8 quân Tốt). Trong lần di
chuyển đầu tiên, Tốt có thể tiến về phía trước một hoặc hai ô, nhưng
chỉ được tiến lên một ô trong các lần sau đó. Tốt chỉ tấn công được các
quân khác nằm chéo về phía trước một ô và không thể đi lùi. Xe
Xe trông giống như một tòa tháp trong lâu đài. Nó có thể đi ngang hoặc
đi dọc tùy ý nếu không bị cản. Xe có thể tấn công các quân nằm trên đường đi của nó.
Biểu tượng của Mã là hình con ngựa. Đây cũng là quân cờ phức tạp
nhất. Mã đi theo hình chữ ‘L’ được tạo bởi hai ô ngang và một ô dọc,
hoặc một ô ngang và hai ô dọc, chữ ‘L’ này có thể ngả theo mọi hướng.
Mã là quân duy nhất có thể nhảy qua đầu các quân khác. Nó chỉ tấn
công những quân nằm trong các ô mà nó có thể nhảy tới. Tượng
Tượng chỉ đi chéo, nhưng có thể đi bao nhiêu ô tùy ý trừ phi bị cản.
Quân cờ này có hình như chiếc mũ của vị giám mục Thiên Chúa giáo.
Di chuyển theo những đường chéo. Có thể đi tiến hoặc lùi. Quân Tượng
không giới hạn các ô chi chuyển trên đường chéo. Quân Tượng không
thể nhảy qua các đầu quân khác. Hậu
Hậu là quân quyền lực nhất trên bàn cờ (thường có vương miện nữ tính
hơn quân Vua). Nó có thể đi ngang, dọc, hoặc chéo tùy ý và tấn công theo mọi hướng. Vua
Vua chỉ có thể đi một ô mỗi lượt, di chuyển theo mọi hướng. Cách quân
Vua tấn công cũng tương tự như vậy. Đây là quân cờ mà bạn bằng mọi
giá không thể để mất
, vì bạn sẽ thua cuộc nếu mất Vua.
3. Phân định thắng - thua Chiếu hết
Nếu Vua của bạn bị chiếu, tức Vua của bạn đang bị đối phương tấn
công. Khi Vua bị chiếu, bạn buộc phải hóa giải nước chiếu ngay trong
bước sau đó
. Bạn có thể hóa giải nước chiếu bằng ba cách sau: •
Di chuyển quân Vua tới một ô an toàn. Ô an toàn là vị trí mà Vua không bị chiếu. •
Bắt quân đang chiếu tướng. •
Chặn đường chiếu bằng quân cờ khác. Cách này không có tác dụng
nếu quân đang chiếu tướng là Tốt hoặc Mã.
Trong trường hợp bạn không thể tránh hay cản phá được nước chiếu
của đối thủ. Vua của bạn bị bắt đồng nghĩa với ván cờ sẽ kết thúc. Hết nước đi
Stalemate – ván cờ kết thúc với kết quả hòa. Hết nước đi xảy ra khi Vua
bạn ở vào tình thế không bị chiếu nhưng cũng không còn ô an toàn nào để
đi tới. Một vài trường hơp xử hòa
Thỏa thuận hòa: Nếu hai người chơi cùng đồng ý rằng không bên
nào có thể thắng hoặc không còn cách nào để thắng, họ có thể đồng ý hòa. •
Thế cờ lặp lại: Nếu một thế cờ y hệt được lặp đi lặp lại tại ba thời
điểm khác nhau trong ván cờ, hai bên được tuyên hòa. Ví dụ, nếu
hai bên tiếp tục di chuyển quân Mã đi qua đi lại trên một số ô, ván
cờ đó có kết quả hòa. •
Hòa bằng luật 50 nước đi: Nếu cả hai người chơi không di chuyển
một quân Tốt nào hoặc không ăn quân nào trong 50 lượt liên tục,
ván cờ được tuyên là hòa. Luật này khiến các bên không kéo dài ván
cờ và cũng ngăn các bên cố ý làm cho bên kia kiệt sức. •
Khi không đủ lực lượng: Nếu cả hai bên đều không còn đủ lực
lượng để chiếu hết Vua đối phương, ván cờ được coi là hòa. Ví dụ,
một Mã và một Vua không thể chiếu hết quân Vua đơn độc của đối phương. •
Nếu tất cả các quân khác trừ quân Vua đã bị bắt và bị loại khỏi ván
cờ. Đây là một ví dụ của trường hợp không đủ lực lượng, vì một
quân Vua không thể tự mình chiếu hết hoặc thậm chí chiếu tướng
quân Vua kia. Ván cờ sẽ có kết quả hòa. III.
NGÔN NGỮ LẬP TRÌNH VÀ THƯ VIỆN 1. Python
Việc sử dụng Python để lập trình ứng dụng đánh cờ vua với máy tính là
một lựa chọn phổ biến, đặc biệt trong các dự án cá nhân, học thuật hoặc
nguyên mẫu (prototype), vì một số lý do sau:
Dễ học, dễ viết, cú pháp ngắn gọn
Thích hợp cho người mới hoặc lập trình nhanh nguyên mẫu (prototyping).
Thư viện hỗ trợ phong phú
Có sẵn rất nhiều thư viện phục vụ:
o Pygame: vẽ bàn cờ, xử lý giao diện game.
o python-chess: xử lý logic luật cờ, kiểm tra hợp lệ nước đi, checkmate, stalemate...
o Minimax, Alpha-Beta pruning: dễ cài đặt thuật toán AI cơ bản.
o NumPy: xử lý ma trận bàn cờ hiệu quả.
Dễ kiểm thử và sửa lỗi
Python có khả năng in debug dễ dàng, giúp theo dõi quá trình AI "nghĩ" nước đi.
Tính linh hoạt và mở rộng
Dễ tích hợp AI nâng cao (machine learning, neural network) nếu muốn sau này. 2. Thư viện
Để xây dựng ứng dụng đánh cờ vua, việc lựa chọn thư viện phù hợp là
rất quan trọng. Dưới đây là một số thư viện Python thông dụng và
cách chúng được sử dụng trong việc xây dựng ứng dụng python-chess
python-chess là một thư viện cực kỳ mạnh mẽ và linh hoạt trong việc
xử lý các nhiệm vụ liên quan đến cờ vua. Nó không chỉ cung cấp các
công cụ để tạo và quản lý trạng thái bàn cờ, mà còn hỗ trợ đọc và viết
PGN (Portable Game Notation), FEN (Forsyth-Edwards Notation), và
thậm chí cả việc giải quyết các bài toán cờ vua. Thư viện này thường
được sử dụng như là nền tảng cơ bản để phát triển các ứng dụng cờ vua. Pygame và Tkinter
Pygame và Tkinter là hai thư viện cho phép xây dựng giao diện người
dùng đồ họa (GUI). Pygame chủ yếu được sử dụng cho việc phát triển
trò chơi với các tính năng đồ họa và âm thanh tốt, trong khi Tkinter là
một thư viện giao diện người dùng tiêu chuẩn của Python, thích hợp
cho việc xây dựng các ứng dụng đơn giản và nhẹ.
Pygame cung cấp một môi trường phong phú với đầy đủ các chức năng
cần thiết để tạo ra một trò chơi cờ vua đồ họa đẹp mắt và mượt mà.
Trong khi đó, Tkinter cung cấp các công cụ cơ bản để tạo ra các cửa sổ,
nút bấm, và các phần tử tương tác khác mà một ứng dụng cờ vua cần có. IV. THUẬT TOÁN
Giải thuật Minimax Hai người chơi trong game được đại diện là MAX và MIN.
MAX đại diện cho người chơi luôn muốn chiến thắng và cố gắng tối ưu hóa ưu
thế của mình còn MIN đại diện cho người chơi cố gắng cho người MAX giành
số điểm càng thấp càng tốt. Giải thuật Minimax thể hiện bằng cách định trị các
Node trên cây trò chơi: Node thuộc lớp MAX thì gán cho nó giá trị lớn nhất của
con Node đó. Node thuộc lớp MIN thì gán cho nó giá trị nhỏ nhất của con
Node đó. Từ các giá trị này người chơi sẽ lựa chọn cho mình nước đi tiếp theo hợp lý nhất.
Thuật Toán Minimax và Cải Tiến trong cờ vua
Minimax: Thuật toán Minimax là một thuật toán tìm kiếm trò chơi tổng
quát dùng cho trò chơi hai người có thông tin hoàn chỉnh, như cờ vua. Nó
đi qua cây trò chơi để tìm nước đi tối ưu bằng cách giả định rằng đối thủ
cũng chơi tối ưu. Trong cờ vua, nó tính toán đến một độ sâu nhất định và
sử dụng một hàm đánh giá để xác định giá trị của mỗi vị trí.
Cải Tiến: Alpha-beta pruning là một cải tiến của thuật toán Minimax, giúp
giảm đáng kể số lượng nút cần phải xem xét. Nó "cắt tỉa" các nhánh của
cây không cần thiết để không cần phải đánh giá.
Tính Toán Điểm và Đánh Giá Vị Trí
Mỗi vị trí trên bàn cờ được đánh giá dựa trên nhiều yếu tố như số lượng
và loại quân còn lại, vị trí của quân cờ, cấu trúc pawns, an toàn của vua, và nhiều hơn nữa V.
LẬP TRÌNH ỨNG DỤNG
1. Thiết kế giao diện (UI-User Interface)
Tạo hình quân cờ , thiết lập màu sắc và sử dụng thư viện chess để tạo bàn cờ
Vẽ bàn cờ và các quân cờ lên màn hình, hiển thị gợi ý nước đi hợp lệ
và ô đang được chọn.
Tô màu các ô theo bàn cờ chuẩn (nâu – trắng). Hiển thị: • Quân cờ tương ứng.
• Nước đi hợp lệ (dấu chấm xanh).
• Nước đi ăn quân địch (ô đỏ).
• Ô đang được chọn (viền vàng). Cách hoạt động:
• Duyệt qua từng hàng (row) và cột (col) → Tính được ô tương
ứng bằng chess.square(col, 7 - row) (do khác trục giữa pygame và chess).
• Kiểm tra nếu ô nằm trong danh sách nước đi (legal_moves) → tô màu phù hợp.
• Vẽ hình ảnh quân cờ bằng screen.blit(...)
2. Xử lý thuật toán
Đánh giá tổng điểm bàn cờ hiện tại, giúp AI hiểu ai đang có lợi thế.
Mỗi quân cờ có giá trị:
o Tốt = 1, Mã/Tượng = 3, Xe = 5, Hậu = 9.
o Vua = 0 (vì không nên đánh giá theo vua). •
Nếu là quân trắng → cộng điểm, đen → trừ điểm. •
Kết quả dương: người chơi đang lợi thế, âm: máy đang lợi thế.
Thuật toán AI dùng để chọn nước đi tốt nhất. Cơ chế:
Duyệt toàn bộ nước đi hợp lệ. • Với mỗi nước đi:
o Thực hiện (board.push()). o Gọi đệ quy để đánh giá các nước tiếp theo.
o Quay lại trạng thái cũ (board.pop()). •
Alpha-Beta giúp cắt bỏ những nhánh không cần thiết, giúp tăng tốc.
Cho máy đi nước cờ bằng cách gọi minimax
• Gọi minimax với depth=3: AI sẽ “nghĩ” 3 lượt trước.
• Nếu tìm được nước đi tốt nhất (move) thì thực hiện board.push(move)
Hiển thị thông báo kết thúc trò chơi (thắng, thua, hòa).
• Tạo text bằng pygame.font.SysFont.
• Hiển thị lên giữa màn hình.
• Dừng lại 3 giây (pygame.time.wait(3000)).
3. Luồng chơi chính (Game Loop)
Tương tác người chơi (User Input) Khi người chơi nhấn chuột: •
Chương trình xác định vị trí chuột ứng với ô trên bàn cờ. •
Nếu chưa chọn quân, thì xem quân ở ô đó có phải của người chơi
không → nếu có thì lưu lại và đánh dấu các nước đi hợp lệ. •
Nếu đã chọn quân, thì kiểm tra xem nước đi có hợp lệ không → nếu
hợp lệ, thực hiện nước đi và chuyển lượt sang máy.
Lượt của máy (AI Turn)
Khi đến lượt máy (player_turn == False), hàm ai_move() được gọi. •
Đây là nơi bạn sẽ cài đặt thuật toán AI (ví dụ: Minimax, Alpha-Beta
pruning
, hay thư viện sẵn có như chess.engine). •
Sau khi máy thực hiện nước đi, nó trả lượt về cho người chơi (player_turn = True).
Kiểm tra kết thúc trò chơi
Mỗi vòng lặp đều kiểm tra nếu trò chơi kết thúc: •
Dùng board.is_game_over() để kiểm tra ván cờ đã hết chưa (theo luật cờ vua). •
Nếu có, gọi board.result() để biết ai thắng:
o "1-0" → trắng thắng (người) o "0-
1" → đen thắng (máy) o "1/2-1/2" → hòa •
Hiển thị thông điệp kết thúc và kết thúc vòng lặp. 4. Demo ứng dụng
Giao Diện Người Dùng:
• Bàn cờ vua 8x8 với quân cờ được hiển thị rõ ràng.
• Người chơi có thể chọn quân cờ và di chuyển chúng trên bàn cờ theo luật chơi.
• Hiển thị thông tin về trạng thái hiện tại của trò chơi
(lượt đi, chiếu, chiếu bí,...) Hoạt Động:
Người chơi di chuyển quân cờ trên bàn cờ. •
Máy tính sử dụng AI để tính toán và thực hiện nước đi tiếp theo. •
Trò chơi tiếp tục cho đến khi kết thúc (chiếu bí, hoà, hoặc một trong hai bên bỏ cuộc). Tính Năng Khác:
• Có thể có các tùy chọn để xem lại trò chơi, đặt lại bàn cờ, hoặc điều
chỉnh mức độ khó của AI. Giao diện ban đầu của trò chơi
Giao diện khi người chơi chọn vào quân cờ để di chuyển
Giao diện khi quân mình có thể ăn quân địch HẾT