1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo bài tập học phần trí tuệ nhân tạo Đề tài xây dựng chương trình trò chơi kim cương

20 0 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

Định dạng
Số trang 20
Dung lượng 856,21 KB

Nội dung

Tài liệu này giúp ta có cái nhìn toàn vẹn về các chức năng của phần mềm cũng như ứng dụng thuật toán A* để giải quyết bài toán này.. Cụ thể là phương pháp tìm kiếm trong không gian trạng

Trang 1

TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM KHOA

CÔNG NGHỆ THÔNG TIN

-*** -BÁO CÁO BÀI TẬP HỌC PHẦN: TRÍ TUỆ NHÂN TẠO

ĐỀ

TÀI: XÂY DỰNG CHƯƠNG TRÌNH TRÒ CHƠI KIM

CƯƠNG

GVHD: Nguyễn Duy Trường Giang

Sinh viên thực hiện: Đỗ Minh Quân - 94222

Hà Tiến Đạt - 94355

Hà Đức Chính - 94638

Hải Phòng, tháng 11 năm 2024

Trang 2

MỤC LỤC

ĐẦU

1

I.BÀI TOÁN GAME XẾP KIM CƯƠNG 4

1 Bài toán game xếp kim cương 4

2 Giới thiệu về game xếp kim cương 4

II.THUẬT TOÁN A* 6

1.Giới thiệu thuật toán 6

2.Mô tả thuật toán 6

III Cài Đặt Bài Toán 9

IV KẾT QUẢ 10

Trang 3

LỜI NÓI ĐẦU

Đây là tài liệu dùng để biểu diễn cơ bản thiết kế và giải quyết bài toán “Trò chơi xếp kim cương” sử dụng thuật toán A* do tôi thiết kế và lập trình Tài liệu này giúp ta có cái nhìn toàn vẹn

về các chức năng của phần mềm cũng như ứng dụng thuật toán A* để giải quyết bài toán này Do thời gian có hạn nên đồ án không thể tối ưu Tuy nhiên, nhóm sẽ nghiên cứu hoàn thiện trong thời gian sớm nhất

Hiểu rõ mối liên hệ giữa các sự kiện của thế giới bên ngoài nhằm đưa ra những hành vi phù hợp để đạt được mục đích Vậy trí tuệ nhân tạo là gì? Thuật ngữ trí tuệ nhân tạo (Artifical Intellegence) được Jonh McCarthly đưa ra trong hội thảo ở Darthouth vào mùa hè năm 1956 Đã có rất nhiều định nghĩa khác nhau về trí tuệ nhân tạo Với trí tuệ nhân tạo, máy tính đã giúp con người giải quyết các vấn đề một cách thông minh nhất

Ta sẽ tìm hiểu một số phương pháp giải quyết vấn đề cơ bản Cụ thể là phương pháp tìm kiếm trong không gian trạng thái với

Nhóm thực hiện đề tài nhằm mục đích xây dựng một hệ thống giải quyết một bài toán thực tế dựa trên chiến lược tìm kiếm heuristic và xây dựng một trò chơi ứng dụng giải trí Trong quá trình thực hiện đề tài không tránh khỏi những sai sót, nhóm tôi mong sẽ nhận được sự góp ý và đánh giá của thầy

Trang 4

I.BÀI TOÁN GAME XẾP KIM CƯƠNG

1 Bài toán game xếp kim cương

Game xếp kim cương(N-Puzzle) là một trò chơi khá hay và trí tuệ, nó được biết đến với nhiều phiên bản và tên gọi khác nhau như: 8-puzzle, 16-puzzle, Gem puzzle, Boss puzzle Bài toán N-puzzle là vấn đề cổ điển cho mô hình thuật toán liên quan đến trí tuệ nhân tạo Bài toán đặt ra là phải tìm đường đi từ trạng thái hiện tại tới trạng thái đích Và cho tới nay vẫn chưa có thuật toán tối ưu để giải bài toán này

Phần mềm N-Puzzle là một chương trình xây dựng trò chơi và giải quyết bài toán này Phần mềm được viết ra trên nền tảng Java, sử dụng giao diện đồ họa đề mô phỏng trò chơi và thuật toán A* để tìm đường đi Người dùng có thể sử dụng chuột và bàn phím chơi với các kích thước khác nhau và với hình ảnh khác nhau hoặc có thể sử dụng chức năng tìm lời giải nhờ thuật toán A*

