Tải bản đầy đủ (.docx) (28 trang)

Báo cáo bài tập lớn Trí Tuệ Nhân Tạo

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (983.6 KB, 28 trang )

ĐẠ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Ố
………….
Đàm Văn Thắng
Đồng Trung Kiên
Nguyễn Hồng
Giang
Ngơ Duy Khánh
Tăng Văn Duy
Khánh
Lóp:

Giảng Viên

: Th.S Mai Văn Hoàn

Sinh viên thực hiện
Lớp: CNTTK18D

: Đàm Văn Thắng
Hồng Tùng Dương
Ngơ Duy Khánh
Tăng Văn Duy Khánh

KHẢO
SÁT, PHÂN TÍCH THIẾT KẾ HỆ THỐNG QUẢN LÝ KÝ TÚC XÁ


CNTTK18ĐT

Thái Nguyên, ………Ngày…… Tháng …… Năm 2022


LỜI NHẬN XÉT CỦA GIÁO VIÊN
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................

...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................

2


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ỗi
ngà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 áp
dụ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ương
mạ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át
triể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ãi
trong 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ộc
số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ác
hoạt động trong nước của các doanh nghiệp, vì vậy sự thành công trong kinh doanh của
doanh 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ác
doanh nghiệp và cả các ngành như y tế, công nghiệp nặng đang được ưu tiên và phát

triể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ào
trí 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 xu
thế 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ĩ ra
một ý tưởng nhỏ đó là áp dụng thuật tố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


LỜ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ện
nay. 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ạng
trong 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 tố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 tốn và hồn thành bài báo cáo bài tập lớn
này. Do chưa có nhiều kinh nghiệm nghiên cứu, thực hành nên chúng em cũng
khơ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
Hồng Tùng Dương

Ngơ Duy Khánh
Tăng Văn Duy Khánh

4


MỤC LỤC

CHƯƠNG 1: TỔNG QUAN VỀ NGƠN NGỮ LẬP TRÌNH C#
1.1Tổ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 tồn kiểu (typesafe) 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ười
lậ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ạnh
củ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ấp
mộ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ình
hiệ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ả.
1.1.2

C# là gì?

- C# (hay C sharp) là một ngơn ngữ lập trình đơn giản, được phát triển bởi đội ngũ kỹ sư của
Microsoft vào năm 2000, trong đó người dẫn đầu là Anders Hejlsberg và Scott Wiltamuth.
- C# là ngơn ngữ lập trình hiện đại, hướng đối tượng và nó được xây dựng trên nền tảng của
hai ngơn ngữ mạnh nhất là C++ và Java.


5


- C# được thiết kế cho Common Language Infrastructure (CLI), mà gồm Executable Code và
Runtime Environment, cho phép chúng ta sử dụng các ngôn ngữ high-level đa dạng trên các
nền tảng và cấu trúc máy tính khác nhau.
- 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 Windows
Forms hay WPF (Windows Presentation Foundation), . . . trở nên rất dễ dàng.
1.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ơn
ngữ đơ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ào
nhữ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 ta
vừ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 series
này.
-


C# là một ngơn ngữ lập trình thuần hướng đối tượng:

6


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ồm


khoả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
ngữ 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ộ
phận này.

-

C# có IDE Visual Studio cùng nhiều plug-in vô cùng mạnh mẽ.
7



1.1.4

Các loại ứng dụng trên C#
C# là ngôn ngữ lập trình hướng đối tượng cho phép người sử dụng xây dựng các ứng dụng theo
kiến trúc Ecosoftware System.
Ví dụ:
 Xây dựng ứng dụng trên nền tảng web, web service
 Game
 Ứng dụng Windows Store
 Mobile
 Các ứng dụng Enterprice
 Các ứng dụng Destop
 Add On/Add in
 Đ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

8


