You are on page 1of 23

Cờ Ca Ro

Chương 1:Tổng Quan Đặt Vấn Đề ...................................................................................... 3

Chương 2: Lý thuyết cơ sở để giải quyết vấn đề ............................................................ 3

2.1. Sự lựa chọn thuật toán của vấn đề: ..................................................................... 3

2.2. Thuật toán Heuristic: .......................................................................................... 3

2.2.1. Giới thiệu về thuật toán Heuristic:...................................................................... 3

2.2.1.1. Heuristic là gì? .................................................................................................... 3

2.2.1.2. Heuristic dùng để làm gì? ................................................................................... 4

2.2.2. Các thành phần của thuật toán Heuristic ............................................................ 4

2.3. Áp dụng Heuristic vào giải quyết vấn đề: .......................................................... 4

Chương 3: PhânTíchThiết Kế Hiện Thực Hệ thống............................................................ 8

3.1. Phân tích thiết kế: ............................................................................................... 8

3.1.1. Cấu trúc dữ liệu và cách cách biểu diễn trạng thái bài toán: .............................. 8

3.1.1.1. Cấu trúc dữ liệu biểu diễn trạng thái ô cờ trên bàn cờ: ...................................... 8

3.1.1.2. Cấu trúc dữ liệu biểu diễn thông tin bàn cờ: ...................................................... 9

3.1.1.3. Cấu trúc dữ liệu lưu trữ trạng thái bàn cờ ở mỗi bước đi ................................... 9

3.1.2. Thiết kế các thành phần chính cấu trúc class trong chương trình: ................... 10

3.1.2.1. Class BanCo: .................................................................................................... 10

Nhóm 3 Page 1

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

3.1.2.2. Class Node: ....................................................................................................... 11

3.1.2.3. Class Window1: ................................................................................................ 11

3.1.3. Thiết kế các thuật toán chính sử dụng trong chương trình: .............................. 11

3.1.3.1. Thuật toán gán giá trị tăng thêm của ô cờ trong khu vực xuất hiện quân cờ của
người chơi: ..................................................................................................................... 11

3.1.3.2. Thuật toán gán giá trị tăng thêm của ô cờ trong khu vực xuất hiện quân cờ của
máy: 12

3.1.3.3. Thuật tóan đánh giá gía trị các ô cờ (tương ứng với làm lượng giá heristic): .. 13

3.1.3.4. Thuật tóan tìm vị trí đánh cho máy: ................................................................. 16

3.1.3.5. Thuật toán kiểm tra người chơi thắng .............................................................. 18

3.2. Hiện thực hệ thống: .......................................................................................... 19

3.2.1. Lựa chọn ngôn ngữ để cài đặt thuật toán: ........................................................ 19

3.2.2. Một số giao diện khi chạy chương trình: .......................................................... 20

3.2.2.1. Giao diện khi mới chay chương trình: .............................................................. 20

Chương 4: Kết Luận .......................................................................................................... 22

4.1. Đánh giá: ................................................................................................................. 22

4.2. Hướng phát triển:..................................................................................................... 23

4.3. Tài liệu tham khảo ............................................................................................ 23

Nhóm 3 Page 2

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

Chương 1: Tổng Quan Đặt Vấn Đề

Caro là một trò chơi đối kháng điển hình: 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 để tạo ra một đường năm
quân liên tiếp.Mỗi nước đi của người chơi được dựa trên trạng thái tiếp theo của trận
đấu.Nếu sau một số giới hạn nước đi, chưa ai dành chiến thắng thì xem như hoà. Caro là
một trò chơi đơn giản, gần gũi trong cuộc sống nhưng đòi hỏi sự thông minh và khéo léo
của người chơi.Ngày nay với sự phát triển của công nghệ, cũng như sự phát triển của các
hệ cơ sở tri thức, ta có thể xây dựng một chương trình cờ caro để thay thế một người chơi
trong ván cờ.Vấn đề đặt ra là sẽ xây dựng một chương trình cờ caro giữa người và máy,
máy có khả năng thay thế người chơi, và luôn tìm cách giành thắng lợi.

