Tải bản đầy đủ (.docx) (67 trang)

QUẢN Lý d6cntt epu dai

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.21 MB, 67 trang )

MỤC LỤC
LỜI MỞ ĐẦU


DANH MỤC CÁC HÌNH

Hình 1.1: Game Flappy Bird
Hình 1.2: Kiến trúc khung ứng dụng .Net
Hình 1.3: Vị trí các quân cờ
Hình 1.4: Các quân cờ
Hình 1.5: Nguyên lý thế cờ
Hình 1.6: Cờ vua trên máy tính
Hình 2.1: Một phần cây trò chơi trong trò chơi tic-tac-toe.
Hình 2.2: Minimax hai lớp được áp dụng vào nước đi mở đầu trò chơi Tic-tac-toe.
Hình 2.3: Minh họa chiến lược chơi cờ của người lẫn máy
Hình 2.4: Thuật toán Alpha-beta cắt tỉa nhánh.
Hình 2.5: Minh họa giải thuật Alpha-beta
Hình 2.6: Khảo sát sự bùng nổ tổ hợp, Thuật toán Alpha-beta chỉ làm giảm sự bùng nổ
tổ hợp chứ không chống được nó.32
Hình 3.1: Cắt bỏ cây con gốc a, nếu eval(u) > eval(v)34
Hình 3.2: Mô hình phân rã chức năng
Hình 3.3: Sơ đồ thể hiện mối liên quan giữa 3 lớp chính38
Hình 3.4: Giao diện chính của chương trình
Hình 3.5: Giao diện tùy chọn
Hình 3.6: Giao diện chơi game
Hình 3.7: Trạng thái của quân cờ45
Hình 3.8: Textbox chiếu tướng46
Hình 3.9: Tìm phòng chơi qua LAN47
Hình 3.10: Tùy chọn cài đặt game chế độ LAN48
Hình 3.11: Giao diện chính chơi game qua LAN49
Hình 3.12: Các thế cờ luyện tập




Hình 3.13: Chiếu bí trong 1 nước
Hình 3.14: Màn hình lưu game
Hình 3.15: Nạp trò chơi
Hình 3.16: Chức năng hỗ trợ trong game
Hình 3.17: Cài đặt giao diện bàn cờ55
Hình 3.18: Quản lý người chơi
Hình 3.19: Dữ liệu luyện tập FEN.
Hình 3.20: Chức năng thông tin
Hình 3.21: Luật cờ vua.59
Hình 3.22: Thông tin tác giả


KÍ HIỆU CÁC CỤM TỪ VIẾT TẮT
Từ khóa

Tiếng Anh

Tiếng Việt

LAN

Local Area Network

Mạng máy tính cục bộ

ESPORT

Electronic Sports


Thể thao điện tử

C#

C Sharp

Ngôn ngữ lập trình

AI

Artificial Intelligence

Trí tuệ nhân tạo

HTML

HyperText Markup Language

Ngôn ngữ lập trình

WCA

World Cyber Arena

Nhà tổ chức game

App

Application


Ứng dụng

VNG

VinaGame

Công ty game


LỜI MỞ ĐẦU
Cờ vua là một môn thể thao trí tuệ giúp cho người chơi phát triển trí óc và khả
năng xử lý tình hình. Mồi ván cờ là một tình huống khác nhau và đòi hỏi người chơi
phải có sự suy nghĩ nhanh nhạy và biết cách xử lý tình huống thật sáng suốt. Chính vì
vậy mà khi chơi cờ vua người ta vừa được tập luyện sự tập trung suy nghĩ vừa được
học hỏi thêm về cách xử lý đối phó với các tình huống trong ván cờ cũng như trong
cuộc sống.
Hiện tại trên thế giới, tại mọi lứa tuổi ai cũng có thể chơi cờ vua, chính vì vậy
những câu lạc bộ hay lớp học cờ vua có ở rất nhiều nơi, nhưng không phải ai cũng có
thời gian, sức lực để theo học các lớp trên, đồng thời những người theo học cũng
không có khả năng đồng đều về trình độ chơi. Với mục đích là giúp người mới chơi
tiếp cận với môn thế thao trí tuệ và người có kinh nghiệm chơi luyện tập suy nghĩ
nhanh. Em đã áp dụng kỹ thuật lập trình C# kết hợp với thuật toán tìm kiếm đối kháng
cắt tỉa Alpha-Beta để xây dựng chương trình cờ vua có khả năng máy đánh với người
và người đánh với người thông qua mạng LAN.
Đây là một đề tài khó nhưng được sự hướng dẫn tận tâm của thầy giáo Ngô Ngọc
Thành qua từng buổi học trên lớp cũng như những buổi nói chuyện, thảo luận về môn
học. Trong thời gian được học tập và thực hành dưới sự hướng dẫn của thầy, em đã thu
được rất nhiều kiến thức bổ ích. Nếu không có những lời hướng dẫn, dạy bảo của thầy
thì em nghĩ đồ án này của em rất khó có thể hoàn thành được. Đồ án của em gồm

những nội dung chính sau:
• Chương 1. Tổng quan về các ứng dụng game trên máy tính
• Chương 2. Các thuật toán giải quyết bài toán
• Chương 3. Cài đặt thử nghiệm ứng dụng game cờ vua
Do có những mặt hạn chế nhất định về mặt kiến thức cũng như kinh nghiệm thực
tế nên đồ án này không thể tránh được những thiếu sót, khuyết điểm. Em rất mong
được thầy cô và các bạn giúp đỡ để kiến thức bản thân cũng như đồ án được hoàn
thiện hơn.


