Đối với các Game thuộc dạng bảng như cờ vua, cờ tướng, cờ caro,… Thì việc tìm kiếm các bước đi tốt nhất để có thể chiến thắng là vấn đề mấu chốt, tìm kiếm là kỹ thuật giải quyết vấn đề t
Trang 11
MỤC LỤC
Lời nói đầu 4
Chương 1 Kỹ thuật xây dựng trò chơi 5
1 Phân loại trò chơi 5
1.1 Trò chơi đối xứng và bất đối xứng 5
1.2 Trò chơi tổng bằng không và trò chơi tổng khác không 6
1.3 Trò chơi đồng thời và trò chơi tuần tự 6
1.4 Trò chơi thông tin hoàn hảo và trò chơi thông tin không hoàn hảo 7
1.5 Trò chơi dài vô tận 7
2 Trí tuệ nhân tạo trong trò chơi 8
3 Các kỹ thuật tìm kiếm 9
3.1 Tìm kiếm không có thông tin 9
3.1.1 Tìm kiếm trên danh sách 9
3.1.2 Tìm kiếm trên cây 10
3.1.3 Tìm kiếm trên đồ thị 10
3.2 Tìm kiếm có thông tin 11
3.2.1 Tìm kiếm Heuristic 12
3.2.2 Phương pháp tìm kiếm leo đồi 13
3.2.3 Phương pháp tìm kiếm tốt nhất - đầu tiên 16
3.3 Tìm kiếm đối kháng 18
3.3.1 Cây trò chơi và vấn đề tìm kiếm trên cây trò chơi 18
3.3.2 Chiến lược Minimax 21
3.3.3 Phương pháp cắt cụt alpha – beta 24
Trang 22
3.4 Tìm kiếm thỏa mãn rằng buộc 30
Chương 2 Trò chơi cờ vua và ngôn ngữ lập trình C# 31
1.Trò chơi cờ vua 31
1.1 Giới thiệu về cờ vua 31
1.2 Nguyên lý chơi cờ vua 31
1.3 Chiến lược và chiến thuật 34
1.4 Xây dựng trò chơi cờ vua 41
1.4.1 Người với máy 41
1.4.2 Người với người 47
1.4.2.1 Hai người chơi Offline trên cùng một máy 47
1.4.2.2 Hai người chơi Online qua mạng LAN 56
2 Ngôn ngữ lập trình C# 61
2.1 Lịch sử về ngôn ngữ C# 61
2.2 Những thế mạnh của ngôn ngữ C# 62
2.3 Các bước chuẩn bị cho chương trình 64
Chương 3 Cài đặt chương trình 66
1.Giao diện chính của chương trình 66
2.Một số chức năng chính của chương trình 67
2.1 Tạo Game 67
2.2 Lưu Game 67
2.3 Mở Game 68
2.4 Chức năng Lùi Lại 69
2.5 Chức năng xem quân bị ăn 69
2.6 Chức năng Người với Người 70
Trang 33
2.7 Chức năng Người với Máy 70
2.8 Chức năng Chơi Qua Mạng 71
2.9 Chức năng phong cấp cho Tốt 71
Kết luận 72
Tài liệu tham khảo 74
Phụ lục 75
Trang 44
Lời nói đầu
Ngày nay, do nhu cầu đời sống của con người ngày càng được nâng cao, trong đó nhu cầu giải trí của con người được quan tâm đến rất nhiều Việc giải trí bằng Game máy tính ngày càng phát triển nhanh và lan rộng ra do sự lôi cuốn rất mạnh mẽ của nó Hầu như ai sử dụng máy tính cũng đều giải trí bằng một số game nào đó trên máy tính Có thể nói Game là một thể loại phong phú nhất trong tất cả các chương trình trên máy tính
Các loại hình Game hiện nay rất đa dạng từ Game hành động, Game trí tuệ, Game chiến lược,… Cờ vua là một trong những Game trí tuệ phổ biến nhất thế giới; nó được nói đến không chỉ như là một trò chơi mà còn là nghệ thuật, khoa học và thể thao Cờ vua đôi khi được nhìn nhận như là trò chơi chiến tranh trừu tượng, cũng như là "các cuộc đấu trí tuệ", và việc chơi cờ vua được coi như
là một cách để rèn luyện tư duy và bản lĩnh Cờ vua được chơi để tiêu khiển cũng như để thi đấu trong các câu lạc bộ cờ vua, các giải đấu, chơi trực tuyến
Mặc dù hiện nay các chương trình Game rất nhiều, nhưng để có thể viết ra được một chương trình Game hay có thể chơi được và đáp ứng được sự yêu thích của người chơi là một điều không dễ Tuy vậy, với niềm đam mê về Game máy tính, em đã lựa chọn đề tài:
KỸ THUẬT XÂY DỰNG TRÒ CHƠI, ỨNG DỤNG XÂY DỰNG TRÒ CHƠI CỜ VUA ĐỐI KHÁNG
Vì thời gian thực hiện đề tài có hạn nên trong chương trình còn có nhiều thiếu sót Kính mong các thầy cô và các bạn góp ý để Đề Tài của em hoàn thiện hơn
Trang 55
Chương 1 Kỹ thuật xây dựng trò chơi
1 Phân loại trò chơi
1.1 Trò chơi đối xứng và bất đối xứng
Trò chơi đối xứng là một trò chơi mà phần lợi cho việc chơi một chiến thuật nào đó chỉ phụ thuộc vào các chiến thuật được sử dụng, chứ không phụ thuộc vào người nào đang chơi Nếu như tính danh của những người chơi có thể thay đổi mà không làm thay đổi phần lợi đối với chiến thuật chơi, thì một trò chơi là đối xứng Nhiều trò chơi 2×2 thường được nghiên cứu là đối xứng
Những biểu diễn chuẩn của trò chơi con gà, song đề tù nhân, đi săn nai là những
trò chơi đối xứng
Đa số những trò chơi bất đối xứng được nghiên cứu là những trò chơi mà
các tập hợp chiến thuật khác nhau được sử dụng bởi hai người chơi Chẳng hạn, trò chơi tối hậu thư và tương tự như vậy trò nhà độc tài có chiến thuật khác nhau
cho mỗi người chơi Tuy vậy, có thể xảy ra trường hợp một trò chơi có những chiến thuật giống nhau cho cả hai người chơi, nhưng vẫn bất đối xứng Chẳng hạn, trò chơi được minh họa dưới đây là bất đối xứng mặc dù cho có cùng tập các chiến thuật cho cả 2 người chơi
Hình 1.1.1 Một trò chơi bất đối xứng
Trang 66
1.2 Trò chơi tổng bằng không và trò chơi tổng khác không
Trong trò chơi tổng bằng không, với mọi tổ hợp của các chiến lược chơi, tổng điểm của tất cả các người chơi trong ván chơi luôn bằng 0 Nói một cách không chính thức, đấu thủ này hưởng lợi trên thiệt hại của các đấu thủ khác
Ví dụ trò Poker, trong đó người này thắng số điểm bằng đúng số điểm mà người kia thua Các loại cờ cổ điển như cờ vây, cờ vua và cờ tướng cũng là các trò chơi tổng bằng không Nhiều trò chơi mà các nhà lý thuyết trò chơi nghiên
cứu, trong đó có song đề tù nhân nổi tiếng, là các trò chơi tổng khác không, do có
một số kết cục có tổng kết quả lớn hơn hoặc nhỏ hơn không Nói một cách không chính thức, trong các trò chơi tổng khác không, một thu hoạch của đấu thủ này không nhất thiết tương ứng với một thiệt hại của một đấu thủ khác Có thể biến đổi một trò chơi bất kỳ thành một trò chơi tổng bằng không bằng cách bổ sung một đấu thủ "bù nhìn" sao cho các thiệt hại của đấu thủ này bù lại tổng thu hoạch của các đấu thủ khác
1.3 Trò chơi đồng thời và trò chơi tuần tự
Trong các trò chơi đồng thời (Simultaneous game), cả hai đấu thủ thực hiện các nước đi một cách đồng thời, hoặc nếu không thì đấu thủ này sẽ không biết về các hành động trước đó của các đối thủ khác (và như vậy cũng tạo "hiệu ứng" đồng thời) Trong các trò chơi tuần tự (Sequential game), người đi sau có biết một số (nhưng không nhất thiết toàn bộ) thông tin về các nước đi trước
Hình 1.2.1 Một trò chơi tổng bằng 0
Trang 77
1.4 Trò chơi thông tin hoàn hảo và trò chơi thông tin không hoàn hảo
Các trò chơi thông tin hoàn hảo (Games of perfect information) lập thành một tập con quan trọng của các trò chơi tuần tự Một trò chơi được gọi là có thông tin hoàn hảo nếu mọi đấu thủ biết tất cả các nước đi mà tất cả các đấu thủ khác đã thực hiện Do vậy chỉ có các trò chơi tuần tự mới có thể là các trò chơi thông tin hoàn hảo Hầu hết các trò chơi được nghiên cứu trong lý thuyết trò chơi
là các trò chơi thông tin không hoàn hảo, một số trò chơi hay như cờ vây, cờ vua lại là trò chơi thông tin hoàn hảo
Tính chất thông tin hoàn hảo thường bị nhầm lẫn với khái niệm thông tin đầy đủ Tính chất thông tin đầy đủ đòi hỏi rằng mỗi người chơi biết về các chiến lược và thành quả thu được của các người chơi khác, nhưng không nhất thiết biết
về các hành động của họ
1.5 Trò chơi dài vô tận
Bởi các lý do hiển nhiên, các trò chơi được nghiên cứu bởi các kinh tế gia
và những người chơi trong thế giới thực, nhìn chung là kết thúc trò chơi trong hữu hạn các bước đi Các nhà toán học lý thuyết không bị cản trở bởi điều đó, và
lý thuyết gia về tập hợp đặc biệt nghiên cứu về các trò chơi kết thúc sau vô hạn các bước đi, bởi người thắng (hay là phần lợi) là không biết được cho đến sau khi các bước đi đó đã hoàn thành
Sự chú ý thường không phải là quá nhiều về cách nào tốt nhất để chơi trò chơi, mà đơn giản là chỉ phụ thuộc vào người chơi hay người kia có hay không một chiến thuật chiến thắng (có thể chứng minh rằng, sử dụng tiên đề chọn lựa,
là có những trò chơi với ngay cả là đầy đủ thông tin hoàn toàn, và chỉ có kết quả
là "thắng" hay "thua" và không người chơi nào có chiến thuật để chiến thắng) Sự tồn tại của những chiến thuật như vậy, cho những trò chơi được thiết kế một cách thông minh, có những kết quả quan trọng trong lý thuyết miêu tả tập hợp
Trang 88
2 Trí tuệ nhân tạo trong trò chơi
Trí tuệ nhân tạo (Artificial Intelligence - AI) Có thể được định nghĩa
như một ngành của khoa học máy tính liên quan đến việc tự động hóa các hành
vi thông minh Trí tuệ nhân tạo là một bộ phận của khoa học máy tính và do đó
nó phải được đặt trên những nguyên lý, lý thuyết vững chắc, có khả năng ứng dụng được của lĩnh vực này Những nguyên lý này bao gồm các cấu trúc dữ liệu dùng cho biểu diễn tri thức, các thuật toán cần thiết để áp dụng những tri thức đó, cùng các ngôn ngữ và kỹ thuật lập trình dùng cho việc cài đặt chúng
Hai mối quan tâm nền tảng nhất của các nhà nghiên cứu Trí tuệ nhân tạo
là biểu diễn tri thức (Knowledge representation) và tìm kiếm (Search) Ở đây chúng ta xét đến mối quan tâm thứ hai đó là tìm kiếm Đối với các Game thuộc dạng bảng như cờ vua, cờ tướng, cờ caro,… Thì việc tìm kiếm các bước đi tốt nhất để có thể chiến thắng là vấn đề mấu chốt, tìm kiếm là kỹ thuật giải quyết vấn đề theo cách khảo sát có hệ thống một không gian trạng thái bài toán (Problem state), tức là các giai đoạn tuần tự và có chọn lựa trong quá trình giải quyết vấn đề
Ngay từ thời kỳ đầu của việc nghiên cứu vấn đề tìm kiếm trong không gian trạng thái, người ta đã tiến hành nhiều thử nghiệm bằng cách sử dụng các trò chơi thông dụng có bàn cờ như cờ đam (Checker), cờ vua và trò đố 15 ô (15 Puzzule) Hầu hết các trò chơi đều sử dụng một tập hợp các luật chơi được xác định rõ ràng Điều này làm cho việc phát sinh không gian tìm kiếm trở nên dễ dàng và giải phóng nhiều nghiên cứu khỏi những sự mơ hồ và phức tạp vốn có trong các bài toán ít cấu trúc hơn Hình dạng của những bàn cờ sử dụng trong các trò chơi này dễ dàng được biểu diễn vào máy tính, trong khi không đòi hỏi một hình thức khó hiểu cần thiết nào để nắm bắt những tinh tế và ngữ nghĩa trong những lĩnh vực bài toán phức tạp hơn
Trang 99
3 Các kỹ thuật tìm kiếm
3.1 Tìm kiếm không có thông tin
Giải thuật tìm kiếm không có thông tin là giải thuật không tính đến bản chất cụ thể của bài toán Khi đó, các giải thuật dạng này có thể được cài đặt tổng quát, và cùng một cài đặt có thể được sử dụng trong một diện rộng các bài toán (do sử dụng trừu tượng hóa) Nhược điểm của các giải thuật này là phần lớn các không gian tìm kiếm có kích thước cực kì lớn, và một quá trình tìm kiếm (đặc biệt tìm kiếm theo cây) sẽ cần một khoảng thời gian đáng kể cho các ví dụ nhỏ
Do đó, để tăng tốc độ quá trình tìm kiếm, đôi khi chỉ có thể dùng giải thuật tìm kiếm có thông tin
3.1.1 Tìm kiếm trên danh sách
Có lẽ các giải thuật tìm kiếm trên danh sách là loại giải thuật tìm kiếm cơ bản nhất Mục đích là tìm trong một tập hợp một phần tử chứa một khóa nào đó
Thuật toán đơn giản nhất là tìm kiếm tuyến tính Thuật toán này kiểm tra từng phần tử trong danh sách theo thứ tự của danh sách đó Nó có thời gian chạy khá lớn O(n), trong đó n là số phần tử trong danh sách, nhưng có thể sử dụng thẳng cho một danh sách bất kỳ mà không cần tiền xử lý
Tìm kiếm nhị phân là một thuật toán cao cấp hơn với thời gian chạy là O(log n) Đối với các danh sách lớn, thuật toán này tốt hơn hẳn tìm kiếm tuyến tính, nhưng nó đòi hỏi danh sách phải được sắp xếp từ trước và đòi hỏi khả năng truy nhập ngẫu nhiên (Random access)
Tìm kiếm nội suy (Interpolation search) tốt hơn tìm kiếm nhị phân đối với các danh sách rất lớn với phân bố gần đều Giải thuật Grover là một thuật toán lượng tử cho phép tăng tốc độ gấp 4 lần so với tìm kiếm tuyến tính truyền thống trên các danh sách chưa được sắp xếp
Trang 1010
Bảng băm (Hash table) cũng được dùng cho tìm kiếm trên danh sách Nó đòi hỏi thời gian hằng số trong trường hợp trung bình, nhưng lại cần nhiều phụ phí về không gian bộ nhớ và thời gian chạy O(n) cho trường hợp xấu nhất Một phương pháp tìm kiếm khác dựa trên các cấu trúc dữ liệu chuyên biệt sử dụng cây tìm kiếm nhị phân cân bằng (Self-balancing binary search tree) và đòi hỏi thời gian chạy O(log n), các giải thuật loại này có thể coi là mở rộng của tư tưởng chính về tìm kiếm nhị phân để cho phép chèn và xóa nhanh
Đa số các giải thuật tìm kiếm trên danh sách, chẳng hạn tìm kiếm tuyến tính, tìm kiếm nhị phân, và cây tìm kiếm nhị phân cân bằng, có thể được mở rộng với một chút chi phí bổ sung để tìm tất cả các giá trị nhỏ hơn hoặc lớn hơn một khóa cho trước - một phép toán được gọi là tìm kiếm khoảng (Range search)
3.1.2 Tìm kiếm trên cây
Tìm kiếm trên cây là trung tâm của các kỹ thuật tìm kiếm Các thuật toán này tìm kiếm trên các cây gồm các nút, cây này có thể là cây tường minh hoặc được xây dựng dần trong quá trình tìm kiếm
Nguyên lý cơ bản của tìm kiếm trên cây là: Một nút được lấy ra từ một cấu trúc dữ liệu, các nút con của nó được xem xét và bổ sung vào cấu trúc dữ liệu
đó Bằng cách thao tác trên cấu trúc dữ liệu này, cây tìm kiếm được duyệt theo các thứ tự khác nhau, chẳng hạn theo từng mức (tìm kiếm theo chiều rộng) hoặc
đi tới một nút lá trước rồi quay lui (tìm kiếm theo chiều sâu) Các ví dụ khác về tìm kiếm trên cây bao gồm: Tìm kiếm lặp sâu dần, tìm kiếm chiều sâu giới hạn, tìm kiếm hai chiều và tìm kiếm chi phí đều
3.1.3 Tìm kiếm trên đồ thị
Nhiều bài toán về lý thuyết đồ thị có thể được giải quyết bằng các thuật toán tìm kiếm, chẳng hạn thuật toán Dijkstra, thuật toán Kruskal, giải thuật Láng giềng gần nhất và giải thuật Prim Các thuật toán này có thể được coi là các mở rộng của các thuật toán tìm kiếm trên cây
Trang 1111
Thuật toán Dijkstra
Thuật toán Dijkstra, mang tên của nhà khoa học máy tính người Hà Lan Edsger Dijkstra, là một thuật toán giải quyết bài toán đường đi ngắn nhất nguồn đơn trong một đồ thị có hướng không có cạnh mang trọng số âm
Thủ tục của thuật toán như sau:
Procedure Dijkstra (G = (V,E) là đơn đồ thị liên thông, có trọng số với
trọng số dương)
{G có các đỉnh a = u0, u1, , un = z và trọng số m(ui, uj), với m(ui, uj) = nếu (ui, uj) không là một cạnh trong G}
for i := 1 to n
L(ui) := L(a) := 0
S := V \ {a}
u := a
while S begin
for tất cả các đỉnh v thuộc S
if L(u) + m(u,v) < L(v) then L(v) := L(u) + m(u,v)
u := đỉnh thuộc S có nhãn L(u) nhỏ nhất {L(u): độ dài đường đi ngắn nhất từ a đến u}
S := S \ {u}
end
3.2 Tìm kiếm có thông tin
Trong tìm kiếm có thông tin, người ta sử dụng một đánh giá Heuristic đặc thù cho bài toán cần giải quyết với vai trò hướng dẫn cho quá trình tìm kiếm Một cách đánh giá Heuristic tốt sẽ làm cho quá trình tìm kiếm có thông tin hoạt động hiệu quả hơn hẳn một phương pháp tìm kiếm không có thông tin
Trang 1212
Các trò chơi dạng bảng như cờ vua, cờ tướng,… Có thể phát sinh ra một
số lượng không gian tìm kiếm cực kỳ lớn Những không gian này đủ lớn và phức tạp để đòi hỏi những kỹ thuật mạnh nhằm quyết định xem những chọn lựa nào cần được khảo sát trong không gian bài toán Những kỹ thuật này được gọi là các Heuristic và chúng tạo thành một lĩnh vực lớn trong nghiên cứu Trí tuệ nhân tạo Một Heuristic là một chiến lược giải quyết vấn đề tốt nhưng tiềm ẩn khả năng thất bại, chẳng hạn như việc kiểm tra để biết chắc rằng một thiết bị không nhạy
đã được cắm vào trước khi giả định rằng nó bị hỏng, hay cố gắng bảo vệ quân cờ Hậu của bạn khỏi bị đối phương bắt trong trò chơi cờ vua
Hầu hết mọi người đều có một số kinh nghiệm với những trò chơi đơn giản này, nên chúng ta cũng có khả năng nghĩ ra và kiểm nghiệm tính hiệu quả của những Heuristic của chính mình
Có một vài thuật toán tìm kiếm có thông tin nổi trội dành cho danh sách Một trong số đó là một bảng băm với một hàm băm là một heuristic dựa trên bài toán đang được giải Đa số các thuật toán tìm kiếm có thông tin đều là tìm kiếm trên cây Trong đó có tìm kiếm theo lựa chọn tốt nhất và A*, ngoài ra còn có tìm kiếm Leo đồi Cũng như các thuật toán không có thông tin, các thuật toán này có thể được mở rộng để làm việc trên cả các đồ thị
3.2.1 Tìm kiếm Heuristic
Một cách tổng quát, vấn đề tìm kiếm có thể hiểu là tìm một đối tượng thỏa mãn một số đòi hỏi nào đó, trong một tập hợp rộng lớn các đối tượng Chúng ta
có thể kể ra rất nhiều vấn đề mà việc giải quyết nó được quy về vấn đề tìm kiếm
Các trò chơi, chẳng hạn cờ vua, cờ carô có thể xem như vấn đề tìm kiếm Trong số rất nhiều nước đi được phép thực hiện, ta phải tìm ra các nước đi dẫn tới tình thế kết cuộc mà ta là người thắng
Tìm kiếm Heuristic - Tìm kiếm kinh nghiệm Đây là phương pháp sử
dụng hàm đánh giá để hướng dẫn sự tìm kiếm Chúng ta biết rằng không gian tìm kiếm trong một bài toàn luôn có xu hướng tăng lên theo hàm mũ, khi đó để giải
Trang 13Có nhiều phương pháp để xây dựng một thuật giải Heuristic, trong đó người
ta thường dựa vào một số nguyên lý cơ bản như sau:
Nguyên lý vét cạn thông minh: Trong một bài toán tìm kiếm nào đó, khi
không gian tìm kiếm lớn, ta thường tìm cách giới hạn lại không gian tìm kiếm hoặc thực hiện một kiểu dò tìm đặc biệt dựa vào đặc thù của bài toán
để nhanh chóng tìm ra mục tiêu
Nguyên lý tham lam (Greedy): Lấy tiêu chuẩn tối ưu (trên phạm vi toàn
cục) của bài toán để làm tiêu chuẩn chọn lựa hành động cho phạm vi cục
bộ của từng bước (hay từng giai đoạn) trong quá trình tìm kiếm lời giải
Nguyên lý thứ tự: Thực hiện hành động dựa trên một cấu trúc thứ tự hợp
lý của không gian khảo sát nhằm nhanh chóng đạt được một lời giải tốt
Hàm Heuristic: Trong việc xây dựng các thuật giải Heuristic, người ta
thường dùng các hàm Heuristic Đó là các hàm đánh giá thô, giá trị của hàm phụ thuộc vào trạng thái hiện tại của bài toán tại mỗi bước giải Nhờ giá trị này, ta có thể chọn được cách hành động tương đối hợp lý trong từng bước của thuật giải
3.2.2 Phương pháp tìm kiếm leo đồi
Cách đơn giản nhất để thực hiện tìm kiếm Heuristic là tìm kiếm “Leo đồi” (Hill climbing search - Pearl 1984) Chiến lược tìm kiếm Leo đồi phát triển trạng thái con tốt nhất sẽ được chọn cho bước tiếp theo, không lưu giữ lại bất kỳ thông tin nào về các nút anh em lẫn cha mẹ của nó Quá trình tìm kiếm sẽ dừng lại khi tiếp cận trạng thái tốt hơn so với mọi trạng thái con của nó
Trang 1414
Phương pháp tìm kiếm leo đồi chú trọng tìm hướng đi dễ dẫn đến trạng thái đích nhất Cách đó được đưa ra nhằm làm giảm công sức tìm kiếm Thuật toán tìm kiếm leo đồi thực chất là thuật toán tìm kiếm theo chiều sâu, song tại mỗi bước ta sẽ ưu tiên chọn một trạng thái có hứa hẹn nhanh tới đích nhất để phát triển trước Vấn đề quan trọng là biết khai thác khéo léo thông tin phản hồi
để xác định hướng đi tiếp và đẩy nhanh quá trình tìm kiếm Thông thường ta gán mỗi trạng thái của bài toán với một số đo (hàm đánh giá) nhằm đánh giá mức độ gần đích của nó Điều đó có nghĩa là nếu trạng thái hiện thời là u thì trạng thái v
sẽ được phát triển tiếp theo, nếu v kề với u và hàm đánh giá của v đạt giá trị Max (hoặc Min)
Ví dụ: Ta lại xét đồ thị không gian trạng thái trong hình 3.2.2.1 Quá trình
tìm kiếm Leo đồi được tiến hành như sau:
Đầu tiên ta sẽ phát triển đỉnh A sinh ra các đỉnh con C, D, E Trong các đỉnh này sẽ chọn đỉnh D để phát triển, và nó sinh ra các đỉnh con B, G Quá trình tìm kiếm kết thúc Cây tìm kiếm Leo đồi được cho trong hình 3.2.2.2
Hình 3.2.2.1 Đồ thị không gian trạng thái
Trang 1515
Trong thủ tục tìm kiếm Leo đồi được trình bày dưới đây, ngoài danh sách
L lưu các trạng thái chờ được phát triển, chúng ta sử dụng danh sách L1 để lưu giữ tạm thời các trạng thái kề trạng thái u, khi ta phát triển u Danh sách L1 được sắp xếp theo thứ tự tăng dần của hàm đánh giá, rồi được chuyển vào danh sách L sao cho trạng thái tốt nhất kề u đứng ở danh sách L
{Thông báo thất bại; Stop;}
2.2 Loại trạng thái u ở đầu danh sách L;
2.3 if u là trạng thái kết thúc then
{Thông báo thành công; Stop;}
2.4 for mỗi trạng thái v kề u do đặt v vào L 1 ;
Hình 3.2.2.2 Cây tìm kiếm Leo đồi
Trang 1616
2.5 Sắp sếp L 1 theo thứ tự tăng dần của hàm đánh giá;
2.6 Chuyển danh sách L 1 vào đầu danh sách L;
End;
3.2.3 Phương pháp tìm kiếm tốt nhất - đầu tiên
Tìm kiếm tốt nhất - đầu tiên (Best - First search) là tìm kiếm theo bề rộng được hướng dẫn bởi hàm đánh giá Nhưng nó khác với tìm kiếm theo bề rộng ở chỗ, trong tìm kiếm theo bề rộng ta lần lượt phát triển tất cả các đỉnh ở mức hiện tại để sinh ra các đỉnh ở mức tiếp theo, còn trong tìm kiếm tốt nhất - đầu tiên ta chọn đỉnh để phát triển là đỉnh tốt nhất được xác định bởi hàm đánh giá (tức là đỉnh có giá trị hàm đánh giá là nhỏ nhất), đỉnh này có thể ở mức hiện tại hoặc ở các mức trên
Ví dụ: Xét không gian trạng thái được biểu diễn bởi đồ thị trong hình
3.2.2.1, trong đó trạng thái ban đầu là A, trạng thái kết thúc là B Giá trị của hàm đánh giá là các số ghi cạnh mỗi đỉnh Quá trình tìm kiếm tốt nhất - đầu tiên diễn
ra như sau:
Đầu tiên phát triển đỉnh A sinh ra các đỉnh kề là C, D và E Trong ba đỉnh này, đỉnh D có giá trị hàm đánh giá nhỏ nhất, nó được chọn để phát triển và nó sinh ra đỉnh F và đỉnh I Trong số các đỉnh chưa được phát triển C, E, F, I thì đỉnh E có giá trị đánh giá nhỏ nhất, nó được chọn để phát triển và sinh ra các đỉnh G, K Trong số các đỉnh chưa được phát triển thì G tốt nhất, phát triển đỉnh
G sinh ra đỉnh B và đỉnh H Đến đây ta đã đạt tới trạng thái kết thúc Cây tìm kiếm tốt nhất - đầu tiên được biểu diễn trong hình 3.2.3.1
Trang 1717
Sau đây là thủ tục tìm kiếm tốt nhất - đầu tiên Trong thủ tục này, chúng ta
sử dụng danh sách L để lưu các trạng thái chờ phát triển, danh sách được sắp theo thứ tự tăng dần của hàm đánh giá sao cho trạng thái có giá trị hàm đánh giá nhỏ nhất ở đầu danh sách
{Thông báo thất bại; Stop;}
2.2 Loại trạng thái u ở đầu danh sách L;
Trang 1818
2.4 for mỗi trạng thái v kề u do
Xen v vào danh sách L sao cho L được sắp theo thứ tự tăng dần
3.3.1 Cây trò chơi và vấn đề tìm kiếm trên cây trò chơi
Trong phần này chúng ta tập trung nghiên cứu các trò chơi có hai người tham gia, chẳng hạn như các loại cờ (cờ tướng, cờ vua, cờ caro,…) Một người chơi được gọi là Trắng, đối thủ của anh ta gọi là Đen Mục tiêu của chúng ta là nghiên cứu chiến lược chọn nước đi cho Trắng thắng (ở đây máy tính là quân Trắng)
Chúng ta sẽ xét các trò chơi có hai người với các đặc điểm sau Hai người thay phiên nhau đưa ra các nước đi tuân theo các quy luật nào đó của trò chơi, các luật này là như nhau cho cả hai người Điển hình đó là trò chơi cờ vua, trong
cờ vua hai người chơi có thể áp dụng các luật đi cho con tốt, con xe,…để đưa ra các nước đi Luật đi cho con tốt Trắng, xe Trắng,… cũng giống như luật đi con tốt Đen, xe Đen,… Một đặc điểm nữa là hai người chơi đều được biết thông tin đầy đủ về các tình thế trong trò chơi (không như trong chơi bài, người chơi không thể biết các người chơi khác còn những con bài gì) Vấn đề chơi cờ có thể xem như vấn đề tìm kiếm nước đi, tại mỗi lần đến lượt mình, người chơi phải tìm
Trang 1919
trong số rất nhiều nước đi hợp lệ (tuân theo đúng luật đi), một nước đi tốt nhất sao cho qua một dãy nước đi đã thực hiện, anh ta giành phần thắng Tuy nhiên vấn đề tìm kiếm ở đây sẽ rất phức tạp, bởi vì ở đây có đối thủ, người chơi không biết được đối thủ của mình sẽ đi nước nào trong tương lai
Vấn đề chơi cờ có thể xem như vấn đề tìm kiếm trong không gian trạng thái Mỗi trạng thái là một tình thế (sự bố trí các quân của hai bên trên bàn cờ)
Trạng thái ban đầu là sự sắp xếp các quân cờ của hai bên lúc bắt đầu cuộc chơi
Các toán tử là các nước đi hợp lệ
Các trạng thái kết thúc là các tình thế mà cuộc chơi dừng, thường được xác định bởi một số điều kiện dừng nào đó
Một hàm kết cuộc (Payoff function) ứng mỗi trạng thái kết thúc với một giá trị nào đó Như trong cờ vua, mỗi trạng thái kết thúc chỉ có thể là thắng, hoặc thua hoặc hòa Do đó, ta có thể xác định hàm kết cuộc là hàm nhận giá trị 1 tại các trạng thái kết thúc là thắng (đối với Trắng), hàm nhận giá trị -1 tại các trạng thái kết thúc là thua (đối với Trắng) và 0 tại các trạng thái kết thúc hòa Trong một số trò chơi khác, chẳng hạn trò chơi tính điểm, hàm kết cuộc có thể nhận giá trị nguyên trong khoảng [-k, k] với k là một số nguyên dương nào đó
Như vậy vấn đề của Trắng là tìm một dãy các nước đi sao cho xen kẽ với các nước đi của Đen tạo thành một đường đi từ trạng thái ban đầu tới trạng thái kết thúc là thắng cho Trắng
Để thuận lợi cho việc nghiên cứu các chiến lược chọn nước đi, ta biểu diễn không gian trạng thái trên dưới dạng cây trò chơi
Trang 2020
Cây trò chơi
Cây trò chơi được xây dựng như sau Gốc của cây ứng với trạng thái ban đầu Ta sẽ gọi đỉnh ứng với trạng thái mà Trắng (Đen) đưa ra nước đi là đỉnh Trắng (Đen) Nếu một đỉnh là Trắng (Đen) ứng với trạng thái u, thì các đỉnh con của nó là tất cả các đỉnh biểu diễn trạng thái v, v nhận được từ u do Trắng (Đen) thực hiện nước đi hợp lệ nào đó Do đó, trên cùng một mức của cây các đỉnh đều
là Trắng hặc đều là Đen, các lá của cây ứng với các trạng thái kết thúc
Ví dụ: Ta xét một trò chơi đơn giản có hai người tham gia, đó là trò
Dodgem (được tạo ra bởi Colin Vout) Có hai quân Trắng và hai quân Đen, ban đầu được xếp vào bàn cờ 3*3 (như hình 3.3.1.1) Quân Đen có thể đi tới ô trống
ở bên phải, ở trên hoặc ở dưới Quân Trắng có thể đi tới trống ở bên trái, bên phải, ở trên Quân Đen nếu ở cột ngoài cùng bên phải có thể đi ra khỏi bàn cờ, quân Trắng nếu ở hàng trên cùng có thể đi ra khỏi bàn cờ Ai đưa hai quân của mình ra khỏi bàn cờ trước sẽ thắng, hoặc tạo ra tình thế bắt đối phương không đi được cũng sẽ thắng
Hình 3.3.1.1 Trò chơi Dodgem
Trang 2121
Giả sử quân Đen đi trước ta có cây trò chơi được biểu diễn như hình 3.3.1.2 sau:
3.3.2 Chiến lược Minimax
Quá trình chơi cờ là quá trình Trắng và Đen thay phiên nhau đưa ra quyết định, thực hiện một trong số các nước đi hợp lệ Trên cây trò chơi, quá trình đó
sẽ tạo ra đường đi từ gốc tới lá Giả sử tới một thời điểm nào đó, đường đi đã dẫn tới đỉnh u Nếu u là đỉnh Trắng (Đen) thì Trắng (Đen) cần chọn đi tới một trong các đỉnh Đen (Trắng) v là con của u Tại đỉnh Đen (Trắng) v mà Trắng (Đen) vừa chọn, Đen (Trắng) sẽ phải chọn đi tới một trong các đỉnh Trắng (Đen) w là con của v Quá trình trên sẽ dừng lại khi đạt tới một đỉnh là lá của cây
Giả sử Trắng cần tìm nước đi tại đỉnh u Nước đi tối ưu cho Trắng là nước
đi dần tới đỉnh con của v là đỉnh tốt nhất (cho Trắng) trong số các đỉnh con của u
Ta cần giả thiết rằng, đến lượt đối thủ chọn nước đi từ v, Đen cũng sẽ chọn nước
đi tốt nhất cho anh ta Như vậy, để chọn nước đi tối ưu cho Trắng tại đỉnh u, ta cần phải xác định giá trị các đỉnh của cây trò chơi gốc u Giá trị của các đỉnh lá (ứng với các trạng thái kết thúc) là giá trị của hàm kết cuộc Đỉnh có giá trị càng
Hình 3.3.1.2 Cây trò chơi Dodgem với quân Đen đi trước
Trang 2222
lớn càng tốt cho Trắng, đỉnh có giá trị càng nhỏ càng tốt cho Đen Để xác định giá trị các đỉnh của cây trò chơi gốc u, ta đi từ mức thấp nhất lên gốc u Giả sử v
là đỉnh trong của cây và giá trị các đỉnh con của nó đã được xác định Khi đó nếu
v là đỉnh Trắng thì giá trị của nó được xác định là giá trị lớn nhất trong các giá trị của các đỉnh con Còn nếu v là đỉnh Đen thì giá trị của nó là giá trị nhỏ nhất trong các giá trị của các đỉnh con
Ví dụ: Xét cây trò chơi trong hình 3.3.2.1, gốc a là đỉnh Trắng Giá trị của
các đỉnh là số ghi cạnh mỗi đỉnh Đỉnh I là Trắng, nên giá trị của nó là max(3,-2)
= 3, đỉnh D là đỉnh Đen, nên giá trị của nó là min(2, 3, 4) = 2
Việc gán giá trị cho các đỉnh được thực hiện bởi các hàm đệ qui MaxVal
và MinVal Hàm MaxVal xác định giá trị cho các đỉnh Trắng, hàm MinVal xác định giá trị cho các đỉnh Đen
Hình 3.3.2.1 Gán giá trị cho các đỉnh của cây trò chơi
Max Min Max
Trang 23và Đen đáp lại bằng nước đi tới đỉnh có giá trị là min của các giá trị các đỉnh con
Thuật toán Minimax là thuật toán tìm kiếm theo độ sâu, ở đây ta đã cài đặt thuật toán Minimax bởi các hàm đệ quy
Về mặt lý thuyết, chiến lược Minimax cho phép ta tìm được nước đi tối ưu cho Trắng Song nó không thực tế, bởi sẽ không đủ thời gian để tính được nước
đi tối ưu Bởi vì thuật toán Minimax đòi hỏi ta phải xem xét toàn bộ các đỉnh của cây trò chơi Trong các trò chơi này, cây trò chơi là cực kỳ lớn Đối với cờ vua, chỉ tính đến độ sâu 40, thì cây trò chơi đã có khoảng 10120 đỉnh! Nếu cây có độ cao m, và tại mỗi đỉnh có b nước đi thì độ phức tạp về thời gian của thuật toán Minimax là O(bm)
Để có thể tìm ra nhanh nước đi tốt (không phải là tối ưu) thay cho việc sử dụng hàm kết cuộc và xem xét tất cả các khả năng dẫn tới các trạng thái kết thúc, chúng ta sẽ sử dụng hàm đánh giá và chỉ xem xét một bộ phận của cây trò chơi
Trang 2424
Hàm đánh giá
Hàm đánh giá eval ứng với mỗi trạng thái u của trò chơi, với một giá trị số eval(u), giá trị này là sự đánh giá “độ lợi thế” của trạng thái u Trạng thái u càng thuận lợi cho Trắng thì eval(u) là số dương càng lớn, u càng thuận lợi cho Đen thì eval(u) là số âm càng nhỏ, eval(u) ≈ 0 đối với trạng thái không lợi thế cho ai
cả
Chất lượng của chương trình chơi cờ phụ thuộc rất nhiều vào hàm đánh giá Nếu hàm đánh giá cho ta sự đánh giá chính xác về các trạng thái, nó có thể hướng dẫn ta đi tới trạng thái được xem là tốt, nhưng thực tế lại rất bất lợi cho ta Thiết kế một hàm đánh giá tốt là một việc khó, đòi hỏi ta phải quan tâm đến nhiều nhân tố: các quân còn lại của hai bên, sự bố trí của các quân đó, Ở đây có
sự mâu thuẫn giữa độ chính xác của hàm đánh giá và thời gian tính của nó Hàm đánh giá chính xác sẽ đòi hỏi rất nhiều thời gian tính toán, mà người chơi lại bị giới hạn bởi thời gian phải đưa ra nước đi
3.3.3 Phương pháp cắt cụt alpha – beta
Trong chiến lược tìm kiếm Minimax, để tìm kiếm nước đi tốt cho Trắng tại trạng thái u, cho dù ta hạn chế không gian tìm kiếm trong phạm vi cây trò chơi gốc u với độ cao h, thì số đỉnh của cây trò chơi này cũng còn rất lớn với h ≥
3 Đối với cờ vua, nhân tố nhánh trong cây trò chơi trung bình khoảng 35, thời gian đòi hỏi phải đưa ra nước đi là 150 giây, với thời gian này trên máy tính thông thường, khi chạy chương trình của bạn chỉ có thể xem xét các đỉnh trong
độ sâu 3 hoặc 4 Một người chơi cờ trình độ trung bình cũng có thể tính trước được 5, 6 nước hoặc hơn nữa, và do đó chương trình của bạn mới đạt trình độ người mới tập chơi!
Khi đánh giá đỉnh u tới độ sâu h, một thuật toán Minimax đòi hỏi ta phải đánh giá tất cả các đỉnh của cây gốc u tới độ sâu h Song ta có thể giảm bớt số đỉnh cần phải đánh giá mà vẫn không ảnh hưởng gì đến sự đánh giá đỉnh u
Trang 25đi xuống đỉnh a là đỉnh Trắng, đỉnh a có người anh em v đã được đánh giá Giả
sử cha của đỉnh a là b và b có người anh em u dã được đánh giá, và giả sử cha của b là c (như hình 3.3.3.1) Khi đó ta có giá trị đỉnh c (đỉnh Trắng) ít nhất là giá trị của u, giá trị của đỉnh b (đỉnh Đen) nhiều nhất là giá trị v Do đó, nếu eval(u)
> eval(v), ta không cần đi xuống để đánh giá đỉnh a nữa mà vẫn không ảnh hưởng gì dến đánh giá đỉnh c Hay nói cách khác ta có thể cắt bỏ cây con gốc a Lập luận tương tự cho trường hợp a là đỉnh Đen, trong trường hợp này nếu eval(u) < eval(v) ta cũng có thể cắt bỏ cây con gốc a
Để cài đặt kỹ thuật cắt cụt alpha - beta, đối với các đỉnh nằm trên đường đi
từ gốc tới đỉnh hiện thời, ta sử dụng tham số α để ghi lại giá trị lớn nhất trong các giá trị của các đỉnh con đã đánh giá của một đỉnh Trắng, còn tham số β ghi lại giá trị nhỏ nhất trong các đỉnh con đã đánh giá của một đỉnh Đen Giá trị của α và β
sẽ được cập nhật trong quá trình tìm kiếm α và β được sử dụng như các biến địa phương trong các hàm MaxVal(u, α, β) (hàm xác định giá trị của đỉnh Trắng u)
và Minval(u, α, β) (hàm xác định giá trị của đỉnh Đen u)
Trang 27Ví dụ: Hình 3.3.3.2 minh họa cho giải thuật cắt tỉa alpha - beta
Hình 3.3.3.2 Thực hiện giải thuật cắt tỉa alpha - beta
Trang 2828
Phương pháp cắt cụt alpha – beta có hai tham số được gọi là alpha và beta
và dùng để theo dõi các triển vọng - chúng cho biết các giá trị nằm ngoài khoảng [alpha, beta] là các điểm "thật sự tồi" và không cần phải xem xét nữa Khoảng [alpha, beta] còn được gọi là cửa sổ alpha, beta Trong ngữ cảnh của các trò chơi, nguyên tắc Alpha - beta nói rằng: Mỗi khi xem xét một nút bất kì, nên kiểm tra các thông tin đã biết về các nút cha, ông của nó Rất có thể do có đủ thông tin từ cha, ông nên không cần phải làm bất cứ việc gì nữa cho nút này Cũng vậy, nguyên tắc này cũng giúp chỉnh sửa hoặc xác định chính xác giá trị tại nút cha, ông nó Thủ tục Alpha - beta được bắt đầu tại nút gốc với giá trị của alpha là -∞ (vô cùng nhỏ) và beta là +∞ (vô cùng lớn) Thủ tục sẽ tự gọi đệ quy chính nó với khoảng cách giữa các giá trị alpha và beta ngày càng hẹp hơn
Ta có thể xây dựng hàm AlphaBeta bằng ngôn ngữ tựa Pascal như sau:
Function AlphaBeta(alpha, beta, depth): integer;
Gen; { Sinh ra mọi nước đi từ vị trí pos }
while (còn lấy được một nước đi m) and (best < beta) do
begin
if best > alpha then alpha := best;
thực hiện nước đi m;
value := -AlphaBeta(-beta, -alpha, depth-1);
bỏ thực hiện nước đi m;
if value > best then best := value;
Trang 29Ta thấy rằng trong hàm AlphaBeta trên cứ mỗi khi best >= beta thì thuật
toán không thực hiện tiếp vòng lặp, có nghĩa là nó không chịu mở rộng tiếp những nhánh còn lại nữa Các nhánh đó đã bị cắt bỏ - và do đó ta sẽ tiết kiệm được thời gian Việc cắt bỏ này hoàn toàn an toàn với những lí do ta đã xét ở trên Ta thấy rằng mỗi lần hàm này được gọi thì chỉ có tham số beta được dùng
để so sánh cắt bỏ, còn tham số alpha không được dùng Tuy nhiên khi áp dụng cùng thuật toán cho cây con thì ta đã hoán vị hai giá trị alpha, beta cho nhau (và đảo cả dấu), do đó alpha sẽ có tác dụng trong độ sâu sau, rồi độ sâu sau nữa lại đến lượt beta Nói cách khác, một giá trị chỉ luôn ảnh hưởng đến người chơi cực đại, còn giá trị kia lại luôn ảnh hưởng đến người chơi cực tiểu Chúng là các ngưỡng của người chơi (ngưỡng giữa các nước đi được chấp nhận và không chấp nhận) Những nước đi cần quan tâm phải nằm lọt giữa hai giá trị này Dần dần khoảng cách giữa hai giá trị alpha - beta càng ngày càng thu hẹp và dẫn đến các nhánh cây có giá trị nằm ngoài khoảng này nhanh chóng bị cắt bỏ (Hình 3.3.3.3)
Hình 3.3.3.3 Hai biến alpha và beta sẽ thu hẹp miền xem xét
Lượng cắt bỏ phụ thuộc nhiều vào tốc độ thu hẹp – thu hẹp
càng nhanh thì cắt bỏ càng nhiều
Trang 3030
Thuật toán Alpha - beta nói chung giúp chúng ta tiết kiệm nhiều thời gian
so với giải thuật Minimax mà vẫn đảm bảo kết quả tìm kiếm chính xác Tuy nhiên lượng tiết kiệm này không ổn định – nó phụ thuộc vào số nút mà nó cắt bỏ Trong trường hợp xấu nhất thuật toán không cắt được một nhánh nào và phải xét
số nút đúng bằng Minimax Ta cần đẩy mạnh việc cắt bỏ nhờ đẩy nhanh sự thu hẹp của cửa sổ tìm kiếm Alpha - beta Cửa sổ này được thu hẹp một bước khi gặp một giá trị mới tốt hơn giá trị cũ Khi gặp giá trị tốt nhất thì cửa sổ này thu hẹp nhất Do đó nếu càng sớm gặp giá trị tốt nhất thì cửa sổ càng chóng thu hẹp Như vậy phải làm sao cho các nút ở lá được sắp xếp theo trật tự từ cao xuống thấp Trật tự này càng tốt bao nhiêu thì thuật toán chạy càng nhanh bấy nhiêu (các công thức về số nút phải lượng giá trong điều kiện lí tưởng ở trên tính được với trật tự là tốt nhất)
3.4 Tìm kiếm thỏa mãn rằng buộc
Đây là một loại tìm kiếm để giải quyết các bài toán thỏa mãn ràng buộc
mà trong đó, thay vì tìm một đường đi, lời giải chỉ đơn giản là một tập các giá trị được gán cho một tập các biến Do các biến có thể được xử lý theo thứ tự tùy ý, các thuật toán thông thường dành cho tìm kiếm trên cây rất không hiệu quả Các phương pháp giải các bài toán ràng buộc bao gồm tìm kiếm tổ hợp và quay lui, cả hai đều tận dụng các đặc điểm tự do có liên quan đến các bài toán ràng buộc
Trang 3131
Chương 2 Trò chơi cờ vua và ngôn ngữ lập trình C#
1.Trò chơi cờ vua
1.1 Giới thiệu về cờ vua
Cờ vua, trước kia còn được gọi là cờ quốc tế, là một trò chơi trên bàn và là một môn thể thao trí tuệ cho 2 người chơi Ngày nay, cờ vua là một trong những trò chơi phổ biến nhất thế giới với hàng triệu người chơi, trong các câu lạc bộ cờ vua, trực tuyến, từ xa và trong các giải đấu Trò chơi này diễn ra trên một bảng hình vuông, gọi là bàn cờ, gồm 8 hàng (đánh số từ 1 đến 8) và 8 cột (đánh số từ a đến h), tạo ra 64 ô hình vuông với các màu đậm và nhạt xen kẽ nhau, với mỗi người chơi sẽ có ô màu nhạt ở hàng cuối cùng bên tay phải của mình khi ngồi vào bàn chơi cờ Mỗi người sẽ bắt đầu ván cờ với 16 quân cờ và sẽ lần lượt đi các quân của mình sau khi đối phương đã đi xong một nước (hoàn thành nước đi) Các quân cờ của mỗi bên bao gồm 8 quân Tốt, 2 quân Mã, 2 quân Tượng, 2 quân Xe, 1 quân Hậu và 1 Vua Người cầm quân trắng luôn là người đi đầu tiên, người kia cầm quân đen Các quân Hậu và Xe được gọi là quân nặng, còn Tượng
và Mã được gọi là quân nhẹ
Cờ vua không phải là một trò chơi may rủi, nó dựa thuần túy vào chiến thuật và chiến lược Tuy thế, trò chơi này rất phức tạp đến mức thậm chí cả những người chơi hay nhất cũng không thể tính hết tất cả mọi phương án, mặc dù chỉ có 64 ô và 32 quân cờ trên bàn cờ nhưng số lượng nước đi có thể được thì còn vượt cả số lượng các nguyên tử có trong vũ trụ
1.2 Nguyên lý chơi cờ vua
Khi một ván cờ vua bắt đầu, một người chơi sẽ cầm quân đen và người chơi còn lại cầm quân trắng Việc chọn lựa ai sẽ cầm quân đen hay trắng phụ thuộc vào thể thức chơi là giải trí hay thi đấu trong hệ thống có tổ chức Nó có thể là do hai người thỏa thuận (giải trí) hoặc do quyết định của trọng tài trong giải đấu Bên cầm quân trắng luôn luôn được đi trước và do đó có một ưu thế nhỏ
Trang 3232
so với bên cầm quân đen Các quân cờ cần phải xếp trên bàn cờ tiêu chuẩn với ô nằm ở hàng cuối cùng bên tay phải người chơi bao giờ cũng có màu nhạt
Luật di chuyển của các quân trong cờ vua:
Quân Xe (ký hiệu quốc tế R) di chuyển theo các đường thẳng dọc theo cột hay hàng tới ô còn trống mà không có quân nào cản trên đường đi hay tới
ô bị quân đối phương chiếm giữ (ăn quân) nhưng không thể vượt qua quân đang đứng ở ô đó Ngoại lệ duy nhất là trường hợp nhập thành Khi đó nó
có thể nhảy qua quân Vua của mình để đứng cạnh nó Chỉ có Xe mới có nước đi như thế
Quân Tượng (ký hiệu quốc tế B) di chuyển theo đường chéo tới ô có cùng màu với nguyên lý tương tự như Xe tới ô còn trống hay ô bị quân đối phương chiếm giữ (ăn quân)
Quân Hậu (ký hiệu quốc tế Q) có nước đi là tổ hợp đơn giản của chuyển động của Xe và Tượng Trong một nước đi nó có thể di chuyển theo đường chéo hoặc đường thẳng dọc theo cột hay hàng, với nguyên lý đi và
ăn quân giống như Tượng và Xe
Quân Mã (ký hiệu quốc tế N) có thể di chuyển tới ô còn trống hay ô bị quân đối phương chiếm giữ (ăn quân) theo dạng hình chữ L Quân Mã không bị cản như trong cờ tướng
Quân Tốt (không cần ký hiệu) có thể di chuyển thẳng về phía trước chỉ một ô một lần tới ô còn trống (đi mà không ăn quân), nhưng khi di chuyển quân để ăn quân đối phương thì đi chéo Ví dụ, Tốt trắng tại ô c4 có quyền
ăn quân đối phương tại b5 hoặc d5 nếu một trong hai ô này có quân đối phương chiếm hoặc di chuyển xuống ô c5 nếu ô này còn trống, trừ hai trường hợp sau:
Nó có thể di chuyển 1 hoặc 2 ô nếu nó đi từ vị trí xuất phát ban đầu tới ô chưa bị chiếm giữ, nhưng không thể nhảy qua một quân khác
để tới ô đó Ví dụ Tốt trắng tại g2 có thể đi tới g3 hoặc g4 nếu đây
Trang 3333
là nước đi đầu tiên của nó và các ô này chưa bị chiếm giữ, nhưng
nó không thể đi tới g4 nếu ô g3 đã có một quân nào đó chiếm giữ
Trong trường hợp khi một quân Tốt nào đó của bên trắng đạt tới hàng 5 (ví dụ tới ô e5) và quân Tốt thuộc một trong hai cột của bên đen nằm ngay bên cạnh cột mà Tốt trắng này đang chiếm giữ (trong trường hợp đã cho là cột d và cột f) đi từ vị trí xuất phát đầu tiên (d7 hay f7) nhảy liền 2 ô tới ô d5/f5 thì Tốt trắng tại vị trí e5 ngay tại nước đi sau đó có quyền ăn Tốt đen tại ô d5/f5 và di chuyển tiếp tới ô d6/f6 Quyền này sẽ tự động mất, nếu tại nước đi ngay sau đó quân trắng di chuyển quân khác Tương tự như vậy cho Tốt đen khi nó đã chiếm giữ hàng 4 Đây là trường hợp mà trong cờ vua người ta gọi là bắt tốt qua đường (En passant)
Tốt còn một đặc điểm nữa là khi nó di chuyển đến hàng cuối cùng thì người chơi có quyền phong cấp cho nó thành bất kỳ quân nặng hay nhẹ nào (Hậu, Xe, Tượng, Mã)
Vua (ký hiệu quốc tế là K) là quân quan trọng nhất, nếu mất Vua thì người chơi thua cuộc Mỗi lần đi nó có thể ăn quân hoặc di chuyển sang các ô bao quanh ô mà nó hiện tại đang chiếm giữ, nhưng không thể tới ô mà quân của mình đang chiếm giữ hay các ô bị quân đối phương kiểm soát Ngoại lệ duy nhất là trường hợp nhập thành Khi đó nó có thể di chuyển qua hai ô đồng thời với việc di chuyển quân Xe của mình để quân Xe đó đứng bên cạnh nó về phía cột trung tâm Ký hiệu của nhập thành là 0-0 (nhập thành gần) và 0-0-0 (nhập thành xa)
Khi ăn quân đối phương, quân tấn công sẽ di chuyển tới ô đó và thay thế cho quân đối phương tại vị trí này, bắt tốt qua đường (En passant) là ngoại lệ duy nhất Quân bị ăn được loại ra khỏi bàn cờ Vua không thể không bảo vệ khỏi nước chiếu, do đó khi bị chiếu thì người chơi phải thực hiện các biện pháp nhằm cứu Vua (di chuyển Vua khỏi vị trí bị chiếu, ăn quân đang chiếu hay dùng quân
Trang 341.3 Chiến lược và chiến thuật
Tư duy chiến thuật là những thế đánh mang tính kỹ thuật, có tác dụng thực hiện phát triển chiến lược Trong cờ vua hiện đại, các đấu thủ dường như đều thông thạo các trận thế khai cuộc, do đó đấu thủ nào có tư duy chiến thuật tốt hơn
sẽ giành được ưu thế trung cuộc và tàn cuộc lớn hơn
Tư duy chiến thuật bao gồm 18 phương pháp sau:
a) Công phá
Công phá là phương pháp cơ bản đầu tiên của tư duy chiến thuật Trong bất
kỳ thế trận nào, khi ta chưa nghĩ ra cách chiếu bí đối phương, thì ta đương nhiên phải nghĩ cách tiêu diệt một quân nào đó Cứ lần lượt từng tên một Mỗi tên địch chết đi thì ta càng có lợi thế hơn Chiến thuật công phá gồm 5 thế cơ bản:
- Tiêu diệt quân bảo vệ
- Tiêu diệt quân bảo vệ hàng cuối
- Tiêu diệt quân bảo vệ vua, khu vực và cột trọng yếu
- Tiêu diệt chốt bảo vệ khu vực và cột trọng yếu
- Tiêu diệt quân ghim
Trang 3535
b) Nghi binh
Nghi binh là kế đánh lạc hướng quân địch, khiến địch chú ý sang một hướng khác và dẫn đến bị sơ hở Kế nghi binh bao gồm 8 thế sau:
- Đánh lạc hướng quân bảo vệ
- Đánh lạc hướng quân bảo vệ hàng cuối
- Đánh lạc hướng quân bảo vệ cột hiểm yếu
- Đánh lạc hướng quân bảo vệ khu vực trọng yếu
- Đánh lạc hướng chốt
- Mở khóa chốt bằng cách đánh lạc hướng
- Đánh lạc hướng quân ghim
- Đánh lạc hướng quân tấn công nguy hiểm
Trang 3636
- Loại bỏ chướng ngại vật
- Giăng bẫy tấn công cột
- Giăng bẫy phản công
- Đường chéo a1-h8 (h1-a8)
- Đướng chéo a2-g8 (h7- c2)
- Liên kết cột, hàng và đường chéo
f) Càn quét
Càn quét là phương pháp sử dụng lực lượng quân cờ hiện có (chủ yếu là các quân hạng nặng như Hậu, Xe và các quân hạng nhẹ như Tượng, Mã) để uy hiếp quân đối phương, và mở ra các thế đánh mới Càn quét bao gồm các thế sau:
Trang 37- Chiếm cột tiềm năng
Trang 3838
- Phòng thủ Fianchetto
- Một chốt bảo vệ vua
- Hai chốt bảo vệ vua
- Chốt bảo vệ vua trên hàng thứ 6 và thứ 5
- Đặc điểm tấn công đổi tướng cánh hậu
- Tấn công vua không nhập thành
k) Hóa chốt
Hóa chốt là chiến thuật bao gồm nhiều thế như:
- Chọc chốt
- Đánh lạc hướng với chốt thông
- Đánh chặn hoặc khóa giữ
- Chốt hóa mã
- Ép đổi quân
- Hai bên đều thông chốt
- Chốt thông hỗ trợ quân chiếm hàng cuối
- Chốt thông tham gia tấn công vua