Chương 2: Lý thuyết cơ sở để giải quyết vấn đề

2.1. Sự lựa chọn thuật toán của vấn đề:

Do chương trình được xây dựng với bàn cờ có kích thước 20x20, nên không gian
tìm kiếm tương đối lớn. Nhóm quyết định chọn giải thuật Heristic tìm kiếm tốt nhất đầu
tiên (best first search) để giải quyết vấn đề.

2.2. Thuật toán Heuristic:

2.2.1. Giới thiệu về thuật toán Heuristic:

2.2.1.1. Heuristic là gì?

 Heuristic là những tri thức được rút tỉa từ những kinh nghiệm, “trực
giác con người”.

 Heuristic có thể là những tri thức “đúng” hay “sai”.

Nhóm 3 Page 3

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

 Heuristic là những meta knowledge và thường “đúng”.

2.2.1.2. Heuristic dùng để làm gì?

 Trong những bài toán tìm kiếm không gian trạng thái, có 2
trường hợp cần đến Heuristic:

Vấn đề có thể không có nghiệm chính xác do các mệnh đề


không phát biểu chặt chẽ hay thiếu dữ liệu để khẳng định kết
quả.

Vấn đề có nghiệm chính xác nhưng phí tổn tính toán để tìm ra
nghiệm là quá lớn.

 Heuristic giúp tìm kiếm đạt kết quả với chi phí thấp hơn.

2.2.2. Các thành phần của thuật toán Heuristic :

Thuật toán Heristic gồm 2 thành phần:

Hàm đánh giá Heuristic.

Thuật toán để sử dụng nó trong tìm kiếm không gian trạng thái.

2.3. Áp dụng Heuristic vào giải quyết vấn đề:

 Bước 1: Thu thập những tri thức về cờ caro : cách chơi, các quy định, cách
đánh tối ưu. Từ những tri thức đó ta lựa chọn thuật toán phù hợp để thể hiện các
tri thức cần thiết vào chương trình.

Nhóm 3 Page 4

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

 Bước 2: Từ những kiến thức thu thập được ta xây dựng thuật toán cho lựa chọn
cách đánh của máy. Nhóm lựa chọn giải thuật Heuristic dựa vào những tri thức
kinh nghiệm về những cách đi có lợi, để xây dựng tìm nước đi cho máy .

 Theo kinh nghiệm, với mỗi nước đi của máy ta phải tìm cách phải chặn được
đường thắng của quân đối thủ để đối thủ không có khả năng tạo đường thắng,
máy sẽ ưu tiên chọn nước đi có khả năng tạo đường thắng cho máy cao hơn.
Nên ta định vị trí đánh tối ưu cho máy theo :

 Bước 2.1: Định giá trị cho các ô còn trống trên bàn cờ (tương ứng với việc xây
dựng hàm đánh Heuristic) bằng cách: Ta lần lược duyệt qua các ô cờ theo chiều
dọc, ngang, chéo chính, chéo phụ:

 Duyệt tìm những khu vực mà đối thủ hoặc máy tính có khả năng mở đường
thắng (là tạo năm ô liên tiếp của một loại cờ). Khu vực gồm năm ô liên tiếp
trong nó chỉ xuất hiện ô cờ trống và loại cờ của máy hoặc chỉ xuất hiện ô cờ
trống và quân cờ của đối thủ và tăng giá trị cho các ô cờ trống trong khu vực
đó.

 Giá trị tăng thêm của ô cờ trống trong trong khu vực mà đối thủ hoặc máy tình
có khả năng tạo đường thắng phụ thuộc vào số lượng quân cờ đối thủ hoặc
quân cờ của máy xuất hiện trong khu vực đó.

 Giá trị tăng thêm của từng ô cờ trống trong khu vực có khả năng thắng của
quân cờ đối thủ sẽ thấp hơn giá trị tăng thêm của ô cờ trống trong khu vực khả
năng tạo đường thắng trong khu vực quân cờ đối thủ.