CHƯƠNG 1:

TỔNG QUAN VỀ CÁC ỨNG DỤNG GAME TRÊN MÁY TÍNH

Ngày nay công nghệ game đang rất phát triển trên thế giới, bao gồm các thể loại
game các nhau như: Nhập vai, đối kháng, hành động, chiến thuật, …. Những tựa game
không chỉ mang tính giải trí mà còn giúp cho người chơi thư giãn phát triển tư duy trí
óc của mình hơn
1.1 Tổng quan về game
Game là một tiện ích của công nghệ điện tử - tin học nhằm phục vụ nhu cầu giải
trí của con người. Đó là các phần mềm xây dựng theo một nội dung nhất định, cho
phép con người tham gia điều khiển một "nhân vật" theo ý muốn và tuân theo các quy
tắc của trò chơi đã được cài đặt. Thông qua một màn hình các dữ liệu đã mã hóa được
đưa ra dưới dạng hình ảnh, cho người chơi quan sát các diễn biến của trò chơi. Đây là
điểm qua trọng làm nên sự hấp dẫn của trò chơi. Kèm theo là hệ thống âm thanh được
cài đặt để phát âm theo sự điều khiển của người sử dụng đồng thời với hình ảnh trên
màn hình. Như một bộ phim hấp dẫn mà người chơi có thể thay đổi theo ý muốn. Hấp
dẫn ở hình ảnh sống động và âm thanh kích thích bản năng hiếu thắng và trí tưởng
tượng của con người, buộc họ chinh phục trò chơi. Game theo sự phát triển của công
nghệ tin học, chia làm nhiều loại: theo nội dung, theo hình thức...

Game ra đời và phát triển theo sự phát triển của tin học. Lịch sử của Game bắt
đầu từ khi máy tính điện tử bước sang thế hệ thứ 2, các thiết bị điện tử vẫn rất cồng
kềnh, chậm chạp. Game đầu tiên không phải là "Pong" như mọi người vẫn lầm tưởng,
mà là một game được viết năm 1952 mang tên "Tennis for two" do nhà vật lí hạt nhân
William Higinbothcim (1958),tại phòng thí nghiệm Brookhaven ở New York (Mĩ).Đơn
giản chỉ là một màn hình điện tử thô sơ và một bảng điều khiển cồng kềnh. Sau đó sự
phát triển của máy tính điện tử tới hế hệ thứ 3. Các công ti sáng tạo và phat triển game
ra đời hòa mình vào nền công nghiệp giải trí. Những người đi tiên phong của trò chơi
điện tử là những cái tên rất nổi tiếng trong làng game như tác giả game "Pong" từng
được lầm tưởng là game đầu tiên viết 1972, do Alan Alcorn, kĩ sư của công ti phần
mềm Atari (Mĩ) .
1.2 Khảo sát thị trường game toàn cầu
Có thể nói một trong những ngành giải trí mang lại nhiều lợi nhuận nhất đó là
ngành Game. Game là lĩnh vực giải trí tương tác quan trọng hàng đầu trong ngành
công nghiệp nội dung số. Doanh thu toàn cầu từ ngành này tăng trưởng nhanh chóng
6


từ 7 tỷ USD (1994) lên 41.9 tỷ USD (2007) và dự đoán sẽ đạt 68 tỷ USD (2012). Với
tốc độ tăng trưởng bình quân 9% một năm, Game đã trở thành ngành có tốc độ phát
triển nhanh nhất trong lĩnh vực giải trí. Trong đó, Mỹ chiếm 40.42% thị phần, Anh
12.45% và Nhật 11.87%. Năm 2008, ngành Game ở Mỹ giá trị khoảng 22 tỷ USD
vượt qua ngành công nghiệp âm nhạc (10 tỷ USD) và ngành công nghiệp phim ảnh
(9,5 tỷ USD), thu hút hàng triệu lao động là các chuyên gia phát triển, phân phối và
marketing Game.
Việt Nam là thị trường Game lớn nhất trong khu vực Đông Nam Á với hơn 20
nhà phát hành Game trên cả nước. Doanh thu các năm gần đây liên tục tăng trưởng với
mức trung bình 400 triệu USD/năm, chiếm 70% doanh thu của ngành nội dung số. Có
mức tăng trưởng ấn tượng, nhưng ngành công nghiệp Game ở Việt Nam chỉ mới dừng
lại ở mức phân phối phát hành và gia công các tựa Game nước ngoài.

Trong những năm gần đây, game mobile đã trở thành một thành phần không thể
thiếu của ngành công nghiệp game toàn cầu và đang không ngừng mở rộng một cách
nhanh chóng. Thông qua đó, nhiều quốc gia đã nhanh chóng thuận theo xu thế thời đại
và đồng thời mở ra nhiều diễn đàn, sự kiện để có thể học hỏi lẫn nhau và định hướng
đường đi trong tương lai.
1.3 Game trở thành một môn thể thao đại chúng
Với hơn 170 triệu người theo dõi trên toàn thế giới năm vừa qua, game đã thực
sự phát triển thành một môn thể thao đại chúng. Điểm nhấn của xu hướng theo dõi này
là vụ sát nhập trị giá 1 tỷ USD của nền tảng phát stream game Twitch và thực tế rằng
game chỉ đứng sau hạng mục âm nhạc về lượt xem trên Youtube. Xu hướng này đang
lan sang game mobile, với rất nhiều công ty tập trung vào mong muốn của các gamer
được ghi hình lại, phát stream và xem những trải nghiệm game mobile.
Trong số đó có Kamcord, cho phép người chơi game mobile phát stream trực tiếp
game của mình và hiện đã chạm mức 175 triệu thiết bị mỗi tháng. Năm 2014, World
Cyber Arena (WCA) đã tổ chức một sự kiện Esports vô cùng lớn tại Trung Quốc, nơi
mà tựa game mobile đình đàm – Dota Legend mang đến tổng giải thưởng giá trị lên tới
1,1 tỷ USD.
1.4 Lập trình game
Trò chơi Flappy Bird làm mưa làm gió trong thời gian gần đây, kèm với thông tin
tác giả game – một chàng trai người Việt kiếm được tiền tỷ/ngày nhờ nó, đã khiến
nghề viết ứng dụng điện thoại (viết app) được nhiều người quan tâm hơn bao giờ hết.
7