Yêu cầu xây dựng bảng ô vuông n hàng, n cột Bảng gồm 0 ô

cách xếp bất kì, di chuyển ô chứa kim cương lên trên, xuống dưới, sang phải, sang trái để đưa các ô về trạng thái đích Sử dụng chuột hay phím chức năng để di chuyển ô trống Mỗi trạng thái

rộng bằng việc thêm hình ảnh vào game hoặc gắn số vào hình ảnh để gợi ý cho người chơi Ở trạng thái ban đầu, các ô được sắp xếp ngẫu nhiên, và nhiệm vụ của người chơi là tìm được cách đưa chúng vế trạng thái đích (di chuyển các ô cờ về cùng màu nhỏ nhất là 3 ô) Để đơn giản trong cách tiếp cận bài toán, ta giả định chỉ các ô trống di chuyển trong bảng là di chuyển đến các vị trí khác nhau Như vậy tại một trang bất kì có tối đa 4 cách di chuyển đến trạng thái khác (trái, phải, lên, xuống)

Trang 5

2 Giới thiệu về game xếp kim

cương

Game Kim Cương

Game kim cương là một trò chơi khá là dễ chơi Bạn phải sắp xếp

3 viên kim cương cùng màu trở lên tạo thành một hàng ngang hoặc dọc để ghi điểm

 Các ô cờ có thể di chuyển được

 Nếu di chuyển mà không ăn thì không được di chuyển

 Nếu ăn 3 ô cùng màu sẽ được 3 điểm

 Nếu ăn 4 ô cùng màu sẽ được 8 điểm

 Nếu ăn 5 ô cùng màu sẽ được 12 điểm và ô giữa sẽ biến thành ô đặc biệt

Trang 6

II.THUẬT TOÁN A*

1.Giới thiệu thuật toán.

Trong khoa học máy tính, A* là một thuật toán tìm kiếm trong đồ thị Thuật toán này tìm một đường đi từ nút khởi đầu tới một nút đích cho trước (hoặc tới một nút thỏa mãn điều kiện đích) Thuật toán này sử dụng một đánh giá heristic để xếp loại từng nút theo ước lượng về tuyến đường tốt nhất đi qua nút đó Thuật toán này duyệt các nút theo thứ tự của đánh giá heuristic này Do đó, thuật toán A* là một ví dụ của tìm kiếếm theo lựa chọn tốt nhất (best-first search)

Xét bài toán tìm đường – bài toán mà A* thường được dùng

để giải A* xây dựng tăng dần cả các tuyến đường từ điểm xuất phát cho tới khi nó tìm thấy một đường đi chạm tới đích Tuy nhiên, cũng như tất cả các thuật toán tìm kiếm có thông tin nó chỉ xây dựng các tuyến đường có vẻ dẫn về đích

Để biết những tuyến đường nào có khả năng sẽ dẫn tới đích, A* sử dụng một hàm đánh giá heuristic về khoảng cách từ điểm bất kỳ cho tới đích Trong trường hợp tìm đường đi, đánh giá này có thể là khoảng cách đường chim bay một đánh giá xấp xỉ thường dùng cho khoảng cách của đường giao thông Điểm khác biệt của A* đối với tìm kiếm theo lựa chọn tốt nhất là nó còn tính đến khoảng cách đã đi qua Điều đó làm cho A* đầy đủ và tối ưu, nghĩa là A* sẽ luôn tìm thấy đường đi ngăến nhất nếu tồn tại đường đi như thế A* không đảm bảo sẽ chạy nhanh hơn các thuật toán khác

2.Mô tả thuật toán

Giả sử n là một trạng thái đạt tới (có đường đi từ trạng thái ban đâu nọ tới

Trang 7

n) Ta xác định hàm đánh giá:

 f(n) = g(n) + h(n) g(n) là chi phí từ nút gốc tới nút hiện tại n

 h(n) chi phí ước lượng từ nút hiện tại n tới đích

 f(n) chi phí tổng thể ước lượng của đường đi qua nút hiện tại

n đển đích

Một ước lượng heuristic h(n) được xem là chấp nhận được nếu với mọi nút n

0=< h(n)<= h*(n)

Trong đó h(n) là chi phí thực tế để đi từ nút n đến đích

3.Cài đặt thuật toán

 OPEN(FRINGE): tập chứa các trạng thái đã được sinh ra

