Bao Cao TTNT (Da Chinh Sua)

25
LỜI NÓI ĐẦU Ngày nay cùng với sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh mẽ của nền công nghệ thông tin. Trong quá trình công nghiệp hóa và hiện đại hóa đất nước thì công nghệ thông tin là không thể thiếu. Cùng với nó là sự ra đời của các ngành khoa học phục vụ cho lợi ích và nhu cầu của con người. Với quá trình phát triển của khoa học kỹ thuật và công nghệ thì ngành công nghệ thông tin đóng vai trò quan trọng trong việc giải quyết các vấn đề khó khăn trong công việc như: kế toán, quản lý nhân sự, điều khiển tự động hóa… Công nghệ thông tin đã đạt được các thành tựu to lớn với những bước tiến nhảy vọt. Việc áp dụng các công nghệ khoa học kỹ thuật vào lĩnh vực đời sống con người ngày càng rộng rãi và không ngừng can thiệp vào hầu hết các công việc của đời sống. Phát triển công nghệ thông tin đã và đang là một hướng đi mũi nhọn của nước ta cũng như các quốc gia trên thế giới. Đi đôi với sự phát triển của ngày công nghệ chế tạo là việc cho ra đời các sản phẩm phần mềm ứng dụng là mang tính chất quyết định đối với ngày khoa học máy tính này. Trên thế giới cũng như ở Việt Nam, công nghệ thông tin đã trở thành một ngày công nghiệp mũi nhọn,

Transcript of Bao Cao TTNT (Da Chinh Sua)

Page 1: Bao Cao TTNT (Da Chinh Sua)

LỜI NÓI ĐẦU

Ngày nay cùng với sự phát triển về khoa học và kỹ thuật là sự phát triển

mạnh mẽ của nền công nghệ thông tin. Trong quá trình công nghiệp hóa và hiện

đại hóa đất nước thì công nghệ thông tin là không thể thiếu. Cùng với nó là sự ra

đời của các ngành khoa học phục vụ cho lợi ích và nhu cầu của con người.

Với quá trình phát triển của khoa học kỹ thuật và công nghệ thì ngành

công nghệ thông tin đóng vai trò quan trọng trong việc giải quyết các vấn đề khó

khăn trong công việc như: kế toán, quản lý nhân sự, điều khiển tự động hóa…

Công nghệ thông tin đã đạt được các thành tựu to lớn với những bước tiến nhảy

vọt. Việc áp dụng các công nghệ khoa học kỹ thuật vào lĩnh vực đời sống con

người ngày càng rộng rãi và không ngừng can thiệp vào hầu hết các công việc

của đời sống. Phát triển công nghệ thông tin đã và đang là một hướng đi mũi

nhọn của nước ta cũng như các quốc gia trên thế giới. Đi đôi với sự phát triển

của ngày công nghệ chế tạo là việc cho ra đời các sản phẩm phần mềm ứng dụng

là mang tính chất quyết định đối với ngày khoa học máy tính này.

Trên thế giới cũng như ở Việt Nam, công nghệ thông tin đã trở thành một

ngày công nghiệp mũi nhọn, nó là một ngày khoa học kỹ thuật không thể thiếu

trong việc áp dụng vào các hoạt động xã hội và khoa học.

Nền công nghiệp hiện nay mang tính chất tự động hóa cao kèm theo đó là

sự đòi hỏi về việc ứng dụng công nghệ thông tin cho lĩnh vực này. Vậy để có thể

đáp ứng tốt những yêu cầu của ngày càng cao hơn trong lĩnh vực tự động hóa

người ta đã tiến hành lập trình cho những cỗ máy, những người máy có thể tư

duy như con người nhằm giảm bớt các gánh nặng công việc.

Việc ứng dụng trí tuệ nhân tạo đã tạo ra một cuộc cách mạng lớn trong

việc tìm hiểu và chinh phục những điều mà con người không dám mơ tới. Đó là

những robot thông minh, những cỗ máy thông minh có thể thay thế con người

