1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo tiểu luận trí tuệ nhân tạo nghiên cứu và xây dựng game cờ caro

27 21 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên cứu và xây dựng game cờ caro
Tác giả Nguyễn Văn Phú Quí, Nguyễn Y Bin, Trần Quảng Tín, Tô Quý Phú, Trần Thị Mỹ Duyên, Võ Như Hoàng Huy
Người hướng dẫn TS. Trần Nguyên Bảo
Trường học Học Viện Hàng Không Việt Nam
Chuyên ngành Trí Tuệ Nhân Tạo
Thể loại Báo cáo tiểu luận
Năm xuất bản 2023-2024
Thành phố TP. HCM
Định dạng
Số trang 27
Dung lượng 5,58 MB

Nội dung

Game Cờ Carođược phát triển bằng ngôn ngữ Python, sử dụng thư viện Pygame và NumPy, cùng vớiviệc áp dụng các thuật toán AI nhằm nâng cao trải nghiệm của người chơi.. Lý do chọn đề tài V

Trang 1

HỌC VIỆN HÀNG KHÔNG VIỆT NAM

KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO TIỂU LUẬNTRÍ TUỆ NHÂN TẠO“NGHIÊN CỨU VÀ XÂY DỰNG

GAME CỜ CARO”

HỌC KỲ 3 – NĂM HỌC: 2023-2024 MÃ LỚP HỌC PHẦN: 010100085801

Giảng viên hướng dẫn: TS Trần Nguyên Bảo

Trang 2

NHẬN XÉT VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN

Trang 3

MỤC LỤC

DANH MỤC HÌNH ẢNH

LỜI NÓI ĐẦU

CHƯƠNG 1 GIỚI THIỆU

1.1.Lý do chọn đề tài 1

1.2.Mục tiêu đề tài 1

1.3 Phạm vi đề tài 1

1.4 Đối tượng nghiên cứu 1

1.5 Phương pháp nghiên cứu 2

CHƯƠNG 2 CƠ SỞ LÝ THUYẾT

2.1 Ngôn ngữ lập trình Python 3

2.2 Visual Studio Code 3

2.3 Thư viện hỗ trợ cho trò chơi Pygame 3

2.4 Thư viện NumPy 4

2.5 Thuật toán Greedy 4

2.6 Thuật toán A* 4

CHƯƠNG 3 SẢN PHẨM

3.1 Phân tích thuật toán trong game 5

3.1.1 Nguyên lý hoạt động của Thuật toán Greedy trong cờ caro 5

3.1.2 Nguyên lý hoạt động của Thuật toán A* trong cờ caro 6

3.2 Giao diện sản phẩm 8

3.2.1 Giao diện chính khi vào game 8

3.2.2 Giao diện hiển thị thông tin 9

3.2.3 Giao diện người chơi với người 10

3.2.4 Giao diện lựa chọn Máy sử dụng thuật toán nào 11

3.2.5 Giao diện đánh với máy( thuật toán Greedy ) 12

3.2.6 Giao diện đánh với máy( thuật toán A* ) 13

3.2.7 Giao diện lựa chọn thuật toán cho máy đánh với máy 14

3.2.8 Giao diện máy( Greedy ) đánh với máy ( A* ) 15

3.2.9 Giao diện chức năng đầu hàng 16

3.2.10 Giao diện chức năng thoát game 17

3.2.11 Giao diện tiếp lựa chọn tiếp tục trò chơi 18

Trang 4

CHƯƠNG 4 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

4.1 Kết luận 19

4.2 Hướng phát triển 19

TÀI LIỆU THAM KHẢO

Trang 5

DANH MỤC HÌNH ẢNH

Hình 3.2.1 Giao diện vào game

Hình 3.2.2 Giao diện thông tin

Hình 3.2.3 Giao diện người chơi với người

Hình 3.2.4 Giao diện chọn máy sử dụng thuật toán chọn X hoặc O

Hình 3.2.5 Giao diện đánh với máy( thuật toán Greedy )

Hình 3.2.6 Giao diện đánh với máy( thuật toán A* )

Hình 3.2.7 Giao diện lựa chọn thuật toán cho máy đánh với máy

Hình 3.2.8 Giao diện máy( Greedy ) đánh với máy ( A* )

Hình 3.2.9 Giao diện chức năng đầu hàng

Hình 3.2.10 Giao diện chức năng thoát game

Hình 3.2.11 Giao diện tiếp lựa chọn tiếp tục trò chơi

Trang 6

LỜI NÓI ĐẦU