chính: Console, Window và ứng dụng Web.
Ứng dụng Console:
Ứng dụng Console là ứng dụng có giao diện text, chỉ xử lý nhập xuất trên màn
hình Console, tương tự với các ứng dụng DOS trước đây.
Ứng dụng Console thường đơn giản, ta có thể nhanh chóng tạo chương trình hiển thị
kết xuất trên màn hì:nh. Do đó, các minh hoạ, ví dụ ngắn gọn ta thường sử dụng dạng
chương trình Console để thể hiện.
Ứ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ương

trì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 cho
trang Web, .NET giới thiệu công nghệ Webform. Cách thức tạo ra các Web control
tươ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ất
trong quá trình phát triển chương trình và không cho phép dữ liệu biến động tự do
trong 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 ngồi truy cập
mộ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 tốn
thà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ượng
tứ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ới
nhau. 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ú ý:
9


 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 lai truy 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ượng nà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 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ác
phươ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 tố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

10


sá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ên
tá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ính
củ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ăng
củ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ào
cá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ới
cho 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ác
module 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ện
tí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ính
diệ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ác
nhau để tạo ra Windows, Texboxes, Buttons, … Chức năng này đã được đưa vào

11


trong thư viện lớp của .Net Framework, trở thành những thành phần của namespace
System.Windows.Forms. Trong chương này, form được xem như bộ phận trung tâm
củ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 trong
Visual Studio.Net. Công cụ này cho phép chúng ta sử dụng những cơng cụ trực
quan để 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ùng

Designer. 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ũng
như 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ự
12


chọ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 sau
này.
• MaximizeBox: Thuộc tính cho nút Max. Thiết lập giá trị cho thuộc tính
nà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ính
nà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ùng
chỉ 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 hồn chỉnh theo hình mẫu đã cho theo đó. Người dùng không được
đi chéo.
13


Trong q trình chơi có thể có trường hợp người dùng khơng thể đi đến trạng thái

-


hồn chỉnh của hình. Vì vậy chúng ta áp dụng trí tuệ nhân tạo vào trong trò chơi
này, và cụ thể là chúng em đã áp dụng 2 thuật tốn tìm kiếm theo chiều rộng
(Breadth First Search) và thuật tốn tìm kiếm tốt nhất đầu tiên ( Best-First-Search )
trong game này để đưa người chơi đi đến trạng thái hoàn chỉnh (giải ra được
đường đi đến trạng thái hồn chỉnh).
Vậy bài tốn thực tế ở đây là tìm ra đường đi đến trạng thái hồn thành của game

-

ghép tranh 8 ơ số, cũng như đưa một trạng thái ngẫu nhiên chưa hoàn chỉnh của
bức tranh về một bức tranh hoàn chỉnh áp dụng 2 thuật tốn trong trí tuệ nhân tạo.
2.2
Mơ tả thuật tốn sử dụng:
2.2.1

Thuật tốn tìm kiếm theo chiều rộng ( Breadth First Search ):
-

Đây là thuật tốn tìm đường đi từ đỉnh xuất phát đến đỉnh kết thúc bằng các duyệt
theo chiều rộng.

-

Đây là thuật tốn nằm trong nhóm thuật tốn tìm kiếm mù, thuật tốn khơng quan
tâm đến trọng số trên đường đi mà chỉ duyệt theo những đỉnh kề liên tiếp nó.

-

Xuất phát tử một đỉnh và đi tới các đỉnh kề nó, tiếp tục cho đến khi khơng cịn

đỉnh nào để đi.

-

Trong q trình đi đến đỉnh kề, tiến hành lưu lại đỉnh kề để khi đi ngược lại từ
đỉnh kết thúc đến đỉnh xuất phát ta có được đường đi ngắn nhất.

-