làm việc trong những môi trường khắc nghiệt hay chinh phục không gian bao la.

Page 2: Bao Cao TTNT (Da Chinh Sua)

Và bên cạnh đó là việc ứng dụng những thành tựu đó vào lĩnh vực giải trí

của con người. Đó là những con vật robot, những trò chơi. Đó là những ứng

dụng lớn lao của trí tuệ nhân tạo vào của sống của con người.

Với mong muốn tạo ra một trò chơi nhỏ nhằm thỏa mãn nhu cầu giải trí

của con người và giúp mọi người hiểu được tầm quan trọng của trí tuệ nhân tạo

trong công nghệ thông tin. Chúng em đã tìm hiểu và xây dựng chương trình trò

chơi cờ Caro. Đây là một chương trình nhỏ có thể nó chưa được hoàn thiện

nhưng quan trọng hơn đó là giúp mọi người hiểu được vai trò của việc ứng dụng

trí tuệ nhân tạo trong cuộc sống.

Mặc dù rất cố gắng để hoàn thành công việc, xong thời gian có hạn và

kiến thức chưa nhiều nên việc chương trình còn nhiều thiếu sót cần được bổ

xung. Vì vậy chúng em mong nhận được những đóng góp của thầy cô và bạn bè

để chương trình ngày càng hoàn thiện hơn và giúp ích được nhiều hơn.

Page 3: Bao Cao TTNT (Da Chinh Sua)

I – GIỚI THIỆU

- Cờ carô là một trò chơi dễ chơi, rất phổ biến và được nhiều người yêu

thích. Đây cũng là một trò thử tài thông minh của người chơi. Trò chơi gồm 2

người chơi, đối thủ này sẽ tìm cách dành chiến thắng trước đối thủ kia trong một

số hữu hạn nước đi, mỗi nước đi được tạo ra từ 1 trạng thái bất kỳ của trận đấu.

Nếu sau 1 số giới hạn nước đi, nếu chưa ai dành chiến thắng thì kết quả trận đấu

là hòa. Ngoài ra, thông tin về trận đấu là hoàn toàn biết được (perfect

information) đối với cả 2 đối thủ.

- Thông thường để chơi trò cờ caro, 2 người chơi chỉ cần chuẩn bị một tờ

giấy có kẻ sẵn các ô vuông trên tờ giấy(vùng ô vuông càng nhiều thì khoảng

không gian giành cho người chơi thi tài càng nhiều), cùng 2 chiếc bút để mỗi

người chơi tích nước đi của mình. Trò chơi kết thúc khi một trong 2 người chơi

tích được đúng 5 con hình (dấu X hoặc dấu O ) trên các ô vuông liên tiếp nhau

theo chiều dọc, ngang hoặc chéo. Khi chưa phân thắng bại nhưng hết chỗ để cho

người chơi tích nước đi, khi đó kết quả sẽ là hòa.

- Cờ Carô (hay còn gọi là Gomoku) cũng là 1 loại trò chơi đối kháng,

trong đó mỗi đối thủ trong mỗi lượt đi của mình sẽ chọn 1 ô trống còn lại trên

bàn cờ (kẻ sẵn các ô lưới) sao cho tạo thành n con liên tiếp để chiến thắng.

Ngoài ra, có luật thi đấu mà người ta đã chứng minh được người đi trước

bao giờ cũng có thuật toán để thắng, do đó để hạn chế thuận lợi của người đi

trước, người ta đã đặt ra luật sau (luật này sẽ sử dụng cho quá trình phát triển

chương trình) :

+ Bàn cờ có kích thước tuỳ ý NxN.

+ Quân cờ đầu tiên phải đánh chính giữa lưới bàn cờ.

+ Nếu tồn tại đúng 5 con liên tiếp và không bị chặn hai đầu trên 1 hàng là

thắng (theo cả hàng chéo, ngang, dọc).

+ Nếu hết chỗ đi thì 2 bên hoà.

II – MỤC TIÊU, Ý TƯỞNG

Page 4: Bao Cao TTNT (Da Chinh Sua)