Trong bối cảnh công nghệ thông tin không ngừng phát triển và mang lại nhữngtiến bộ vượt bậc, trí tuệ nhân tạo (AI) đã trở thành một lĩnh vực then chốt, hứa hẹnnhững ứng dụng đột phá và những cơ hội mới mẻ Với mong muốn khám phá và ứngdụng các thuật toán AI vào thực tế, nhóm chúng em đã lựa chọn đề tài "Nghiên CứuVà Xây Dựng Game Cờ Caro" cho tiểu luận môn Trí Tuệ Nhân Tạo

Đề tài này không chỉ giúp chúng em tiếp cận sâu hơn với các thuật toán thôngminh như Greedy và A*, mà còn mang lại cơ hội rèn luyện kỹ năng lập trình, pháttriển phần mềm thông qua việc xây dựng một trò chơi hoàn chỉnh Game Cờ Carođược phát triển bằng ngôn ngữ Python, sử dụng thư viện Pygame và NumPy, cùng vớiviệc áp dụng các thuật toán AI nhằm nâng cao trải nghiệm của người chơi Đây khôngchỉ là một bài tập học thuật, mà còn là một dự án mang tính thực tiễn cao, giúp chúngem hiểu rõ hơn về cách thức ứng dụng AI vào đời sống

Trong suốt quá trình nghiên cứu và phát triển, nhóm chúng em đã nhận được sựhướng dẫn tận tình và quý báu từ TS Trần Nguyên Bảo Những chỉ dẫn sâu sắc vàkhuyến khích từ thầy đã giúp chúng em vượt qua những khó khăn và hoàn thiện tiểuluận này một cách tốt nhất.Chúng em hy vọng rằng, tiểu luận này sẽ không chỉ là mộtcông trình học thuật mà còn là một tài liệu hữu ích cho những ai quan tâm đến lĩnh vựctrí tuệ nhân tạo và phát triển game

Chúng em xin chân thành cảm ơn!

Trang 7

CHƯƠNG 1 GIỚI THIỆU

1.1 Lý do chọn đề tài

Với những kiến thức đã được tiếp thu trên lớp, nhằm cũng cố kiến thức đã đượchọc nhóm quyết định lựa chọn xây dựng game cờ caro với mục đích áp dụng các thuậttoán đã được học để thấy sự hấp dẫn của thuật toán trong học hành và thực tế

1.2 Mục tiêu đề tài

Xây dựng game cờ caro hoàn chỉnh, giao diện thân thiện và dễ sử dụng, áp dụngcác thuật toán cho trí tuệ nhân tạo giúp đối thủ máy có khả năng đánh giá và đưa ranước đi tối ưu nhất

Lĩnh vực: Đề tài thuộc lĩnh vực trí tuệ nhân tạo và phát triển phần mềm, vớitrọng tâm là việc ứng dụng các thuật toán AI trong game Cờ Caro

Nội dung: Đề tài tập trung vào việc nghiên cứu các thuật toán Greedy và A*,phát triển giao diện người dùng, và triển khai các chức năng cơ bản của trò chơi CờCaro

1.4 Đối tượng nghiên cứu

Đề tài nghiên cứu các đối tượng sau:Thuật toán Greedy: Tìm hiểu nguyên lý, cách thức hoạt động và ứng dụng trongviệc tìm nước đi tối ưu trong game Cờ Caro

Trang 8

Thuật toán A*: Nghiên cứu chi tiết về thuật toán A*, cách thức hoạt động vàứng dụng trong việc tìm đường đi tối ưu.

Ngôn ngữ lập trình Python: Sử dụng Python để lập trình game, khai thác cácthư viện hỗ trợ như Pygame và NumPy

Thư viện Pygame: Sử dụng Pygame để phát triển giao diện và xử lý các tươngtác trong game

Người chơi: Nghiên cứu về hành vi và trải nghiệm của người chơi khi tương tácvới game

1.5 Phương pháp nghiên cứu

Để thực hiện đề tài này, nhóm chúng em đã sử dụng các phương pháp nghiêncứu sau:

Phương pháp thu thập thông tin:Khảo sát: Tiến hành khảo sát người dùng để hiểu rõ nhu cầu và mong muốn củahọ đối với một trò chơi Cờ Caro

Đọc tài liệu: Nghiên cứu các tài liệu, sách, bài báo liên quan đến thuật toánGreedy, A*, và phát triển game bằng Python

Tìm hiểu các dự án mã nguồn mở: Tham khảo các dự án mã nguồn mở để hiểurõ hơn về cách triển khai game và thuật toán

Phương pháp xử lý thông tin: Sử dụng các phương pháp thống kê và chọn lọc để phân tích dữ liệu thu