Nhóm 3 Page 5

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

 Giá trị tăng thêm của ô trống trong khu vực có khả năng thắng xuất hiện “a”
quân cờ máy sẽ thấp hơn giá trị tăng thêm của ô trống trong khu vực xuất hiện
“b” quân cờ với ” a nhỏ hơn b”.

 Tương tự, giá trị tăng thêm của ô trống trong khu vực có khả năng thắng xuất
hiên “a” quân cờ đối thủ sẽ thấp hơn giá trị tăng thêm của ô trống trong khu
vực xuất hiện “b” quân cờ đối thủ với ” a nhỏ hơn b”.

 Giá trị tăng thêm của ô trống trong khu vực có khả năng thắng xuất hiên “a”
quân cờ của máy tính sẽ nhỏ hơn giá trị tăng thêm của ô trống trong khu vực
xuất hiện “b” quân cờ đối thủ nếu “a” nhỏ hơn “b” và ngược lại.

 Mỗi bước đi của máy tính, thì luôn tìm cách ưu tiên mở đường thẳng cho máy
tính nếu có thể nên trong trường hợp trong khu vực có khả năng thắng xuất
hiện ô cờ đối thủ xét xem khả năng mở đường thắng trong khu vực này có bị
chặn đầu nào chưa. Nếu đã bị chặn ta chú ý trường hợp giá trị tăng thêm của ô
cờ trống trong khu vực này sẽ thấp hơp giá tri tăng thêm của ô trống trong khu
vực có khả năng mở đường thắng xuất hiện 2 quân cờ của máy.

 Theo cách lập luận trên thì những ô trống trong khu vực xuất hiện càng nhiều ô
cờ đối thủ hoặc nhiều ô cờ máy tính sẽ có giá trị càng cao vì ô trống trong khu
vực này có khả năng chặn hoặc mở đường thắng cao. Và ta khởi tạo giá trị tăng
thêm của từng ô cờ trống trong các trường hợp xuất hiện quân cờ đối thủ hoặc
quân cờ của máy trong khu vực có khả năng tạo thành đường thắng như sau:

Số quân cờ đối thủ Số quân cờ của Bị chặn Giá trị tăng thêm
máy

Nhóm 3 Page 6

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

0 0 0

1 0 1

0 1 2

2 0 12

0 2 49

3 0 Không bị chặn 197

3 0 Bị chặn 40

0 3 789

4 0 3157

0 4 12169

 Giá trị tăng thêm thể hiện mức nguy hiểm của thế cờ trong từng hợp, độ lệch giá
trị trong trường hợp trong từng trường hợp là 4 lần. Vì giá trị của từng ô trống có
thể tăng thêm khi duyệt theo đường ngang, đường dọc, chéo chính, chéo phụ, nên
ta gán giá trị lệch nhau khoảng 4 lần để đảm bảo sự an toàn.

Nhóm 3 Page 7

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

Bước 2.2: Sau khi định lượng giá trị cho các ô trống thì xác định vị trí đánh cờ tối
ưu cho máy là ô cờ trống được ước lượng giá trị theo 4 chiều (ngang ,dọc, chéo chính,
chéo phụ) có giá trị cao nhất đầu tiên.

 Bước 3: Tổ chức cấu trúc dữ liệu để lưu trữ các đối tượng trên bàn cờ.

 Bước 4: Thiết kế giao diện cho game tương đối thân thiện với người sử dụng.

 Bước 5: Lựa chọn ngôn ngữ, và cài đặt thuật toán và các hàm cần thiết vào chương
trình .

Chương 3: Phân Tích Thiết Kế Hiện Thực Hệ thống

3.1. Phân tích thiết kế:

3.1.1. Cấu trúc dữ liệu và cách biểu diễn trạng thái bài toán:

3.1.1.1. Cấu trúc dữ liệu biểu diễn trạng thái ô cờ trên bàn cờ :

Mỗi ô cờ trên bàn cờ có ba trạng thái: còn trống, có quân cờ của máy,
quân cờ của đối thủ. Để lưu trữ thông tin trạng thái của từng ô cờ ta dùng
một biến enum tên “quanco” gồm ba thành phần:

enum quanco

None =0;

Nguoi=-1;

May =1;

Nhóm 3 Page 8

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

3.1.1.2. Cấu trúc dữ liệu biểu diễn thông tin bàn cờ:

Bàn cờ gồm có nhiều ô cờ liên tiếp nhau theo chiều ngang, chiều
dọc. Ứng với mỗi vị trí dòng cột trên bàn cờ là một ô cờ, trạng thái
của mỗi ô cờ được biểu diễn bởi một biến enum “quanco”. Ta sử
dụng một mảng 2 chiều 20x20 kiểu “quanco” tên “arrbanco” để lưu
trữ thông tin bàn cờ.

quanco[,] arrbanco = new quanco[20,20]

3.1.1.3. Cấu trúc dữ liệu lưu trữ trạng thái bàn cờ ở mỗi bước đi :

 Trạng thái của mỗi bàn cờ ở từng bước đi cần lưu trữ:

Thông tin bàn cờ hiện tại.

Giá trị hiện tại của các ô cờ.

Vị trí mà máy quyết định đánh.

 Để lưu trữ trạng thái của bàn cờ ở mỗi bước đi ta sử dụng một đối
tượng Node để lưu trữ. Các thành phần của Node bao gồm :

Mảng hai chiều kích thước 20x20 kiểu “quanco” để chứa


thông tin hiện tại của bàn cờ .

Một mảng 2 chiều kích thước 20x20 kiểu int tên


“danhgiagiatri” để lưu trữ giá trị của các ô cờ trên bàn cờ ở
bước đi hiện tại. Giá trị của mỗi phần tử trong mảng

Nhóm 3 Page 9

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

“danhgiagiatri” là giá trị của ô cờ ở vị trí tương ứng trên bàn


cờ.

Hai biến kiểu int tên “add_cl” và “add_rw” lưu chỉ số dòng
cột của ô cờ mà máy quyết định đánh.

 Ta khởi tạo thành phần của Node :

Node()

arrtrangthai = new quanco[20,20];

danhgiagiatri =new int [20,20];

add_rw;

add_cl;

3.1.2. Thiết kế các thành phần chính cấu trúc class trong chương trình:

3.1.2.1. Class BanCo:

 Là class chứa các phương thức các hàm có chức năng chính:

Khởi tạo bàn cờ.

Vẽ bàn cờ, các ô cờ mà người chơi đi lên bàn cờ.

Chọn người chơi trước.

Nhóm 3 Page 10

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

Xử lý dữ liệu thông tin trò chơi ở mỗi bước đi.

 Trong class bàn cờ có biến để lưu trữ thông tin: bàn cờ, người
giành chiến thắng, người hiện tại, trạng thái hiện tại của bàn cờ.

3.1.2.2. Class Node:

Là class khởi tạo đối tượng Node để lưu trữ trạng thái bàn cờ ở mỗi
bước đi, chứa các hàm có chức năng chính:

Xác định quân cờ thắng ở mỗi bước đi.

Đánh giá giá trị của các ô cờ ở trạng thái hiện tại.

Chọn vị chí đánh tối ưu cho máy.

Kiểm tra bàn cờ có ở trạng thái kết thúc hay chưa.

3.1.2.3. Class Window1:

Là Class gọi các sự kiện các hàm khởi tạo trò chơi, xử lý thể hiện
giao diện trò chơi.

3.1.3. Thiết kế các thuật toán chính sử dụng trong chương trình:

3.1.3.1. Thuật toán gán giá trị tăng thêm của ô cờ trong khu vực xuất
hiện quân cờ của người chơi:

 Giá trị tăng thêm của một ô cờ trống trong khu vực chỉ xuất hiện
quân cờ người phụ thuộc vào số lượng quân cờ người, và các
quân cờ người trong khu vực đó có bị chặn hay không.

 Ta biểu diễn thuật toán như sau :


Nhóm 3 Page 11

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