Thực ra, nghề viết app đã “hot” từ rất lâu trong giới lập trình. Khi mà thị trường
smart phone bùng nổ trong những năm gần đây, các “chợ” ứng dụng như: Apple Store,
Android Market, Ovi Store,… mọc lên với vô số ứng dụng và hàng tỷ lượt download,
nghề này đã được rất nhiều lập trình viên, đặc biệt là các bạn trẻ theo đuổi.

Hình 1.1 : Game Flappy Bird

1.5 Sức hút của nghề lập trình game
Nghề lập trình game là nghề của đam mê và sáng tạo. Với các bạn trẻ yêu thích
trò chơi, công nghệ và mỹ thuật, nghề lập trình viên game là mảnh đất “vàng” để phát
triển các ý tưởng.
Công việc của một lập trình viên game gồm quản lý dự án, phát triển ý tưởng,
thiết kế kịch bản trò chơi, màn chơi, lập trình, vẽ đồ họa 2D, 3D và… chơi thử để tìm
lỗi! Mỗi khâu đều đòi hỏi ở lập trình viên niềm đam mê với thế giới trò chơi và luôn
trong trạng thái muốn sáng tạo những điều mới mẻ. “Làm game phải chơi game để tìm
cảm hứng sáng tạo. Không “giữ lửa” được trong nghề này thì không thể tồn tại lâu
được”, một game developer chia sẻ.

Môi trường làm việc hiện đại cũng là điểm cuốn hút của ngành nghề này đối với
giới trẻ. Dạo quanh các game studio của các công ty như FPT online, Gameloft VN,
GlassEgg, Sáng Tạo, VNG…, các bạn trẻ có thể bị “choáng” vì bàn làm việc của mỗi
8