Mơ tả thuật tốn: Cách đỉnh đã được xét thì khơng thể xét lại lần 2 nữa. Cơ
chế lưu lại đỉnh kề sẽ là lưu các đỉnh kề thành 1 danh sách và lấy từ từ danh sách
các đỉnh kề ra để xét, khi mà một đỉnh kề của một đỉnh đang xét được thêm vào
danh sách thì nó sẽ được thêm vào cuối của danh sách hay còn gọi là cơ chế
Queue(hàng đợi). Cơ chết này có nghĩa khi thêm một phần tử thì phần tử đó sẽ
được thêm ở cuối danh sách hàng đợi, cịn lấy phần tử ra thì sẽ lấy ra ở đầu danh
sách hàng đợi. Đó chính là điểm nổi bật để phân biệt thuật toán này với các thuật
toán khác.
+
+
-

Ưu điểm:
Dễ cài đặt.
Nếu số đỉnh là hữu hạn, thuật toán chắc chắn tìm ra kết quả.
Nhược điểm:
14


+


Mang tính chất vét cạn, khơng nên áp dụng nếu duyệt số đỉnh quá lớn.
+ Mang tính chất mù quáng, duyệt tất cả đỉnh, không chú ý đến thông tin trong
các đỉnh để duyệt hiệu quả, dẫn đến duyệt qua các đỉnh không cần thiết
+ Chiếm thời gian và không gian bộ nhớ khi số đình duyệt nhiều.

-

Chi tiết chạy từng bước của thuật toán BFS:
Breadth_First_Search (BFS)
Begin
Bước 1: Khởi tạo danh sách L chỉ chứa trạng thái ban đầu
Bước 2: Loop do
2.1 If L rỗng then
{Thơng báo tìm kiếm thất bại; Stop};
2.2 Loại trạng thái u ở đầu danh sách L;
2.3 If u là trạng thái kết thúc then
{Thông báo tìm kiếm thành cơng; Stop};
2.4 for mỗi trạng thái v kề với trạng thái u do
{Đặt v vào cuối danh sách L;
father(v) = u};

Trong ví dụ trên, các trạng thái trong danh sách kề sẽ được thêm lần lượt vào
cuối trong danh sách L(Queue hàng đợi), mỗi lần đỉnh duyệt sẽ lấy ra trạng thái

15


đầu tiên trong danh sách L này để duyệt tiếp theo. Cứ tiếp tục như vậy cho đến khi
đi đến đỉnh kết thúc cần tìm hoặc cho đến khi Danh sách L (Queue hàng đợi ) đã
rỗng.

2.2.2

Thuật tốn tìm kiếm tốt nhất đầu tiên ( Best First Search ):
-

Tìm kiếm theo bề rộng được hướng dẫn bởi hàm đánh giá hay cịn gọi là hàm

-

Heuristic. Nằm trong nhóm thuật tốn tìm kiếm kinh nghiệm.
Hàm đánh giá được tính theo 2 phương thức: đếm số ơ sai vị trí so với trạng thái
người dùng mong muốn và tính theo khoảng cách Mahattan. Trong trị chơi này
hàm đánh giá (Heuristic) được tính theo đếm số ơ sai vị trí so với trạng thái đích
mong muốn.
Mơ tả thuật tốn: Cũng tương tự như thuật toán Breadth First Search. Nhưng Best

-

First Search khác ở chổ: Đỉnh được chon để phát triển là đỉnh tốt nhất được xác
định bởi hàm đánh giá (đỉnh có giá trị hàm đánh giá nhỏ nhất). Có nghĩa là mỗi lần
thêm vào hàng đợi danh sách các trạng thái sẽ được sắp xếp theo thứ tự tăng dần
dựa theo hàm đánh giá, hàm đánh giá càng thấp thì tương đương số ơ bị sai vị trí là
ít nhất. Từ đó ta chọn được trạng thái tốt nhất để đi tiếp.
Ưu điểm của thuật tốn này duyệt qua ít đỉnh hơn vì có hàm đánh giá ở trong nên

-

khi duyệt việc sắp xếp hàm đánh giá sẽ giúp tìm tới đỉnh cuối cùng nhanh hơn và ít
tốn thời gian hơn.
Ưu điểm :


-