1 - Mục tiêu

- Viết 1 chương trình chơi cờ caro mà máy có khả năng "biết chơi" cờ

carô (tức là biết chơi cờ đúng luật chơi).

- Chương trình ít nhất phải đánh thắng những người chưa biết đánh cờ

carô ngoài ra phải cho những cao thủ chơi cờ caro biết trình độ thông minh của

chương trình được tạo ra.

- Chương trình đã cài đặt để cho người dùng có thể lựa chọn từng mức độ

(Level) khó dễ khác nhau để phù hợp với trình độ của từng người chơi.

2 - Ý tưởng:

- Chọn cấu trúc dữ liệu thích hợp để lưu trạng thái 1 ô của bàn cờ (lưu

thông tin của từng ô)

- Chọn CTDL thích hợp để lưu trạng thái 1 bàn cờ: Board (Ví dụ mảng 1

chiều, mảng 2 chiều, danh sách liên kết, cây, chuỗi ...).

- Chọn phương pháp đánh giá 1 nước đi này là tốt hơn nước đi kia như thế

nào cho đơn giản và hiệu quả (Evaluation).

- Chọn thuật toán thích hợp để tìm kiếm nước đi ...(No thinking ahead,

Simple Breadth First Search, Simple Depth First Search, MinMax, Alpha Beta,

NegaScout, MTD(f), PVS ...). Cụ thể trong chương trình dùng thuật toán Alpha

Beta.

- Chọn các phương pháp cải tiến để nâng cao khả năng chơi cờ

(Heuristic : Opening books, Iterative Deepening, Lazy Evaluation, Knowledge

Base, Static/Dynamic Evaluation, Winning Threads, Best score, Best move,

Deep thought, Quiescence Depth, Transition Table, Hash Table, Score Table ...)

- Chọn 1 loại ngôn ngữ lập trình để hiện thực: C, C++, C#, Pascal, Object

Pascal, Visual Basic. net, Java...). Chương trình được xây dựng trên ngôn ngữ

C# chạy trên nền Frame work 2.0.

III – CƠ SỞ ĐỀ TÀI

Page 5: Bao Cao TTNT (Da Chinh Sua)

1 - Thuật toán: Để hiện thực hóa ý tưởng thực hiện xây dựng chương

trình ta áp dụng phương pháp cắt Alpha - Beta

- Chúng ta cố gắng tìm một cách sao cho khi định trị một nút thì không

nhất thiết phải định trị cho tất cả các nút con cháu của nó. Trước hết ta có nhận

xét như sau:

- Nếu P là một nút MAX và ta đang xét một nút con Q của nó (dĩ nhiên Q

là nút MIN). Giả sử Vp là một giá trị tạm của P, Vq là một giá trị tạm của Q và

nếu ta có Vp ≥ Vq thì ta không cần xét các con chưa xét của Q nữa. Vì nếu có

xét thì giá trị của Q cũng sẽ nhỏ hơn hoặc bằng Vq và do đó không ảnh hưởng gì

đến Vp. Tương tự nếu P là nút MIN (tất nhiên Q là nút MAX) và Vp ≤ Vq thì ta

cũng không cần xét đến các con chưa xét của Q nữa. Việc không xét tiếp các

con chưa được xét của nút Q gọi là việc cắt tỉa Alpha-Beta các con của nút Q.

Trên cơ sở nhận xét đó, ta nêu ra quy tắc định trị cho một nút không phải

là nút lá trên cây như sau:

+ Khởi đầu nút MAX có giá trị tạm là -∞ và nút MIN có giá trị tạm là ∞.

+ Nếu tất cả các nút con của một nút đã được xét hoặc bị cắt tỉa thì giá trị

tạm của nút đó trở thành giá trị của nó.

+ Nếu một nút MAX n có giá trị tạm là V1 và một nút con của nó có giá

trị là V2 thì đặt giá trị tạm mới của n là max (V1,V2). Nếu n là nút MIN thì đặt

giá trị tạm mới của n là min (V1,V2).