Input:

 so_co_nguoi kiểu int,

 bichan là biến kiểu Bolean

Output: hàm trả về một giá trị integer là giá trị tăng thêm
của ô cờ

int suxuathienquancodoithu (so_co_nguoi,bichan)

if so_co_nguoi = 0 then return 0;

if so_co_nguoi = 1 then return 1;

if so_co_nguoi = 2 then return 12;

if so_co_nguoi = 4 then return 3157;

if so_co_nguoi =3 and bichan = false then

return 197;

if so_co_nguoi =3 and bichan = true then

return 40;

3.1.3.2. Thuật toán gán giá trị tăng thêm của ô cờ trong khu vực xuất
hiện quân cờ của máy:

 Giá trị tăng thêm của một ô cờ trống trong khu vực chỉ xuất hiện
quân cờ máy phụ thuộc vào số lượng quân cờ máy trong khu vực đó.

 Thuật toán được biểu diễn như sau :


Nhóm 3 Page 12

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

Input: so_o_may kiểu int.

Out put: trả về giá trị giá tăng thêm của quân cờ kiểu int.

int XuatHienOMay(int so_o_may)

if so_o_may = 0 then return 0;

if so_o_may = 1 then return 2;

if so_o_may = 2 then return 49;

if so_o_may = 3 then return 789;

if so_o_may = 4 then return 12629 ;

3.1.3.3. Thuật toán đánh giá giá trị các ô cờ (tương ứng với làm lượng
giá heristic):

 Đánh giá giá trị của một ô cờ phải xét tổng hợp giá trị của ô cờ đó
theo 4 chiều ngang, dọc, chéo chính, chéo phụ.

 Giá trị của ô cờ phụ thuộc trạng thái cả bàn cờ.

 Ta biểu diễn thuật toán:

Input: “ Cha” là Node lưu trạng thái hiện tại của bàn cờ.

Output: “tam” là Node lưu trạng thái hiện tại của bàn cờ và đã
cập nhật lại mảng giá trị các ô cờ.

Node Danh_Gia_Cac_O_Co_Trong(Cha)