Khá dễ cài đặt.
Nếu số đỉnh là hữu hạn, thuật tốn chắc chắn tìm ra kết quả.
Có xét thêm hàm Heuristic nên duyệt ít trạng thái hơn.
Nhược điểm:
+ Chiếm thời gian và không gian bộ nhớ nếu số đỉnh duyệt q lớn.
+
+
+

-

-

Chi tiết chạy từng bước của thuật tốn Tìm kiếm tốt nhất đầu tiên ( Best First
Search ) :
Begin Bước 1: Khởi tạo danh sách L chỉ chứa trạng thái ban đầu
Bước 2: Loop do
16


2.1 If L rỗng then
{Thơng báo tìm kiếm thất bại; Stop};
2.2 Loại trạng thái u ở đầu danh sách L;
2.3 If u là trạng thái kết thúc then
{Thơng báo tìm kiếm thành công; Stop};
2.4 for mỗi trạng thái v kề với trạng thái u do
Xen v vào danh sách L sao cho L được sắp theo thứ tự tăng dần của hàm đánh giá;

End;
Ví dụ:

Trong ví dụ này ta thấy đường đi cuối cùng vẫn là A->E->F->I như là ví dụ 1.
Nhưng số trạng thái mà thuật toán phải duyệt chỉ có 4 đỉnh là đã tìm ra được
đường đi.
Do trong danh sách L (Queue hàng đợi) lúc này đã đưa được trạng thái tốt nhất về
đầu danh sách để lấy ra duyệt đi tiếp.

2.3

Ứng dụng thuật toán vào Game ghép tranh 8 ơ số.
-

Áp dụng 2 thuật tốn như đã nói trên vào game 8 ơ số. Lúc này mỗi trạng
thái hay mỗi đỉnh mà thuật toán duyệt qua chính là một danh sách các số từ
17


1 đến 9, và trong đó có 1 ơ số đánh dấu là ô đen trống để cho người chơi di
chuyển.
- Mỗi lần thuật toán duyệt qua một trạng thái, sẽ đưa vào trong hàng đợi, như
vậy ta sẽ có danh sách chứa những danh sách.
- Kết quả đường đi tìm được sẽ trả về danh sách của những trạng thái mà nó
đã tìm ra(cũng là một danh sách các số từ 1 đến 9).
2.4

Hướng dẫn chơi game Ghép Tranh 8 ơ số:
-


Khi người dùng khởi động chương trình lên. Màn hình sẽ hiển thị bên táy phải
là hình gốc(hình hoàn chỉnh sau ghi ghép đúng bức tranh), bên tay trái là 9 ô số
chứa từng phần nhỏ được cắt ra từ bức tranh hồn chỉnh, 9 ơ số này sẽ có 1 ơ là
màu đen trống để người chơi di chuyển các ô lân cận, 9 ô này sẽ được trộn lẫn

-

ngẫu nhiên khơng hồn chỉnh thành 1 bức tranh.
Nhiệm vụ người chơi là di chuyển từng ô 1 lên, xuống, trái, phải và không được
đi chéo dựa theo ô trống đen, sao cho ghép thành 1 bức tranh hồn chỉnh như

-

hình bên tay phải.
Khi người chơi bắt đầu chơi, thời gian sẽ được tính, và số bước đi sẽ được đếm

-

nhằm thống kê thời gian và số bước người chơi đã đi đến kết quả cuối cùng.
Người chơi có thể tạm ngưng trong lúc chơi, nhưng khi chọn nút tạm ngưng
màn hình 9 ơ số ngẫu nhiên này sẽ bị tắt đi, phòng trường hợp người chơi xem

-

trước đường đi.
Người chơi có thể chọn nút chơi lại để bắt đầu chơi lại từ đầu, lúc này 9 ô số sẽ
được trộn ngẫu nhiên lại một lần nữa và thời gian cũng như bước đi sẽ được cài

-