+ Vận dụng quy tắc cắt tỉa Alpha-Beta nói trên để hạn chế số lượng nút

phải xét.

Ví dụ: Vận dụng quy tắc trên để định trị cho nút A trong cây trò chơi (như

hình vẽ sau).

Page 6: Bao Cao TTNT (Da Chinh Sua)

Ta thấy A là nút MAX, lúc đầu nó có giá trị tạm là -∞

- Xét B là con của A, B là nút lá nên giá trị của nó là giá trị đã được gán 1,

giá trị tạm của A bây giờ là max (-∞,1) = 1.

- Xét con C của A, C là nút MIN, giá trị tạm lúc đầu của C là ∞.

- Xét con E của C, E là nút MAX, giá trị tạm của E là -∞.

- Xét con I của E, I là nút lá nên giá trị của nó là 0. Quay lui lại E, giá trị

tạm của E bây giờ là max (-∞,0) = 0. Vì E chỉ có một con là I đã xét nên giá trị

tạm 0 trở thành giá trị của E.

Page 7: Bao Cao TTNT (Da Chinh Sua)

- Quay lui lại C, giá trị tạm mới của C là min (∞,0) = 0. A là nút MAX có

giá trị tạm là 1, C là con của A, có giá trị tạm là 0, 1>0 nên ta không cần xét con

F của C nữa. Nút C có hai con là E và F, trong đó E đã được xét, F đã bị cắt, vậy

giá trị tạm 0 của C trở thành giá trị của nó. Sau khi có giá trị của C, ta phải đặt

lại giá trị tạm của A, nhưng giá trị tạm này không thay đổi vì max (1,0) = 1.

- Tiếp tục xét nút D, D là nút MIN nên giá trị tạm là ∞.

- Xét nút con G của D, G là nút MAX nên giá trị tạm của nó là -∞.

- Xét nút con J của G. Vì J là nút lá nên có giá trị 0.

- Quay lui lại G, giá trị tạm của G bây giờ là max (-∞,0) = 0 và giá trị tạm

này trở thành giá trị của G vì G chỉ có một con J đã xét.

- Quay lui về D, giá trị tạm của D bây giờ là min (∞,0) = 0. Giá trị tạm

này của D nhỏ hơn giá trị tạm của nút A MAX là cha của nó nên ta cắt tỉa con H

chưa được xét của D và lúc này D có giá trị là 0.

- Quay lui về A, giá trị tạm của nó vẫn không thay đổi, nhưng lúc này cả 3

con của A đều đã được xét nên giá trị tạm 1 trở thành giá trị của A.

2 – Ngôn ngữ lập trình

- Ngôn ngữ lập trình được lựa chọn là: C# (hay còn gọi là C shap).

III – PHÂN TÍCH VÀ THIẾT KẾ MỘT CHƯƠNG TRÌNH CỜ

CARO TỔNG QUÁT

1- Khảo sát yêu cầu bài toán

- Như chúng ta đã biết, trong trò chơi Caro, cứ sau mỗi nước cờ, mỗi đối

thủ sẽ chọn ra từ những ô trống (empty - not occupied) một ô để đi, do đó sau 1

mỗi nước đi thì số ô trống còn lại sẽ giảm. Như vậy, việc tìm nước đi tiếp theo

cho trạng thái có sẵn chỉ là việc tìm kiếm những ô trống còn lại, đồng thời,

không gian tìm kiếm sẽ thu hẹp theo số nước đi đã tạo. Điều này được tận dụng

để sau này cải tiến thêm việc gia tăng độ sâu tính toán cho chương trình ở những

nước cờ tàn.

Page 8: Bao Cao TTNT (Da Chinh Sua)

- Không gian chọn nước đi từ mỗi trạng thái ban đầu là vô hạn, nhưng

không gian tìm kiếm(searching space) một nước đi dẫn đến chiến thắng là hữu

hạn. Nhưng rõ ràng số lượng phần tử của hai không gian này đuợc so sánh giống

