Bao Cao TTNT (Da Chinh Sua)
-
Upload
tieuconuongkute -
Category
Documents
-
view
393 -
download
2
Transcript of 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.
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.
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
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
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).
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.
- 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.
- 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
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à
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
|*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.
*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
- 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
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
Và bây giờ bạn đã có thể chơi cờ được rồi.
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
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.
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.