Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 51 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
51
Dung lượng
1,15 MB
Nội dung
LỜI CẢM ƠN Lời em xin bày tỏ lòng biết ơn chân thành sâu sắc tới thầy, cô giáo trường Đại học sư phạm Hà Nội 2, đặc biệt thầy, cô giáo khoa Công nghệ Thông tin truyền đạt cho em kiến cần thiết bổ ích suốt trình học tập trường Luận văn tốt nghiệp hội em áp dụng, tổng kết lại kiến thức mà học Đồng thời rút kinh nghiệm thực tế quý giá suốt trình thực đề tài Trong thời gian để hoàn thành khóa luận em nhận hướng dẫn tận tình cô Lưu Thị Bích Hương với thầy, cô giáo bạn lớp K35-Tin học giúp em hoàn thành tốt khóa luận Là sinh viên lần đầu nghiên cứu khoa học chắn đề tài em không tránh khỏi thiếu sót, em mong đóng góp ý kiến thầy, cô giáo bạn để đề tài em hoàn thiện Một lần em xin chân thành cảm ơn công lao dạy dỗ bảo thầy, cô giáo Kính chúc quý thầy, cô giáo mạnh khỏe, tiếp tục đạt nhiều thắng lợi nghiên cứu khoa học nghiệp trồng người Em xin chân thành cảm ơn! Hà Nội, tháng năm 2013 Sinh viên Lê Thị Hạnh LỜI CAM ĐOAN Tên em là: LÊ THỊ HẠNH Sinh viên lớp: K35 - Tin học, khoa Công nghệ Thông tin, trường Đại học sư phạm Hà Nội Em xin cam đoan: Đề tài: "Một số thuật toán tìm đường ngắn xây dựng ứng dụng game Pikachu" nghiên cứu cua riêng em, hướng dẫn cô giáo Th.S Lưu Thị Bích Hương Khóa luận hoàn toàn không chép tác giả khác Nếu sai em xin hoàn toàn chịu trách nhiệm Hà Nội, tháng năm 2013 Sinh viên MỤC LỤC MỞ ĐẦU CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Giới thiệu ngôn ngữ Visual C# 10 1.2 Lịch sử phát triển trí tuệ nhân tạo 10 1.3 Tổng quan khoa học trí tuệ nhân tạo 11 1.4 Các khái niệm 12 1.5 Vai trò trí tuệ nhân tạo 13 1.6 Các kỹ thuật trí tuệ nhân tạo 14 1.7 Một số vấn đề trí tuệ nhân tạo quan tâm 16 CHƯƠNG 2: LÝ THUYẾT ĐỒ THỊ VÀ MỘT SỐ THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT 19 2.1 Lý thuyết đồ thị 19 2.1.1 Định nghĩa đồ thị 19 2.1.2 Định nghĩa đường đi, chu trình, đồ thị liên thông 22 2.2 Một số khái niệm 24 2.2.1 Mở đầu 24 2.2.2 Giải vấn đề phương pháp tìm kiếm 25 2.2.3 Biểu diễn vấn đề không gian trạng thái 26 2.2.4 Đường ngắn xuất phát từ đỉnh 27 2.2.5 Tìm kiếm đồ thị và/hoặc 28 2.3 Một số thuật toán tìm đường ngắn 28 2.3.1 Bài toán tìm đường ngắn 28 2.3.2 Thuật toán tìm kiếm theo chiều sâu (Depth First Search - DFS) 29 2.3.3 Thuật toán tìm kiếm theo chiều rộng (Breadth First Search) 32 2.3.4 Thuật toán tìm kiếm sâu dần 35 2.3.4 Thuật toán Dijkstra tìm đường ngắn 37 CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG GAME PIKACHU 41 3.1 Giới thiệu toán 41 3.2 Cấu trúc game Pikachu 41 3.3 Cách xây dựng game Pikachu 43 3.3.1 Cơ sở lý thuyết 43 3.3.2 Áp dụng thuật toán tìm kiếm theo chiều rộng 44 3.4 Một số giao diện kết chạy chương trình 46 3.4.1 Giao diện chương trình tạo 46 3.4.2 Giao diện chạy Auto Play 47 3.4.3 Giao diện người chơi tự chơi 48 KẾT LUẬN VÀ PHƯƠNG HƯỚNG PHÁT TRIỂN 49 TÀI LIỆU THAM KHẢO 51 MỞ ĐẦU Lý mục đích chọn đề tài Ngày nay, với phát triển vượt bậc khoa học kỹ thuật, đặc biệt phát triển Công nghệ Thông tin lĩnh vực có nhiều đóng góp thiết thực sống Máy tính điện tử trở thành công cụ đắc lực không giảm nhẹ sức lao động lao động trí tuệ mà trợ giúp cho người kiến thức trước khó hình dung Một ứng dụng máy tính lưu trữ liệu giúp cho nhà quản lý nắm bắt xử lý tình thông tin cách xác, kịp thời an toàn Trí tuệ nhân tạo lĩnh vực công nghệ thông tin ngành khoa học nghiên cứu phương thức để máy tính có khả tư suy nghĩ người Ngoài trí tuệ nhân tạo ngành nghiên cứu phương thức để giúp máy tính làm công việc mà thời điểm công việc mà người chưa làm hay không làm Một nghiên cứu đưa giải thuật tìm đường ngắn nhất, tối ưu phục vụ việc giải vấn đề toán cách nhanh Là sinh viên khoa Công nghệ Thông tin, trường Đại học sư phạm Hà Nội 2, với mong muốn nghiên cứu tìm hiểu sâu vấn đề này, bắt đầu làm quen với công việc nghiên cứu khoa học em chọn đề tài: “Một số thuật toán tìm đường ngắn xây dựng ứng dụng Game Pikachu” Đề tài xây dựng ngôn ngữ lập trình C# Microsoft Visual Studio 2008 với hệ quản trị sở liệu Microsoft SQL Sever 2005 Đối tượng phạm vi nghiên cứu 2.1 Đối tượng nghiên cứu Tìm hiểu số thuật toán tìm đường ngắn 2.2 Phạm vi nghiên cứu - Đề tài tập trung nghiên cứu số thuật toán tìm đường ngắn như: Thuật toán tìm kiếm theo chiều sâu, thuật toán tìm kiếm theo chiều rộng, thuật toán tìm kiếm sâu dần, thuật toán Dijkstra - Game Pikachu sử dụng thuật toán: Thuật toán tìm kiếm theo chiều rộng Nhiệm vụ nghiên cứu Tập trung tìm hiểu vấn đề sau: - Tìm hiểu trí tuệ nhân tạo - Tìm hiểu lý thuyết đồ thị - Tìm hiểu toán tìm đường ngắn - Tìm hiểu số thuật toán tìm đường ngắn - Tìm hiểu đường ngắn xuất phát từ đỉnh - Tìm hiểu ngôn ngữ lập trình C# - Xây dựng ứng dụng dựa ngôn ngữ lập trình C# để mô Phương pháp nghiên cứu 4.1 Phương pháp nghiên cứu lý luận Nghiên cứu qua việc đọc sách, báo tài liệu liên quan nhằm xây dựng sở lý thuyết đề tài biện pháp cần thiết để giải vấn đề đề tài 4.2 Phương pháp chuyên gia Tham khảo ý kiến chuyên gia Tin học để thiết kế chương trình phù hợp với yêu cầu thực tiễn, đáp ứng yêu cầu người sử dụng 4.3 Phương pháp thực nghiệm Thông qua quan sát thực tế, yêu cầu sở, lý luận nghiên cứu kết đạt qua phương pháp trên, chương trình đưa vào chạy thử để từ có điều chỉnh phù hợp Ý nghĩa khoa học thực tiễn đề tài Bài toán tìm đường ngắn toán quan trọng lý thuyết đồ thị, toán tìm lời giải tối ưu giải vấn đề cách nhanh Trong ứng dụng thực tế, toán tìm đường ngắn có ý nghĩa to lớn như: Bài toán chọn hành trình tiết kiệm theo tiêu chuẩn khoảng cách, thời gian chi phí mạng giao thông đường Bài toán chọn phương pháp tiết kiệm để đưa hệ thống động lực từ trạng thái xuất phát đến trạng thái đích Bài toán lập lịch thi công công đoạn công trình thi công lớn Bài toán lựa chọn đường truyền tin với chi phí nhỏ mạng thông tin… Cấu trúc khóa luận Ngoài phần mở đầu, kết luận phương hướng phát triển Nội dung khóa luận bao gồm chương: Chương 1: Cơ sở lý thuyết Chương 2: Lý thuyết đồ thị số thuật toán tìm đường ngắn Chương 3: Xây dựng ứng dụng game Pikachu CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Giới thiệu ngôn ngữ Visual C# Ngôn ngữ C# đơn giản, khoảng 80 từ khóa mười kiểu liệu xây dựng sẵn Tuy nhiên, ngôn ngữ C# có ý nghĩa cao thực thi khái niệm lập trình đại C# bao gồm tất hỗ trợ cho cấu trúc, thành phần component, lập trình hướng đối tượng Những tính chất diện ngôn ngữ lập trình đại Và ngôn ngữ C# hội đủ điều kiện vậy, xây dựng tảng hai ngôn ngữ mạnh C++ Java Ngôn ngữ C# phát triển đội ngũ kỹ sư Microsoft, người dẫn đầu Anders Hejlsberg Scott Wiltamuth Cả hai người người tiếng, Anders Hejlsberg biết đến tác giả Turbo Pascal, ngôn ngữ lập trình PC phổ biến Và ông đứng đầu nhóm thiết kế Borland Delphi, thành công việc xây dựng môi trường phát triển tích hợp (IDE) cho lập trình client/server Phần cốt lõi hay ngôn ngữ lập trình hướng đối tượng hỗ trợ cho việc định nghĩa làm việc với lớp Những lớp định nghĩa kiểu liệu mới, cho phép người phát triển mở rộng ngôn ngữ để tạo mô hình tốt để giải vấn đề Ngôn ngữ C# chứa từ khóa cho việc khai báo kiểu lớp đối tượng phương thức hay thuộc tính lớp, cho việc thực thi đóng gói, kế thừa, đa hình, ba thuộc tính ngôn ngữ lập trình hướng đối tượng Trong ngôn ngữ C# thứ liên quan đến khai báo lớp tìm thấy phần khai báo Định nghĩa lớp ngôn ngữ C# không đòi hỏi phải chia tập tin header tập tin nguồn giống ngôn ngữ C++ Hơn nữa, ngôn ngữ C# hỗ trợ kiểu XML, cho phép chèn tag XML để phát sinh tự động document cho lớp C# hỗ trợ giao diện interface, xem cam kết với lớp cho dịch vụ mà giao diện quy định Trong ngôn ngữ C#, lớp kế thừa từ lớp cha, tức không cho đa kế thừa ngôn ngữ C++, nhiên lớp thực thi nhiều giao diện Khi lớp thực thi giao diện hứa cung cấp chức thực thi giao diện Trong ngôn ngữ C#, cấu trúc hỗ trợ, khái niệm ngữ nghĩa thay đổi khác với C++ Trong C#, cấu trúc giới hạn, kiểu liệu nhỏ gọn, tạo thể yêu cầu hệ điều hành nhớ so với lớp Một cấu trúc kế thừa từ lớp hay kế thừa cấu trúc thực thi giao diện Ngôn ngữ C# cung cấp đặc tính hướng thành phần (component-oriented), thuộc tính, kiện Lập trình hướng thành phần hỗ trợ CLR cho phép lưu trữ metadata với mã nguồn cho lớp Metadata mô tả cho lớp, bao gồm phương thức thuộc tính nó, bảo mật cần thiết thuộc tính khác Mã nguồn chứa đựng logic cần thiết để thực chức Do vậy, lớp biên dịch khối self-contained, nên môi trường hosting biết cách đọc metadata lớp mã nguồn cần thiết mà không cần thông tin khác để sử dụng Ngôn ngữ C# hỗ trợ việc truy cập nhớ trực tiếp sử dụng kiểu trỏ C++ từ khóa cho dấu ngoặc [] toán tử Các mã nguồn không an toàn (unsafe) Và giải phóng nhớ tự động CLR không thực việc giải phóng đối tượng tham chiếu sử dụng trỏ chúng giải phóng 1.2 Lịch sử phát triển trí tuệ nhân tạo Lịch sử trí tuệ nhân tạo cho thấy ngành khoa học có nhiều kết đáng ghi nhận Theo mốc phát triển, người ta thấy trí tuệ nhân tạo sinh từ năm 50 với kiện sau: - Turing coi người khai sinh ngành trí tuệ nhân tạo phát ông máy tính lưu trữ chương trình liệu - Tháng 8/1956 J Mc Carthy, M Minsky, A Newell, Shannon Simon ,… đưa khái niệm “trí tuệ nhân tạo” - Vào khoảng năm 1960 Đại học MIT (Massachussets Institure of Technology) ngôn ngữ LISP đời, phù hợp với nhu cầu xử lý đặc trưng trí tuệ nhân tạo - ngôn ngữ lập trình dùng cho trí tuệ nhân tạo - Thuật ngữ trí tuệ nhân tạo dùng vào năm 1961 MIT - Những năm 60 giai đoạn lạc quan cao độ khả làm cho máy tính biết suy nghĩ Trong giai đoạn người ta chứng kiến máy chơi cờ chương trình chứng minh định lý tự động Cụ thể: + 1961: Chương trình tính tích phân bất định + 1963: Các chương trình Heuristics: Chương trình chứng minh định lý hình học không gian có tên “tương tự”, chương trình chơi cờ Samuel, tìm kiếm đường có giá thành cực tiểu +1964: Chương trình giải phương trình đại số sơ cấp, chương trình trợ giúp ELIZA (có khả làm việc giống chuyên gia phân tích tâm lý) + 1966: Chương trình phân tích tổng hợp tiếng nói + 1968: Chương trình điều khiển người máy (Robot) theo đồ án “Mát – tay”, chương trình học nói - Vào năm 60, giới hạn khả thiết bị, nhớ đặc biệt yếu tố thời gian thực nên có khó khăn việc tổng quát hoá kết cụ thể vào chương trình mềm dẻo thông minh 10 Độ phức tạp thuật toán Mỗi lần gọi thủ tục tìm kiếm sâu hạn chế tới mức d, tìm kiếm có nhân tố nhánh b số đỉnh cần phát triển là: + b + b2 +… + bd Nếu nghiệm độ sâu d tìm kiếm sâu dần gọi thủ tục sâu hạn chế với độ sâu 0, 1, 2,… , d Do đỉnh mức phải phát triển lặp d lần, đỉnh mức lặp d-1 lần ,…, đỉnh mức d lặp lần Như tổng số đỉnh cần phát triển tìm kiếm sâu dần là: (d+1)1 + db + (d-1)b2 + … + 2bd-1 + 1bd Vậy tìm kiếm sâu dần có độ phức tạp thời gian O(bd) (như tìm kiếm theo chiều rộng) độ phức tạp không gian O(bd) (như tìm kiếm theo chiều sâu) 2.3.5 Thuật toán Dijkstra tìm đường ngắn a Tư tưởng thuật toán Thuật toán Dijkstra cho phép tìm đường ngắn từ đỉnh s đến đỉnh đỉnh lại đồ thị chiều dài (trọng số) tương ứng Phương pháp thuật toán xác định đỉnh có chiều dài đến s theo thứ tự tăng dần Thuật toán xây dựng sở gán cho đỉnh nhãn tạm thời Nhãn tạm thời đỉnh cho biết cận chiều dài đường ngắn từ s đến đỉnh Nhãn đỉnh biến đổi bước lặp, mà bước lặp có nhãn tạm thời trở thành thức Nếu nhãn đỉnh trở thành thức chiều ngắn đường từ s đến đỉnh b Phân tích thuật toán Có thể giải toán cách xác định tập hợp S chứa đỉnh mà khoảng cách ngắn từ đỉnh đến đỉnh nguồn v biết Khởi đầu S=V Sau bước ta thêm vào S đỉnh mà khoảng cách từ đến v ngắn Với giả thiết cung có giá trị không âm ta luôn tìm đường ngắn mà qua đỉnh 37 tồn mảng C, tức C[i,j] giá trị (có thể xem độ dài) cung (i,j) Nếu i j cung nối ta cho C[i,j]=G Dùng mảng D gồm n phần tử để lưu độ dài đường ngắn từ v đến đỉnh đồ thị Khởi đầu giá trị độ dài cạnh (v,i), tức D[i]=C[v,i] Tại bước giải thuật D[i] lưu độ dài đường ngắn từ đỉnh v đến đỉnh i, đường qua đỉnh có mặt S Dùng ma trận kề để biểu diễn đồ thị C=(cij), cij = trọng số cung (i,j), cij =∞ cung (i,j) Một mảng d[] để ghi độ dài đường ngắn từ s tới đỉnh i có Xuất phát d[s] =0 d[i] =cij i kề s, d[j] =+ ∞ j không kề s c Giải thuật tìm đường ngắn Có nhiều giải thuật phát triển để giải toán tìm đường ngắn cặp đỉnh Giải thuật Dijkstra giải thuật để giải toán tìm đường ngắn nguồn đơn đồ thị có trọng số cạnh mà tất trọng số không âm Nó xác định đường ngắn hai đỉnh cho trước, từ đỉnh a đến đỉnh b Ở đỉnh v, giải thuật Dijkstra xác định thông tin: kv, dv pv kv: mang giá trị boolean xác định trạng thái chọn đỉnh v Ban đầu ta khởi tạo tất đỉnh v chưa chọn, nghĩa là: kv = false, v V dv: chiều dài đường mà ta tìm thấy thời điểm xét từ a đến v Khởi tạo, dv = , v V \{a}, da = pv: đỉnh trước đỉnh v đường ngắn từ a đến b Đường ngắn từ a đến b có dạng {a, ,pv,v, ,b} Khởi tạo, pv = null, v V Các bước giải thuật: Bước 1: Khởi tạo: Đặt kv:=false v V; dv:= ,v V \ {a}, da:=0 Bước 2: Chọn vV cho kv = false dv = {dt / t V, kt = false} Nếu dv=∞ kết thúc, không tồn đường từ a đến b 38 Bước 3: Đánh dấu đỉnh v, kv=true Bước 4: Nếu v=b kết thúc db độ dài đường ngắn từ a đến b Ngược lại quay lại bước Bước 5: Với đỉnh u kề với v mà ku=false, kiểm tra: Nếu du > dv + w(v,u) du:= dv + w(v,u) Ghi nhớ đỉnh v: pu:= v Quay lại bước d Thuật toán Thuật toán Dijkstra mô tả qua thủ tục sau: Đầu vào: Đồ thị có hướng G=(V,E) với n đỉnh, sV đỉnh xuất phát, a[u,v] V, ma trận trọng số Giả thiết a[u,v]>=0, u,vV Đầu ra: Khoảng cách từ đỉnh s đến tất đỉnh lại d[v], vV Procedure Dijkstra; Begin For vV Begin d[v]:=a[s,v] ; truoc [v]:=s; end; d[s]:=0; T:=V\{s}; while T≠Ø begin Tìm đỉnh uT thỏa mãn d[u]=min {d[z], zT} T:=T\{u}; For v T If d[v]>d[u] + a[u,v] then Begin d[v]:=d[u] + a[u,v]; Truoc[v]:=u; end; end; end; 39 Độ phức tạp thuật toán Dijkstra: - Ở bước lặp để tìm điểm u cần thực O(n) phép toán, để gán nhãn lại cần thực môt số lượng phép toán O(n) Thuật toán cần thực n-1 bước lặp Vậy độ phức tạp thuật toán O(n2) 40 CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG GAME PIKACHU 3.1 Giới thiệu toán Game Pikachu game có nguồn gốc từ Nhật Bản, gồm hình giống xếp hình chữ nhật gồm ô vuông xếp gần Nhiệm vụ người chơi phải tìm hình giống hình chữ nhật Game Pikachu game mô đơn giản, cách chơi dễ dàng Game coi game giải trí, thư giãn Hiện game Pikachu có mặt nhiều thiết bị di động, từ điện thoại java tới điện thoại chạy hệ điều hành Android, Windows Phone, ios Đã có nhiều phiên game Pikachu mô cải tiến, thay nhân vật game Game Pikachu trò đòi hỏi trí tuệ người, nhanh mắt, nhanh tay chuẩn xác với việc sử dụng chuột máy tính để tìm ô vuông có kí hiệu giống làm cho ô vuông ẩn Người chơi chiến thắng nối tất hình với Càng lên cao độ khó trò chơi tăng đòi hỏi người chơi phải thật nhanh tay nhanh mắt dành điểm số cao Mục đích game Pikachu tìm đường ngắn hai hình giống tối đa ba đường thẳng, tìm hết trước thời gian quy định thắng 3.2 Cấu trúc game Pikachu Luật chơi: Game mô game Pikachu, nhiệm vụ người chơi chọn hai hình giống nhau, đường rẽ hai lần nối với tối đa ba đoạn thẳng - Nếu hai hình giống rẽ hai lần hai hình ẩn 41 - Người chơi phải ẩn hết thời gian quy định, không người chơi thua Cấu trúc game Pikachu - Giao diện game ô vuông có tất 16x9 ô vuông Ma trận 16x9 để hiển thị hình, ma trận game 18x11 ô - Chọn 26 giá trị cho ô vuông Như game hiển thị ô vuông hình sử dụng mảng hai chiều 18x11 để lưu giá trị ô Trong game loại hình xuất bốn lần số lần xuất phải chẵn Như giái trị xuất ma trận 18x11 ô trống có giá trị -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 13 25 20 14 14 15 19 19 16 24 14 -1 16 21 -1 17 13 10 -1 16 17 14 11 14 18 21 25 10 18 25 13 15 12 20 -1 24 13 18 25 -1 12 11 24 13 20 -1 20 18 7 -1 16 -1 22 10 15 15 4 11 12 22 11 23 22 19 13 -1 18 17 -1 19 -1 14 10 21 10 21 16 -1 10 11 20 18 24 -1 15 26 15 12 12 20 12 19 31 11 -1 22 17 -1 26 17 17 19 26 23 23 23 -1 26 2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 Hình 3.1: Ma trận biểu diễn giá trị ô game Như vậy, viền bên trống để có đường hai hình 42 3.3 Cách xây dựng game Pikachu 3.3.1 Cơ sở lý thuyết Các đường game Pikachu: A A A B B B A A A A B B B A B A A A B B B B Hình 3.2: Một số đường game Pikachu Ý tưởng: Xuất phát từ điểm A B Làm để nối A với B tối đa đường thẳng? Từ điểm A duyệt tất hướng (các ô trống xung quanh).Tại B ta duyệt hướng tương tự A Mỗi phía duyệt sử dụng đường thẳng, vậy, đường thẳng, nên nối hướng kẻ thêm đường thẳng Đi theo đường từ A vừa duyệt Nếu gặp đường từ B tức có đường đi, ngược lại đường Còn theo đường từ B vừa duyệt gặp đường từ A có đường đi, ngược lại đường 43 3.3.2 Áp dụng thuật toán tìm kiếm theo chiều rộng Khi người chơi click chọn vào ô vuông thứ nhất: - Nếu click vào ô vuông thứ lưu lại vị trí ô vuông đánh dấu click chọn ô vuông thứ - Để chọn ô vuông thứ hai giống với ô vuông thứ nhất, áp dụng thuật toán tìm kiếm theo chiều rộng: + Tìm kiếm ma trận, hàng mức với ô thứ tìm thấy ô vuông có giá trị giống ô vuông thứ lưu lại + Nếu hàng mức với ô vuông thứ mà giá trị giống ô vuông ta chuyển xuống mức tiếp tục trình tìm kiếm tìm ô vuông có giá trị giống với ô vuông Khi click chọn vào ô vuông thứ hai: - Nếu hai ô vuông giống nối với tối đa ba đường thẳng hai ô vuông ẩn - Hai ô vuông có giá trị khác không làm - Hai ô vuông có giá trị hết đường đổi lại chơi - Hai ô vuông giống ẩn hết ô vuông qua chơi Có thể mô tả sau: - Khi ô vuông chọn, dùng biến lấy tọa độ mà chọn Sau đó: + Lưu vị trí chọn tính toán vị trí ma trận + Cho hệ thống biết người chơi chọn ô vuông + Vẽ lại game, lúc có khung vuông hình chọn + Dùng biến khác lưu tọa độ ô vuông thứ hai chọn Như game lấy kiện chọn tính toán vị trí ma trận - Quá trình tìm diễn giá trị hai vị trí nhau, sau đó: + Lưu lại hai giá trị 44 + Gán cho hai vị trí -1 để hai vị trí trống để hàm tìm đường đi + Gọi hàm tìm đường đưa vào tham số hai vị trí + Gán giá trị lại cho hai vị trí chọn (vì không tìm thấy đường không xóa hai hình này) + Khi hai hình chọn giống nối với không ba đường thẳng Khi tìm đường ngắn nhất: Số lượng ô vuông chọn giảm xuống hai Xóa hai ô vuông gán hai vị trí -1 Vẽ đường hai hình lại với cho game ngừng giây để người chơi nhìn thấy đường - Cứ tiếp tục số lượng ô vuông giảm xuống - Nếu chưa hết ô vuông mà hết đường đưa thông báo thay đổi chơi Tìm đường ngắn phần quan trọng game Pikachu quy định luật chơi game Để tìm đường ngắn game dùng thuật toán tìm kiếm theo chiều rộng Tìm vị trí từ ô vuông thứ sang ô vuông thứ hai: - Nếu vị trí chạy nằm vùng trống rẽ hai lần có đường sang vị trí ô vuông thứ hai - Nếu chạy đến ô vuông cần tìm lưu lại quãng đường so sánh quãng đường ngắn Mô tả thuật toán tìm kiếm theo chiều rộng để tìm đường ngắn nhât: - Nếu vị trí chạy khỏi ma trận game thoát - Nếu rẽ hai lần thoát - Tăng chiều dài lên đánh dấu lại vị trí qua không lại đường 45 - Nếu tìm đến ô vuông thứ hai kiểm tra xem chiều dài đường ngắn lưu lại đường - Nếu chưa tìm đường đến ô vuông thứ hai tiếp tục tìm kiếm mức ma trận Thuật toán chạy nhiều hướng khắp ma trận Chạy xong kiểm tra đường ngắn lưu lại đường Như tìm đường ngắn từ ô vuông thứ sang ô vuông thứ hai 3.4 Một số giao diện kết chạy chương trình 3.4.1 Giao diện chương trình tạo Hình 3.3: Giao diện chương trình tạo 46 3.4.2 Giao diện chạy Auto Play Chương trình tự động tìm hình giống nhau, nối lại, đường ngắn tìm kiếm theo chiều rộng Hình 3.4: Giao diện chạy Auto Play 47 3.4.3 Giao diện người chơi tự chơi Hình 3.5: Giao diện người chơi tự chơi 48 KẾT LUẬN VÀ PHƯƠNG HƯỚNG PHÁT TRIỂN Kết luận Sau thời gian tìm hiểu, nghiên cứu tài liệu với giúp đỡ nhiệt tình cô giáo Lưu Thị Bích Hương nhiều thầy, cô giáo khoa Công nghệ Thông tin trường Đại học sư phạm Hà Nội em hoàn thành khóa luận tốt nghiệp Qua đề tài “Một số thuật toán tìm đường ngắn xây dựng ứng dụng game Pikachu”, khóa luận đạt kết sau: - Tìm hiểu kiến thức lý thuyết đồ thị - Tìm hiểu toán tìm đường ngắn - Tìm hiểu số thuật toán tìm đường ngắn như: + Thuật toán tìm kiếm theo chiều rộng + Thuật toán tìm kiếm theo chiều sâu + Thuật toán tìm kiếm sâu dần + Thuật toán Dijkstra tìm đường ngắn - Xây dựng chương trình minh họa game Pikachu qua thuật toán tìm đường ngắn theo chiều rộng Hướng phát triển Luận văn xây dựng chương trình minh họa thuật toán tìm đường ngắn xây dựng ứng dụng game Pikachu, cụ thể thuật toán tìm kiếm theo chiều rộng, ứng dụng vào nhiều lĩnh vực thực tế trò chơi trí tuệ Tuy nhiên áp dụng tất thuật toán tìm đường ngắn để xây dựng game thuật toán phức tạp Hướng phát triển đề tài thời gian tới thực thêm số thuật toán tìm đường ngắn để xây dựng game Pikachu, cải tiến thuật toán nhằm giảm thời gian xử lý, thiết kế thêm số chức cho chương trình hoàn thiện hơn, thiết kế chương trình để phát triển môi trường mạng Tìm hiểu thêm 49 ngôn ngữ khác để viết game Pikachu Thiết kế giao diện thân thiện với người sử dụng hơn, hoàn thành phần thiếu sót hạn chế Em tiếp tục phát triển đề tài cách nghiên cứu thêm ngôn ngữ khác để kết hợp với công cụ ngôn ngữ lập trình C# nhằm làm cho giao diện đẹp hơn, thuận tiện với người sử dụng sản phẩm đóng gói trước tới tay người sử dụng Do thời gian thực không dài không thực tế nhiều nên luận văn em nhiều thiếu sót Em mong dẫn thêm thầy, cô giáo bạn bè 50 TÀI LIỆU THAM KHẢO [1] Ngọc Bích - Quỳnh Nga - Tường Thụy - C# dành cho người tự học - Nhà Xuất Bản Thông Tin Truyền Thông [2] Nguyễn Thanh Thủy - Trí Tuệ Nhân Tạo - Nhà Xuất Bản Giáo Dục, 1995 - 1999 [3] Đinh Mạnh Tường - Giáo trình trí tuệ nhân tạo - Nhà xuất khoa học kỹ thuật, 2002 [4] Nguyễn Ngọc Bình Phương - Thái Thanh Phong - Các giải pháp lập trình C# 51 [...]... đó một đường đi trong không gian trạng thái sẽ là một đường đi trong đồ thị 2.2.4 Đường đi ngắn nhất xuất phát từ một đỉnh Ý tưởng chung của các thuật toán tìm đường đi ngắn nhất: - Dò tìm bằng cách thử đi qua các đỉnh trung gian - Nếu phát hiện đường đi qua đỉnh trung gian ngắn hơn đường đi hiện tại thì sẽ cập nhật đường đi mới, đồng thời chỉnh sửa các thông tin liên quan Phần lớn các thuật toán tìm. .. được và quay lên cha của u Còn nếu từ u đi tới các đỉnh kề nó theo mọi toán tử đều gặp các đỉnh kề được đánh dấu không giải được, thì u được đánh dấu không giải được và quay lên cha của u 2.3 Một số thuật toán tìm đường đi ngắn nhất 2.3.1 Bài toán tìm đường đi ngắn nhất Để tìm kiếm đường đi từ trạng thái ban đầu tới trạng thái kết thúc trong không gian bài toán Giả sử rằng, tìm đường đi ngắn nhất từ... cạnh đi từ x tới y Đi ngược lại cho đến khi gặp đỉnh a, khi đó sẽ nhận được đường đi ngắn nhất cần tìm 2.3.2 Thuật toán tìm kiếm theo chiều sâu (Depth First Search - DFS) a Tư tưởng thuật toán Tìm kiếm theo chiều sâu là thuật toán duyệt hoặc tìm kiếm trên một cây hoặc một đồ thị Thuật toán khởi đầu tại gốc (hoặc chọn một đỉnh nào đó coi như gốc) và phát triển xa nhất có thể theo mỗi nhánh Thuật toán tìm. .. quyết vấn đề hay bài toán một cách hợp lý, trong khi đó một lớp lớn các bài toán có thể phát biểu và giải quyết dưới dạng tìm kiếm Sau đây là một số các bài toán: - Trò chơi: Nhiều trò chơi, ví dụ như cờ vua hay Pikachu thực chất là quá trình tìm kiếm nước đi bên trong số mà luật chơi cho phép - Tìm đường đi: Trong số những đường đi, lựa chọn đường đi tới đích, có thể thỏa mãn một số tiêu chí nào đó... trọng số trên các cung của nó (Chú ý rằng nếu gán trọng số cho tất cả các cung đều bằng 1, sẽ thu được định nghĩa độ dài đuờng đi như là số cung của đường đi) Bài toán tìm đường đi ngắn nhất trên đồ thị dưới dạng tổng quát có thể được phát biểu dưới dạng tổng quát như sau: Tìm đường đi có độ dài nhỏ nhất từ một đỉnh xuất phát s V đến đỉnh cuối (đích) t V Đường đi như vậy sẽ gọi là đường đi ngắn nhất. .. chuyển xuống mức sau để tiếp tục… đến khi tìm được lời giải nếu có Tìm kiếm theo chiều rộng là thuật toán tìm kiếm trên tất cả các nút của một mức trong không gian bài toán trước khi di chuyển sang các nút của mức tiếp theo Tìm kiếm theo chiều rộng chủ yếu được sử dụng để tìm đường đi ngắn nhất theo số cạnh giữa hai đỉnh của đồ thị b Phân tích thuật toán Thuật toán tìm kiếm theo chiều rộng thực ra là sự... hiệu quả hơn những thuật toán tìm đường đi ngắn nhất từ một đỉnh đến tất cả các đỉnh còn lại 2.2.5 Tìm kiếm trên đồ thị và/ hoặc Sử dụng kỹ thuật tìm kiếm trên đồ thị và/ hoặc để đánh dấu các đỉnh Các đỉnh sẽ được đánh dấu giải được hoặc không giải được theo định nghĩa đệ quy về đỉnh giải được và không giải được Xuất phát từ đỉnh ứng với bài toán ban đầu, đi xuống theo độ sâu hoặc đi sang hai bên theo... hiện khi cây tìm kiếm chứa nhánh vô hạn, và nếu sử dụng tìm kiếm theo độ sâu ta có thể mắc kẹt ở một nhánh nào đó (thuật toán không dừng) và không tìm ra nghiệm Vấn đề với giải thuật tìm kiếm với giới hạn độ sâu (DLS) Nếu tất cả các lời giải (các nút đích) nằm ở độ sâu l, thì giải thuật tìm kiếm sâu dần thất bại (không tìm được lời giải) b Giải thuật tìm kiếm sâu dần Áp dụng giải thuật tìm kiếm sâu... ra đường đi ngắn nhất Bài toán: Cho đồ thị G = (V, E) và hai đỉnh a, b Tìm đường đi ngắn nhất (nếu có) đi từ đỉnh a đến đỉnh b trong đồ thị G Thuật toán - Lần lượt gán nhãn cho các đỉnh của đồ thị, mỗi đỉnh không quá một lần, Có thể gán nhãn như sau: + Đỉnh a được gán nhãn là số 0 + Những đỉnh kề với đỉnh a được gán nhãn là số 1 + Những đỉnh kề với đỉnh đã được gán nhãn số 1, được gán nhãn số 2 + Tổng... thị như là một trường hợp riêng Trước hết cần chú ý rằng nếu biết khoảng cách từ s đến t, thì đường đi ngắn nhất từ s đến t, trong trường hợp trọng số không âm, có thể tìm một cách dễ dàng Để tìm đường đi, chỉ cần chú ý là đối với cặp đỉnh s,t V tuỳ ý (s t) luôn tìm được đỉnh v sao cho: d(s,t) = d(s,v) + a(v,t) Thực vậy, đỉnh v như vậy chính là đỉnh đi trước đỉnh t trong đường đi ngắn nhất từ s ... tài Một số thuật toán tìm đường ngắn xây dựng ứng dụng game Pikachu , khóa luận đạt kết sau: - Tìm hiểu kiến thức lý thuyết đồ thị - Tìm hiểu toán tìm đường ngắn - Tìm hiểu số thuật toán tìm đường. .. tạo - Tìm hiểu lý thuyết đồ thị - Tìm hiểu toán tìm đường ngắn - Tìm hiểu số thuật toán tìm đường ngắn - Tìm hiểu đường ngắn xuất phát từ đỉnh - Tìm hiểu ngôn ngữ lập trình C# - Xây dựng ứng dụng. .. Pikachu qua thuật toán tìm đường ngắn theo chiều rộng Hướng phát triển Luận văn xây dựng chương trình minh họa thuật toán tìm đường ngắn xây dựng ứng dụng game Pikachu, cụ thể thuật toán tìm kiếm