như hạt cát và sa mạc (hoặc như tập số tự nhiên là vô hạn đếm đuợc, tập số hữu

tỉ cũng vô hạn đếm được nhưng mà số lượng phần tử của Q so với của N). Do

đó ta không thể vét sạch không gian tìm kiếm nước đi này mà ta phải giới hạn

không gian tìm kiếm.

- Một không gian tìm kiếm có thể thực hiện theo dạng 1 cái cây đa phân

bình thường như trong Data Struct định nghĩa, lúc này nó được gọi là cây tìm

kiếm, cây trò chơi( Searching Tree,Game Tree), mỗi nút (Node) cùng mức của

cây này thể hiện một lựa chọn các nước đi có sẵn, mức (Ply) này sẽ thể hiện cho

việc đánh giá khoảng cách từ nút gốc đến những nút con này. Nếu số nút ở mỗi

mức càng nhiều, tức là có nhiều khả năng chọn lựa một nước đi từ một trạng

thái trước, do đó độ phân nhánh (Branching factor) của cây này càng lớn.

- Dựa vào định nghĩa cây trò chơi ở trên, việc tìm kiếm nước đi là chọn 1

nút trên cây ( ở mức 1) sao cho nước đó là tốt ( tốt ở đây đuợc hiểu là do người

lập trình đánh giá, vì một nước đi này là tốt hơn nước đi kia thì phụ thuộc trình

độ, khả năng của người chơi cờ), theo thông thường khi chơi, một nước đi tốt

hay không là phụ thuộc vào khả năng dành chiến thắng là cao hay thấp sau khi

nước đi này được "made" (tức là "đi"), do đó, muốn chọn một nước đi tốt thì nếu

chỉ dựa vào thế cờ hiện tại là chưa đủ, mà phải biết thông tin của những thế cờ

sau khi chọn nước này để đi.

- Áp dụng với giải thuật trò chơi cờ Carô, chúng ta lại chọn một nước đi

vào một ô nào đó để chặn đuờng 3 hở hai đầu của đối thủ (Opponent, Enemy) vì

ta biết rằng nếu không đi nước này thì sẽ thua ở 2 nửa nước đi tiếp theo, tức là

trạng thái thua còn chưa biết được nếu ngay sau khi chọn đi một ô khác để đi

xuất phát trạng thái này. Khái niệm độ sâu cung nảy sinh từ đây, đơn giản thì độ

sâu (Depth) là khả năng "nhìn thấy trước" (looking ahead) một nước đi tốt sau

một loạt nước đi xuất phát từ hiện tại Ví dụ như nếu từ trạng thái này, chúng ta

Page 9: Bao Cao TTNT (Da Chinh Sua)

nhận biết được là sau 6 con nữa là mình sẽ thắng (tức là mỗi bên đi 3 con), khi

đó độ sâu tính toán là >= 6. Ta có 1 ví dụ khác: ở trạng thái hiện tại, chọn đi 1

nuớc đi "tốt" theo sự tính toán của mình, dự đoán là sau 4 con nữa là mình vẫn

chưa thua, nhưng thực tế sau đó 3 nước nữa (mỗi bên đi 3 con) thì ta lại thua,

khi đó, rõ ràng "thua" là trạng thái mà ta không hề nhận thấy khi chọn nước đi

tốt ở trên, tức là độ sâu tính toán của trong trường hợp này chính xác là 3, đó gọi

là độ sâu lớn nhất (Max Depth) mà người chơi có thể đạt được khi tìm kiếm.

Như vậy, Max depth thể hiện khả năng & trình độ của người chơi cờ, người chơi

chơi càng hay thì giá trị này càng lớn.

- Để viết chương trình cho máy tính chơi cờ, tức là máy tính phải tự tìm

nước đi khi mình đưa vào 1 trạng thái bàn cờ bất kì, do không gian tìm kiếm là

quá lớn (coi như là vô hạn) nên mình chỉ giới hạn cho máy tính chỉ tìm kiếm đến

1 độ sâu nào đó mà thôi. Đó là độ sâu tìm kiếm lớn nhất thể hiện khả năng của