nhung chưa dược xét đến OPEN là một hàng đọi ưu tiên mà trong dó phần từ có độ ru tiên cao nhất là phần tử tốt nhất

 CLOSE: tập chứa các trạng thái đã được xét đến Chúng ta

cần lưu trữ những trạng thái này trong bộ nhớ để phòng trường hợp khi có một trạng thái mới được tạo ra lại trùng với một trạng thái mà ta đã xét đến trước đó

trữ 3 giá trị cơ bản g, h, f để phẩn ánh độ tốt của trạng thái

đó, A* còn lưu trữ thêm hai thông số sau:

trữ các trạng

trạng thái ban đầu là thấp nhất Thực chất danh sách này có thể được tính từ thuộc tính Cha của các trạng thái đã được lưu trữ Tuy nhiên việc tính toán này có thể mất nhiều thời gian (khi tập OPEN, CLOSE được mở rộng) nên người ta thường lưu trữ ra một danh sách riêng

Thuật toán A*:

Trang 8

Function Astar (n0, ngoal)

1 Đặt OPEN chỉ chứ n0 Đặt g(n0) = h(n0) = f(n0) = 0 Đặt CLOSE

là tập rỗng

2 Lặp lại các bước sau cho đến khi gặp điều kiện dừng

 Nếu OPEN rỗng: bài toán vô nghiệm, thoát

n i

h(n k)

Trang 9

III Cài Đặt Bài Toán

Việc cài đặt thuật toán A* trong bài toán N-Puzzle cũng giống

như phần trên đã nêu:

• FRINGE là tập chứa các trạng thái đã được sinh ra

nhưng chưa được xét đến

• KQ tập trạng thái kết quả, lưu các trạng thái từ trạng

thái hiện tại tới đích Đầu vào: trạng thái hiện tại, trạng thái đích

Đầu ra: tập các trạng thái từ trạng thái hiện tại tới trạng thái đích

Điều kiện dừng thuật toán: tìm thấy kết quả hoặc giới hạn thời gian hoặc người dùng cho phép dừng

Trong bài toán này ta có thể cải tiến bằng việc bỏ tập

CLOSE Ta thấy trong bước 2.b.3 ở trên sau khi tìm ra các

thái này để tránh việc xét lặp Khi loại bỏ trạng thái này sẽ không tồn tại một trạng thái con nào trùng với một trạng thái trong tập CLOSE nữa Việc loại bỏ này sẽ tránh được việc kiểm tra ở bước 2.b.3.3 gây tốn rất nhiều thời gian

Ngoài ra, trong game này còn cài đặt thêm thuật toán A* sâu dần (IDA*) là một biến thể của thuật toán tìm kiếm A* IDA* giúp loại bỏ hạn chế bộ nhớ của A* mà ko hy sinh giải pháp tối ưu Mỗi lần lặp của thuật toán là quá trình tìm kiếm theo chiều sâu, f(n) = g(n) + h(n), tạo nút mới Khi một nút

Trang 10

được tạo ra có chi phí vượt quá một ngưỡng cutoff thì nút đó sẽ

bị cắt giảm, quá trình tìm kiếm backtracks trước khi tiếp tục Các ngưỡng chi phí được khởi tạo ước lượng heuristic của trạng thái ban đầu, và trong mỗi lần lặp kế tiếp làm tăng tổng chi phí của các nút có chi phí thấp đã được cắt tỉa trước đó Thuật toán chấm dứt khi trạng thái đích có tổng chi phí không vượt quá ngưỡng hiện tại

Trang 11

IV KẾT QUẢ

1.Giao diện Mô tả các chức năng:

*NewGame:

Chức năng chính:

*HintGame: có nhiệm vụ

10

Trang 12

Buton Hint có nhiệm vụ hiển thị một dấu hiệu là 1 viên kim cương mà từ đó ta có thể xếp thành hàng ngang hay hang dọc

để tiếp tục ghi điểm

Ví Dụ:

*LoadGame: có nhiệm vụ Mở lại game mà ta đã SaveGame

11

Trang 13

*High Score:

Hiển thị Index, Name, Score của top 10 người điểm cao nhất mà

ta đã chơi.như hình dưới đây:

12

Trang 14

*Sự kiện đặc biệt: khi sắp xếp 5 viên kim cương cùng hang dọc