thập được từ khảo sát người dùng. Phân tích các phản hồi và ý kiến từ người chơi để cải thiện và hoàn thiện

game.Phương pháp thực nghiệm:Phát triển và kiểm thử: Xây dựng và hoàn thiện các giao diện và chức năng củagame, sau đó tiến hành kiểm thử để phát hiện và sửa lỗi

Trang 9

So sánh và đánh giá: So sánh hiệu suất và hiệu quả của các thuật toán Greedyvà A* trong việc tìm nước đi tối ưu, đánh giá trải nghiệm người dùng qua các chứcnăng khác nhau của game.

CHƯƠNG 2 CƠ SỞ LÝ THUYẾT2.1 Ngôn ngữ lập trình Python

Python là một ngôn ngữ lập trình bậc cao, mạnh mẽ và linh hoạt, được sử dụngrộng rãi trong nhiều lĩnh vực khác nhau như phát triển web, khoa học dữ liệu, trí tuệnhân tạo và phát triển trò chơi Python nổi bật với cú pháp đơn giản, dễ đọc, dễ học, vàcó thư viện phong phú hỗ trợ cho nhiều ứng dụng Một trong những lý do Pythonđược lựa chọn cho đề tài này là nhờ vào khả năng hỗ trợ mạnh mẽ từ cộng đồng và sựđa dạng của các thư viện, giúp tiết kiệm thời gian và công sức trong quá trình pháttriển.[1]

2.2 Visual Studio Code