chương trình, chúng ta sẽ cố gắng nâng cao giá trị này bằng cách cài đặt thêm

các tri thức cờ cho nó (Heuristic, Knowledge ...), tức là sau khi chạy chương

trình, máy tính phải biết chọn ra một nước tốt trong tất cả các ô trống còn lại sao

cho sẽ chưa bị thua sau 1 loạt nước đi.

IV – HIỆN THỰC THUẬT TOÁN TRONG CHƯƠNG TRÌNH

1. Giới thiệu các kỹ thuật

Các kỹ thuật này sẽ được trình bày bao gồm :

* Sinh nước đi: Đây là kỹ thuật quan trọng nhất khi xử lý chương trình

- Sinh nước đi (generate moves) đây là 1 giai đoạn trong quá trình tìm

kiếm nước đi, tức là từ trạng thái hiện tại, mình muốn tìm kiếm một nước đi hợp

lệ cho lượt của người chơi hiện tại khi đó phải lượm (tức là "sinh") tất cả các

nước đi có thể có, sau đó mình sẽ chọn một nước đi tốt nhất (phải đánh giá nó)

trong số những nước đó.

- Tại sao phải sinh nước đi: Thông tin cho quá trình tìm kiếm nước đi chỉ

đơn giản chỉ là cái board với những ô trống hay ô đã bị chiếm (của cả 2 bên) mà

Page 10: Bao Cao TTNT (Da Chinh Sua)

thôi! Nếu không có sẵn thông tin những nước đi hợp lệ thì việc tìm kiếm đơn

giản chỉ là chọn ngẫu nhiên một ô trống rồi đánh 1 con cờ ... Rõ ràng việc làm

này sẽ dẫn đến việc tìm kiếm vô cùng phức tạp vì mình sẽ không biết một ô

trống đã search qua hay chưa. Do đó có thể rơi vào 1 vòng lặp tìm kiếm vô hạn.

Ví dụ cụ thể là giả sử mình đang ở trong 1 mê cung, bước đầu tiên là chọn

1 con đường không bị tường chặn rồi đi vào, nếu đụng ngõ cụt thì sẽ quay lại

tìm đường khác, thế nhưng nếu sau khi quay lại, mình lại không biết là đã từng

vào con đường trên và thế là đi vào tiếp. Cách giải quyết cho trường hợp này đó

là trước khi chọn 1 trong những con đường để đi thì mình sẽ đánh dấu tất cả con

đường theo thứ tự và lần này bước vào con đường thứ 1, nếu không thoát ra

được thì quay lại và chọn đường thứ 2.

- Số nước đi cần sinh trong mỗi bước đi là rất nhiều ( = Tổng số ô trên

bàn cờ - Số ô đã đi) nhưng chỉ có 1 ít trong số đó là có liên quan với những ô đi

trước và có khả năng gây đe doạ. Đó là những ô kế cận những ô đã đánh ở đây

có thể sinh tất cả những nước đi trong vòng bán kính 1,2 ô so với ô trung tâm.

Ví dụ hình sau cho thấy những ô liên quan cần sinh trong vòng bán kính là 1,2

đối với quân 'O' ở trung tâm :

+Sau đây là vài trong số tất cả thế cờ mà chương trình sẽ nhận biết được :

|====OOO=|0 ; Chưa đủ quân số (5 con) mà đã bị 'triệt sản' rùi !

|==*OOOOO|0 ; Nhiều quá ... chen chúc nhau 6 con thì làm sao mà ăn !

|===O**OO|0 ; Không thể nào đánh được đúng 5 con để thắng ...

|==OO**OO|0 ; ... nên loại ra khỏi quá trình lượng giá !

|===*OO==|0 ; Cấu hình 'triệt sản'

(0) ==> Những cấu hình vô ích, đánh vào chỉ tốn quân !!

|==*OOOO*|1

|==*OOOO=|1

|==O*OOOO|1 ; Có khả năng thắng nếu kiểm tra thêm ...

|===*OOOO|1 ; ... điều kiện là bên phải nhất còn rỗng