đặt về 0 như trạng thái ban đầu.
Nếu người chơi không thể đi đến ghép thành một bức tranh hồn chỉnh thì
người chơi có thể chọn nút giải theo BFS hay giải Tối Ưu trên màn hình, sau
khi chọn thuật tốn giải số bước đi sẽ được hiển thị lên, thời gian và số trạng
thái đã duyệt qua cũng được hiển thị lên, từ đây người chơi click vào nút đi tới
để bắt đầu xem kết quả đi từng bước của thuật tốn cho đến khi hồn chỉnh bức

-

tranh. Người dùng cũng có thể đi lui để xem lại bước đi trước đó.
Người dùng có thể thốt khỏi chương trình.

18


2.5

Tổng quan về các chức năng , giao diện.

19


2.5.1

Chức năng random hình ảnh lên màn hình.

-

2.5.2


Khi bước vào trị chơi thì hình ảnh sẽ được random một cách ngẫu nhiên.

Chức năng đếm bước đi.

-

Khi chúng ta di chuyển các trang thái để sắp xếp hình ảnh thì mỗi lần di chuyển

20


sẽ được tính là một bước.
-

Chức năng này giúp đánh giá được bạn đã sử dụng bao nhiêu trạng thái để ghép
thành cơng tấp hình này. Hay gọi cách khác là bạn đã sử dụng bao nhiêu trang
thái để hoàn thành trị chơi này.

-

Ngồi đánh giá chức năng này cịn có thể giúp bạn ghi nhận lại số bước đi để lần
tới bạn có thể cải thiện hơn số trạng thái mình đã dùng để chiến thắng trị chơi.
Một khi bạn dùng càng ít trạng thái để chiến thắng thì bạn sẽ đánh giá được khả
năng chơi trò chơi của mình như thế nào.

2.5.3

Chức năng chơi lại.

-


Khi người chơi muốn chơi gặp khó khăn trong việc di chuyển các ơ trên màn hình
trị chơi hoặc là người chơi đã tìm ra cách để chiến thắng trị chơi mà tốt ít thời
gian nhất cũng như là tốn ít số bươc đi để đến chiến thắng nhất thì người chơi có
thể chơi lại từ đầu.
-

Khi bạn cảm thấy chơi hồi mà khơng chiến thắng thì bạn cũng có thể bấm chơi
lại để bắt đầu lại từ đầu. Khi đó sẽ có một thơng báo hỏi bạn có muốn chơi lại từ
đầu hay không.
21


-

Khi bạn đã chắc chắn là mình chơi lại từ đầu thì màn hình chơi sẽ random lại các
trạng thái một cách ngẫu nhiên.

2.5.4

Chức năng giải BFS
Click vào button giải BFS thì người dừng phải đợi một chút để máy có thể tự giải.
Tới khi nào phần đếm bước đi hiển thị số bước:

-

-

2.5.5


Thì khi đó thuật tốn đã được giải và sẽ hiển thị ra màn hình cả thời gian và số
bước duyệt để chọn ra được những trạng thái cuối cùng để người chơi có thể đi
đến chiến thắng.

Chức năng giải tối ưu.
Khi bạn click vào button giải tối ưu thì người dùng sẽ chờ một chút. Tới khi mà
phần đến bước đi hiển thị ra số bước đi thì khi đó trị chơi mới tự được máy giải
xong.

-

-

Chức năng này cũng sẽ hiển thi ra các thời gian và số trạng thái đã được duyệt
qua để đi đến trạng thái kết thúc.

22


-

Việc hiển thị số bước để duyệt hay còn gọi là số trạng thái để đi đến trạng thái
cuối cùng, sẽ giúp người dùng so sánh được hai phương pháp giải với nhau.

2.5.6

Chức năng thốt.
Khi muốn tắt chương trình thì người dùng sẽ có chức năng thốt. Khí bạn click

-


vào thì sẽ hiển thị một thơng báo xác nhận là bạn có muốn thốt hay khơng.

2.5.7

Người dùng chọn có thì chương trình sẽ thốt cịn chọn khơng thì chương trình
vẫn sẽ tiếp tục.
Chức năng đi lui và đi tới.

23


-