{
Nhóm 3 Page 13

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

Node tam = new Node();

int so_quan_doi_thu;

int so_quan_may;

Boolean bichan = false;

//xét duyệt qua các ô cờ theo chiều ngan

for i(i thuộc đoạn [0,20])

for j(j thuộc đoạn[0,16])

so_quan_doi_thu =0;

so_quan_may=0;

bichan =false;

for k(k thuộc đoạn[0,5])

if Cha.arrtrangthai[i, j + k]= quanco.May then so_quan_may


++;

if Cha.arrtrangthai[i, j + k]=quanco.Nguoi then

so_quan_doi_thu++;

Nhóm 3 Page 14

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

if so_quan_may = 0 and so_quan_doi_thu !=0 then

if các ô trong khu vực bị chặn then bichan=true;

for k(k thuộc [0,5])

If Cha.arrtrangthai[i + k, j + k] = quanco.None then

tam.danhgiagiatri[i+k,j+k]+=suxuathienquancodoithu(
so_quan_doi_thu, bichan);

//Tương tự ta xét theo các chiều còn lại

//Xét theo hàng dọc:

for j(j thuộc [0,19])

For j(i thuộc [0,15])

Nhóm 3 Page 15

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

//code tương tự xét theo chiều ngan

//Xét theo cheo chính

for i(i thuộc [0,15])

For j(j thuộc [0,15])

{//tương tự như trên}

//xét theo chéo phụ

For i(i thuộc [4,16])

For j(j thuộc [0,16]) { //tương tự như trên}

return tam;

3.1.3.4. Thuật toán tìm vị trí đánh cho máy:

 Để chọn vị trí đánh ta cần thực hiên:

Đánh giá giá tri các ô cờ.


Nhóm 3 Page 16

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

Chọn ô cờ có giá trị lớn nhất đầu tiên.

 Thể hiện thuật toán:

Input: Node “cha” là Node lưu trạng thái của bàn cờ hiện tại.

Output: Node “giatri” Node sẽ chứa vị trí dòng cột của ô mà


máy sẽ đánh.

Node TimViTriDeDanh(cha)

Giatri = Danh_Gia_Cac_O_Co_Trong(cha);

Max = giatri.danhgiagiatri[0,0];

for i với i thuộc [0,19]

for j với j thuộc [0,19]

if max < giatri.danhgiatri[i,j] then

Max =giatri.danhgiadiatri[I,j];

giatri.add_rw = i;

giatri.add_cl =j;

Nhóm 3 Page 17

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

return giatri

3.1.3.5. Thuật toán kiểm tra người chơi thắng

 Tìm trên toàn bộ 5 ô cờ liên tiếp là của đối thủ hoặc của máy theo
chiếu dọc, chiều ngang, chéo chính, chéo phụ:

Nếu có 5 ô liên tiếp là cờ của máy thì máy giành chiến thắng.

Nếu có 5 ô liên tiếp là cờ của người thì người giánh chiến thắng.

 Biểu diễn thuật toán:

Input: Node “cha” trạng thái của bàn cờ hiện tại.

Output: trả vế đối tượng quanco.

quanco XacDinhQuanCoThang( cha)

int count;

//xét theo chiều ngan

For I với I thuộc [0,19]

For j với j thuộc đoạn[0,15]

Nhóm 3 Page 18

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

If cha.arrtrangthai[i, j] != quanco.None

Count =0;

for k thuộc [0,5]

if cha.arrtrangthai[i, j+k]=cha.arrtrangthai[i, j] then count++;

if count = 5 then return cha.arrtrangthai[i, j];

//Xét theo chiều dọc

{//tương tự xét theo chiều ngang}

//Xét theo chéo chính{tương tự trên}

//Xét theo chéo phụ{//tương tự trên}

return quanco.Node

3.2. Hiện thực hệ thống:

3.2.1. Lựa chọn ngôn ngữ để cài đặt thuật toán:

 Nhóm lựa chọn ngôn ngữ C # trên nền tảng WPF để hiện thực thuật toán
vài hiện thực giao diện chương trình.

Nhóm 3 Page 19

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

3.2.2. Một số giao diện khi chạy chương trình:

3.2.2.1. Giao diện khi mới chạy chương trình:

 Giao diện khi mới chạy chương trình gồm 2 nút Quit và Play:

Nếu muốn thoát khỏi chương trình thì người dùng sẽ chọn Quit.

Nếu muốn tiếp tục chương trình thì sẽ Click vào nút Play.

3.2.2.2. Giao diện lựa chọn mức chơi của game:

Nhóm 3 Page 20

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

Nhóm 3 Page 21

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

 Khi chơi người dùng có thể chọn một trong 3 mức: Easy, Normal, Hard.
Ứng với mỗi mức sẽ có một thời gian suy nghĩ khác nhau.

3.2.2.3. Giao diện khi bắt dầu game: Giao diện khi có một người chơi
giành chiến thắng:

Khi ván cờ kết thúc, thì màn hình thì sẽ hiển thị kết quả cho người chơi là
thắng hay thua.

Chương 4: Kết Luận

4.1. Đánh giá:

 Chương trình cơ bản đạt được yêu cầu: xây dựng được một chương trình mà máy
có khả năng thay thế một người chơi trong ván cờ caro. Chương trình có ưu điểm
là giao diện tương đối đẹp và thân thiện với người dùng.

Nhóm 3 Page 22

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Cờ Ca Ro

 Nhược điểm của chương trình là chưa xây dựng các chức năng lưu trữ ván cờ, lưu
lại tỷ số của người chơi.

4.2. Hướng phát triển:

Chương trình có thể phát triển mở rộng những chức năng trong phần nhược điểm.
Game có thể phát triển mở rộng cho ứng dụng web.

4.3. Tài liệu tham khảo

Bài giảng trí tuệ nhân tạo TS. Nguyễn Đình Thuân

Website code project

Nhóm 3 Page 23

CuuDuongThanCong.com https://fb.com/tailieudientucntt

You might also like