(1) ==> Đây là những cấu hình tất thắng cho quân O

Page 11: Bao Cao TTNT (Da Chinh Sua)

|*O**OOO*|2 ; Gõ vô ô trống ...

|O***OOO*|2 ; ... đang xét ...

|=O**OOO*|2 ; ... là thượng sách !!

(2) ==> Đây là những cấu hình tất thắng cho quân O nếu đến lượt quân O đi

|O*O*O*OO|3

|***OO*O*|3

|===OOO*=|3

|=***OOO=|3

|=**OO*O*|3

|=OOO****|3

(3) ==> Đây là những đường 4 nguy hiểm khi quân O đánh vào ô trống đang xét

|=**O*O**|4

|=**OO***|4

|**O*O***|4

|=****OO*|4

|==**OO*=|4

(4) ==> Đây là những đường 3 rỗng 2 đầu khi quân O đánh vào ô trống đang xét

- Áp dụng phương pháp này và sinh tất cả các nước đi cho mọi ô đã có quân

chiếm, với cách sinh nước đi hạn chế này thì sẽ giảm rất nhiều chi phí cho việc

tìm kiếm nước đi (vì mỗi lần duyệt ở độ sâu mới thì chỉ cần lựa ra một số nhỏ

hơn nhiều so với số ô trống còn lại) dùng nó để tăng thêm độ sâu.

- Việc sinh nước đi theo kiểu này có thể để riêng trong 1 hàm hoặc người

chơi có thể cải tiến bằng cách vừa lượng giá vừa sinh nước đi.

- Sinh nước đi phụ thuộc nhiều vào cấu trúc dữ liệu lưu bàn cờ : mảng 1

chiều, mảng 2 chiều, danh sách ..., mỗi cách lưu thì sẽ có cách sinh nước đi khác

nhau, có ưu và khuyết điểm riêng, ta chọn cách dùng mảng 1 chiều để lưu bàn

cờ nên cách sinh nước đi cũng dễ dàng hơn

2 - Cách xử lý, cài đặt các hàm trong chương trình:

Độ khó chỉnh độ sâu tìm kiếm của thuật toán trên cây.

Page 12: Bao Cao TTNT (Da Chinh Sua)

*Từng bước chương trình xử lí

Ban đầu vẽ bàn cờ: lưu các ô đã được thiết lập vào mảng trong bộ nhớ.

+Ban đầu máy đánh(ô chính giữa bàn cờ)

+Rồi ta đánh.

Mỗi nước đuợc đánh thì cần kiểm tra các quá trình sau:

1) Ban đầu kiểm tra xem ván đấu đã kết thúc chưa: private Player KiemTraKetThuc( Hang,Cot)kiểm tra lần lượt trên từng hàng : Ngang dọc, chéo. Xem có tồn tại 5 quân liên tiếp của cùng 1 bên ko, và chưa bị chặn 2 đầu. Tồn tại => thông báo kết thúc cuộc chơi.Kiểm tra xong toàn bộ trên bàn cờ. nếu ko còn chỗ trống nào => thông báo hòa.

2) Kế tiếp tính luợng giá bàn cờ: private void LuongGiaBanCo(NguoiChoi Hoặc May)Kiểm tra lần lượt trên : Hàng, cột, 2 đuờng chéo

3) Tiếp theo lưu thông tin lượng giá vào bảng. (bảng trung gian, thực chất là mảng)

4) Sau đó sinh nước đi cho máy: public void SinhNuocDi()Trong hàm này lấy lại giá trị của bảng lượng giá đã lưu để tìm nước đi tốt nhất cho máy.Tìm nước các nước đi tốt nhất của đối thủ(Nguời chơi) để có thể hóa giải.kiểm tra tìm nước đi tốt nhất Với độ sâu thuật toán = độ khó truyền vào khi bắt đầu chơi. Và cách đánh phù hợp với phương án đã chọn ban đầu (Phòng thủ, tấn công hay chế độ thông minh. Nếu chọn tấn công thì xóa hết các nước phòng thủ ko xét đến, và nguợc lại. còn chọn Thông minh thì phải xét cả 2 xem phuơng án nào tối ưu hơn)

