Xem thêm tài liệu tại: https://tailieuchatluong.com/......Tìm hiểu công nghệ là hành trang tốt nhất để chuẩn bị kiến thức cho chúng em sau khi ra trường. Silverlight là một công nghệ mới kết hợp nhiều công nghệ vào một nền tảng phát triển, nó cho phép lựa chọn nhiều công cụ và ngôn ngữ lập trình thích hợp để giải quyết bài toán. Silverlight ra đời đã giải quyết vấn đề thường gặp của các ứng dụng web về khả năng tương thích với trình duyệt và hệ điều hành. Silverlight cung cấp một mô hình lập trình lập trình mềm dẻo và đồng nhất. Ứng dụng nó tạo ra giao diện thân thiện, hiệu ứng đẹp cho các phần mềm các trang web. Hiện nay cờ caro là một trò chơi rất phổ biến trong giới học đường. Từ nhu cầu giải trí đó, đã có rất nhiều hãng đã sản xuất trò chơi caro trên máy tính, giúp cho việc chơi cờ caro được dễ dàng hơn, và bạn có thể đánh cờ với máy mà không cần một người bạn thực sự.Trên cùng mục đích muốn đem trò chơi cờ caro đến với mọi người, làm cho việc chơi cờ trở nên dễ dàng hơn, có thể hỗ trợ cho bạn chơi với bạn bè, nhóm em đã chọn đề tài là: “Tìm hiểu silverlight và lập trình game cờ caro”.
NHẬN XÉT GIẢNG VIÊN HƯỚNG DẪN Hưng Yên, ngày … tháng 11 năm 2011 GIẢNG VIÊN HƯỚNG DẪN NHẬN XÉT GIẢNG VIÊN HƯỚNG DẪN Hưng Yên, ngày … tháng 11 năm 2011 GIẢNG VIÊN HƯỚNG DẪN NHẬN XÉT GIẢNG VIÊN HƯỚNG DẪN Hưng Yên, ngày … tháng 11 năm 2011 GIẢNG VIÊN HƯỚNG DẪN NHẬN XÉT GIẢNG VIÊN HƯỚNG DẪN Hưng Yên, ngày … tháng 11 năm 2011 GIẢNG VIÊN HƯỚNG DẪN MỤC LỤC LỜI CẢM ƠN Sau thời gian thực làm đề tài đến nhóm hồn thành đề tài Để có kết hơm nay, nhóm thực đề tài nhận nhiều quan tâm, giúp đỡ đạo nhiệt tình thầy, cô khoa công nghệ thông tin Đặc biệt nhóm thực đề tài xin gửi lời cảm ơn chân thành tới thầy “Hoàng Quốc Việt” Thầy người tận tình bảo, chia sẻ cho nhóm kiến thức bổ ích hướng dẫn động viên suốt thời gian qua, tạo điều kiện tốt cho nhóm q trình thực Mặc dù nhóm thực đề tài cố gắng trình làm đề tài song đồ án nhóm khơng thể tránh khỏi thiếu sót, hạn chế Nhóm thực đề tài mong nhận đóng góp chân thành từ thầy, bạn để đề tài nhóm hồn thiện Nhóm thực đề tài xin chân thành cảm ơn! Hưng Yên, ngày 11tháng 11 năm 2011 Sinh viên thực Nguyễn Thành Trường Bùi Thị Thanh PHẦN I: MỞ ĐẦU Lý chọn đề tài Tìm hiểu công nghệ hành trang tốt để chuẩn bị kiến thức cho chúng em sau trường Silverlight công nghệ kết hợp nhiều công nghệ vào tảng phát triển, cho phép lựa chọn nhiều cơng cụ ngơn ngữ lập trình thích hợp để giải toán Silverlight đời giải vấn đề thường gặp ứng dụng web khả tương thích với trình duyệt hệ điều hành Silverlight cung cấp mơ hình lập trình lập trình mềm dẻo đồng Ứng dụng tạo giao diện thân thiện, hiệu ứng đẹp cho phần mềm trang web Hiện cờ caro trò chơi phổ biến giới học đường Từ nhu cầu giải trí đó, có nhiều hãng sản xuất trò chơi caro máy tính, giúp cho việc chơi cờ caro dễ dàng hơn, bạn đánh cờ với máy mà không cần người bạn thực Trên mục đích muốn đem trị chơi cờ caro đến với người, làm cho việc chơi cờ trở nên dễ dàng hơn, hỗ trợ cho bạn chơi với bạn bè, nhóm em chọn đề tài là: “Tìm hiểu silverlight lập trình game cờ caro” Qua trình tìm hiểu chúng em hồn thành báo cáo với nội dung sau: Phần I: Mở đầu Phần II: Nội dung I Tìm hiểu cơng nghệ Chương 1: Tổng quan Silverlight Chương 2: Layout silverlight Chương 3: Các control Chương 4: Xử lý đồ họa Silverlight Chương 5: Animation Media Chương 6: Expression Blend II Lập trình game caro Chương 1: Giới thiệu trị chơi caro Chương 2: Giải thuật chương trình Chương 3: Thiết kế chương trình hàm chương trình Phần III: Kết luận Phần IV: Tài liệu tham khảo Đối tượng nghiên cứu Cơng nghệ Silverlight, xaml Chương trình chơi game caro Công cụ xây dựng phần mềm: Visual Studio 2010, Microsoft Expression Blend Giới hạn phạm vi nghiên cứu Tìm hiểu cơng nghệ Silverlight lập trình game caro Mục đích nghiên cứu Xây dựng tài liệu giúp tìm hiểu cơng nghệ Silverlight Xây dựng chương trình chơi game caro có sử dụng công nghệ Silverlight Nhiệm vụ nghiên cứu Tìm hiểu cơng nghệ Silverlight ngơn ngữ XAML Tìm hiều kiến thức cơng nghệ Silverlight để áp dụng vào xây dựng chương trình game caro Phương pháp nghiên cứu Tìm hiểu hết tổng hợp kiến thức chung Silverlight, sau sâu vào kiến thức cụ thể để xây dựng giao diện ứng dụng cờ caro Nghiên cứu công cụ Microsoft Expression Blend để dựa vào thiết kế giao diện cho trang web ứng dụng 7 Ý nghĩa lý luận thực tiễn đề tài Qua việc tìm hiểu giúp em biết thêm kiến thức cơng nghệ với nhiều tính trội so với cơng nghệ có Microsoft Cơng nghệ Silverlight cho ta nhìn tổng quan thiết kế giao diện đẹp bóng bảy mà khơng địi hỏi phải sử dụng q nhiều cơng nghệ lúc tạo được, điều tạo nên sức mạnh Silverlight PHẦN II: NỘI DUNG I Tìm hiểu Silverlight Chương 1: Tổng quan Silverlight I.1 Silverlight gì? a) Lý đời Silverlight • Các ứng dụng viết cho web thường gặp vấn đề khả tương thích với trình duyệt hệ điều hành • Các cơng nghệ plug-in web trước không cho phép truyền tải liệu hình ảnh chất lượng cao 720p HDTV b) Silverlight gì? • Silverlight dạng plug-in dựa cơng nghệ Microsoft Net • Nó độc lập với đa tảng đa trình duyệt • Nó cho phép phát triển ứng dụng đa phương tiện đặc biệt ứng dụng web • Silverlight cung cấp mơ hình lập trình lập trình mềm dẻo đồng nhất, hỗ trợ Ajax, Python, Ruby ngơn ngữ lập trình Net Visual basic, C# I.2 Đặc điểm Silverlight kết hợp nhiều công nghệ vào tảng phát triển, cho phép bạn lựa chọn nhiều cơng cụ ngơn ngữ lập trình thích hợp để giải tốn bạn Silverlight cung cấp tính sau: Sự kết hợp WPF XAML Mở rộng cho ngôn ngữ kịch Sự tích hợp với ứng dụng có Sử dụng mơ hình ngơn ngữ lập trình tảng Net Framework cơng cụ để kết hợp Hỗ trợ mạng Hỗ trợ ngơn ngữ tích hợp truy vấn (LINQ) 1.3 Kiến trúc thành phần Về Silverlight tảng thống nhiều thành phần khác Dưới bảng thành phần silverlight Thành phần Diển tả Nền tảng trình bày sở Các thành phần dịch vụ hướng tới giao diện người dùng tương bao gồm control cho liệu cho người dùng nhập, thiết bị đa ph phân quyền số, trình bày liệu, đồ họa vector, chữ, hình ảnh động XAML để đặc tả việc bố trí giao diện Net Framework cho silverlight Là gói nhỏ Net Framework, bao gồm thành phần c tương việc tương tác liệu, khả mở rộng control, mạng, g CLR Cài đặt cập nhật Là thành phần để sử lý tiến trình cài đặt để đơn giản hóa đầu tiên, tiếp sau cung cấp chế tự động cập nhật tương Dưới hình ảnh mô tả thành phần kiến trúc Silverlight với thành phần dịch vụ liên quan khác Core Presentation Components: (các thành phần chính) 10 Hình 3.1: Giao diện Trong đó: Nút lựa chọn kiểu chơi Khi click vào nút bảng Select Model cho phép người chơi chọn kiểu chơi Bàn cờ Bảng lựa chọn kiểu chơi Nút Player vs Player Khi click vào nút chơi cờ người với Chọn người chơi với máy tính, người trước Máy tính chơi với người Máy tính nước Lưu điểm người chơi thứ Lưu điểm người chơi Là hình ảnh tre chuyển động có gió thổi 66 3.1.2 Giao diện bàn cờ chơi Hình 3.2: Khi chơi cờ 3.1.3 Giao diện bàn cờ người chơi thắng - Khi người chơi thắng xuất thơng báo người thắng cộng điểm vào bảng ghi điểm người - Đồng thời cờ thẳng hàng đổi màu liên tục từ màu trắng sang màu đỏ từ màu đỏ sang màu trắng - Khi người chơi Click vào nút Reset bắt đầu ván 67 Hình 3.3: Khi người chơi thắng 68 - Khi người chơi tiếp tục thắng điểm tăng lên Trong ví dụ người chơi trắng thắng người chơi đen với tỉ số 2:0 3.2 Các hàm chương trình 3.2.1 Mơ hình PureMVC Kiến trúc Model-View-Controller(MVC) gì? Kiến trúc MVC việc chia tất mục ứng dụng làm ba thành phần (component) khác Model, View Controller Các thành phần kiến trúc MVC trách nhiệm không phụ thuộc vào thành phần khác Những thay đổi thành phần khơng có có ảnh hưởng đến thành phần khác Các trách nhiệm thành phần là: - Model: Model giao nhiệm vụ cung cấp liệu cho sở liệu lưu liệu vào kho chứa liệu Tất nghiệp vụ logic thực thi Model Dữ liệu vào từ người dùng thông qua View kiểm tra Model trước lưu vào sở liệu Việc truy xuất, xác nhận, lưu liệu phần Model 69 - View: View hiển thị thông tin cho người dùng ứng dụng giao nhiệm vụ cho việc nhận liệu vào từ người dùng, gửi yêu cầu đến điều khiển, sau nhận lại phản hồi từ điều khiển hiển kết cho người dùng Các trang HTML, JSP, thư viện thể file nguồn phần thành phần View - Controller: Controller tầng trung gian Model View Controller giao nhiệm vụ nhận yêu cầu từ phía máy khách Một yêu cầu nhận từ máy khách thực chức logic thích hợp từ thành phần Model sau sinh kết cho người dùng thành phần View hiển thị Trong MVC nguyên tắc làm việc phần (Model, Controller View) có mối liên hệ chặt chẽ hình minh họa: Cách có vài nhược điểm thành phần phải tạo liên kết tới nhau, thay đổi thành phần có nguy MVC bị lỗi PureMVC khắc phục vấn đề Thực chất PureMVC tạo thêm lớp trung gian Model View Controller, để người dùng thay đổi Model, View Controller dễ dàng Do PureMVC có thêm phần gồm có : Proxy, Commandvà Mediator Trong framework, phần thiết lập để cách liên lạc với rồi, phần phần trung gian Model, View, Controler Proxy lo cho Model, Command lo cho Controller, Mediator lo cho View Sau hình minh họa PureMVC: 70 Theo hình trên, ngồi ba phần Model, View Control cịn có phần Facade Nhờ có phần mà ba phần PureMVC làm việc với Facade tạo ba phần làm trung gian phần Do framework PureMVC giúp cho người dùng thay đổi UI hay Data Object cách dễ dàng mà không sợ làm ảnh hưởng tới phần khác 3.2.2 Một số lớp chương trình 1) Hàm MainPage.cs: ApplicationFacade.Instance.Startup(this); 2) ApplicationFacadate.cs: protected override void InitializeController() { base.InitializeController(); 71 RegisterCommand(Thongbao.khoidong, typeof(Khoidong)); RegisterCommand(Thongbao.khoidonglai, typeof(Restart)); RegisterCommand(Thongbao.batdaugame, typeof(Batdaugame)); RegisterCommand(Thongbao.chonchedo, typeof(Chonchedo)); } 3) Controller: Khoidong.cs: var applicationProxy = Facade.RetrieveProxy(Thaotacvoiform.ten) as Thaotacvoiform; var pieceboardProxy = Facade.RetrieveProxy(Kiemtrabanco.ten) as Kiemtrabanco; var pieceboardMediator = Facade.RetrieveMediator(PieceboardMediator.NAME) as PieceboardMediator; var applicationMediator = Facade.RetrieveMediator(ApplicationMediator.NAME) as ApplicationMediator; 4) Model (Thaotacvoiform.cs): public void Capnhattyso(Kieuquan kieu) { if (kieu == Kieuquan.QuanX) thongke["QuanXthang"]++; if (kieu == Kieuquan.QuanO) thongke["QuanOthang"]++; } public void Lammoityso() { thongke["Xthang"] = 0; thongke["QuanOthang"] = 0; } public int BlackWinsCount { get { return thongke["QuanXthang"]; } } public int WhiteWinsCount { get { return thongke["QuanOthang"]; } } 5) Lớp AI.cs(Thuộc phần thao tác) 72 Lớp tìm nước cho máy tính public class AI { private static AI _instance; public static AI GetInstance() { if (_instance == null) _instance = new AI(true); return _instance; } private bool mifis; public int X { get; set; } public int Y { get; set; } public AI(bool ifis) { mifis = ifis; } public void Danh(int[,] banco) { int[,] q = new int[Khaibaobien.dodai, Khaibaobien.dodai]; for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) { if (banco[i, j] != -1) { q[i, j] = -1; } else { q[i, j] = FindQz(i, j, banco); } } } Gangiatrilonnhat(q); 73 } public void Gangiatrilonnhat(int[,] q) { int max = 0; for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) { if (q[i, j] > max) { X = i; Y = j; max = q[i, j]; } } } } public int FindQz(int x, int y, int[,] board) { int qz = 0; const int w1 = 10000000; const int w2 = 50000; const int w3 = 10000; const int w4 = 5000; const int w5 = 1000; const int w6 = 500; const int w7 = 100; const int w8 = 50; const int w9 = -100000000; var move = new int[4]; board[x, y] = mifis ? : 1; move[0] = Luatchoi.X1(x, y, board); move[1] = Luatchoi.X2(x, y, board); move[2] = Luatchoi.X3(x, y, board); move[3] = Luatchoi.X4(x, y, board); if (x == && y == 7) { qz += 1; } 74 for (int i = 0; i < 4; i++) { if (Trituyetdoi(move[i]) == 5) { qz += w1; } else if (move[i] == 4) { qz += w3; } else if (move[i] == 3) { qz += w5; } else if (move[i] == 2) { qz += w7; } if (mifis) { if (Luatchoi.Fails(move, board[x, y])) { qz += w9; } } } board[x, y] = mifis ? : 0; move[0] = Luatchoi.X1(x, y, board); move[1] = Luatchoi.X2(x, y, board); move[2] = Luatchoi.X3(x, y, board); move[3] = Luatchoi.X4(x, y, board); for (int i = 0; i < 4; i++) { if (Trituyetdoi(move[i]) == 5) { qz += w2; } else if (move[i] == 4) 75 { qz += w4; } else if (move[i] == 3) { qz += w6; } else if (move[i] == 2) { qz += w8; } } board[x, y] = -1; return qz; } public int Trituyetdoi(int x) { if (x < 0) { return -x; } return x; } } 6) Kiemtrabanco.cs public class Kiemtrabanco:Proxy // = ; { public new const string ten = "PieceboardProxy"; public Quanco[,] quan; private List dskq; public Kiemtrabanco() : base(ten) { quan = new Quanco[Khaibaobien.dodai, Khaibaobien.dodai]; dskq = new List(); } 76 public bool Kiemtraotrong(Quanco q) { if (quan[q.X, q.Y] == null) return true; SendNotification(Thongbao.vitrikhongdung); return false; } public void Chenquanco(Quanco q) { if (Kiemtraotrong(q)) { SendNotification(Thongbao.quancoduocchenvaobang, q); } } public void Kiemtranguoithang(Quanco q) { dskq.Clear(); quan[q.X, q.Y] = q; if (Kiemtrathuattoan(q.X - 4, q.Y - 4, 1, 1, 9, q.kieu) || Kiemtrathuattoan(q.X - 4, q.Y, 1, 0, 9, q.kieu) || Kiemtrathuattoan(q.X, q.Y - 4, 0, 1, 9, q.kieu) || Kiemtrathuattoan(q.X - 4, q.Y + 4, 1, -1, 9, q.kieu)) { SendNotification(Thongbao.nguoithang, dskq); } else { SendNotification(Thongbao.tieptuc); } } private bool Kiemtrathuattoan(int batdauX, int batdauY, int buocX, int buocY, int tongsobuocdi, Kieuquan kieu) { KQthang kq = new KQthang(); 77 List ds = new List(); for (int i = 0; i < tongsobuocdi; i++) { int x = batdauX + buocX * i; int y = batdauY + buocY * i; if (x >= && y >= && x < Khaibaobien.dodai && y < Khaibaobien.dodai) { if (quan[batdauX + buocX * i, batdauY + buocY * i] != null && quan[batdauX + buocX * i, batdauY + buocY * i].kieu == kieu) ds.Add(quan[batdauX + buocX * i, batdauY + buocY * i]); else ds.Clear(); if (ds.Count >= 5) { kq.ds = ds; kq.kieuquan = kieu; if (buocX == && buocY == 1) kq.Kieu = Kieuchienthang.Tutrenxuong;//cheo x if (buocX == && buocY == 0) kq.Kieu = Kieuchienthang.Theochieungang; if (buocX == && buocY == 1) kq.Kieu = Kieuchienthang.Theochieudoc;//doc xuong duoi if (buocX == && buocY == -1) kq.Kieu = Kieuchienthang.Tuduoilen; dskq.Add(kq); return true; } } } return false; } public void Xoaquan() { quan = new Quanco[Khaibaobien.dodai, Khaibaobien.dodai]; } } 78 PHẦN III: KẾT LUẬN Kết đạt Qua q trình tìm hiểu nhóm chúng em nắm số kiến thức công nghệ Silverlight áp dụng vào xây dựng chương trình chơi cờ caro với giao diện sinh động, đơn giản mà hấp dẫn Sau thời gian thực đề tài, chương trình hồn thành đạt số kết sau: • • Website chơi cờ caro có giao diện dễ nhìn, dễ sử dụng Trị chơi chơi người với người chơi với máy Hạn chế đề tài Website chưa xây dựng chưa có nhiều chức lưu lại ván cờ để lần sau chơi tiếp, hay vừa chơi vừa nghe nhạc web, thay đổi giao diện Hướng phát triển đề tài Với cố gắng, lỗ lực nhóm chúng em cố gắng hoàn thành yêu cầu đề tài Do thời gian lực có hạn nên website đáp ứng chơi cờ caro bình thường mà chưa có chức tiện ích khác Hướng phát triển Website trở thành chương trình chơi cờ với đầy đủ chức có giao diện bắt mắt, dễ sử dụng Đề nghị ý kiến Trong thời gian thực đề tài nhóm đề tài khơng thể tránh khỏi thiếu sót, chúng em mong nhận ý kiến đóng góp từ phía q Thầy Cơ bạn để nhóm hồn thiện 79 PHẦN IV: TÀI LIỆU THAM KHẢO [1] Giáo trình silverlight [2] www.msdn.microsft.com [3] www.msdnvietnam.net [4] www.codeproject.com 80 ... đem trò chơi c? ?? caro đến với người, làm cho vi? ?c chơi c? ?? trở nên dễ dàng hơn, hỗ trợ cho bạn chơi với bạn bè, nhóm em chọn đề tài là: “Tìm hiểu silverlight lập trình game c? ?? caro? ?? Qua trình tìm... giới h? ?c đường Từ nhu c? ??u giải trí đó, c? ? nhiều hãng sản xuất trị chơi caro máy tính, giúp cho vi? ?c chơi c? ?? caro dễ dàng hơn, bạn đánh c? ?? với máy mà khơng c? ??n người bạn th? ?c Trên m? ?c đích muốn... chương trình game caro Phương pháp nghiên c? ??u Tìm hiểu hết tổng hợp kiến th? ?c chung Silverlight, sau sâu vào kiến th? ?c cụ thể để xây dựng giao diện ứng dụng c? ?? caro Nghiên c? ??u c? ?ng c? ?? Microsoft