LẬP TRÌNH DI ĐỘNG và bài TOÁN ỨNG DỤNG GAME bắn XE TĂNG
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM KHOA CÔNG NGHỆ THÔNG TIN KHĨA LUẬN TỐT NGHIỆP LẬP TRÌNH DI ĐỘNG VÀ BÀI TOÁN ỨNG DỤNG “GAME BẮN XE TĂNG” Giảng viên hướng dẫn : Thạc sĩ PHẠM ĐỨC THÀNH Sinh viên thực : NGUYỄN HOÀNG ANH TÚ – 3.09.01.675 HUỲNH NHỰT PHƯƠNG – 3.09.01.337 Ngành : CƠNG NGHỆ PHẦN MỀM Khóa : 2009 - 2012 Tp Hồ Chí Minh, tháng năm 2012 MỞ ĐẦU Research2guidance dự đoán thị trường ứng dụng cho điện thoại di động có tốc độ tăng trưởng nhanh vòng vài năm tới Lợi nhuận tăng gấp lần sau năm, từ 1,95 tỉ USD năm 2009 lên 15,65 tỉ USD năm 2013 Ngồi việc dự đốn mức tăng trưởng lợi nhuận Research2guidance dự đốn số người dùng smartphone năm tới, yếu tố giúp thị trường ứng dụng cho di động tăng trưởng Theo đó, số người dùng smartphone tăng từ 100 triệu người năm 2009 lên tỉ người năm 2013 Điện thoại thông minh phát triển mạnh Việt Nam đánh giá thiên đường nhà phát triển ứng dụng di động Hệ điều hành Windows Phone hệ điều hành có nhiều thú vị với thị trường Việt Nam Thị trường Windows Phone phát triển rộng tiềm Các ứng dụng Windows Phone trọng phát triển mảnh đất màu mỡ cho nhà phát triển ứng dụng cho dòng Smartphone Có điều dễ dành nhận thấy Việt Nam “mỏ” cho thị trường game di động - với 11 triệu thuê bao điện thoại tốc độ tăng trưởng đạt mức cao Đây thực mảnh đất màu mỡ khơng cho nhà cung cấp game nói riêng mà cho nhà cung cấp dịch vụ nội dung nói chung Điểm đáng ghi nhận nhà cung cấp trò chơi cho điện thoại cố gắng thu hút khách hàng nhiều hình thức khác có việc cung cấp ngày nhiều trị có nội dung hấp dẫn với hình ảnh đẹp âm chất lượng cao LỜI CẢM ƠN Kính Thưa thầy cô khoa Công nghệ thông tin thầy Phạm Đức Thành giáo viên hướng dẫn bạn học khóa Vậy thấm năm học kể từ ngày chúng em vừa chập chững bước chân vào ngơi trường hồn tồn xa lạ Cao đẳng Công Nghệ Thông Tin Nhưng chúng em phải nói lời chia tay với thầy cơ, bạn bè ngơi trường gắn bó với khoảng thời gian dài Chúng ta phải bước qua ngưỡng cửa khác đời Chúng em ln quan niệm thành cơng chúng em tương lai không nỗ lực thân chúng em mà tận tâm dẫn từ thầy cô bạn bè Đầu tiên, chúng em xin gửi lời cám ơn chân thành đến tồn thầy Khoa Cơng Nghệ Thông Tin Trong nhiều năm qua, thầy cô người thầy cô tận tâm ưu tú giảng dạy Thầy cô giúp chúng em nhiều đường chinh phục miền tri thức vô tận Chúng em xin cám ơn thầy Phạm Đức Thành nhận trọng trách vất vả giáo viên hướng dẫn cho chúng em suốt thời gian qua Thành chúng em đạt qua đề án nhờ phần không nhỏ công sức thầy Chúc thầy nhiều sức khỏe thành công đường cao mà thầy lựa chọn Cuối quan trọng nhất, chúng xin dành tất tri ân biết ơn cho gia đình yêu quý, nơi sinh người, tài nhiệt huyết chúng em Xin cám ơn người đóng góp thầm lặng cho thành chúng em ngày hôm Một lần nữa, chúng em xin cám ơn tất người, chúc người dồi sức khỏe Chúc cho khóa học kết thúc tốt đẹp Chúc cho Công nghệ thông tin Việt Nam mau chóng sánh ngang cường quốc năm châu giới TP Hồ Chí Minh, tháng 07 năm 2012 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN MỤC LỤC MỞ ĐẦU LỜI CẢM ƠN CHƯƠNG : WINDOWS PHONE VÀ CÔNG NGHỆ SILVERLIGHT 1.1 Giới thiệu 1.2 Lịch sử phiên phát triển Windows Phone 1.3 Kiến trúc 1.4 Vòng đời phát triển ứng dụng Windows Phone 1.4.1 Bắt đầu với App Hub 1.4.2 Thiết kế ứng dụng sản sinh gói ứng dụng .5 1.4.3 Gỡ lỗi ứng dụng 1.4.4 Xuất ứng dụng 1.4.5 Quản lý xuất ứng dụng 1.5 Giới thiệu công nghệ Silverlight .6 1.5.1 Tổng quan 1.5.2 Silverlight ? 1.5.3 Các đặc tính Silverlight 1.6 Nghiên cứu công nghệ Silverlight 10 1.6.1 Kiến trúc tổng thể thành phần Siverlight 10 Bảng 1.3 Bảng mô tả Net Framework cho Silverlight 15 1.6.2 Các phiên mơ hình lập trình Silverlight 15 CHƯƠNG : GIỚI THIỆU NỀN TẢNG XNA 19 2.1 Tổng quan XNA .19 2.1.1 XNA ? 19 2.1.2 Tại nên sử dụng XNA ? .19 2.1.3 Các phiên XNA 19 2.2 Kiến trúc XNA .21 2.2.1 Kiến trúc XNA 21 2.3 Các thành phần XNA 23 CHƯƠNG : GIỚI THIỆU BÀI TOÁN ỨNG DỤNG “GAME BẮN XE TĂNG” 25 3.1 Phát biểu toán 25 3.1.1 Khảo sát trạng 25 3.1.2 Xác định yêu cầu hệ thống : 27 3.1.3 Cốt truyện trò chơi 29 3.2 Mơ hình Usecase 30 3.2.1 Sơ đồ Use-case 30 3.2.2 Danh sách Actor 31 3.2.3 Danh sách Use-case 31 3.2.4 Đặc tả Use-case 32 CHƯƠNG : THIẾT KẾ CHƯƠNG TRÌNH 42 4.1 Hồ sơ phân tích 42 4.1.1 Sơ đồ lớp 42 4.1.2 Sơ đồ trạng thái: 46 4.2 Thiết kế liệu 48 4.2.1 Mô tả cấu trúc file dùng để lưu trữ 48 4.2.2 Ví dụ nội dung tập tin lưu trữ .48 4.3 Thiết kế kiến trúc 49 4.3.1 Kiến trúc hệ thống .49 4.3.2 Mô tả chi tiết thành phần 49 4.4 Thiết kế giao diện 51 4.4.1 Danh sách hình 51 4.4.2 Mô tả chi tiết hình 52 CHƯƠNG : KẾT LUẬN 55 5.1 Về mặt lý thuyết 55 5.2 Về mặt ứng dụng 55 5.3 Hướng phát triển: 56 PHỤ LỤC 56 Ưu điểm sử dụng mơ hình layer : 93 DANH MỤC CÁC HÌNH, BẢNG BIỂU VÀ SƠ ĐỒ Hình 1.1 Kiến trúc Windows Phone Application Platform .3 Hình 1.2 Vịng đời phát triển ứng dụng Windows Phone Hình 1.3 Kiến trúc tổng thể thành phần Silverlight .10 Hình 2.1 Cấu trúc XNA 20 Hình 2.2 Pipeline Content .21 Hình 2.3 Hệ trục tọa độ 2D .24 Hình 2.4 Hệ trục toa độ hệ thống 24 Hình 3.1 Hình ảnh đồ game vị trí xếp xe tăng 26 Hình 3.2 Sơ đồ Use case game XE TĂNG .29 Hình 3.3 Sơ đồ Use case “Vào trò chơi” 31 Hình 3.4 Sơ đồ Use case “Phát sinh đồ” 32 Hình 3.5 Sơ đồ Use case “Phát sinh xe tăng địch” 33 Hình 3.6 Sơ đồ Use case “Xe tăng địch di chuyển” 34 Hình 3.7 Sơ đồ Use case “Xe tăng địch bắn đạn” 35 Hình 3.8 Sơ đồ Use case “Di chuyển xe tăng mình” 35 Hình 3.9 Sơ đồ Use case “Bắn đạn” 36 Hình 3.10 Sơ đồ Use case “Phá hủy chướng ngại vật” 37 Hình 3.11 Sơ đồ Use case “Bắn chết xe tăng địch” 38 Hình 3.12 Sơ đồ Use case “Xem hướng dẫn” 39 Hình 3.13 Sơ đồ Use case “Thiết lập tùy chọn” 39 Hình 4.1 Sơ đồ lớp game XE TĂNG 41 Hình 4.2 Sơ đồ trạng thái lớp BẢN ĐỒ 45 Hình 4.3 Sơ đồ trạng thái lớp VIÊN ĐẠN 45 Hình 4.4 Sơ đồ trạng thái lớp XE TĂNG 46 Hình 4.5 Sơ đồ trạng thái lớp VẬT PHẨM 46 Hình 4.6 Sơ đồ kiến trúc hệ thống 48 Hình 4.7 Sơ đồ class GUI 48 Hình 4.8 Sơ đồ class BUS .49 Hình 4.9 Sơ đồ class DTO .50 Hình 4.10 Giao diện menu 51 Hình 4.11 Giao diện chơi game .52 Hình 4.12 Giao diện Thông tin 53 Hình 4.13 Giao diện Tùy Chọn .54 Hình 6.1 Hướng dẫn tạo Project 57 Hình 6.2 Chọn loại ứng dụng 57 Hình 6.3 Giao diện tạo xong Project 58 Hình 6.4 Mơ tả control Image 60 Hình 6.5 Mơ tả control Button 60 Hình 6.6 Miêu tả control TextBlock .61 Hình 6.7 Miêu tả control ProgressBar .61 Hình 6.8 Miêu tả control Slider .62 Hình 6.9 Demo vẽ Sprite 65 Hình 6.10 Demo vẽ với SpriteBatch 67 Hình 6.11 Giao diện ứng dụng 76 Hình 6.12 Giao diện công cụ MapDesigner 79 Hình 6.13 Cây thư mục ứng dụng 92 Bảng 1.1 Bảng mô tả thành phần Silverlight 11 Bảng 1.2 Bảng tảng sở Silverlight .13 Bảng 1.3 Bảng mô tả Net Framework cho Silverlight 14 Bảng 3.1 So sánh phần mềm game Xe tăng .25 Giới thiệu Thuật tốn tìm đường ngắn A* ứng dụng vào “Game bắn xe tăng”: 6.1 Giới thiệu Thuật toán tìm đường ngắn A*: A* phiên đặc biệt A KT áp dụng cho trường hợp đồ thị Thuật giải A* có sử dụng thêm tập hợp CLOSE để lưu trữ trường hợp xét đến A * mở rộng A KT cách bổ sung cách giải trường hợp "mở" nút mà nút có sẵn OPEN CLOSE Khi xét đến trạng thái Ti bên cạnh việc lưu trữ giá trị g,h’, f’ để phản ánh độ tốt trạng thái đó, A* cịn lưu trữ thêm hai thơng số sau : 1) Trạng thái cha trạng thái Ti (ký hiệu Cha(Ti) : cho biết trạng thái dẫn đến trạng thái Ti Trong trường hợp có nhiều trạng thái dẫn đến T i chọn Cha(Ti) cho chi phí từ trạng thái khởi đầu đến Ti thấp nhất, nghĩa : g(Ti) = g(Tcha) + cost(Tcha, Ti) thấp 2) Danh sách trạng thái Ti : danh sách lưu trữ trạng thái Tk Ti cho chi phí đến Tk thơng qua Ti từ trạng thái ban đầu thấp Thực chất danh sách tính từ thuộc tính Cha trạng thái lưu trữ Tuy nhiên, việc tính tốn nhiều thời gian (khi tập OPEN, CLOSE mở rộng) nên người ta thường lưu trữ danh sách riêng Trong thuật toán sau đây, không đề cập đến việc lưu trữ danh sách Sau hiểu rõ thuật toán, bạn đọc dễ dàng điều chỉnh lại thuật tốn để lưu trữ thêm thuộc tính 84 Đặt OPEN chứa T0 Đặt g(T0) = 0, h’(T0) = f’(T0) = Đặt CLOSE tập hợp rỗng Lặp lại bước sau gặp điều kiện dừng 2.a Nếu OPEN rỗng : tốn vơ nghiệm, 2.b Ngược lại, chọn Tmax OPEN cho f’(Tmax) nhỏ 2.b.1 Lấy Tmax khỏi OPEN đưa Tmax vào CLOSE 2.b.2 Nếu Tmax TG thơng báo lời giải Tmax 2.b.3 Nếu Tmax TG Tạo danh sách tất trạng thái Tmax Gọi trạng thái Tk Với Tk, làm bước sau : 2.b.3.1 Tính g(Tk) = g(Tmax) + cost(Tmax, Tk) 2.b.3.2 Nếu tồn Tk’ OPEN trùng với Tk Nếu g(Tk’ ) < g(Tk’) đặt g(Tk’) = g(Tk) Tính lại f’(Tk’) đặt Cha(Tk’) = Tmax 2.b.3.3 Nếu tồn Tk’ CLOSE trùng với Tk Nếu g(Tk) < g(Tk’) đặt g(Tk’) = g(Tk) Tính lại f’(Tk’) đặt Cha(Tk’) = Tmax Lan truyền thay đổi giá trị g, f’ cho tất trạng thái Ti (ở tất cấp) lưu trữ CLOSE OPEN 2.b.3.4 Nếu Tk chưa xuất OPEN lẫn CLOSE : Thêm Tk vào OPEN Tính : f' (Tk) = g(Tk)+h’(Tk) Có số điểm cần giải thích thuật giải Đầu tiên việc sau tìm thấy trạng thái đích TG, để xây dựng lại "con đường" từ T đến TG Rất đơn giản, bạn cần lần ngược theo thuộc tính Cha trạng thái lưu trữ CLOSE đạt đến T0 Đó "con đường" tối ưu từ TG đến T0 (hay nói cách khác từ T0 đến TG) Điểm thứ hai thao tác cập nhật lại g(Tk’) , f’(Tk’) Cha(Tk’) bước 2.b.3.2 2.b.3.3 Các thao tác thể tư tưởng : "luôn chọn đường tối ưu nhất" Như biết, giá trị g(Tk’) nhằm lưu trữ chi phí tối ưu thực tính từ T0 đến Tk’ Do đó, phát thấy "con đường" khác tốt thơng qua Tk (có chi phí nhỏ hơn) đường lưu trữ ta phải chọn "con đường" tốt Trường hợp 2.b.3.3 phức tạp Vì từ Tk’ nằm tập CLOSE nên từ Tk’ ta lưu trữ trạng thái xuất phát từ Tk’ Nhưng g(Tk’) thay đổi dẫn đến giá trị g trạng thái phải thay đổi theo Và đến lượt trạng thái lại có các trạng thái chúng nhánh kết thúc với trạng thái OPEN (nghĩa khơng có trạng thái nữa) Để thực trình cập nhật này, ta thực trình duyệt theo chiều sâu với điểm khởi đầu Tk’ Duyệt đến đâu, ta cập nhật lại g trạng 85 thái đến ( dùng cơng thức g(T) = g(Cha(T)) +cost(Cha(T), T) ) giá trị f’ trạng thái thay đổi theo Một lần nữa, xin nhắc lại rằng, bạn cho tập OPEN lưu trữ trạng thái "sẽ xem xét đến sau" tập CLOSE lưu trữ trạng thái "đã xét đến rồi" 6.2 Ứng dụng thuật toán A* vào “Game bắn xe tăng”: Lớp CInfoNode.cs : namespace SiXnaBanXeTank.DTO { /// /// Lớp node (Nút), sử dụng danh sách liên kết /// public class CInfoNode { /// /// Khoảng cách từ đỉnh xét đến đỉnh bắt đầu /// public float G { get; set; } /// /// Khoảng cách từ đỉnh xét đến đỉnh kết thúc /// public float H { get; set; } /// /// Tổng G với H /// public float F { get; set; } /// /// Tọa độ đỉnh xét /// public Vector2 ViTri { get; set; } /// /// Nút chứa thông tin đỉnh cha /// public CInfoNode DinhCha { get; set; } /// /// Nút chứa thông tin đỉnh /// public CInfoNode DinhTiepTheo { get; set; } /// /// Phương thức khởi tạo /// public CInfoNode() { this.G = this.H = this.F = 0; this.ViTri = Vector2.Zero; this.DinhCha = null; this.DinhTiepTheo = null; } /// /// Phương thức khởi tạo /// /// Tọa độ đỉnh xét public CInfoNode(Vector2 viTri) { 86 this.G = this.H = this.F = 0; this.ViTri = viTri; this.DinhCha = null; this.DinhTiepTheo = null; } } /// /// Phương thức khởi tạo /// /// Tọa độ đỉnh xét /// Nút chứa thông tin đỉnh cha public CInfoNode(Vector2 viTri, CInfoNode dinhCha) { this.G = this.H = this.F = 0; this.ViTri = viTri; this.DinhCha = dinhCha; this.DinhTiepTheo = null; } } Lớp CBusAstar.cs : namespace SiXnaBanXeTank.BUS { /// /// Thuật tốn tìm đường ngắn nhất: A* /// public class CBusAstar { CBusList _listChuaDuyet, //Danh sách đỉnh chưa duyệt _listDaDuyet; //Danh sách đỉnh duyệt Vector2[] _viTriDinhKe; //Mảng đỉnh kề với đỉnh xét int _phe; //0: xe tank ta, 1: xe tank địch /// /// Phương thức khởi tạo /// public CBusAstar(int phe) { _listChuaDuyet = new CBusList(); _listDaDuyet = new CBusList(); _viTriDinhKe = new Vector2[4] { new Vector2(-1f, 0f), //Đỉnh kề bên trái đỉnh xét new Vector2(0f, -1f), //Đỉnh kề bên đỉnh xét new Vector2(1f, 0f), //Đỉnh kề bên phải đỉnh xét new Vector2(0f, 1f) //Đỉnh kề bên đỉnh xét }; _phe = phe; } /// /// Phương thức tính khoảng cách đỉnh (tính theo chu vi hình chữ nhật) /// /// Tọa độ đỉnh xét (tính theo dịng/cột) /// Tọa độ đỉnh đích (tính theo dịng/cột) /// Khoảng cách đỉnh. float KhoangCach(Vector2 dinhDangXet, Vector2 dinhDich) { 87 return Math.Abs(dinhDangXet.X - dinhDich.X) + Math.Abs(dinhDangXet.Y - dinhDich.Y) - 1; } /// /// Phương thức kiểm tra tra tọa độ đỉnh xét có nằm phạm vi đồ hay không /// /// Tọa độ đỉnh xét /// True (Hợp lệ), false (Không hợp lệ) bool viTriHopLe(Vector2 viTri) { return (viTri.X * CInfoBanDo.RongTile) >= && ((viTri.X + 1) * CInfoBanDo.RongTile) = && ((viTri.Y + 1) * CInfoBanDo.CaoTile) node.F) cnode = node; } } /// 89 /// Phương thức trả đường ngắn /// /// Danh sách đỉnh duyệt /// Danh sách đỉnh duyệt List DuongDi(CBusList list) { List _duongDi = new List(); CInfoNode nodeHienTai = list.Tail; //Duyệt ngược danh sách chứa đỉnh duyệt thêm vào danh sách đỉnh (Đi từ điểm bắt đầu đến đỉnh kết thúc) - Đường while (nodeHienTai != null) { _duongDi.Add(nodeHienTai.ViTri); nodeHienTai = nodeHienTai.DinhCha; } return _duongDi; } /// /// Phương thức tìm đường ngắn với thuật toán A* /// /// Đỉnh bắt đầu /// Đỉnh kết thúc /// Danh sách đỉnh duyệt (Đường ngắn nhất). public List AStar(Vector2 dinhBatDau, Vector2 dinhKetThuc) { CInfoNode nodeBatDau = new CInfoNode(dinhBatDau), //Khai báo khởi tạo nút chứa đỉnh bắt đầu nodeKetThuc = new CInfoNode(dinhKetThuc); //Khai báo khởi tạo nút chứa đỉnh kết thúc CInfoNode diemDangXet; đỉnh xét //Nút chứa CInfoNode[] cacDinhKe; đỉnh kề với đỉnh xét //Mảng Vector2 diemDung = dinhBatDau; dừng = điểm kết thúc trình tìm đường kết thúc //Nếu điểm _listChuaDuyet = new CBusList(); //Khởi tạo danh sách đỉnh chưa duyệt _listDaDuyet = new CBusList(); //Khởi tạo danh sách đỉnh duyệt //Làm danh sách đỉnh chưa duyệt danh sách đỉnh duyệt if (_listChuaDuyet.Head != null || _listDaDuyet.Head != null) { _listChuaDuyet.Clear(); _listDaDuyet.Clear(); } //Nếu đỉnh đầu đỉnh cuối khơng tìm đường trả danh sách rỗng if (dinhBatDau == dinhKetThuc) return new List(); //Thêm đỉnh bắt đầu vào danh sách đỉnh chưa duyệt _listChuaDuyet.ThemCuoi(nodeBatDau); //Nếu điểm dừng chưa phải điểm kết thúc tiếp tục tìm đường while (diemDung != dinhKetThuc) { 90 //Nếu danh sách đỉnh chưa duyệt rỗng (Nghĩa tất đỉnh tìm được duyệt if (_listChuaDuyet.Head == null) break; //Tìm đỉnh có giá trị F nhỏ diemDangXet = NodeMin(_listChuaDuyet); //Cập nhật lại điểm dừng = điểm xét diemDung = diemDangXet.ViTri; //Lấy điểm xét khỏi danh sách đỉnh chưa duyệt _listChuaDuyet.Remove(diemDangXet); //Thêm điểm xét vào danh sách đỉnh duyệt _listDaDuyet.ThemCuoi(diemDangXet); //Lấy thông tin đỉnh kề với đỉnh xét cacDinhKe = DinhKe(diemDangXet, nodeBatDau, nodeKetThuc); //Thêm đỉnh kề với đỉnh xét vào danh sách đỉnh chưa duyệt for (int i = 0; i < cacDinhKe.Length; i++) if (cacDinhKe[i] != null) if (!TonTai(cacDinhKe[i], _listDaDuyet)) if (!TonTai(cacDinhKe[i], _listChuaDuyet)) _listChuaDuyet.ThemCuoi(cacDinhKe[i]); //Nếu đỉnh kề chưa có danh sách đỉnh chưa duyệt thêm vào danh sách else CapNhatList(cacDinhKe[i], _listChuaDuyet); //Nếu đỉnh kề có danh sách đỉnh chưa duyệt bỏ qua đỉnh kề tìm đỉnh kề có F nhỏ đỉnh cịn lại } //Nếu khơng tìm đường trả danh sách rỗng if (_listChuaDuyet.Head == null) return new List(); //Trả danh sách đỉnh duyệt (Đường ngắn nhất) return DuongDi(_listDaDuyet); } } } 91 Mơ tả thư mục: Hình 6.13 Cây thư mục ứng dụng Thư mục BUS : chứa class xử lý game Thư mục DAO : chứa class kết nối CSDL Thư mục DTO : chứa class khai báo thuộc tính lớp đối tượng Thư mục GUI : chứa thành phần giao diện game Thư mục Global : chứa biến hàm toàn cục Thư mục Maps : chứa filr text lưu đồ game Thư mục Resource : chứa tài nguyên hình ảnh, âm 92 Ưu điểm sử dụng mơ hình layer : Khi ứng dụng địi hỏi có tách biệt phần: giao diện (GUI), xử lý nghiệp vụ (BUS), giao tiếp với hệ quản trị CSDL (DAO) dùng DTO để tạo mối liên hệ layer với để người viết dễ dàng quản lý ứng dụng có lỗi xảy với số thành phần xử lý nghiệp vụ khơng mong muốn Ngồi với mơ hình cịn tạo khơng gian làm việc tốt để người thiết kế giao diện, lẫn người lập trình làm việc chung với cách dễ dàng Khả tái tạo cao: Khi ứng dụng yêu cầu thay đổi hệ quản trị CSDL chuyển ứng dụng từ window application sang web application, việc xây dựng lại ứng dụng từ đầu tốn nhiều thời gian chi phí Vì với mơ hình đời giải vấn đề 93 TÀI LIỆU THAM KHẢO Tiếng Việt: 1) NGUYỄN NAM TRUNG, “Chuyên đề xây dựng ứng dụng hệ điều hành Windows Phone 7”, Trường CĐ CNTT TPHCM, 2012 Tiếng Anh: 2) CHARLES PETZOLD , “Programming Windows Phone 7”, Microsoft Press, 2010 3) DOMINIC BETTS, “Windows Phone Developer Guide”, Microsoft, 2010 4) ALEXANDRE SANTOS, “Beginning XNA 3.0 Game Programming”, APRESS, 2009 Website : 5) Trang web chia sẻ tài liệu SCRIBD (URL: www.scribd.com/doc/76241394/TIM-HI%E1%BB%82U-CONGNGH%E1%BB%86-SILVERLIGHT) 6) Trang web tin tức Tinh Tế (URL: www.tinhte.vn/threads/498852/) 7) Trang web tin tức Thông Tin Công Nghệ (URL: http://www.thongtincongnghe.com/article/17257) 8) Trang web tin tức VNREVIEW (URL: vnreview.vn/tin-tuc-kinh-doanh/-/view_content/content/79143/tongquan-windows-phone-i) 9) Trang web MSDN Microsoft (URL: msdn.microsoft.com/en-us/library/ff402531%28v=VS.92%29.aspx) ... Tên Use-case Vào trò chơi Phát sinh đồ Phát sinh xe tăng địch Xe tăng địch di chuyển Xe tăng địch bắn đạn Di chuyển xe tăng Bắn đạn Phá hủy chướng ngại vật Bắn chết xe tăng địch 10 Xem hướng dẫn... di chuyển Use case làm cho xe tăng địch tự động bắn đạn Use case giúp người chơi di chuyển xe tăng Use case giúp xe tăng người chơi bắn đạn để tiêu di? ??t xe tăng địch Use case người chơi bắn vào... chuyển bắn đạn: - Xe tăng địch tự động phát sinh, di chuyển bắn đạn - Mọi hoạt động xe tăng địch tự động - Xe tăng địch tự động tìm đường ngắn đến đại bàng để bắn chết đại bàng quân ta Xem hướng