5) Tìm nước đi thích hợp nhất public void TimNuocDi()Từ hàm sinh nước đi trên, chọn ra nước đi thích hợp nhất. Phù hợp với lựa chọn độ khó và cách chơi của nguời chơi.

V – CÀI ĐẶT CHƯƠNG TRÌNH VÀ SỬ DỤNG CHƯƠNG TRÌNH

1 - Giới thiệu

Page 13: Bao Cao TTNT (Da Chinh Sua)

- Chương trình sử dụng ngôn ngữ C# ( Visual Studio 2005) chạy trên nền

Frame work 2.0. Là một chương trình tương tác với người sử dụng qua giao diện

đơn giản dễ hiểu.

2 - Hướng dẫn sử dụng

Giao diện chính của chương trình

Lựa chọn mức độ chơi

Page 14: Bao Cao TTNT (Da Chinh Sua)

Sau khi vào giao diện chính của chương trình bạn có thể lựa chọn mức độ

khó, dễ để tiến hành chơi với máy.

Lựa chọn trò chơi

Page 15: Bao Cao TTNT (Da Chinh Sua)

Và bây giờ bạn đã có thể chơi cờ được rồi.

Page 16: Bao Cao TTNT (Da Chinh Sua)

Bạn cũng có thể tìm hiểu về chương chình và cách sử dụng thông qua

menu trợ giúp của chương trình.

3 - Kết luận

* Ưu điểm:

- Chương trình dễ sử dụng, người chơi có thể lựa chọn mức độ chơi khó,

dễ phù hợp với khả năng của mình.

- Chương trình minh họa Trò chơi cờ Caro bằng thuật toán Anpha Beta

chạy ổn định. Minh họa được việc cắt tỉa nhánh của Thuật giải anpha Beta một

cách rõ ràng, máy tính sẽ tự động tìm đường đi tối ưu nhất cho mình, chúng ta

Page 17: Bao Cao TTNT (Da Chinh Sua)

dễ nhận thấy điều này khi chơi chúng ta luôn hòa và thua rất nhiều bởi vì thuật

giải Anpha và Beta đã được thực hiện một cách tối ưu.

- Chương trình cài đặt áp dụng cho trò chơi cờ Caro, có thể mở rộng cho

các trò chơi cờ khác như cờ tướng, cờ vua, cờ vây…

* Nhược điểm:

- Sử dụng biện pháp đồ họa cơ bản nên việc xử lý không bắt mắt, thẫm

mỹ chưa cao.

Page 18: Bao Cao TTNT (Da Chinh Sua)

KẾT LUẬN

Sau một thời gian học tập, nghiên cứu và tìm hiểu được sự hướng dẫn và

giúp đỡ của cô giáo Nguyễn Phương Nga cùng sự góp ý của bạn bè chúng em đã

hoàn thành đề tài “Quản lý nhân sự Công ty Cổ phần công nghệ Nanosoft”. Tuy

nhiên đề tài vẫn còn có nhiều thiếu sót do chưa có nhiều kinh nghiệm cũng như

thời gian. Xong qua thời gian học tập và tìm hiểu cùng nhau chúng em đã học

hỏi thêm được nhiều kiến thức bổ ích về việc ứng dụng của cơ sở dữ liệu vào

các bài toán quản lý lớn trong đời sống thực tiễn.

Qua đề tài này chúng em rất mong được sự hướng dẫn, giúp đỡ của cô

giáo cùng các bạn trong lớp để đề tài của chúng em ngày càng được hoàn thiện

hơn và chúng em có thể nâng cao kiến thức của mình để có thể đáp ứng ngày

một tốt hơn yêu cầu của việc công nghiệp hóa, hiện đại hóa đất nước.

Qua đây chúng em cũng xin chân thành cảm ơn cô giáo Nguyễn Thị

Phương Nga đã giúp đỡ chúng em có kiến thức để hoàn thành tốt đề tài này.