2.5.8

Khi bạn đã chọn chức năng giải BFS hoặc giải tối ưu chương trình đã thực thi
xong thì bạn sẽ chọn chức năng đi tới và đi lui để đi từng bước tới trạng thái kết
thúc.
Chức năng này giúp người chơi có thể hiểu được các bước giải của máy thông
qua việc đi từng bước từng bước.
Khi đã đi hết tất cả các bước thì bạn sẽ tới trạng thái kết thúc.
Chức năng tính thời gian.

-

Khi bắt đầu vào trị chơi thì thời gian vẫn sẽ chưa được tính, cho đến khi bạn bắt
đầu di chuyển trạng thái đầu tiên của một ơ trên khung thì thời gian sẽ bắt đầu
tính. Hiểu nơm na sẽ là bạn di chuyển một ơ thì thời gian sẽ bắt đầu tính kể cả khi
sau đó bạn khơng di chuyển thêm một ơ nào khác thì thời gian vẫn sẽ tính.


-

Chức năng tính thời gian cũng sẽ là một chức năng đánh giá khả năng của bạn
tương tự như đếm bước đi của bạn vậy. Bạn hồn thành trong thời gian càng ngắn
thì chứng tỏ bạn rất thông minh và chơi game này rất tốt.

-

Thời gian sẽ dừng khi trạng thái bạn hoàn thành sẽ là trạng thái kết thúc. Hay nói
cách khác là bạn đã xếp đúng hình thì thời gian sẽ dừng lại.

24


2.6

Kết luận .
Thuận lợi:
Sau một khoảng thời gian làm việc nghiêm túc và hiệu quả, đến nay đề tài “
Xây dựng game ghép tranh 8 ơ số ” của nhóm chúng em đã hoàn thành cơ bản
theo đúng nghĩa như yêu cầu nội dung và thời gian đã định.
Khó khăn:
-

Trường hợp nếu là trạng thái đầu truyền vào là một mảng random thì nếu gặp
random ra số vị trí ơ sai nhiều thì cả 2 thuật tốn Breadth-Frist-Search và Best

-


First Search đều mất quá nhiều thời gian để tìm ra được đường đi.
Chổ này chúng em khắc phục bằng cách tạo ra 5 trường hợp tương đương 5
testcase có sẵn, 5 trường hợp này đều là các trạng thái mà 2 thuật tốn có thể
tìm ra được đường đi trong thời gian không quá lâu từ 0.01-> dưới 10 giây. Và

-

cho trạng thái đầu vào chạy random trong 5 testcase này.
Nếu người chơi bấm nút tạm ngừng, sau đó bấm nút chơi lại thì chương trình sẽ
bị lỗi.
- Trong quá trình nghiên cứu và thực hiện đề tài với quyết tâm cao nhưng do
hạn chế về kinh nghiệm và kiến thức nên đề tài của em chắc chắc không tránh
khỏi những thiếu sót. Đề tài rất mong nhận được ý kiến đóng thầy để đề tài
được hồn thiện hơn.

Đề xuất cải tiến game:
-

-

-

Đối với trường hợp có q nhiều ơ bị sai thì thuật tốn Best First Search hay
Breadth First Search vẫn tìm ra đường đi quá lâu, cần áp dụng các thuật toán tối
ưu hơn như A*, Nhánh Cận, để có sự quan sát độ tối ưu.
Nên in đường đi là các trạng thái đã duyệt qua lên màn hình giao diện dưới dạng
mảng 2 chiều, thay vì là đã in dưới Console.
Đề xuất khi bấm nút giải thì label thời gian phải bắt đầu đếm chứ không phải giải
xong rồi mới hiển thị thời gian cuối cùng lên lable.
Đề xuất khi bấm nút giải tự động các picture box phải tự di chuyển đi đến trạng

thái cuối cùng hồn chỉnh mà khơng cần người chơi phải click nút “đi tới” để
xem.
Mở rộng trị chơi lên 16 ơ, 25 ô.

25


×