MỤC LỤC LỜI CAM ĐOAN LỜI CẢM ƠN MỤC LỤC DANH MỤC HÌNH DANH MỤC BẢNG PHẦN MỞ ĐẦU 1 CHƯƠNG 1: TỔNG QUAN VỀ CƠ SỞ LÝ THUYẾT 4 1.1. Tổng quan về lý thuyết đồ thị 4 1.1.1. Định nghĩa 4 1.1.2. Biểu diễn đồ thị trên máy tính 5 1.1.3. Ý nghĩa của lý thuyết đồ thị 9 1.2. Tổng quan về trí tuệ nhân tạo 10 1.2.1. Định nghĩa trí tuệ nhân tạo 10 1.2.2. Các nền tảng của trí tuệ nhân tạo 12 1.2.3. Các lĩnh vực trong trí tuệ nhân tạo 13 1.3. Giới thiệu về thuật toán A 17 1.3.1. Sơ lược các bài toán tìm đường đi ngắn nhất 17 1.3.2. Thuật toán A 18 CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 26 2.1. Phân tích yêu cầu 26 2.1.1. Bài toán 26 2.1.2. Mục tiêu cần đạt 26 2.2. Phân tích hệ thống thông tin 26 2.2.1. Xác định tác nhân và các chức năng của chương trình 26 2.2.2. Biểu đồ Use Case tổng quát 27 2.2.3. Biểu đồ tuần tự 28 2.2.4. Biểu đồ hoạt động 29 CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH GAME ỨNG DỤNG THUẬT TOÁN A 31 3.1. Giới thiệu về chương trình Game 31 3.2. Áp dụng thuật toán A vào Game 32 3.3. Xây dựng giao diện Game 34 3.3.1. Môi trường xây dựng 34 3.3.2. Giới thiệu về giao diện của Game 35 KẾT LUẬN VÀ KIẾN NGHỊ 37 HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI 38 TÀI LIỆU THAM KHẢO 39
TRƯỜNG ĐẠI HỌC TÀI NGUYÊN VÀ MÔI TRƯỜNG HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN LẬP TRÌNH GAME ỨNG DỤNG THUẬT TOÁN A* Hà Nội – Năm 2017 TRƯỜNG ĐẠI HỌC TÀI NGUYÊN VÀ MÔI TRƯỜNG HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN SINH VIÊN: NGUYỀN THỊ MY LINH LẬP TRÌNH GAME ỨNG DỤNG THUẬT TOÁN A* Chuyên ngành : Công nghệ thông tin Người hướng dẫn : Thạc sỹ Vũ Văn Huân Hà Nội – Năm 2017 LỜI CAM ĐOAN Những nội dung đồ án tốt nghiệp thành từ nghiên cứu thực trực tiếp hướng dẫn giảng viên hướng dẫn Thạc sỹ Vũ Văn Huân Đồ án thực hoàn toàn mới, thành riêng em, không chép theo đồ án tương tự Mọi tham khảo sử dụng đồ án trích dẫn nguồn tài liệu danh mục tài liệu tham khảo Mọi chép không hợp lệ, vi phạm quy chế nhà trường, em xin hoàn toàn chịu trách nhiệm Sinh viên thực Nguyễn Thị My Linh LỜI CẢM ƠN Trong suốt trình học tập Trường Đại Học Tài Nguyên Môi Trường Hà Nội, chúng em thầy cô giảng dạy, giúp đỡ truyền đạt nhiều kiến thức vô quý giá Ngoài ra, chúng em rèn luyện thân môi trường học tập đầy sáng tạo khoa học Đây trình quan trọng giúp em thành công bắt tay vào nghề nghiệp tương lai sau Em xin chân thành cảm ơn Ban giám hiệu nhà trường, Ban chủ nhiệm khoa công nghệ thông tin, toàn thể thầy cô tận tình giảng dạy trang bị cho em nhiều kiến thức bổ ích suốt trình học tập trường vừa qua Đây quãng thời gian vô hữu ích, giúp em trưởng thành lên nhiều hành trang quan trọng thiếu chuẩn bị trường công việc sau Đặc biệt em xin cảm ơn đến thầy Vũ Văn Huân, thầy tận tình giúp đỡ, trực tiếp bảo, hướng dẫn em suốt trình làm đồ án tốt nghiệp Trong thời gian làm việc với thầy, em không ngừng tiếp thu thêm nhiều kiến thức bổ ích mà học tập tinh thần làm việc thái độ nghiên cứu nghiêm túc, hiệu quả, điều cần thiết cho em trình học tập công tác sau Mặc dù cố gắng suốt trình thực tập làm đồ án, kinh nghiệm thực tế trình độ chuyên môn chưa nhiều nên em không tránh khỏi thiếu sót, em mong bảo, góp ý chân thành từ thầy, cô giáo tất bạn Em xin chân thành cảm ơn! Sinh viên thực Nguyễn Thị My Linh MỤC LỤC DANH MỤC CÁC CHỮ VIẾT TẮT Chữ viết tắt Tên tiếng anh Nghĩa tiếng việt AI Artificial intelligence Trí tuệ nhân tạo TTNT Trí tuệ nhân tạo DANH MỤC HÌNH DANH MỤC BẢNG PHẦN MỞ ĐẦU Tính cấp thiết đề tài Trí tuệ nhân tạo lĩnh vực gắn liền với ngành công nghệ thông tin, sản phẩm game trí tuệ nhân tạo xuất nhiều, trí tuệ nhân tạo trở nên quen thuộc dần với sống ngày Thuật toán A* thuật toán tìm kiếm đồ thị nhằm đưa lựa chọn tìm kiếm thông minh, tối ưu để thỏa mãn yêu cầu toán đưa Trên thực tế, người ta sử dụng thuật toán tìm kiếm tạo nên chương trình nhằm phục vụ cho thực tiễn nhiều chẳng hạn như: - Tạo nên trạng thái di chuyển thông minh an toàn cho - Robot Các chương trình tìm kiếm đối tượng định vị Các chức tìm kiếm đường ngắn đồ… Vậy nên em muốn đề xuất thực đề tài để hiểu rõ thuật toán tìm kiếm A* ứng dụng thuật toán vào chương trình Game cụ thể sử dụng thuật toán để tìm kiếm đường tới đích cách tối ưu Tổng quan đề tài nghiên cứu Đề tài hệ thống lại số sở lý thuyết đồ thị thuật toán tìm đường, từ áp dụng thuật toán tìm kiếm A* vào game Đề tài thực nhằm mục đích xây dựng hệ thống giải toán tìm kiếm đường thực tế dựa chiến lược tìm kiếm Heuristic xây dựng trò chơi ứng dụng thuật toán Mục đích nghiên cứu Mục đích tổng quát: - Tạo sản phẩm Game ứng dụng Thuật toán tìm kiếm A* mang tính trí tuệ nhân tạo phục vụ cho giải trí Mục tiêu cụ thể: - • • Hiểu rõ Lý thuyết đồ thị Thuật toán tìm kiếm A* Vận dụng tốt kiến thức lập trình tảng kỹ thuật lập trình để tạo sản phẩm Game ứng dụng thuật toán A* Đối tượng nghiên cứu phạm vi nghiên cứu Đối tượng nghiên cứu gồm có: - Lý thuyết đồ thị Trí tuệ nhân tạo Thuật toán A* Phạm vi nghiên cứu: - Tổng quan lý thuyết đồ thị trí tuệ nhân tạo Thuật toán A* Phương pháp nghiên cứu • • • • • • Lý thuyết: Tổng hợp kiến thức lý thuyết đồ thị tìm kiếm Tìm hiểu thuật toán tìm kiếm A* Phân tích thiết kế cho chương trình game Thực nghiệm: Ngôn ngữ lập trình: Java Công cụ lập trình: Phần mềm Eclipse Phầm mềm hỗ trợ phân tích thiết kế: Visual Paradigm Những đóng góp báo cáo Đồ án hoàn thành có đóng góp sau đây: - Hệ thống hóa vấn đề lý thuyết lý thuyết đồ thị, trí tuệ nhân - tạo Lý thuyết thuật toán A* Chương trình Game ứng dụng thuật toán A* Kết cấu báo cáo Đồ án gồm có chương sau: Chương 1: Tổng quan sở lý thuyết Chương trình bày tổng quan Lý thuyết đồ thị giới thiệu Trí tuệ nhân tạo Đồng thời đề cập giải thích thuật toán A* 1.1 Tổng quan lý thuyết đồ thị 1.2 Tổng quan trí tuệ nhân tạo 1.3 Giới thiệu thuật toán A* Chương 2: Phân tích thiết kế hệ thống Mô tả chức chương trình game xây dựng biểu đồ cần thiết Biểu đồ Use Case, biểu đồ Hoạt động, biểu đồ Tuần tự 2.1 Phân tích yêu cầu 2.2 Phân tích hệ thống thông tin Chương 3: Xây dựng chương trình Game ứng dụng thuật toán A* Trong chương giải thích việc áp dụng thuật toán vào game Demo chương trình Game 3.1 Giới thiệu chương trình Game 3.2 Áp dụng thuật toán A* vào Game 3.3 Xây dựng giao diện Game CHƯƠNG 1: TỔNG QUAN VỀ CƠ SỞ LÝ THUYẾT 1.1 Tổng quan lý thuyết đồ thị 1.1.1 Định nghĩa Lý thuyết đồ thị lĩnh vực có từ lâu có nhiều ứng dụng đại Những tư tưởng lý thuyết đồ thị đề xuất vào năm đầu kỷ 18 nhà toán học lỗi lạc người Thụy Sỹ Lenhard Eurler Chính ông người sử dụng đồ thị để giải toán tiếng cầu thành phố Konigsberg Năm 1852 Francis Guthrie đưa toán bốn màu vấn đề liệu với bốn màu tô màu đồ cho hai nước biên giới tô màu Bài toán xem khai sinh lý thuyết đồ thị giải sau kỷ vào năm 1976 Kennenth Appel Wolfgang Haken Trong toán học tin học, lý thuyết đồ thị (Graph Theory) nghiên cứu tính chất đồ thị (Graph) Một cách không thức, đồ thị tập đối tượng gọi đỉnh (hoặc nút) nối với cạnh (hoặc cung) Cạnh có hướng vô hướng Đồ thị thường vẽ dạng tập điểm (các đỉnh) nối với đoạn thẳng (các cạnh) Đồ thị (Graph) cấu trúc rời rạc gồm đỉnh cạnh nối đỉnh Đồ thị ký hiệu G = (V, E), đó: V tập đỉnh (vertex) E ⊆ V x V tập hợp cạnh (edge) Một số hình ảnh minh họa đồ thị (Hình 1.1) Hình 1.1 : Một số hình ảnh đồ thị a) 10 Các dạng đồ thị đặc biệt gồm có dạng phổ biến: Đơn đồ thị - Bước 0: Khai báo mảng liệu để lưu trữ nút, hướng đi, g(n) Khai báo mảng lưu nút đến chưa duyệt • Khai báo mảng lưu nút duyệt • Khai báo mảng lưu nút trước nút • Khai báo mảng lưu độ dài từ gốc đến nút xét (hàm g(n)) Bước 1: Chọn nút bắt đầu đích kết thúc • Lấy tọa độ ma (Ghost) làm điểm xuất phát start • Packman game đích cần đến des Bước 2: Tìm kiếm đường sử dụng thuật toán A* • - - while (true){ • • • Lấy danh sách chưa duyệt nút có value = curPos Gán curPos vị trí temp Nếu (temp == vị trí packman){ Đưa vị trí đích des = temp; Break; } • • Đánh dấu temp vị trí duyệt qua, tìm hướng cho curPos Nếu(!các vị trí duyệt){ Tính f(n); //với g(n) độ dài từ start đến nút xét Add vào queue; Lưu g(n), lưu hướng lưu nút trước nút xét; } while (start != vị trí tại) { Lấy vị trí nút trước nút tại; Lấy hướng nút đó;} return hướng đi; } Việc thực bước ý tưởng thuật toán code lớp GhostCoach (Xem hình 3.1) 42 H ình 3.1: Khai báo HashMap để lưu nút Hình 3.1 tương ứng với bước bước ý tưởng thuật toán Hình 3.2: Phần code tìm kiếm nút có f(n) nhỏ theo thuật toán A* 43 Hình 3.2 phần code tìm kiếm đường tương ứng với vòng while() Bước Hình 3.3: Phần code đưa đường theo thuật toán A* Phần code hình 3.3 đưa hướng sau tìm nút vòng while() Sau frame thuật toán thực lần nhân vật Packman game di chuyển nên đích đến thay đổi vị trí Hình 3.4: Hàm đánh giá Heuristic tính khoảng cách Hamming Euclid Con ma Game di chuyển theo hướng lấy Hàm đánh giá Heuristic phần code truyền vào tham số value, vị trí xét đích (Hình 3.4) Value giá trị g(n) tính khoảng cách từ điểm nguồn đến nút tại, h(n) khoảng cách từ nút đến đích Để tính khoảng cách h(n) hàm đánh giá Heuristic có 44 thể sử dụng theo cách tính khoảng cách Hamming tính theo khoảng cách Euclid Lấy tọa độ nút xét tọa độ đích áp dụng cách tính khoảng cách để tính h(n) Với hai điểm có tọa độ (x, y) (x’, y’), ta có: Công thức tính khoảng cách Hamming: |x – x’| + |y – y’| Công thức tính khoảng cách Euclid: 3.3 Xây dựng giao diện Game 3.3.1 Môi trường xây dựng - Công cụ: Game viết ngôn ngữ Java phần mềm Eclipse - Yêu cầu cấu hình: Hệ điều hành Window, Linux … 3.3.2 Giới thiệu giao diện Game a) Giao diện Menu vào Game: Hình 3.5: Giao diện chạy chương trình 45 Khi chạy Run() Project cửa sổ giao diện Menu hình 3.5, Menu gồm có chức Chơi game, Hướng dẫn Thoát game b) Giao diện Hướng dẫn Khi chọn Hướng dẫn Menu cửa sổ dẫn cho người chơi biết thông tin nhân vật game cách thức chơi Người chơi điều khiển nhân vật màu vàng cách phím mũi tên lên – xuống – phải – trái để ăn bóng lớn đồ Ăn hết bóng lớn góc chuyển sang khác Hình 3.6: Giao diện chọn xem Hướng dẫn c) 46 Giao diện Chơi game Hình 3.7: Hình ảnh chơi Game Khi lựa chọn chơi game, người chơi di chuyển để tránh va chạm với ma, ma đỏ di chuyển thông minh theo thuật toán A* để bắt packman người chơi Ăn bóng lớn cộng 50 điểm, ăn bóng nhỏ cộng điểm Phần điểm số thể dòng Score Khi hoàn thành nhiệm vụ ăn bóng to game cửa sổ thông báo người chơi qua cửa hỏi có muốn tiếp tục chơi hay không hình 3.8 47 Hình 3.8: Thông báo hoàn thành chơi Nếu người chơi lựa chọn Yes chuyển đến tiếp theo, lựa chọn No nhận thông báo kết thúc trò chơi hình 3.9, người chơi bấm OK cửa sổ game tắt, lúc cửa sổ Menu ban đầu d) 48 Hình 3.9: Thông báo người chơi không chọn chơi Khi người chơi bị thua game Khi người chơi bị ma đuổi kịp đụng vào ma, chương trình game thông báo với người chơi bạn bị thua đưa số điểm bạn đạt ván chơi vừa Hình 3.10: Thông báo người chơi thua game Sau nhận thông báo hình 3.10, người chơi bấm OK hỏi lựa chọn tiếp tục chơi lại hay không 49 Hình 3.11: Thông báo lựa chọn chơi tiếp hay thoát game Nếu người chơi lựa chọn chơi lại bấm Yes, sau bấm Yes cửa sổ game vừa chơi thua đóng lại cửa sổ game chơi Nếu người chơi lựa chọn không chơi lại bấm No, sau bấm No cửa sổ game đóng lại cửa sổ Menu game ban đầu e) Khi người chơi thắng game Khi hoàn thành đến cuối người chơi nhận thông báo chúc mừng hoàn thành trò chơi hình 3.12 50 Hình 3.12: Thông báo thắng game Ở đề tài game thời gian lực có hạn nên dừng lại map tương đương với game 51 KẾT LUẬN VÀ KIẾN NGHỊ KẾT LUẬN Đồ án tập trung nghiên cứu thuật toán A* việc tìm kiếm đường sử dụng hàm đánh giá f(n), từ ứng dụng thuật toán chương trình Game Nhân vật di chuyển tìm kiếm theo thuật toán A* thể linh hoạt việc tìm hướng cho tối ưu mặt thời gian Trong thời gian nghiên cứu hoàn thành báo cáo, em tìm hiểu vấn đề Lý thuyết đồ thị, lĩnh vực Trí tuệ nhân tạo Thuật toán tìm kiếm đường A*, cụ thể sau: - Hệ thống lại kiến thức tổng quan Lý thuyết đồ thị - Khái quát Trí tuệ nhân tạo lĩnh vực nghiên cứu Trí tuệ nhân tạo - Tìm hiểu thuật toán tìm kiếm A* sử dụng hàm đánh giá Heuristic f(n) áp dụng thuật toán A* vào Game KIẾN NGHỊ Do thời gian nghiên cứu có hạn, nên chương trình chưa hoàn thiện đầy đủ chức Phần mềm chưa thiết kế cách hoàn chỉnh mặt đồ họa giao diện Một số tính khác Lưu điểm, Ghi danh,… chưa đưa vào để hoàn thiện 52 HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI Hướng phát triển đề tài xây dựng chương trình hoàn thiện chức năng, khả liên kết phần…để đưa vào sử dụng giải trí thực tế, tiếp cận với người chơi Thực tối ưu giao diện thiết kế cách khoa học, chặt chẽ Tạo nhiều đồ game, tăng mức độ khó theo chơi Xử lí âm hình ảnh đặc sắc Tối ưu hóa code, xây dựng hệ thống bảo mật tốt để Game an toàn bảo mật Trong tương lai Game xây dựng nhiều ngôn ngữ lập trình khác, liên kết mạng có thể: Chia sẻ điểm số, Ghi danh, Xếp hạng… để tăng sức hấp dẫn thêm cho Game thu hút nhiều đối tượng chơi Bên cạnh đó, việc lấy tảng cốt lõi thuật toán A* để phát triển chương trình tìm kiếm chiến lược cao có tiềm lớn Các ứng dụng tìm kiếm đồ lĩnh vực giao thông, du lịch… Hay chương trình hoạt động di chuyển tìm đường an toàn tối ưu Robot không gian định… Nếu tích lũy đủ lực kinh nghiệm việc phát triển ứng dụng nêu thuật toán tìm kiếm A* nói riêng thuật toán tìm kiếm nói chung có ý nghĩa lớn Tổng kết, có nhiều hạn chế việc tìm hiểu xây dựng chương trình với kết đạt giúp em có thêm khả nghiên cứu trí tuệ nhân tạo nâng cao trình độ lập trình với ngôn ngữ Java Tìm tòi nguồn tài liệu nước nước kiến thức hỗ trợ cho đề tài, học hỏi kỹ xử lý đồ họa game, cách thức mô thuật toán tìm kiếm vào code, triển khai thuật toán ứng dụng cụ thể… 53 Từ tích lũy thời gian làm đề tài hướng tới việc phát xây dựng ứng dụng với nhiều chức năng, tiện ích phong phú sau Chương trình game tiếp tục phát triển hướng tới trò chơi giải trí nhiều phiêu lưu, gay cấn qua chơi có đầy đủ chức cần thiết cho trò chơi 54 TÀI LIỆU THAM KHẢO [1] Đặng Nguyễn Đức Tiến, 2009, Giáo trình Lý thuyết đồ thị, Trường Đại học Khoa học Tự nhiên Thành Phố Hồ Chí Minh [2] Nguyễn Nhật Quang, 2010, Bài giảng Trí tuệ nhân tạo, Trường Đại học Bách Khoa Hà Nội [3] R.E Bellman, 1978, An Introduction to Artificial Intelligence: Can Computers Think? [4] R.Kurzweil, 1990, The Age of Intelligent Machines [5] E.Rich and K Knight, 1991, Artigicial Intelligence, Second Edition [6] P H Winston, 1992, Artigicial Intelligence, Third Edition [7] Wichit Sombat, 2012 The Making of Packman - design/make the maze, http://youtube.com/watch?v=Q11X6aaaESM [8] Trần Minh Luân, 2014 Hướng dẫn code thuật toán để tìm đường mê cung, http://diendan.congdongcviet.com/threads/t203930::huongdan-code-thuat-toan-a-de-tim-duong-trong-me-cung.cpp [9] Một số hình ảnh đồ họa game lấy từ Google Code Archive Paul - Gramming, https://code.google.com/archive/p/paulgramming/downloads 55 56