hay hang ngang: khi hội tụ đủ 5 viên kim cương thì sẽ xuất hiện 1 viên kim cương mới có tính năng đặc biệt: sẽ ăn tất cả các viên kim cương cùng mau còn lại nếu được chọn

Ví dụ như hình dưới:

13

Trang 15

Sau khi sắp 5 viên kim cương màu vàng giống nhau thì sẽ xuất hiện một viên kim cương đặc biệt

14

Trang 16

Từ viên kim cương đặc biệt như ở hình trên chúng ta có thể chọn các viên kim cương xung quanh nó để tạo một hiệu ứng đặc biệt

15

Trang 17

Các viên kim cương màu xanh trên hình trên sẽ bị mất và điểm sẽ được cộng

2.Giới thiệu về một số Class cơ bản

*FormHighScore.cs:

 Hiển thị điểm của người chơi

*FormMain.cs:

 Form chính của chương trình

 Chứa các sự kiện của các button

* Hint.cs:

 Gợi ý một nước ăn được cho người chơi

16

Trang 18

o Dùng 2 vòng lặp for để duyệt tất cả các kim cương theo hàng dọc vàhàng ngang

o Duyệt theo các trường hợp:

 Có 2 kim cương giống nhau và nằm kề nhau:

 2 kim cương đó nằm ở hàng ngang thứ nhất hoặc hàng dọc thứ nhất

 2 kim cương đó nằm ở hàng ngang ở giữa hoặc hàng dọc ở giữa

 2 kim cương đó nằm ở hàng ngang cuối cùng hoặc hàng dọc cuối cùng

 Có 2 kim cương giống nhau và nằm cách nhau bởi

1 kim cương khác:

o Duyệt theo 3 trường hợp như ở trường hợp 2 kim cương giống nhau và nằm kề nhau

*Kimcuong.cs:

Khởi tạo một đối tượng ô kim cương thừa kế button Gồm các thuộc tính: SoTT, TrangThai, SoMau, Doc, Ngang, Xuly

*LoadGame.cs:

 Dừng các time xử lý

 Đọc file sử lý chuỗi kí tự

 Tạo vòng lặp load lại màu và xử lý của các ô cờ

 Load lại game cũ sau khi đã lưu game

*NewGame.cs:

 Mở một game mới

 Random số màu cho các ô còn lại

*SaveGame.cs:

 Save game để chờ load game lưu thành file text giá trị màu

và xử lý của các ô cờ

*XuLyAmthanh.cs:

17

Trang 19

 Khai báo các đối tượng âm thanh cho game.

*XuLySuKien.cs: chức năng chính là Kiểm tra và sự kiện ăn kim

cương

Một số hàm chính:

 Hàm Xulysukien:

o Dùng để xử lý sự kiện click chuột của ô cờ

o Sử dụng biến cout để xử lý chuột qua các lần click

o Lưu các đối tượng đang được xử lý lại

o Xử lý chuyển động của kim cương

 Hàm Kiemtra:

o Kiểm tra để ăn kim cương

o Nếu ăn được gọi time tg_anhinh() Hàm Kiemtratrung:

o Kiểm tra có hình bị trùng không

 Hàm Ankimcuong:

o Xử lý ăn các ô trùng

o Tính điểm, tăng giá trị của progressbar

o Tạo label hiển thị điểm ăn được

o Xử lý các âm thanh

Gọi đệ quy hàm kiểm tra để xử lý tiếp các ô cờ ăn được

*Class cathinh.cs:

Hàm clip: Dùng để cắt ảnh và lưu ảnh đó vào một mảng bitmap dung để xử lý chuyển động

*Class MoKimCuong.cs:

Khai báo mảng các ô kim cương

*Class Chuyendong.cs:

Chứa các hàm xử lý time về chuyển động của các ô kim cương

Timer tg_cd:

Xử lý kim cương chuyển động khi chưa ăn

18

Trang 20

Timer tg_progress:

Xử lý giảm dần giá trị của thanh progressbar tính giờ

Timer tg_kt:

Bao gồm 2 xử lý chính:

 Cho phép di chuyển 2 ô nếu ăn được, đồng thời gọi hàm anhinh

 Nếu không ăn được thì đỗi chỗ ngược lại

Timer tg_anhinh:

 Xử lý ảnh mờ dần trước khi gọi hàm ankimcuong

19

Ngày đăng: 29/11/2024, 20:35

w