người có thể gồm 2 màn hình, hai, ba chiếc di động và nhiều thiết bị hiện đại khác.
Nhưng quan trọng nhất là triển vọng nghề nghiệp của lập trình viên game là rất cao.
Tại Texas, Mỹ, theo thống kê của “The Texas Tribune”, lương trong ngành Mô
phỏng và Lập trình Game từ 1.000 đến trên 40.000 USD/tháng. Game và nội dung
thông tin số là ngành công nghiệp tiềm năng không chỉ trên thế giới mà cả tại Việt
Nam. Lương lập trình viên game dao động từ 7 đến 15 triệu/tháng, đó là chưa kể nhiều
công ty thưởng lương tháng 13, thưởng thành tích và doanh thu sản phẩm khá cao. Các
công ty game Việt Nam liên tục tuyển người nhưng vẫn thường xuyên rơi vào tình
trạng “khát nhân lực” do nhu cầu cao nhưng số lượng đáp ứng yêu cầu công việc lại
thấp.
1.6 Ngôn ngữ Cshap
1.6.1 Khái niệm
Từ khi chiếc máy tính có thể lập trình đầu tiên (First freely programmable

computer) ra đời vào năm 1936 hàng nghìn ngôn ngữ lập trình đã được tạo ra. Có
những ngôn ngữ chết đi vì sự thiếu tâm huyết của người tạo ra nó, sự hạn chế của
chính ngôn ngữ hay không được cộng đồng sử dụng rộng rãi và cũng có cả những
ngôn ngữ trở nên thành công. Với sự “chống lưng” của Microsoft tháng giêng năm
1999 Anders Hejlsberg trở thành người phụ trách xây dựng ngôn ngữ lập trình Cool
(C-like Object Oriented Language tiền thân của C#), ngày 12/2/2002 C# ra đời cùng
với .NET Framework 1.0.
Kế thừa và phát triển từ các ngôn ngữ lập trình trước được sự ưu ái từ hệ điều hành
Window, sau đây là một số điểm nổi bật của ngôn ngữ C#.
Cú pháp C# hàm ý, nhưng nó cũng đơn giản và dễ dàng để học. Nếu có kinh
nghiệm với C, C++ hoặc Java thì bạn có thể bắt đầu làm việc hiệu quả trong C# với
một thời gian rất ngắn vì c# có cú pháp tương tự, tuy nhiên C# đơn giản hơn so với C+
+ và cung cấp các tính năng mạnh mẽ như các loại giá trị nullable, enumerator,
delegate, biểu thức lambda và việc truy cập bộ nhớ trực tiếp (unsafe code) mà bạn
không tìm thấy trong ngôn ngữ Java.
C# hỗ trợ kiểu dữ liệu và phương thức chung (giống Java), ứng dụng C# nhanh bảo
mật và mã nguồn có thể tái sử dụng.
Là một ngôn ngữ hướng đối tượng, C# hỗ trợ các khái niệm về đóng gói
ncapsulation, thừa kế inheritance và đa hình polymorphism. Tất cả các biến và phương
9


thức, bao gồm cả phương thức override virtual methods, được đóng gói trong Class.
Một lớp có thể kế thừa trực tiếp từ một lớp cha, nhưng nó có thể có thực hiện nhiều
interfaces khác nhau…
Ngoài những nguyên tắc cơ bản của ngôn ngữ hướng đối tượng, C# còn có những
sáng tạo riêng: Encapsulation, Properties, Attribute, XML, Language-Integrated Query
(LINQ).
Việc sử dụng đối tượng COM hoặc Win32 DLLs thông qua "Interop" trở nên dể
dàng. Thậm chí C# hỗ trợ con trỏ và các khái niệm của mã "không an toàn" đối với

những trường hợp mà trong đó truy cập bộ nhớ trực tiếp là tuyệt đối quan trọng.
Quy trình xây dựng ứng dụng C# đơn giản hơn so với C và C++ và linh hoạt hơn
trong Java.
1.6.2 Cách thức ứng dụng C# hoạt động
Các ngôn ngữ NET như C#, VB.NET, VJ#, VC++ .NET có cách thức hoạt động
giống nhau và là một thành phần của .NET Framework do đó bạn không thể chạy các
ứng dụng này trên các máy không chạy cài đặt .NET Framework version thích hợp.
Trước hết cần có cái nhìn khái quát về NET Framework nó gồm 2 phần chính: The
common language runtime (CLR) and The .NET Framework class library.
Những gì bạn viết ra sẽ là custom object libraries, class libarary sẽ chứa những
class chung. Có thể sử dụng nhiều lần các class này định nghĩa console, window hay
button thứ mà bạn cần có để ứng dụng chạy mà không cần viết lại. Khi bạn viết xong
một chương trình, qua quá trình biên dịch sẽ cho ta cùng một kết quả, đó là Microsoft
Intermediate Language (MSIL code). Sau đó JIT compiler sẽ chuyển mã MSIL code
sang mã máy thứ mà CPU có thể hiểu và thực thi.
Vậy là chúng ta đã có cái nhìn khái quát về C# cũng như cách mà một ứng dụng
trên .NET Framework hoạt động.


Nền tảng của .NET

Khi Microsoft công bố C# vào tháng 7 năm 2000, việc khánh thành nó chỉ là một
phần trong số rất nhiều sự kiện mà nền tảng .Net được công công bố. Nền tảng .Net là
bô khung phát triển ứng dụng mới, nó cung cấp một giao diện lập trình ứng dụng
(Application Programming Interface - API) mới mẽ cho các dịch vụ và hệ điều hành
Windows, cụ thể là Windows 2000, nó cũng mang lại nhiều kỹ thuật khác nổi bật của
10


Microsoft suốt từ những năm 90. Trong số đó có các dịch vụ COM+, công nghệ ASP,

XML và thiết kế hướng đối tượng, hỗ trợ các giao thức dịch vụ web mới như SOAP,
WSDL và UDDL với trọng tâm là Internet, tất cả được tích hợp trong kiến trúc DNA.
Nền tảng .NET bao gồm bốn nhóm sau:
-

Một tập các ngôn ngữ, bao gồm C# và Visual Basic .Net; một tập các công cụ phát
triển bao gồm Visual Studio .Net; một tập đầy đủ các thư viện phục vụ cho việc xây
dựng các ứng dụng web, các dịch vụ web và các ứng dụng Windows; còn có CLR Common Language Runtime: (ngôn ngữ thực thi dùng chung) để thực thi các đối
tượng được xây dựng trên bô khung này.

-

Một tập các Server Xí nghiệp .Net như SQL Server 2000. Exchange 2000, BizTalk
2000, … chúng cung cấp các chức năng cho việc lưu trữ dữ liệu quan hệ, thư điện tử,
thương mại điện tử B2B, …

-

Các dịch vụ web thương mại miễn phí, vừa được công bố gần đậy như là dự án
Hailstorm; nhà phát triển có thể dùng các dịch vụ này để xây dựng các ứng dụng đòi
hỏi tri thức về định danh người dùng…
-

NET cho các thiết bị không phải PC như điện thoại (cell phone), thiết bị game
• NET Framework
.Net hỗ trợ tích hợp ngôn ngữ, tức là ta có thể kế thừa các lớp, bắt các biệt lệ,

đa hình thông qua nhiều ngôn ngữ. .NET Framework thực hiện được việc này nhờ vào
đặc tả Common Type System - CTS (hệ thống kiểu chung) mà tất cả các thành phần
.Net đều tuân theo. Ví dụ, mọi thứ trong .Net đều là đối tượng, thừa kế từ lớp

gốc System.Object.
Ngoài ra .Net còn bao gồm Common Language Specification - CLS (đặc tả ngôn
ngữ chung). Nó cung cấp các qui tắc cơ bản mà ngôn ngữ muốn tích hợp phải thỏa
mãn. CLS chỉ ra các yêu cầu tối thiểu của ngôn ngữ hỗ trợ .Net. Trình biên dịch tuân
theo CLS sẽ tạo các đối tượng có thể tương hợp với các đối tượng khác. Bộ thư viện
lớp của khung ứng dụng (Framework Class Library - FCL) có thể được dùng bởi bất
kỳ ngôn ngữ nào tuân theo CLS.

11


.NET Framework nằm ở tầng trên của hệ điều hành (bất kỳ hệ điều hành nào không
chỉ là Windows). .NET Framework bao bao gồm:
-

Bốn ngôn ngữ chính thức: C#, VB.Net, C++, và Jscript.NET
Common Language Runtime - CLR, nền tảng hướng đối tượng cho phát triển ứng
dụng Windows và web mà các ngôn ngữ có thể chia sẻ sử dụng.
Bộ thư viện Framework Class Library - FCL.

Hình 1.2 Kiến trúc khung ứng dụng .Net

Thành phần quan trọng nhất của .NET Framework là CLR, nó cung cấp môi trường
cho ứng dụng thực thi, CLR là một máy ảo, tương tự máy ảo Java. CLR kích hoạt đối
tượng, thực hiện kiểm tra bảo mật, cấp phát bộ nhớ, thực thi và thu dọn chúng. Tầng
trên của CLR bao gồm:
- Các lớp cơ sở
- Các lớp dữ liệu và XML
- Các lớp cho dịch vụ web, web form, và Windows form.
Các lớp này được gọi chung là FCL, Framework Class Library, cung cấp API

hướng đối tượng cho tất cả các chức năng của .NET Framework (hơn 5000 lớp).

12


Các lớp cơ sở tương tự với các lớp trong Java. Các lớp này hỗ trợ các thao tác nhập
xuất, thao tác chuổi, văn bản, quản lý bảo mật, truyền thông mạng, quản lý tiểu trình
và các chức năng tổng hợp khác …
Trên mức này là lớp dữ liệu và XML. Lớp dữ liệu hỗ trợ việc thao tác các dữ liệu
trên cơ sở dữ liệu. Các lớp này bao gồm các lớp SQL (Structure Query Language:
ngôn ngữ truy vấn có cấu trúc) cho phép ta thao tác dữ liệu thông qua một giao tiếp
SQL chuẩn. Ngoài ra còn một tập các lớp gọi là ADO.Net cũng cho phép thao tác dữ
liệu. Lớp XML hỗ trợ thao tác dữ liệu XML, tìm kiếm và diễn dịch XML.
Trên lớp dữ liệu và XML là lớp hỗ trợ xây dựng các ứng dụng Windows (Windows
forms), ứng dụng Web (Web forms) và dịch vụ Web (Web services).
• Biên dịch và ngôn ngữ trung gian (MSIL)
Với .NET chương trình không biên dịch thành tập tin thực thi, mà biên dịch thành
ngôn ngữ trung gian (MSIL - Microsoft Intermediate Language, viết tắt là IL), sau đó
chúng được CLR thực thi. Các tập tin IL biên dịch từ C# đồng nhất với các tập tin IL
biên dịch từ ngôn ngữ .Net khác.
Khi biên dịch dự án, mã nguồn C# được chuyển thành tập tin IL lưu trên đĩa. Khi
chạy chương trình thì IL được biên dịch (hay thông dịch) một lần nữa bằng
trình JustInTime- JIT, khi này kết quả là mã máy và bộ xử lý sẽ thực thi.
Trình biên dịch JIT chỉ chạy khi có yêu cầu. Khi một phương thức được gọi, JIT
phân tích IL và sinh ra mã máy tối ưu cho từng loại máy. JIT có thể nhận biết mã
nguồn đã được biên dịch chưa, để có thể chạy ngay ứng dụng hay phải biên dịch lại.
CLS có nghĩa là các ngôn ngữ .Net cùng sinh ra mã IL. Các đối tượng được tạo
theo một ngôn ngữ nào đó sẽ được truy cập và thừa kế bởi các đối tượng của ngôn ngữ
khác. Vì vậy ta có thể tạo được một lớp cơ sở trong VB.Net và thừa kế nó từ C#.
1.7 Tổng quan về game cờ vua

1.7.1 Giới thiệu
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 tại nhà riêng, trong câu lạc bộ, 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
13


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 Tốt ,
2 Mã , 2 Tượng , 2 Xe , 1 Hậu và 1 Vua . Người cầm quân trắng luôn là người đi đầu
tiên, người còn lại 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ẹ.

Hình 1.3 : Vị trí các quân cờ

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ụ
Cờ vua là một trong những trò chơi 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
14



đấ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 và chơi theo cách gửi thư. Rất nhiều biến thể và các trò
chơi tương tự như cờ vua được chơi trên toàn thế giới.

15


1.7.2 Nguyên lý chơi
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ỏ 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.
Các quân cờ có nước đi khác nhau.

Hình 1.4 : Các quân cờ
• 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ế. Xem
thêm nhập thành.
• 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).
• 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éohoặ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.
16


