Báo cáo bài tập lớn môn trí tuệ nhân tạo, nhóm mình đã tham thảo từ nhiều nguồn tài liệu và đã cho ra đời 1 sản phẩm đó là trò chơi ghép tranh 8 ô số, áp dụng thuật toán tìm đường đi ngắn nhất để sắp xếp lại hoàn chỉnh bức tranh 1 cách nhanh nhất, tài liệu này chỉ mang tính chất cho các bạn tham khảo, cảm ơn các bạn đã xem và chúc các bạn thành công trong dự án các bạn nhé.
Trang 1ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP LỚN MÔN TRÍ TUỆ NHÂN TẠO
Tên đề tài:
XÂY DỰNG GAME GHÉP TRANH 8 Ô SỐ
………….
Giảng Viên : Th.S Mai Văn Hoàn
Sinh viên thực hiện : Đàm Văn Thắng Lớp: CNTTK18D Hoàng Tùng Dương
Ngô Duy Khánh Tăng Văn Duy Khánh
Thái Nguyên, ………Ngày …… Tháng …… Năm 2022
Trang 2LỜI NHẬN XÉT CỦA GIÁO VIÊN
Trang 3
LỜI MỞ ĐẦU
Ngày nay, chúng ta đã bước vào thế kỷ 21, kỷ nguyên của Công nghệ thông tin,đặc biệt là trí tuệ nhân là yếu tố quan trọng nhất quyết định sự thành công của mỗingành hay mỗi quốc gia Trí tuệ nhân tạo đã và đang làm thay đổi cuộc sống của chúng
ta, với sự phát triển mạnh mẽ của việc áp dụng các nghiên cứu về trí tuệ nhân tạo ápdụng cho cuộc sống Tất cả các ngành như: Quân đội, y tế, giáo dục, kinh tế thươngmại, tài chính,… Đều có thể áp dụng trí tuệ nhân một cách rộng rãi, Việc áp dụng trí tuệnhân tạo để giải quyết các vấn đề trong xã hội và việc phát triển kinh tế đang được nhànước khuyến khích và đầu tư rất lớn
Trên thế giới cũng như Việt Nam, CNTT có ảnh hưởng rất mạnh mẽ đến sự pháttriển của đất nước và thế giới đặc biệt là trí tuệ nhân tạo Nó chở thành một yếu tốkhông thể thiếu và có tính quyết định đến sự thành công hay thất bại của nhiều ngành ởnước ta, CNTT đang phát triển với tốc độ khá mạnh mẽ và được ứng dụng rộng rãitrong tất cả các lĩnh vực, đặc biệt là trong công tác ứng dụng công nghệ vào trong cuộcsống
Như chúng ta đã biết, sức mạnh của một nền kinh tế phụ thuộc rất lớn vào cáchoạt động trong nước của các doanh nghiệp, vì vậy sự thành công trong kinh doanh củadoanh nghiệp không những là mục tiêu của riêng doanh nghiệp, mà nó còn là nhân tốquyết định vị thế của đất nước trên trường quốc tế Việc đưa AI vào áp dụng cho cácdoanh nghiệp và cả các ngành như y tế, công nghiệp nặng đang được ưu tiên và pháttriển mạnh mẽ
Tại Việt Nam, Nhà nước đang đi vào phát triển dịch vụ, và đầu tư mạnh mẽ vàotrí tuệ nhân tạo hay còn gọi là AI Vì thế, việc đó đầu nó và phát triển nó đang là một xuthế rất hot và rất được ưu chuộng hiện này
Chính vì vậy thông qua việc học môn trí tuệ nhân tạo (AI) nhóm em đã nghĩ ramột ý tưởng nhỏ đó là áp dụng thuật toán mình đã học để làm ra một Game xếp hình 8 ô
số Phục vụ cho việc chứng minh áp dụng trí tuệ nhân tạo mang lại lợi ích tối ưu vềkhông gian và thời gian cho con người
3
Trang 4LỜI CẢM ƠN
Trong thời đại công nghệ 4.0 đang ngày càng phát triển, ứng dụng trí tuệnhân tạo vào đời sống được xem là một trong những xu thế phát triển mạnh mẽ hiệnnay Việc tự động hóa các hành vi thông minh đang trở thành một cuộc cách mạngtrong ngành CNTT
Vì vậy chúng em đã thực hiện đồ án trí tuệ nhân tạo áp dụng thuật toán
“Breadth First Search” và “Best First Search” để làm ra trò chơi ghép tranh 8 ô số,phục vụ cho việc chứng minh áp dụng trí tuệ nhân tạo mang lại lợi ích tối ưu vềkhông gian và thời gian cho con người
Với sự hướng dẫn, động viên tận tình của thầy Mai Văn Hoàn, chúng em đã
hiểu được cách thức hoạt động của thuật toán và hoàn thành bài báo cáo bài tập lớnnày Do chưa có nhiều kinh nghiệm nghiên cứu, thực hành nên chúng em cũngkhông tránh khỏi những thiếu sót Chúng em rất mong nhận được sự thông cảm vàgóp ý của thầy để đề tài của chúng em được hoàn thiện hơn
Chúng em xin chân thành cảm ơn!
Đàm Văn Thắng Hoàng Tùng Dương Ngô Duy Khánh Tăng Văn Duy Khánh
Trang 5MỤC LỤC
LỜI NHẬN XÉT CỦA GIÁO VIÊN 2
LỜI MỞ ĐẦU 3
LỜI CẢM ƠN 4
CHƯƠNG 1: TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH C# 6
1.1 Tổng quan về C#: 6
1.1.2 C# là gì? 6
1.1.3 Đặc trưng của C#: 7
1.1.4 Các loại ứng dụng trên C# 8
1.1.5 Lập trình hướng đối tượng c#: 10
1.1.6 Làm việc với windows form: 12
1.1.7 Thêm control vào form: 14
CHƯƠNG 2: XÂY DỰNG GAME GHÉP TRANH 8 Ô SỐ 14
2.1 Mô tả game: 14
2.2 Mô tả thuật toán sử dụng: 15
2.2.1 Thuật toán tìm kiếm theo chiều rộng ( Breadth First Search ): 15
2.2.2 Thuật toán tìm kiếm tốt nhất đầu tiên ( Best First Search ): 17
2.3 Ứng dụng thuật toán vào Game ghép tranh 8 ô số 19
2.4 Hướng dẫn chơi game Ghép Tranh 8 ô số: 19
2.5 Tổng quan về các chức năng , giao diện 20
2.5.1 Chức năng random hình ảnh lên màn hình 21
2.5.2 Chức năng đếm bước đi 21
2.5.3 Chức năng chơi lại 22
2.5.4 Chức năng giải BFS 23
2.5.5 Chức năng giải tối ưu 23
2.5.6 Chức năng thoát 24
2.5.7 Chức năng đi lui và đi tới 24
2.5.8 Chức năng tính thời gian 25
2.6 Kết luận 26
2.7 Mức đóng góp của những thành viên trong nhóm: 27
TÀI LIỆU THAM KHẢO 27
5
Trang 6CHƯƠNG 1: TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH C#
1.1 Tổng quan về C#:
1.1.1 Giới thiệu:
Visual C# là một ngôn ngữ lập trình đơn giản, hiện đại, hướng đối tượng an toàn kiểu safe) và có nguồn gốc từ các ngôn ngữ C và C++ C# là một ngôn ngữ rất thân thiện với ngườilập trình C và C++ C# là kết quả của việc kết hợp hiệu nàng cao của Visual Basic và sức mạnhcủa C++ C# được Microsoft giới thiệu để xây dựng với Web và đòi hỏi quyền được cung cấpmột môi trường đồng bộ với HTML, XML và SOAP Tóm lại C# là một ngôn ngữ lập trìnhhiện đại và là một môi trường phát triển đầy tiềm nàng để tạo ra các dịch vụ Web XML, cácứng dụng dựa trên Microsoft NET và cho cả nền tảng Microsoft Windows cũng như tạo ra cácứng dụng Internet thế hệ kế tiếp một cách nhanh chóng và hiệu quả
- C# với sự hỗ trợ mạnh mẽ của NET Framework giúp cho việc tạo một ứng dụng WindowsForms hay WPF (Windows Presentation Foundation), trở nên rất dễ dàng
Trang 71.1.3 Đặc trưng của C#:
- C# là ngôn ngữ đơn giản:
Như ta đã biết thì ngôn ngữ C# dựng trên nền tảng C++ và Java nên ngôn ngữ C#khá đơn giản Nếu chúng ta thân thiện với C và C++ hoậc thậm chí là Java, chúng ta sẽthấy C# khá giống về diện mạo, cú pháp, biểu thức, toán tử và những chức năng khácđược lấy trực tiếp từ ngôn ngữ C và C++, nhưng nó đã được cải tiến để làm cho ngônngữ đơn giản hơn Một vài trong các sự cải tiến là loại bỏ các dư thừa, hay là thêm vàonhững cú pháp thay đổi
- C# là ngôn ngữ hiện đại:
Một vài khái niệm khá mới mẻ khá mơ hồ với các bạn vừa mới học lập trình, như
xử lý ngoại lệ, những kiểu dữ liệu mở rộng, bảo mật mã nguồn v…v… Đây là nhữngđặc tính được cho là của một ngôn ngữ hiện đại cần có Và C# chứa tất cả các đặt tính tavừa nêu trên Các bạn sẽ dần tìm hiểu được các đặt tính trên qua các bài học trong seriesnày
- C# là một ngôn ngữ lập trình thuần hướng đối tượng:
Lập trình hướng đối tượng (tiếng Anh: Object-oriented programming, viết tắt:
OOP) là một phương pháp lập trình có 4 tính chất Đó là tính trừu tượng (abstraction),
tính đóng gói (encapsulation), tính đa hình (polymorphism) và tính kế thừa(inheritance) C# hỗ trợ cho chúng ta tất cả những đặc tính trên Và để hiểu rõ hơn thìchúng ta sẽ có một chương trình bày về phần này
- C# là một ngôn ngữ ít từ khóa:
C# được sử dụng để mô tả là ngôn ngữ sử dụng giới hạn những từ khóa (gồmkhoảng 80 từ khóa và mười mấy kiểu dữ liệu xây dựng sẵn) Nếu bạn nghĩ rằng ngôn
7
Trang 8ngữ có càng nhiều từ khóa thì sẽ càng mạnh mẽ hơn Điều này không phải sự thật, lấy ví
dụ ngôn ngữ C# làm điển hình nhé Nếu bạn học sâu về C# bạn sẽ thấy rằng ngôn ngữ
này có thể được sử dụng để làm bất cứ nhiệm vụ nào
Ngoài những đặc điểm trên thì còn một số ưu điểm nổi bật của C#:
- C# có cấu trúc khá gần gũi với các ngôn ngữ lập trình truyền thống, nên cũng khá
dể dàng tiếp cận và học nhanh với C#
- C# có thể biên dịch trên nhiều nền tảng máy tính khác nhau
- C# được xây dựng trên nền tảng của C++ và Java nên nó được thừa hưởng những
ưu điểm của ngôn ngữ đó
- C# là một phần của NET Framework nên được sự chống lưng khá lớn đến từ bộ
Điện toán đám mây…
Sử dụng C#, ta có thể tạo ra rất nhiều kiể ứng dụng, ở đây ta quan tâm đến ba kiểu ứng dụng
Trang 10chính: Console, Window và ứng dụng Web.
Ứng dụng Window:
Là ứng dụng được hiển thị với giao diện cửa sổ đồ họa Chúng ta chỉ cần kéo vàthả các điều khiển (control) lên cửa sổ Form Visual Studio sẽ sinh mã trong chươngtrình để tạo ra, hiển thị các thành phần trên cửa sổ
Ứng dụng Web:
Môi trường NET cung cấp công nghệ ASP.NET giúp xây dựng những trang Webđộng Để tạo ra một trang ASP.NET, người lập trình sử dụng ngôn ngữ biên dịch nhưC# hoặc C# để viết mã Để đơn giản hóa quá trình xây dựng giao diện người dùng chotrang Web, NET giới thiệu công nghệ Webform Cách thức tạo ra các Web controltương tự như khi ta xây dựng ứng dụng trên Window Form
1.1.5 Lập trình hướng đối tượng c#:
Lập trình hướng đối tượng đặt trọng tâm vào đối tượng, yếu tố quan trọng nhấttrong quá trình phát triển chương trình và không cho phép dữ liệu biến động tự dotrong hệ thống Dữ liệu được gắn chặt với các phương thức hình thành các vùng riêng
mà chỉ có các phương thức đó tác động lên và cấm các phương thức bên ngoài truy cậpmột cách tùy tiện Lập trình hướng đối tượng cho phép chúng ta phân tích bài toánthành các thực thể được gọi là đối tượng và sau đó xây dựng các dữ liệu (thuộc tính)
và các phương thức (hàm) xung quanh đối tượng đó Các đối tượng có thể tác động,trao đổi thông tin với nhau thông qua cơ chế thông báo(message)
Lập trình hướng đối tượng nhìn nhận và xây dựng bài toán tập trung vào đối tượngtức là coi chương trình là một tập hợp các đối tượng, các đối tượng này tương tác vớinhau Do vậy khi xây dựng phát triển phần mềm theo phương pháp hướng đối tượng,
lập trình viên cần phải Chú ý:
Trang 11 Chương trình được phân chia thành các đối tượng.
Tập trung vào dữ liệu (Thuộc tính) thay cho các hàm
Các cấu trúc dữ liệu được thiết kế sao cho đặc tả được đối tượng
Dữ liệu được đóng gói, được che giấu và không cho phép các phương thức ngoại laitruy nhập tự do
Các đối tượng tác động và trao đổi thông tin với nhau thông qua các phương thức
Có thể dễ dàng bổ sung dữ liệu (thuộc tính) và các phương thức mới vào đối tượngnào đó khi cần thiết
Các đặc điểm chính của lập trình hướng đối tượng:
Tính trừu tượng: Tính trừu tượng là đặc điểm duy nhất mang tính yêu cầu thông tin của
đối tượng Một đối tượng trong hệ thống có thể có rất nhiều các thuộc tính và cácphương thức khác nhau, tuy nhiên với ngữ cảnh cụ thể thì chúng ta chỉ cần quan tâmđến các thuộc tính và phương thức nào thực sự cần thiết mà thuộc tính yêu cầu
Ví dụ: Đối tượng Sách có các thuộc tính như: Tên sách, nhà xuất bản, ngày xuất bản, số
lần tái bản, số trang, khổ giấy, giá thành, tên tác giả, lĩnh vực,…, Với bài toán cụ thể
ví dụ như xây dựng chương trình Quản lý sách cho Cửa hàng sách thì chúng ta chỉquan tâm tới một số các thuộc tính như: Tên
11
Trang 12sách, tên tác giả, nhà xuất bản, giá thành, lĩnh vực, nhưng với bài toán Quản lýsách cho Nhà máy in thì chúng ta chỉ quan tâm tới các thuộc tính như: Tên sách, têntác giả, số trang, khổ giấy, lĩnh vực; Rõ ràng mức độ quan tâm tới các thuộc tínhcủa đối tượng sách là khác nhau trong hai trường hợp trên.
Tính đóng gói: Trong lập trình hướng đối tượng các phương thức được sử dụng
mà không biết đến nội dung cụ thể của nó Người sử dụng chỉ cần biết chức năngcủa phương thức cũng như các tham số truyền vào để gọi phương thức chạy màkhông cần quan tâm tới đoạn mã cài đặt bên tròng của phương thức Người ta gọi
đó chính là sự đóng gói của phương thức
Trong lập trình hướng đối tượng, không những phương thức được đóng gói mà
cả thuộc tính cũng như vậy Với mỗi đối tượng không thể truy nhập trực tiếp vàocác thành phần thuộc tính của nó mà phải thông qua phương thức
Tính kế thừa : Tính kế thừa cho phép chúng ta định nghĩa một lớp mới trên cơ
sở các lớp đã tồn tại, tất nhiên có bổ sung những phương thức hay thuộc tính mớicho lớp này Khả năng kế thừa cho phép chúng ta sử dụng lại một cách dễ dàng cácmodule chương trình mà không cần một thay đổi trong các module đó
Tính đa hình: Tính đa hình xuất hiện khi có khái niệm kế thừa, giả sử chúng ta
có một kế thừa lớp hình tứ giác và lớp hình tam giác kế thừa từ lớp hình đa giác(Hình tam giác và tứ giác đều là hình đa giác), lúc này mỗi hình đa giác đều có diệntích của nó Vậy làm thế nào một hình đa giác có thể sử dụng đúng công tính tínhdiện tích phù hợp với nó là hình tam giác hay hình tứ giác Tính chất này gọi là tính
đa hình Tính đa hình được hiểu trong lập trình hướng đối tượng là Hình dạng củađối tượng được xác định tại thời điểm cấp phát đối tượng đó
1.1.6 Làm việc với windows form:
Windows Form là tập hợp những lớp chứa giao diện đồ họa người dùng (GUI)của ứng dụng desktop cổ điển.Trước đây, mỗi ngôn ngữ lập trình đều có cách khácnhau để tạo ra Windows, Texboxes, Buttons, … Chức năng này đã được đưa vào
12
Trang 13trong thư viện lớp của Net Framework, trở thành những thành phần của namespaceSystem.Windows.Forms Trong chương này, form được xem như bộ phận trung tâmcủa ứng dụng desktop Chúng ta sẽ xem xét Form được khởi tạo như thế nào và nóphát sinh sự kiện ra sao Bên cạnh đó, chúng ta sẽ khảo sát những Windows Controls
để xây dựng nên những ứng dụng Windows hiệu quả
Tạo Form:
Cách dễ nhất để tạo một Form là sử dụng công cụ Windows Forms Designer trongVisual Studio.Net Công cụ này cho phép chúng ta sử dụng những công cụ trựcquan để trình bày form, code tạo form sẽ được tự động tạo ra Nếu chúng ta không
có Visual Studio.Net, chúng ta có thể viết code C#.Net trực tiếp và không cần dùngDesigner Một form được định nghĩa bằng cách dẫn xuất một lớp từ lớp Form (đượcđịnh nghĩa trong System.Windows.Forms) Lớp form này chứa đựng cách thức đểtrình bày một form rỗng bao gồm title bar và một số thành phần khác được kế thừa
từ Windows form Chúng ta có thể thêm vào lớp mới này những thành phần cũngnhư ta có thể override những thành phần từ lớp cơ sở Form
Cách tạo form bằng C#.Net
Chọn File -> New Project Project dialog xuất hiện
Chọn Visual C# trong Project types
Chọn Windows Forms Application trong khung Templates
Đặt tên trong ô name
Chọn OK, Visual Studio.Net sẽ tạo một Project mới với một form vàtrình bày trong cửa sổ thiết kế
Một số thuộc tính của Form;
Để hiển thị cửa sổ thuộc tính của Form, ta click chuột
phải vào form, chọn Property Sau đây là một vài thuộc
tính thông dụng của form
Backcolor: Thiết lập thuộc tính màu nền của form
ControlBox: Thiết lập thuộc tính cho các nút Min, Max, Close của form.Nếu ta chọn thuộc tính này là false thì Form sẽ không có các nút trên Sự
13
Trang 14chọn lựa này thường được áp dụng cho các form đăng nhập.
Font: Thiết lập thuộc tính font cho form Thuộc tính font của form sẽ làthuộc tính font mặc định cho tất cả các control được thêm vào form saunày
MaximizeBox: Thuộc tính cho nút Max Thiết lập giá trị cho thuộc tínhnày là True thì form sẽ có nút Max
MininizeBox: Thuộc tính cho nút Min Thiết lập giá trị cho thuộc tínhnày là True thì form sẽ có nút Min
Icon: Thiết lập icon cho form
Text: Thiết lập tiêu đề cho form
1.1.7 Thêm control vào form:
Control có thể được đưa vào form từ hộp công cụ (toolbox) của
Visual Studio.Net Để hiển thị hộp công cụ, ta chọn View Toolbox
từ menu của Visual Studio.Net
Sau khi hộp công cụ xuất hiện, ta chỉ cần click vào control nào cần đưa vào form,sau đó ta có thể dùng chuột để kéo control đến vị trí thích hợp trên form
Tương tự như khi tạo form, khi ta thêm control vào form, Designer
tự động phát sinh code tương ứng để tạo ra các control
CHƯƠNG 2: XÂY DỰNG GAME GHÉP TRANH 8 Ô SỐ
2.1 Mô tả game:
- Vị trí của các hình trong trò chơi sẽ nằm ngẫu nhiên trộn lẫn trong 9 ô, trong đó có
1 ô đen để người dùng dịch chuyển đi từng bước Mỗi lần di chuyển người dùngchỉ có thể đi 1 bước theo chiều qua trái, qua phải, đi lên hoặc đi xuống để ghép
thành 1 hình hoàn chỉnh theo hình mẫu đã cho theo đó Người dùng không được đi
chéo
14