ÁP DỤNG THUẬT TOÁN HEURISTIC TRONG GAME LỰA ĐẬU
TRƯỜNG ĐẠI HỌC NGOẠI NGỮ - TIN HỌC TPHCM KHOA CƠNG NGHỆ THƠNG TIN ĐỒ ÁN TRÍ TUỆ NHÂN TẠO ÁP DỤNG THUẬT TỐN HEURISTIC TRONG GAME LỰA ĐẬU (Mơ game Line) TÊN NHÓM: LILO DANH SÁCH THÀNH VIÊN TRONG NHÓM: NGUYỄN THANH NGỌC LINH NGUYỄN VŨ LONG NGUYỄN LÊ NGỌC BẢO KHUYÊN LÊ THỊ KIỀU HOA 08DH11286 08DH11113 08DH11353 08DH11284 MỤC LỤC TỔNG QUAN TÓM TẮT NỘI DUNG ĐỒ ÁN CÔNG VIỆC 3 NGUỒN GỐC SOURCE CODE CỦA ĐỒ ÁN ĐÁNH GIÁ ĐỒ ÁN BÁO CÁO CHI TIẾT Giới thiệu đồ án/game Phương pháp/thuật toán TTNT áp dụng vào đồ án (lý thuyết) Cài đặt phương pháp/thuật toán TTNT vào đồ án TỔNG QUAN 1.1 Tóm tắt nội dung đồ án Game Lựa Đậu - Mô lại game thông dụng : Line theo giải thuật Heuristic - Cách chơi giống game Line , người chơi phải tối thiểu hạt đậu giống thành hàng (ngang dọc chéo) để ghi điểm 2.1 Công việc Khuyên: mô game , xây dựng đồ thị 3.1 Nguồn gốc source code đồ án Source code : http://virusvn.com/forum/showthread.php?2275-Source-Game-line Trong source code này,nhóm thay đổi phần giao diện (thay hình ảnh,bố trí lại form,thay background) 4.1 Đánh giá đồ án - Mức độ phức tạp đồ án: Thấp Hơi thấp x Trung bình Khá Rất phức tạp Ý kiến khác - Giao diện/đồ họa đồ án có bắt mắt người chơi hay người dùng khơng: khơng có giao diện xấu xấu tàm tạm x Dễ nhìn Đẹp Rất đẹp Ý Kiến Khác - Khả hút người dùng hay người chơi: Nhàm chán x Tàm tạm Hấp dẫn Ly kỳ Chơi ghiền Ý kiến khác - Mức độ phong phú đồ án: x Đơn giản Nhiều cấp độ Nhiều tình Nhiều lựa chọn Ý kiến khác - Mức độ học hỏi nhóm thơng qua đồ án: Khơng học Học ít x Học nhiều Học nhiều Ý kiến khác - Đánh giá khác: Đánh giá nhóm bạn mơn học (nếu có) BÁO CÁO CHI TIẾT 5.1 Giới thiệu Line game mini cổ điển nhiều người chơi ưa thích với cách chơi đơn giản Microsoft tích hợp hệ điều hành cũ Windows 98,Windows XP Game Lựa Đậu xây dựng sở game Line, nhiên hình ảnh giao diện game mang đến cho người chơi cảm giác lạ dựa câu chuyện cổ tích quen thuộc “Tấm Cám ” Lựa Đậu thời @ Như thường lệ, hàng năm triều đình có ngày hội game để game thủ có dịp trổ tài để chọn đội tuyển để thi đấu với vương quốc khác Ngày hội tới mà Tấm lại muốn tham gia sợ dì ghẻ bắt phải lựa đậu cho năm ngối.Tấm gục mặt xuống bàn phím khóc Khơng ngờ,tay Tấm đụng trúng phím tắt Bụt Google lên Như bắt vàng,Tấm liền hỏi Bụt Google cách để vượt qua thử thách lựa đậu Dì Ghẻ đặt ra.Bụt liền đưa cho Tấm game Lựa Đậu dặn: “Để lựa đậu nhanh, ngày phải bỏ thời gian để luyện game này,nhiệm vụ phải hạt đậu giống thành hàng ngang hàng dọc, chéo hạt đậu tự động biến tự chui vào hộp đựng riêng biệt.Con cố luyện tập nhé! Chúc thành cơng!” Bụt vừa dứt lời Dì Ghẻ phát Tấm lên mạng nên ngắt kết nối internet may mắn cho Tấm game Lựa Đậu game offline Và kể từ hơm đó, ngày Tấm dành thời gian để luyện game với hi vọng vượt qua thử thách Dì Ghẻ để dự hội 6.1 Phương pháp/thuật toán Để làm trò chơi Lựa Đậu, phải xác định đường hạt đậu (khi chọn hạt đậu chọn vào trống bảng) Có thể có nhiều cách để xác định đường Đồ án trình bày cách sử dụng thuật tốn Heuristic để tìm đường hạt đậu bảng 1.1 Xây dựng đồ thị Đưa ma trận cho trước danh sách điểm kề theo hình Sau thiết lập danh sách kề cách: - Lặp xét hết điểm ma trận - Tại điểm xét có tạo cạnh liên thơng với điểm lân cận tiến Vì thuật tốn có tính lặp nên xét 2điểm điểm lân cận xét tạo cạnh với điểm xét 1.2 Thuật toán Heuristic: 1.2.i Ý tưởng: Duyệt dần điểm đồ thị cách sau tới điểm, đánh dấu điểm tiếp tục duyệt điểm lân cận điểm Để duyệt điểm kề điểm tiến hành lặp để tìm kiếm có điểm dach sách kề hay không Heuristic dựa vào số tọa độ điểm với điểm đích với mong muốn với bước trùng với bước ngắn Tuy nhiên trường hợp heuristic sử dụng số bước tính tốn nhất, chí đơi lúc đường mà thuật heuristic tìm cịn dài thuật tốn vét cạn khác 1.2.ii Mơ thuật tốn Thực tìm kiếm heuristic danh sách {Điểm s điểm bắt đầu, điểm f điểm kết thúc} push s pathVisited(s) := isFound := false while () { pop x if (x == f) isFound := true r := pathVisited(x)+1 } Thực tìm đường đồ thị if (isFound=True) { tim := pathVisited(f) curPos = f trace(tim) := curPos while (pathVisited(curPos)) > { Lặp tìm điểm x lân cận curPos thỏa tim-1 if (pathVisited(x) = tim-1) { trace(tim-1) := x curPos := x tim := tim-1 } } } Kết trả : Độ dài đường : tim Đường : Mảng trace 1.2.iii Demo Kết : Minh họa trường hợp có chướng ngại vật : Cài đặt Các hàm xử lý Stack ' -Stack Dim stack(99) As Long Dim curPosStack As Long Private Sub initStack() curPosStack = -1 End Sub Private Function isEmptyStack() As Boolean If curPosStack = -1 Then Return True End If Return False End Function Private Sub pushStack(ByVal lVal As Long) curPosStack = curPosStack + stack(curPosStack) = lVal End Sub Private Function popStack() As Long If isEmptyStack() = False Then Dim lRes As Long lRes = stack(curPosStack) curPosStack = curPosStack - Return lRes Else Return -1 End If End Function ' - Tìm đường ngắn dựa vào bảng ma trận kết duyệt Heuristic Private Sub findPath(ByVal pFrom As Point, ByVal pTo As Point) 'Tìm kiếm sử dụng heuristic Dim pNext As Point Dim iCount As Integer 'Khởi tạo thêm giá trị điểm kề điểm bắt đầu For iCount = To pNext.x = pFrom.x + unitStep(iCount).x pNext.y = pFrom.y + unitStep(iCount).y If (pNext.x >= 0) And (pNext.x = 0) And (pNext.y = pTo.x) And (curPos.y >= pTo.y) Then 'Góc If (curPos.x - pTo.x) >= (curPos.y - pTo.y) Then ' |x |2 ' |1 x ' | |3 arrUnit(4) = arrUnit(3) = arrUnit(2) = arrUnit(1) = Else ' | x|1 ' |2 x ' | |4 arrUnit(4) = arrUnit(3) = arrUnit(2) = arrUnit(1) = End If ElseIf (curPos.x < pTo.x) And (curPos.y > pTo.y) Then 'Góc If (pTo.x - curPos.x) >= (curPos.y - pTo.y) Then ' | |2 x ' |4 x ' | |3 arrUnit(4) = arrUnit(3) = arrUnit(2) = arrUnit(1) = Else ' | |1x ' |3 x ' | |4 arrUnit(4) = arrUnit(3) = arrUnit(2) = arrUnit(1) = End If ElseIf (curPos.x = (pTo.y - curPos.y) Then ' | |3 ' |1 x ' |x |2 arrUnit(4) = arrUnit(3) = arrUnit(2) = arrUnit(1) = Else ' | |4 ' |2 x ' | x|1 arrUnit(4) = arrUnit(3) = arrUnit(2) = arrUnit(1) = End If End If For iCount = To Step -1 pNext.x = curPos.x + unitStep(arrUnit(iCount)).x pNext.y = curPos.y + unitStep(arrUnit(iCount)).y If isHaveCanh(curIndex, pos2index(pNext)) = True Then If pathVisited(pos2index(pNext)) = Then pushStack(pos2index(pNext)) pathVisited(pos2index(pNext))= pathVisited(pos2index(curPos)) + End If End If Next ' -Hết hàm Heuristic Loop tim = pathVisited(pos2index(pTo)) If isFounded = True Then 'Nếu tìm đường trace.iLen = tim ReDim trace.pos(trace.iLen) curIndex = iTo Do While pathVisited(curIndex) > For iCount = To lstGraph1.Items.Count - If (lstGraph1.Items(iCount) = curIndex) Or (lstGraph2.Items(iCount) =curIndex) Then 'Tìm điểm kề điểm If lstGraph1.Items(iCount) = curIndex Then iNext = Val(lstGraph2.Items(iCount)) Else iNext = Val(lstGraph1.Items(iCount)) End If If pathVisited(iNext) = tim - Then trace.pos(tim - 1) = index2pos(iNext) curIndex = iNext tim = tim - Exit For End If End If Next iCount Loop 'Tiến hành vẽ cờ di chuyển Dim iIndex As Integer For iCount = To trace.iLen - iIndex = pos2index(trace.pos(iCount)) pPixel(iIndex).Image = imgGo.Images.Item(0) Next Else trace.iLen = Dim iX As Integer Dim iTmp As Integer 'Xóa cạnh list iTmp = pos2index(pFrom) For iX = lstGraph1.Items.Count - To Step -1 If (lstGraph1.Items(iX) = iTmp) Or (lstGraph2.Items(iX) = iTmp) Then lstGraph1.Items.RemoveAt(iX) lstGraph2.Items.RemoveAt(iX) End If Next End If End Sub -HẾT ... đồ án /game Phương pháp /thuật toán TTNT áp dụng vào đồ án (lý thuyết) Cài đặt phương pháp /thuật toán TTNT vào đồ án TỔNG QUAN 1.1 Tóm tắt nội dung đồ án Game Lựa Đậu - Mô lại game. .. cho Tấm game Lựa Đậu game offline Và kể từ hơm đó, ngày Tấm dành thời gian để luyện game với hi vọng vượt qua thử thách Dì Ghẻ để dự hội 6.1 Phương pháp /thuật tốn Để làm trị chơi Lựa Đậu, phải... ra.Bụt liền đưa cho Tấm game Lựa Đậu dặn: “Để lựa đậu nhanh, ngày phải bỏ thời gian để luyện game này,nhiệm vụ phải hạt đậu giống thành hàng ngang hàng dọc, chéo hạt đậu tự động biến tự chui