• 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.
• 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:
o 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 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ữ.
o 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.
o 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).
Lưu ý: Khi thực hiện nhập thành trên thực tế, theo luật của FIDE, bao giờ
cũng phải di chuyển Vua trước và thực hiện bằng một tay duy nhất.
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 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 khác của mình cản đường chiếu nếu có
thể). Nếu không thể có nước đi để cứu Vua thì người chơi bị chiếu bí và thua cuộc.
17


Các ván cờ không phải bao giờ cũng kết thúc bằng chiếu bí. Có thể một bên xin
thua, có thể thua do hết giờ hoặc phạm luật chơi. Có thể xảy ra các ván cờ hòa. Một
ván cờ vua là hòa khi: do thỏa thuận của hai bên do không bên nào dám mạo hiểm hay
khi không đủ lực lượng để chiếu hết, rơi vào trạng thái hết nước đi, cả hai bên lặp lại
nước đi ba lần hay luật 50 nước đi.
1.7.3 Chiến lược và chiến thuật
Khai cuộc là một loạt các nước đi lúc bắt đầu chơi, thông thường là được ghi
nhớ sẵn, điều này giúp cho người chơi xây dựng các thế đứng và phát triển quân để
chuẩn bị cho giai đoạn trung cuộc. Các thế khai cuộc thông thường được xây dựng trên
nguyên tắc chiếm giữ phần trung tâm bàn cờ (gồm 4 ô trung tâm e4, e5, d4 và d5),
phát triển quân, bảo vệ vua và tạo ra một cấu trúc tốt đủ mạnh. Quan điểm của cờ vua
hiện đại cho rằng việc kiểm soát trung tâm không chỉ là bằng các Tốt mà còn nhờ sức