Visual Studio Code (VS Code) là một trình soạn thảo mã nguồn nhẹ nhưngmạnh mẽ, chạy trên máy tính để bàn và có sẵn cho các hệ điều hành Windows, macOSvà Linux VS Code hỗ trợ tích hợp cho nhiều ngôn ngữ lập trình như JavaScript,TypeScript, và Node.js, cùng với một hệ sinh thái mở rộng phong phú cho các ngônngữ và thời gian chạy khác (như C++, C#, Java, Python, PHP, Go, NET) Điểm mạnhcủa VS Code bao gồm:

 Giao diện thân thiện: Dễ sử dụng và tùy chỉnh

 Tiện ích mở rộng: Hàng nghìn tiện ích mở rộng có sẵn, cho phép ngườidùng thêm chức năng và hỗ trợ cho các ngôn ngữ lập trình khác nhau

 Tích hợp Git: Hỗ trợ tích hợp với Git và các hệ thống kiểm soát phiênbản khác

 Gỡ lỗi: Tích hợp sẵn các công cụ gỡ lỗi mạnh mẽ

2.3 Thư viện hỗ trợ cho trò chơi Pygame

Pygame là một thư viện Python phổ biến được sử dụng để phát triển các tròchơi 2D Pygame cung cấp các mô-đun để làm việc với đồ họa, âm thanh, và các yếutố trò chơi khác, giúp quá trình phát triển trò chơi trở nên dễ dàng và hiệu quả hơn.Một số tính năng nổi bật của Pygame bao gồm: [2]

Trang 10

 Xử lý đồ họa: Hỗ trợ các hình ảnh, hình vẽ, và văn bản. Âm thanh: Cung cấp các công cụ để phát và kiểm soát âm thanh. Xử lý sự kiện: Quản lý các sự kiện từ bàn phím, chuột, và các thiết bị

đầu vào khác. Hiệu suất cao: Được tối ưu hóa để chạy mượt mà trên nhiều hệ điều

hành

2.4 Thư viện NumPy

NumPy là một thư viện Python mạnh mẽ cho phép xử lý các mảng và ma trận, cũng như các hàm toán học phong phú để thực hiện các phép tính số học trên các tập dữ liệu lớn Trong phát triển game Cờ Caro, NumPy được sử dụng để:

 Xử lý dữ liệu: Quản lý và thao tác các bảng dữ liệu và ma trận. Tối ưu hóa thuật toán: Tăng hiệu suất tính toán các thuật toán Greedy và

A*. Phân tích dữ liệu: Hỗ trợ các thao tác phân tích và tính toán dữ liệu hiệu

quả

2.5 Thuật toán Greedy

Thuật toán Greedy đưa ra quyết định dựa trên tiêu chí tối ưu cục bộ tại từngbước đi, mà không quan tâm đến kết quả toàn cục Trong cờ caro, điều này có nghĩa làở mỗi nước đi, thuật toán sẽ chọn nước đi mang lại lợi ích cao nhất ngay tại thời điểmđó

Thuật toán A* là một thuật toán tìm kiếm đường đi dựa trên đánh giá chi phí vàheuristic để tìm ra con đường tối ưu toàn cục Thuật toán này thường được sử dụngtrong các bài toán tìm kiếm đường đi ngắn nhất trên đồ thị, như tìm đường trong mêcung, tìm đường trên bản đồ Trong trò chơi cờ caro, A* có thể được áp dụng để tìmnước đi tối ưu bằng cách xem xét cả lợi ích cục bộ (tấn công và phòng thủ) và chi phíước lượng (heuristic) để đạt được trạng thái thắng lợi

Trang 12

CHƯƠNG 3 SẢN PHẨM3.1 Phân tích thuật toán trong game

3.1.1 Nguyên lý hoạt động của Thuật toán Greedy trong cờ caroKhởi tạo bàn cờ: Bàn cờ được biểu diễn dưới dạng ma trận 2D kích thước

19x19, trong đó các ô có thể là 0 (ô trống), 1 (quân của người chơi 1), hoặc -1 (quâncủa người chơi 2)

Hàm đánh giá tiềm năng của một ô trống( evaluate_position )là hàm khởi

tạo và xác định các hướng kiểm tra: Các hướng kiểm tra bao gồm ngang, dọc và haiđường chéo:

 [0, 1]: Ngang [1, 0]: Dọc [1, 1]: Chéo trái sang phải [1, -1]: Chéo phải sang tráiĐếm số quân cờ liên tiếp và kiểm tra hai đầu bị chặn: Đối với mỗi hướng,chương trình sẽ kiểm tra theo cả hai chiều (phía trước và phía sau) từ vị trí hiện tại(row, col):

 count: Đếm số quân cờ liên tiếp của người chơi (player). blocks: Đếm số hướng bị chặn bởi quân đối phương hoặc ra ngoài bàn

cờ.Tính điểm: Nếu vị trí bị chặn ở cả hai đầu, điểm sẽ bằng 0 Ngược lại, điểm sẽbằng số quân cờ liên tiếp đếm được

Cập nhật max_score nếu score của hướng hiện tại cao hơn và trả về điểm caonhất trong tất cả các hướng đã kiểm tra

Tìm các nước đi tốt nhất( get_best_points ) là hàm duyệt qua toàn bộ bàn cờ,

sử dụng evaluate_position để tính điểm cho mỗi ô trống và tìm các ô có điểm cao nhấtcho cả tấn công và phòng thủ:

 max_attack_score: Điểm cao nhất cho tấn công. max_defense_score: Điểm cao nhất cho phòng thủ

Trang 13

 best_defense_points: Danh sách các điểm phòng thủ tốt nhất.

Lựa chọn nước đi( get_computer_move_greedy) :

 Nếu điểm tấn công cao hơn hoặc bằng điểm phòng thủ, chọn một trongcác ô có điểm tấn công cao nhất

 Nếu điểm phòng thủ cao hơn, chọn một trong các ô có điểm phòng thủcao nhất

 Trong trường hợp có nhiều ô có điểm tương đương, chọn ngẫu nhiên mộtô trong số đó

3.1.2 Nguyên lý hoạt động của Thuật toán A* trong cờ caroKhởi tạo bàn cờ: Bàn cờ được biểu diễn dưới dạng ma trận 2D kích thước

19x19, trong đó các ô có thể là 0 (ô trống), 1 (quân của người chơi 1), hoặc -1 (quâncủa người chơi 2)

Định nghĩa điểm số cho các trường hợp tấn công và phòng thủ:  Attack = [0, 12, 80, 300, 2500, 20000] : Định nghĩa điểm số tấn công

Nếu có không ô liên tiếp là gán giá trị là 0, một ô liên tiếp gán giá trị là12, hai ô liên tiếp gán giá trị 80, ba ô liên tiếp gán giá trị là 300, ba ô liêntiếp và có hai ô trống ở cả hai đầu của hàng thì gán giá trị là 2500, bốn ôliên tiếp gán giá trị là 20000

 Defense = [0, 4, 36, 120, 1000, 8748] : Định nghĩa điểm số phòng thủ.Nếu có không ô liên tiếp là gán giá trị là 0, một ô liên tiếp gán giá trị là4, hai ô liên tiếp gán giá trị 36, ba ô liên tiếp gán giá trị là 120, ba ô liêntiếp và có hai ô trống ở cả hai đầu của hàng thì gán giá trị là 1000, bốn ôliên tiếp gán giá trị là 8748

Hàm đánh giá trạng thái là hàm EvaluatePosition được sử dụng để đánh giá

một vị trí cụ thể (ô trống) trên bàn cờ, tính toán điểm cho vị trí này dựa trên các nướctấn công hoặc phòng thủ:

 directions: Các hướng kiểm tra (dọc, ngang, chéo chính, chéo phụ). scores: Mảng lưu điểm số cho mỗi hướng

 rows, columns: Kích thước bàn cờ

Kiểm tra từng hướng là hàm kiểm tra các hướng từ vị trí (x, y) để đếm số

lượng quân cờ liên tiếp của người chơi và tính toán điểm cho mỗi hướng:

Trang 14

 count: Đếm số quân cờ liên tiếp của người chơi.( ban đầu cho count là0 ).

 block_open_ends: Đếm số ô trống ở cả hai đầu của hàng quân cờ liêntiếp

 Sử dụng mảng Attack hoặc Defense để xác định điểm cho mỗi hướngdựa trên giá trị count

Trả về tổng điểm: Tổng điểm cho vị trí (x, y) là tổng điểm của tất cả các

Lựa chọn nước đi ( CptFindChessAStar ) hàm CptFindChessAStar tìm nước

đi tốt nhất cho máy tính bằng cách sử dụng thuật toán A*: Nếu bàn cờ đầy, trả về None

 Nếu là lượt đánh đầu tiên, chọn ngẫu nhiên một ô trong phạm vi 3x3 ởgiữa bàn cờ

 Nếu không, thực hiện tìm kiếm thông thường bằng thuật toán A* để tìmnước đi tốt nhất

Trang 15

3.2 Giao diện sản phẩm

3.2.1 Giao diện chính khi vào game

Đây là giao diện chính khi người dùng vào trò chơi Ở đây người dùng có thểchọn hai người chơi để chơi với bạn bè, chọn chơi với máy để đấu với máy, chức năngtắt hoặc bật âm nhạc nền, chức năng thoát, bấm vào nút i để xem thông tin, bấm vàoavatar bên dưới để chọn tính năng 2 máy đấu với nhau

Hình 3.2.1 Giao diện vào game

Trang 16

3.2.2 Giao diện hiển thị thông tin

Khi người dùng bấm vào nút i sẽ hiện ra thông tin của những thành viên tạo nêntrò chơi này

Hình 3.2.2 Giao diện thông tin

Trang 17

3.2.3.Giao diện người chơi với người

Đây là giao diện người đánh với người để chơi với bạn bè Khi bên nào thắng sẽcộng một điểm cho người chơi đó, có chức năng thoát để thoát game, chức năng chơi tiếp để chơi tiếp

Hình 3.2.3 Giao diện người chơi với người

Trang 18

3.2.4 Giao diện lựa chọn Máy sử dụng thuật toán nào

Người chơi sẽ lựa chọn X hoặc O với lựa chọn X người chơi sẽ được đánhtrước và máy sẽ đánh sau Ngược lại với lựa chọn O người chơi sẽ đánh sau và máy sẽđánh trước

Hình 3.2.4 Giao diện chọn máy sử dụng thuật toán chọn X hoặc O

Trang 19

3.2.5 Giao diện đánh với máy( thuật toán Greedy )

Khi người dùng chọn đánh với máy bằng thuật toán Greedy thì giao diện sẽ

hiện ra như ảnh.

Hình 3.2.5 Giao diện đánh với máy( thuật toán Greedy )

Trang 20

3.2.6 Giao diện đánh với máy( thuật toán A* )

Khi người dùng chọn đánh với máy bằng thuật toán A* thì giao diện sẽ hiện ra như ảnh

Hình 3.2.6 Giao diện đánh với máy( thuật toán A* )

Trang 21

3.2.7 Giao diện lựa chọn thuật toán cho máy đánh với máy

Ở đây người dùng có thể chọn cho 2 máy hai thuật toán khác nhau hoặc giống nhau để xem thuật toán nào khôn hơn giúp cho người dùng có thể quan sát và nghiên cứu về 2 thuật toán ấy

Hình 3.2.7 Giao diện lựa chọn thuật toán cho máy đánh với máy

Trang 22

3.2.8.Giao diện máy( Greedy ) đánh với máy ( A* )

Hình 3.2.8 Giao diện máy( Greedy ) đánh với máy ( A* )

Trang 23

3.2.9 Giao diện chức năng đầu hàng

Khi người dùng biết mình không thể thắng được máy thì người dùng có thể đầu hàng để chơi ván mới

Hình 3.2.9 Giao diện chức năng đầu hàng

Trang 24

3.2.10.Giao diện chức năng thoát game

Khi người chơi không muốn chơi nữa hoặc muốn muốn bắt đầu một game mới, người chơi có thể thoát ra

Hình 3.2.10 Giao diện chức năng thoát game

Ngày đăng: 06/09/2024, 17:01

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w