mạnh của các quân khác. Một cách rất quan trọng để bảo vệ Vua và triển khai nhanh
quân Xe là nhập thành nhằm đưa Vua vào vị trí khó bị tấn công, tuy nhiên không phải
trong bất kỳ ván cờ nào cũng cần nhập thành.
Quân Mã Đen tại ô e6 bị ghim với quân vua của nó ở ô c8 bởi quân Tượng Trắng
ở ô f5 và quân Mã Trắng bị ghim (giằng) với Vua Trắng ở b1.
Việc lượng giá quân cờ là một phần quan trọng khi thực hiện việc đổi quân
trong cờ vua. Các lượng giá khác nhau không đáng kể trong các sách dạy chơi cờ vua,
nhưng nói chung thì người ta cho rằng Hậu trị giá 9 điểm, Xe trị giá 5 điểm, Tượng và
Mã đều trị giá 3 điểm và Tốt trị giá 1 điểm. Do việc mất Vua tương đương với thua cờ
nên giá trị của nó là vô hạn, trong cờ tàn nó khoảng 3,5 điểm. Trong lập trình cờ vua,
thường người ta cho Vua một giá trị rất lớn nào đó (chẳng hạn 2000 điểm). Giá trị thực
sự và tầm quan trọng của quân cờ thực ra là không thể chỉ gán đơn giản như vậy do nó
còn phụ thuộc vào thế cờ. Ví dụ một quân Xe đang nằm ở vị trí xấu không có giá trị
bằng một con Mã đang có thế đứng tốt. Nếu một người chơi thực hiện việc thí
quân (cho phép đối phương bắt quân có trị giá cao của mình) thì thông thường họ sẽ
bỏ qua các giá trị danh định dành cho quân đó để đổi lấy các ưu thế về chiến lược hay
ưu thế về vị trí của các quân đang tấn công.

18


Hình 1.5 Nguyên lý thế cờ
Một số nguyên lý cơ bản về thế cờ phổ biến đối với phần lớn các chiến thuật cờ
và bẫy cờ như: Nĩa [còn gọi là đòn đôi] (tiếng Anh: fork) là một tình huống khi một
quân di chuyển tới vị trí mà nó uy hiếp hai hay nhiều quân của đối phương cùng một
lúc. Nó thông thường là rất khó cho đối phương để bảo vệ cả hai quân của mình trong
cùng một nước đi. Ghim [còn gọi là giằng quân] (tiếng Anh: pin) cũng có thể sử dụng
để ngăn chặn đối phương di chuyển quân bằng cách đe dọa gián tiếp bất kỳ quân nào
đứng sau quân bị ghim nếu quân bị ghim đó di chuyển. Xiên (tiếng Anh:skewer) là
một tình huống ngược với ghim khi quân có giá trị cao hơn đang bị tấn công và nó lại

đứng trước quân ít giá trị. Một loại hình khác là một quân di chuyển ra khỏi vị trí mà
nó đang đứng để mở đường cho quân khác tấn công gọi là "mở đường bắt quân". Các
nguyên lý chiến thuật khác còn có: nước trung gian (dịch của zwischenzug trong tiếng
Đức, có nghĩa là khi một bên đe dọa tấn công một mục tiêu nào đó, thay vì bảo vệ mục
tiêu thì đối phương phản công vào mục tiêu khác nhằm giảm áp lực lên các quân đang
bị tấn công của mình), xói chân (tức là khi quân đối phương được bảo vệ bằng ít lực
19


lượng hơn so với lực lượng tấn công thì người ta thường tìm cách đổi quân để thu
được ưu thế về lực lượng, chủ yếu là đánh vào các quân bảo vệ để đánh mất sự ràng
buộc bảo vệ của chúng), quá tải (tức là khi một quân bị hãm vào thế phải chống đỡ và
bảo vệ nhiều mục tiêu) và che mặt (khi người chơi di chuyển một quân vào vị trí mà
nếu đối phương bắt quân đó bằng bất kỳ quân nào đều dẫn đến tình trạng mà lực lượng
của người đó sẽ có lợi thế hơn hẳn trong các nước đi tiếp sau đó như phong Tốt thành
Hậu, bắt được quân có giá trị hơn do nó đã bị mất sự bảo vệ).
Trong quá trình tàn cuộc các Tốt và Vua trở nên tương đối mạnh hơn do khi đó
lực lượng quân nặng và nhẹ của cả hai bên đều suy giảm rõ rệt. Cả hai bên khi đó đều
có xu hướng di chuyển Tốt thật nhanh nhằm phong cấp cho nó. Nếu một người chơi có
ưu thế rõ rệt về lực lượng thì việc chiếu bí chỉ là vấn đề thời gian và ván cờ sẽ kết thúc
nhanh chóng, nhưng nếu ván cờ là tương đối cân bằng về lực lượng thì việc nắm chiến
thuật cờ tàn là rất quan trọng. Trong các giải cờ tính giờ thì việc kiểm soát nhịp
độ (thời gian cho mỗi nước đi) là cực kỳ quan trọng khi còn ít quân trên bàn cờ. Trong
nhiều trường hợp, người chơi có ưu thế về lực lượng nhưng lại thua cờ do hết thời
gian. Ngoài ra khi lực lượng không đủ để chiếu bí và cả hai đã thực hiện đủ số nước đi
quy định theo thời gian mà không có sự di chuyển quân Tốt thì ván cờ dẫn đến hòa. Ví
dụ người chơi còn 1 Vua và 2 Mã thì trong phần lớn các trường hợp không thể chiếu bí
đối phương chỉ còn 1 Vua (có một thế ngoại lệ).
1.7.4 Cờ vua trên máy tính.
Đã từng là trò chơi trí tuệ chỉ dành cho con người, ngày nay cờ vua được cả

người lẫn máy tính chơi. Đầu tiên, việc máy tính chơi cờ chỉ là điều hiếu kỳ, nhưng
hiện nay các chương trình cờ vua tốt nhất - như Shredder, Fritz v.v. - đã trở nên mạnh
hơn con người, đặc biệt là trong cờ nhanh, kể cả khi nó được chạy trên các máy tính
thông thường.

20


Hình 1.6: Cờ vua trên máy tính

Garry Kasparov, khi còn là số một thế giới về cờ vua, đã chơi một trận đấu 6
ván với máy tính chơi cờ của IBM có tên gọi là Deep Blue trong tháng 2 năm 1996.
Deep Blue đã gây sốc cả thế giới khi thắng ván đầu tiên trong Deep Blue - Kasparov,
1996, Ván 1, nhưng Kasparov đã thắng trận khi thắng 3 và hòa 2 ván tiếp theo.
Trận tái đấu 6 ván diễn ra tháng 5 năm 1997 đã có phần thắng nghiêng về máy
(về thực tế là một Deep Blue cải tiến) và sau đó IBM tuyên bố cho nghỉ. Trong tháng
10 năm 2002, Vladimir Kramnik đã hòa trong một trận đấu 8 ván với chương
trình Deep Fritz. Năm 2003, Kasparov hòa cả trận 6 ván với chương trình Deep
Junior trong tháng 2, và trận 4 ván vớiX3D Fritz trong tháng 11.
Máy tính chơi cờ Hydra là hậu duệ có trí tuệ của Deep Blue; và có lẽ nó mạnh
hơn Deep Blue. Tháng 6 năm 2005, Hydra đã thắng oanh liệt trên số 7 thế giới khi
đó là đại kiện tướng Michael Adams trong một trận đấu 6 ván với tỷ số 5,5-0,5.
Thất bại của Kasparov trước Deep Blue đã sinh ra một ý tưởng sáng tạo
những biến thể cờ vua trong đó trí tuệ con người có thể vượt trội so với khả năng tính
toán của máy tính và cố gắng của lập trình viên. Cụ thể là Arimaa, cũng được chơi trên
bàn cờ tiêu chuẩn 8×8, là một loại trò chơi mà trong đó con người có thể đánh bại
những cố gắng cao nhất của các lập trình viên, thậm chí ngay cả khi chơi rất nhanh.
21



1.8 Hiện trạng bài toán cần giải quyết.
Để làm được game cờ vua trước hết ta phải hiểu rõ luật cờ vua, sau đó từng bước
xây dựng chương trình:
-

Đầu tiên ta phải làm được chơi giữa người với người.
Khi đã làm được người với người thì ta sẽ phát triển lên 1 chút là
người với máy (random nước đi).
Cuối cùng là giai đoạn khó khăn nhất người với máy (Minmax,
Alpha - Beta) và chơi qua kết nối mạng LAN

1.9 Kết luận và định hướng nghiên cứu
Qua chương đầu tiên, chúng ta đã cùng nhau tìm hiều về game. Ngôn ngữ lập
trình C#, bước đầu đã biết được game vô cùng phổ biến và có xu hướng ngày càng
phát triển. Điều đó cũng là minh chứng cho ngành lập trình game là có thể phát triển,
có thể cạnh tranh.
Chúng ta cũng đã tìm hiểu được tổng quan về game cờ vua cũng như cách chơi và
luật chơi cờ Vua, xác định những mục tiêu cần thực hiện và xác định được thuật toán
cần sử dụng để xây dựng chức năng chơi giữa người với máy. Trong chương tiếp theo
chúng ta sẽ tìm hiểu về thuật toán tìm kiếm đối kháng MiniMax và thuật toán cải tiến
của thuật toán MiniMax là thuật toán cắt tỉa Alpha-Beta

22


CHƯƠNG 2:

THUẬT TOÁN MINMAX VÀ CẮT TỈA ALPHA-BETA

Trong chương 2 này chúng ta sẽ tìm hiểu về thuật toán tìm kiếm đối kháng

MiniMax và thuật toán cài tiến của thuật toán MiniMax là thuật toán cắt tỉa AlphaBeta
1.10 Giải thuật tìm kiếm minmax
1.10.1 Giới thiệu
Thuật toán Minimax là thuật toán tìm kiếm chuyên dùng để trả về chuỗi nước đi
tối ưu cho một người chơi trong trò chơi có tổng bằng không. Minimax (còn gọi là
minmax) là một phương pháp trong lý thuyết quyết định có mục đích là tối thiểu hóa
(minimize) tổn thất vốn được dự tính có thể là tối đa (maximize). Có thể hiểu ngược
lại là, nó nhằm tối đa hóa lợi ích vốn được dự tính là tối thiểu (maximin). Thuật toán
này cũng được mở rộng cho nhiều trò chơi phức tạp hơn và giúp đưa ra các quyết định
chung khi có sự hiện diện của sự không chắc chắn.
1.10.2 Giải thuật minmax
Xét một trò chơi đối kháng trong đó hai người thay phiên nhau đi nước của
mình như cờ vua, cờ tướng, cờ carô,... Trò chơi có một trạng thái bắt đầu và mỗi nước
đi sẽ biến đổi trạng thái hiện hành thành một trạng thái mới. Trò chơi sẽ kết thúc theo
một quy định nào đó, theo đó thì cuộc chơi sẽ dẫn đến một trạng thái phản ánh có một
người thắng cuộc hoặc một trạng thái mà cả hai đấu thủ không thể phát triển được
nước đi của mình, ta gọi nó là trạng thái hòa cờ. Ta tìm cách phân tích xem từ một
trạng thái nào đó sẽ dẫn đến đấu thủ nào sẽ thắng với điều kiện cả hai đấu thủ đều có
trình độ như nhau.
 Ý tưởng
Hai đối thủ trong một trò chơi được gọi là MIN và MAX. MAX đại diện cho
đối thủ quyết giành thắng lợi hay cố gắng tối đa hóa ưu thế của mình. Ngược lại MIN
là đối thủ cố gắng tối thiểu hóa điểm số của MAX. Ta giả thiết MIN cũng dùng cùng
những thông tin như MAX.
Một trò chơi như vậy có thể được biểu diễn bởi một cây trò chơi. Mỗi một nút
của cây biểu diễn cho một trạng thái. Nút gốc biểu diễn cho trạng thái bắt đầu
23


của cuộc chơi. Mỗi nút lá biểu diễn cho một trạng thái kết thúc của trò chơi

(trạng thái thắng, thua hoặc hòa). Nếu trạng thái x được biểu diễn bởi nút n thì
các con của n biểu diễn cho tất cả các trạng thái kết quả của các nước đi có thể
xuất phát từ trạng thái x.
Do hai đấu thủ luân phiên nhau đi nước của mình nên các mức (lớp) trên cây trò
chơi cũng luân phiên nhau là MAX và MIN.Cây trò chơi vì thế còn có tên là cây MINMAX. Trên cây trò chơi các nút ứng với trạng thái mà từ đó người chơi MAX chọn
nước đi sẽ thuộc lớp MAX, các nút ứng với trạng thái mà từ đó người chơi MIN chọn
nước đi sẽ thuộc lớp MIN. Chiến lược minimax thể hiện qua quy tắc định trị cho các
nút trên cây trò chơi như sau:
- Nếu nút là nút lá gán cho nút đó một giá trị để phản ánh trạng thái thắng thua hay
hòa của các đấu thủ.
- Sử dụng giá trị của các nút lá để xác định giá trị của các nút ở các mức trên trong
cây trò chơi theo quy tắc:
+ Nút thuộc lớp MAX thì gán cho nó giá trị lớn nhất của các nút con của nút
đó.
+ Nút thuộc lớp MIN thì gán cho nó giá trị nhỏ nhất của các nút concủa nút đó.
Giá trị được gán cho từng trạng thái theo quy tắc trên chỉ rõ giá trị của trạng thái tốt
nhất mà mỗi đối thủ có thể hy vọng đạt được. Người chơi sẽ sử dụng các giá trị này để
lựa chọn các nước đi cho mình. Đối với người chơi MAX khi đến lượt đi, người chơi
này sẽ chọn nước đi ứng với trạng thái có giá trị cao nhất trong các trạng thái con, còn
với người chơi MIN khi đến lượt sẽ chọn nước đi ứng với trạng thái có giá trị nhỏ nhất
trong các trạng thái con.
Ví dụ 1: Xét trò chơi carô có 9 ô (Tic tac toe). Hai người MAX và MIN thay phiên
nhau đi X hoặc O (MAX đi X, MIN đi O). Người nào đi được 3 ô thẳng hàng (ngang,
dọc, xiên) thì thắng cuộc. Nếu đã hết ô đi mà chưa phân thắng bại thì hai đấu thủ hòa
nhau. Một phần của trò chơi này được biểu diễn bởi cây sau:

24


Hình 2.1: Một phần cây trò chơi trong trò chơi tic-tac-toe.

Trong cây trò chơi trên, các nút lá được tô nền và viền khung đôi để dễ phân
biệt với các nút khác. Ta có thể gán cho mỗi nút lá một giá trị để phản ánh trạng thái
thắng thua hay hòa của các đấu thủ. Chẳng hạn ta gán cho nút lá các giá trị như sau:
1 nếu tại đó người đi X đã thắng
-1 nếu tại đó người đi Xđã thua
0 nếu hai đấu thủ đã hòa nhau
Như vậy từ một trạng thái bất kỳ, đến lượt mình, người đi X sẽ chọn cho mình
một nước đi sao cho dẫn đến trạng thái có giá trị lớn nhất (trong trường hợp này là 1).
Ta nói X chọn nước đi MAX, nút mà từ đó X chọn nước đi của mình được gọi là nút
MAX. Người đi O đến lượt mình sẽ chọn một nước đi sao cho dẫn đến trạng thái có
giá trị nhỏ nhất (trong trường hợp này là -1, khi đó X sẽ thua và do đó O sẽ thắng). Ta
nói O chọn nước đi MIN, nút mà từ đó O chọn nước đi của mình được gọi là nút MIN.
Áp dụng chiến lược Minimax cho một nhánh trong cây trò chơi của trò chơi Tic-tactoe ta có giá trị (phía trên mỗi nút) của các nút được thể hiện trong hình 2.1.
25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×