Báo cáo đồ án Cơ Sở Ngành Mạng

40 2.3K 9
Báo cáo đồ án Cơ Sở Ngành Mạng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Báo cáo đồ án Sở Ngành Mạng ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN Tel (84-236) 736 949, Fax (84-236) 842 771 Website: itf.ud.edu.vn, E-mail: cntt@edu.ud.vn BÁO CÁO ĐỒ ÁN SỞ NGÀNH MẠNG MỤC LỤC Báo cáo đồ án Sở Ngành Mạng DANH SÁCH HÌNH VẼ Báo cáo đồ án Sở Ngành Mạng DANH SÁCH BẢNG BIỂU Báo cáo đồ án Sở Ngành Mạng LỜI MỞ ĐẦU Nguyên lý hệ điều hành Lập trình Mạng tảng mà người lập trình phải hiểu rõ để nắm bắt kiên thức cao Hệ điều hành thành phần trung gian, cầu nối cho giao tiếp người dung máy tính Thông qua hệ điều hành, người sử dụng dễ dàng làm việc khai thác hiệu thiết bị phần cứng Cũng vậy, với phát triển lĩnh vực mạng nay, việc nghiên cứu, nắm vững Mạng thực quan trọng người lập trình Dựa hiểu biết tham khảo thêm, em thực hiện, nghiên cứu đề tài: Tìm hiểu kỹ thuật Hook, xây dựng chương trình gõ tắt Xây dựng game cờ gánh cho phép nhiều người chơi mạng Em xin chân thành cảm ơn thầy giáo khoa Công Nghệ Thông Tin, hết thầy Nguyễn Tấn Khôi nhiệt tình theo dõi, hướng dẫn em nhiệt tình trình em thực đề tài Em cố gắng hoàn thành đề tài, tránh khỏi thiếu sót, mong nhận góp ý thầy để em hoàn thiện đề tài Báo cáo đồ án Sở Ngành Mạng PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH TIÊU ĐỀ: XÂY DỰNG ỨNG DỤNG GÕ TẮT Tìm hiêu kỹ thuật lập trình Hook Xây dựng ứng dụng gõ tắt Sử dụng ngôn ngữ lập trình C# CHƯƠNG SỞ LÝ THUYẾT Giới thiệu Hook Trong Windows, thực thao tác nhấp chuột, nhấn phím… hệ điều hành chuyển kiện thành thông điệp (message) đưa vào hàng đợi (queue) hệ thống Sau đó, thông điệp trao lại cho ứng dụng cụ thể để xử lý Hook chế mà ứng dụng chặn kiện, thông điệp, thao tác chuột, bàn phím Hàm dùng để chặn loại kiện riêng biệt gọi hook procedure/ hook function Mỗi nhận kiện, hook procedure thay đổi chí hủy bỏ kiện Xét phạm vi hoạt động loại Hook: - Local hook (thread hook): ảnh hưởng phạm vi thread Global hook: ảnh hưởng toàn hệ thống Trường hợp này, hook procedure phải chứa thư viện DLL Một số ví dụ sử dụng hook: - Tạo chức debug - Tạo chương trình record play back macro - Bắt giả lập kiện bàn phím chuột - Tạo chức Help(F1) cho ứng dụng - Tạo ứng dụng computer-based training (CBT) chế Hook – Hook chain Hệ điều hành trì danh sách hook procedure cho loại kiện Mỗi danh sách Hook procedure gọi hook chain Bản chất hook chain dãy trỏ hàm trỏ đến Hook procedure Khi hệ thống thực kiện đó, tìm kiếm hook chain tương ứng với kiện Nếu hook procedure phù hợp tìm thấy, hệ thống thực lấy lại quyền điều khiển sau hook chain kết thúc Vì hook procedure thực xong, phải thực việc chuyển quyền điều khiển cho hook procedure hook chain Tuy nhiên chế tùy thuộc vào loại hook Như số loại hook theo dõi thông điệp, cho dù hook procedure chuyển quyền điều khiển cho hook procedure hay không, hệ thống tự động làm việc Hook kỹ thuật xử lý thông điệp mạnh cho phép can thiệp sâu vào tiến trình khác nhau, làm ảnh hưởng tới tốc độ hệ thống, hook system-wide, tất kiện hệ thống định hướng tới Báo cáo đồ án Sở Ngành Mạng hàm đó, rõ ràng điều làm hệ thống chậm đáng kể Vì ta hên hook thông điệp thật cần thiết kết thúc việc hook không dùng đến Hình Hook chain Các loại Hook nhiều loại hook phân biệt dựa vào kiện, thông điệp mà Hook procedure can thiệp vào Danh sách liệt kê loại hook kèm với link dẫn đến tham khảo từ MSDN: - WH_CALLWNDPROC and WH_CALLWNDPROCRET - WH_CBT - WH_DEBUG - WH_FOREGROUNDIDLE - WH_GETMESSAGE - WH_JOURNALPLAYBACK - WH_JOURNALRECORD - WH_KEYBOARD_LL - WH_KEYBOARD - WH_MOUSE_LL - WH_MOUSE - WH_MSGFILTER and WH_SYSMSGFILTER - WH_SHELL Hook Procedure Hook procedure loại callback function Hệ thống gọi hàm kiện, thông điệp tương ứng với loại hook Mỗi loại hook hook procedure khác tham số cú pháp bên Với hook procedure khác việc xét giá trị tham số khác Lập trình viên sử dụng dụng hàm SetWindowsHookEx để cài đặt hook procedures vào hook chain Báo cáo đồ án Sở Ngành Mạng Một hook procedures cú pháp sau: LRESULT CALLBACK HookProc( int nCode, WPARAM wParam, LPARAM lParam ) { //process event return CallNextHookEx(NULL, nCode, wParam, lParam); } Ý nghĩa tham số truyền vào hàm: nCode : tham số thường gọi “hook code”, Hook procedure sử dụng giá trị để định cách thức xử lý kiện Giá trị hook code tùy thuộc vào loại hook cụ thể, loại hook tập hợp giá trị hook code đặc trưng riêng quy luật mà dường Hook procedure loại hook cần tuân thủ: Window truyền cho hàm giá trị hook code âm, Hook procedure không xử lý kiện mà phải gọi hàm CallNextHookEx với tham số mà hệ điều hành truyền cho Sau đó, phải trả giá trị trả hàm CallNextHookEx wParam, lParam: Đây thông tin cần thiết cho Hook procedure trình xử lý kiện Các giá trị ý nghĩa khác tuỳ thuộc vào loại hook Ví dụ: Hook procedure gắn với hook WH_KEYBOARD nhận mã phím ảo (Virtual-Key Code) từ wParam, đồng thời từ lParam thông tin mô tả trạng thái bàn phím kiện gõ phím xảy Cài đặt hook 5.1 Cài đặt Filter Function vào chuỗi Filter Function Tác vụ thực thông qua hàm SetWindowsHookEx Cú pháp: HHOOK WINAPI SetWindowsHookEx( Báo cáo đồ án Sở Ngành Mạng _In_ int idHook, _In_ HOOKPROC lpfn, _In_ HINSTANCE hMod, _In_ DWORD dwThreadId ); Tham số: - idHook: Xác định loại hook mà ta muốn cài đặt, tham số giá trị sau: • WH_CALLWNDPROC : đặt thủ tục hook quản lý thông điệp trước lúc hệ thống gởi chúng tới cửa sổ đích • WH_CALLWNDPROCRET : đặt thủ tục hook quản lý thông điệp sau chúng xử lý thủ tục cửa sổ đích • WH_CBT : đặt thủ tục hook nhận thông báo ích tới ứng dụng huấn luyện sở tính toán (CBT) • WH_DEBUG : đặt thủ tục hook ích cho việc debug thủ tục hook khác • WH_FOREGROUNDIDLE : đặt thủ tục hook gọi thread foreground ứng dụng trở thành không dùng đến Hook ích cho hoạt động nhiệm vụ (task) độ ưu tiên thấp thời gian không dùng đến • WH_GETMESSAGE : đặt thủ tục hook quản lý thông điệp post tới hàng đợi thông điệp •WH_JOURNALPLAYBACK : đặt thủ tục hook post thông điệp ghi trước thủ tục hook WH_JOURNALRECORD •WH_JOURNALRECORD : đặt thủ tục hook ghi thông điệp đầu vào post tới hàng thông điệp hệ thống Hook ích cho việc ghi macro • WH_KEYBOARD : đặt thủ tục hook quản lý thông điệp keystroke • WH_MOUSE : đặt thủ tục hook quản lý thông điệp chuột • WH_MSGFILTER: đặt thủ tục hook quản lý thông điệp kết sinh kết cuả kiện đầu vào dialog box, message box, menu hay scroll bar • WH_SYSMSGFILTER : đặt ứng dụng thông điệp kết sinh kết kiện đầu vào dialog box, message box, menu hay scroll bar Thủ tục hook quản lý thông điệp cho tất ứng dụng hệ thống Mỗi giá trị xác định loại hook mà ta muốn cài đặt, loại hook ý nghĩa tình sử dụng khác - lpfn: Địa Hook procedure mà ta muốn gắn với hook Báo cáo đồ án Sở Ngành Mạng - hMod: Handle module chứa hook procedure Nếu ta cài đặt hook cục (nghĩa thực thi hook procedure ảnh hưởng tiến trình cài đặt hook), tham số phải NULL Còn muốn hook với phạm vi toàn hệ thống (tức tiến trình hữu chịu ảnh hưởng hook procedure chúng ta), tham số Handle DLL chứa hook procedure - dwThreadID: Định danh thread ứng với hook cài đặt Nếu tham số số khác 0, hook procedure gắn với hook gọi ngữ cảnh thread xác định Còn dwThreadID = 0, hook procedure phạm vi toàn hệ thống, dĩ nhiên, gọi ngữ cảnh thread tồn HĐH thể sử dụng hàm GetCurrentThreadId để lấy handle thread muốn cài đặt hook Một hook sử dụng mức hệ thống, mức cục bộ, hai mức vừa nêu Bảng sau mô tả loại hook tầm ảnh hưởng nó: Bảng Các loại hook tầm ảnh hưởng Name Valu Scope e Hook procedure WH_CALLWNDPROC CallWndProc WH_CALLWNDPROCRE T WH_CBT 12 WH_DEBUG WH_FOREGROUNDIDL E WH_GETMESSAGE 11 WH_JOURNALPLAYBAC K WH_JOURNALRECORD Thread or global Thread or global Thread or global Thread or global Thread or global Thread or global Global only Global only WH_KEYBOARD WH_KEYBOARD_LL 13 Thread or global Global only WH_MOUSE WH_MOUSE_LL 14 Thread or global Global only CallWndRetProc CBTProc DebugProc ForegroundileProc GetMsgProc JournalPlayBackPro c JournalRecordProc KeyboardProc LowLevelKeyboardP roc MouseProc LowLevelMousePro c Báo cáo đồ án Sở Ngành Mạng WH_MSGFILTER -1 WH_SHELL 10 WH_SYSMSGFILTER Thread or global Thread or global Global only MessageProc ShellProc SysMsgProc Với loại hook xác định, hook cục gọi trước, sau hook toàn cục Giá trị trả về: Handle hook thành công, ngược lại trả NULL Giá trị cần thiết để sử dụng hàm UnhookWindowsHookEx Trong trường hợp bạn dùng hàm GetLastErrorđể lấy thông tin lỗi 5.2 Gỡ bỏ Filter Function khỏi chuỗi Filter Function Windows cung cấp hàm UnhookWindowsHookEx giúp thực việc Khai báo sau: BOOL WINAPI UnhookWindowsHookEx( _In_ HHOOK hhk ); Tham số: hhook hàm hook dỡ bỏ Đây giá trị trả vể hàm SetWindowsHookEx hàm Hook cài đặt Nếu thực thành công hàm trả giá trị true, ngược lại Chú ý : Hàm UnhookWindowsHookEx phải sử dụng kết hợp với hàm SetWindowsHookEx 5.3 Gọi Filter Function chuỗi Filter Function Khi hook cài đặt, Windows gọi hàm chuỗi hook procedure, kể từ thời điểm này, trách nhiệm Windows không Hook procedure hành phải đảm bảo với hệ thống lời gọi đến hàm chuỗi hook procedure Bởi lẽ, ứng dụng khác cài đặt loại hook để thi hành số tác vụ đó, ta không cho hook procedure ứng dụng tham gia xử lý kiện, vấn đề rắc rối xảy Vấn đề trở nên nghiêm trọng ứng dụng chương trình thuộc hệ thống, rõ ràng đảm bảo cho an toàn hệ thống Để giải vấn đề trên, sử dụng hàm CallNextHookEx Cú pháp: LRESULT WINAPI CallNextHookEx( _In_opt_ HHOOK hhk, _In_ int nCode, 10 Báo cáo đồ án Sở Ngành Mạng Xây dựng khung chat để người chơi đối thoại với ván đấu Qua khung chat, người chơi chat với nhau, chat với người xem ngược lại Để giảm tải cho chương trình Server, việc kiểm tra tính hợp lệ nước cờ xử lý Client, đảm bảo nước hợp lệ gửi thông tin lên server Server lưu lại trạng thái xử lý kết bàn cờ (chơi tiếp hay kết thúc, kết thúc bên thắng) Tất các xử lý liên quan đến nước đi, việc ăn quân xử lý phía server nhằm mục đích bảo mật Xây dựng chương trình 4.1 Package socket.io Lớp Server chứa đối tượng ServerSocket để lắng nghe xử lý yêu cầu gửi từ Client Nó danh sách Cliet kến nối đến loạt lớp xử lý kiện Một số hàm lớp Server : - Emit(Client expr, byte[] data) : gửi liệu đến tất Client loại trừ expr - Emit(byte[] data) : gửi liệu đến tất client Lớp Room nhiệm vụ quản lý tất Client giá trị đường dẫn (path) Gom nhóm đối tượng Client để thao tác với đối tượng Lớp Client chứa đối tượng Socket đảm nhận nhiệm vụ trao đổi liệu Khi khởi tạo Client tạo Thread lặp vô tận đển xử lý kết nối lúc bị hủy Client định nghĩa số hàm để gửi nhận liêu : - Emit(byte[] data) : gửi liệu - Ping() : gửi liệu đợi kết trả Socket.io định nghĩa số interface để xử lý kiện: - EventDataComing: xử lý kiện liệu đến - EventConnection: kiện kết nối từ client - EventDisconnect: kện đóng client - RomEvent: xử lý kiện client vào thoát khỏi phòng Chi tiết: https://github.com/thanhan7914/JavaSocketIO 4.2 Đóng gói liệu Trước gửi liệu server, client cần phải đóng gói liệu theo quy tắc xác định nhằm mục đích xác định mục đích liệu gửi đến sau class làm chức Helper.java CTRL.java Dữ liệu đóng gói theo định dạng sau : Hình Định dạng liệu 26 Báo cáo đồ án Sở Ngành Mạng Trong : - CTRL byte điều khiển lấy class CTRL.java Hàm đóng gói mảng integer thàng mảng byte: public static byte[] prepareData(byte signal, int[] data) { ArrayList arlData = new ArrayList(); for(int i:data) arlData.add(Util.intToByteArray(i)); return prepareData(signal, arlData); } Hàm gộp danh sách mảng byte: public static byte[] prepareData(byte signal, ArrayList arlData) { int len = * arlData.size() + + 1; for(byte[] buf:arlData) len += buf.length; byte[] data = new byte[len]; int pos = 5; data[0] = signal; System.arraycopy(Util.intToByteArray(arlData.size()), 0, data, 1, 4); for(byte[] buf:arlData) { System.arraycopy(Util.intToByteArray(buf.length), 0, data, pos, 4); System.arraycopy(buf, 0, data, pos + 4, buf.length); pos += buf.length + 4; } return data; } Hàm gộp mảng mảng byte: public static byte[] prepareData(byte signal, byte[] arrData) { int len = * arrData.length + + 1; for(byte[] buf:arrData) len += buf.length; byte[] data = new byte[len]; int pos = 5; data[0] = signal; System.arraycopy(Util.intToByteArray(arrData.length), 0, data, 1, 4); for(byte[] buf:arrData) { System.arraycopy(Util.intToByteArray(buf.length), 0, data, pos, 4); System.arraycopy(buf, 0, data, pos + 4, buf.length); pos += buf.length + 4; } return data; } 27 Báo cáo đồ án Sở Ngành Mạng 4.3 Xử lý liệu sau nhận Khi liệu gửi đóng gọi cần xư lý liệu sau nhận được, hàm praseData lớp Helper.java đảm nhận việc public static ArrayList parseData(byte[] data) { //skip byte first int len = Util.byteArrayToInt(new byte[]{data[1], data[2], data[3], data[4]}); ArrayList arlData = new ArrayList(len); int idx = 5; for(int i = 0; i < len; i++) { int blen = Util.byteArrayToInt(new byte[]{data[idx], data[idx + 1], data[idx + 2], data[idx + 3]}); byte[] buf = new byte[blen]; System.arraycopy(data, idx + 4, buf, 0, blen); arlData.add(buf); idx += blen + 4; } return arlData; } Byte mang giá trị CTRL tách khỏi mảng 4.4 Giá trị điều khiển Cả client server chứa lớp CTRL.java định nghĩa số để xác định loại tin nhắn gửi đên public final class CTRL { public static final public static final public static final public static final public static final byte byte byte byte byte SIGNUP = 0; LOGIN = 1; ENTER_TABLE = 3; ENTER_GAME = 4; MOVE = 5; …… } Khi nhận gói liệu nhận chương trình so sánh byte mảng liệu với số lớp CTRL.java để biết liệu ý nghĩa Ví dụ: Client đăng nhập gửi mảng byte, byte liệu gửi giá trị 1(CTRL.LOGIN) 4.5 Phòng chơi Lớp Table.java chứa trạng thái phòng chơi bao gồm tên người chơi trạng thái phòng chơi, thời gian chơi… Một danh sách đối tượng Table tạo để quản lý đối tượng phòng chơi Khi trao đổi liệu client server dựa vào id table để xác định thay đổi Table 28 Báo cáo đồ án Sở Ngành Mạng 4.6 Bàn cờ quân cờ Lớp Chessman.java đối tượng quân cờ, bao gồm vị trí, kiểu, màu sắc quân cờ bàn cờ Lớp Board.java chứa trạng thái bàn chơi, xử lý nước đi, cách ăn quân Các quân cờ quản lý danh sách (ArrayList tượng lớp Chessman.java lớp Board.java armies;) đối Do mục đích bên client-server khác nên việc tạo đối tượng bàn cờ quân cờ bên khác : - Client : trình khởi chạy đối tượng lớp Board.java khởi tạo Các quân cờ đồng từ phía server nhảy vào bàn chơi - Server : đối tượng lớp Table chứa đối tượng lớp Board.java, quân cờ khởi tạo bàn cờ khởi tạo 4.7 Thuật toán 4.7.1 Tìm nước hợp lệ quân cờ Trên bàn cờ gánh tất 25 vị trí mà quân cờ tới để xác định nước hợp lệ, cần xây dựng hàm trả mảng các điểm tới từ vị trí Các vị trí bàn cờ đánh số từ -> 24 theo chiều từ trái qua phải, từ xuống dưới, điểm bên trái giá trị Hàm sau trả mảng vị trí mà quân cờ tới từ vị trí pos ban đầu : public int[] goTo(int pos) /* > ** | ** v */ switch(pos){ case 0: return case 1: return case 2: return case 3: return case 4: return case 5: return case 6: return case 7: return case 8: return case 9: return case 10: { new int[]{1, 5, 6}; new int[]{0, 2, 6}; new int[]{1, 3, 6, 7, 8}; new int[]{2, 4, 8}; new int[]{3, 8, 9}; new int[]{0, 6, 10}; new int[]{0, 1, 2, 5, 7, 10, 11, 12}; new int[]{2, 6, 8, 12}; new int[]{2, 3, 4, 7, 9, 12, 13, 14}; new int[]{4, 8, 14}; 29 Báo cáo đồ án Sở Ngành Mạng return case 11: return case 12: return case 13: return case 14: return case 15: return case 16: return case 17: return case 18: return case 19: return case 20: return case 21: return case 22: return case 23: return case 24: return default: return } new int[]{5, 6, 11, 15, 16}; new int[]{6, 10, 12, 16}; new int[]{6, 7, 8, 11, 13, 16, 17, 18}; new int[]{12, 8, 14, 18}; new int[]{8, 9, 13, 18, 19}; new int[]{10, 16, 20}; new int[]{10, 11, 12, 15, 17, 20, 21, 22}; new int[]{12, 16, 18, 22}; new int[]{12, 13, 14, 17, 19, 22, 23, 24}; new int[]{14, 18, 24}; new int[]{15, 16, 21}; new int[]{20, 16, 22}; new int[]{16, 17, 18, 21, 23}; new int[]{22, 18, 24}; new int[]{23, 18, 19}; new int[]{}; } Hàm goTo trả vị trí tới trường hợp bàn cờ trống Vì để xác định vị trí hợp lệ cần loại loại bỏ điểm mà quân cờ trước Hàm guest(int pos) lấy nước hợp lệ public int[] guest(int pos) { int[] gt = goTo(pos); ArrayList arl = new ArrayList(); for(int p:gt) { boolean f = false; for(Chessman ch:armies) if(f = (ch.pos == p)) break; if(!f) arl.add(p); } int[] gst = new int[arl.size()]; for(int i = 0; i < arl.size(); i++) gst[i] = arl.get(i); return gst; } 4.7.2 Xác định trạng thái ăn quân đối phương 30 Báo cáo đồ án Sở Ngành Mạng hai cách để ăn quân cờ đối phương gánh vây, ta xây dựng hai giải thuật để tìm kiếm quân cờ đối phương trạng thái gánh vây 4.7.2.1Xác định nước gánh Hai quân cờ đối phương bị gánh nước tới trung điểm quân cờ Vì ta tìm quân cờ đối phương nằm lân cận quân cờ vừa đi, kiểm tra trạng thái Lần lượt kiểm tra cặp quân cờ xem nằm đường thẳng hay không? Nếu nằm đường cặp quân cờ bị gánh Hàm sau tìm quân cờ bị gánh: public ArrayList between(boolean type, int npos) { ArrayList alPos = getChessmanEnemy(type, npos); ArrayList pair = new ArrayList(); int cp = npos % 5; int rp = npos / 5; for(int i = 0; i < alPos.size(); i++) for(int j = i + 1; j < alPos.size(); j++) { Pair pr = new Pair(alPos.get(i), alPos.get(j)); boolean f = false; for(Pair ppr:pair) if(f = ppr.compare(pr)) break; if(f) continue; int col = alPos.get(i) int row = alPos.get(i) int c = alPos.get(j) % int r = alPos.get(j) / % 5; / 5; 5; 5; if((c == col && Math.abs(r - row) == && cp == c) || (r == row && Math.abs(c - col) == && rp == r) || (Math.abs(c - col) == Math.abs(r - row) && Math.abs(r - row) == && Math.abs(rp - r) == Math.abs(rp - row) && Math.abs(cp - c) == Math.abs(cp - col))) pair.add(pr); } return pair; } public ArrayList getChessmanEnemy(boolean type, int npos) { int[] next = goTo(npos); ArrayList alPos = new ArrayList(); for(int p:next) { Chessman c = findChessman(p); if(c == null) continue; if(c.type == type) continue; alPos.add(p); } return alPos; } 31 Báo cáo đồ án Sở Ngành Mạng 4.7.2.2Kiểm tra quân cờ trạng thái vây Một quân cờ sở trang thái vây xung quang toàn quân cờ đối phương quân cần lân cận bị vây Các bước để xác định quân cờ trạng thái vây là: B1 Khởi tạo danh sách allPos chứa tất điểm mà quân cờ kiểu Tìm tất điểm xung quanh đưa điểm quân cờ kiểu vào allPos (dùng hàm goTo() để lấy giá trị xung quanh) B2 Duyệt từ đầu đến cuối danh sách allPos Với điểm allPos ta tìm điểm lân cận điểm đưa điểm quân cờ kiểu vào allPos (không lấy vị trí có) B3 Duyệt lại danh sách allPos, với giá trị allPos ta tìm vị trí lân cận tới (hàm goTo()) Nếu vị trí chưa quân cờ trả false quân cờ chưa bị vây Nếu trả true quân cờ bị vây Các hàm sau tìm kiếm danh sách quân cờ bị vây sau nước đi: private ArrayList siege(boolean type, int pos) { ArrayList near = new ArrayList(); near.add(pos); addArrayList(near, nearPosition(type, pos)); ArrayList distint = new ArrayList(); while(!near.isEmpty()) { int p = near.get(0); near.remove(0); boolean skip = false; for(int i:distint) if(skip = (i == p)) break; if(skip) continue; distint.add(p); addArrayList(near, nearPosition(type, p)); } for(int ppos:distint) { int[] around = goTo(ppos); boolean stop = false; for(int jpos:around) { Chessman ch = findChessman(jpos); if(stop = (ch == null)) break; } if(stop) return new ArrayList(); } return distint; } 32 Báo cáo đồ án Sở Ngành Mạng private ArrayList nearPosition(boolean type, int pos) { ArrayList near = new ArrayList(); int[] around = goTo(pos); for(int i = 0; i < around.length; i++) { Chessman ch = findChessman(around[i]); if(ch != null && ch.type == type) near.add(around[i]); } return near; } private void addArrayList(ArrayList a, ArrayList b) { for(int c:b) a.add(c); } 4.7.3 Xác định trạng thái thắng người chơi Sau quân cờ đánh ta kiểm tra số quân cờ người chơi bàn cờ người chơi 16 quân cờ người dành chiến thắng Ngược lại không quân cờ bàn cờ người thua public boolean checkWin(boolean type) { for(Chessman ch:armies) if(ch.type != type) return false; return true; } 33 Báo cáo đồ án Sở Ngành Mạng CHƯƠNG TRIỂN KHAI ĐÁNH GIÁ KẾT QUẢ Triển khai 1.1 Môi trường phát triển ứng dụng: Ứng dụng phát triển Eclipse IDE for Java Developers 1.2 Version: Neon.3 Release (4.6.3) Cấu trúc chương trình Chương trình Server: Hình Cấu trúc project Game Server Trong đó: + Package org.thanhan.game chứa lớp quản lý thủ tục xử lý liệu, số trạng thái, hàm main khởi chạy Server + Package socket.io chứa lớp quản lý thủ tục kết nối, gửi nhận liệu, interface quản lý kiện trước, sau kết nối Client với Server Đây package dùng chung cho chương trình Client Server nhắc phần Phân tích đề tài Chương trình Client: 34 Báo cáo đồ án Sở Ngành Mạng Hình 10 Cấu trúc Cờ Gánh Client Trong đó: + Package application chứa các số trạng thái, hàm khởi chạy Client, hàm khởi tạo giao diện,… + Package application.controller chứa hàm kết nối, lắng nghe kiện từ Server, lắng nghe xử lý kiện gửi lên Server,… + Package assets.images chứa hình ảnh phục vụ cho việc xây dựng giao diện 35 Báo cáo đồ án Sở Ngành Mạng + Package assets.layout chứa file giao diện nhắc phần Yêu cầu giao diện + Package assets.sounds chứa file âm phục vụ cho game + Package socket.io package dùng chung thành phần chương trình Server Kết Hình 11 Giao diện đăng nhập 36 Báo cáo đồ án Sở Ngành Mạng Hình 12 Giao diện đăng kí 37 Báo cáo đồ án Sở Ngành Mạng Hình 13 Màn hình Hình 14 Giao diện bàn chơi Hình 15 Giao diện chơi game Đánh giá kết Nhìn chung xây dựng thành công trò chơi cờ gánh cho phép nhiều người chơi Trò chơi đáp ứng yêu cầu đặt Nhưng nhiều thiếu sót cần bổ sung sau lưu lại trạng thái chiến thắng, bảng kết quả… KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 38 Báo cáo đồ án Sở Ngành Mạng Những kết đạt Nắm bắt vận dụng lớp Socket java để xây đựng game chơi qua mạng Biết chế truyền liệu thông qua mạng Xây dựn game cờ gánh chơi nhiều người qua mạng Những vấn đề tồn Trong trình chơi game phát sinh số lỗi không mong muốn, đôi lúc client chưa nhận liệu từ server nên trận đánh tiếp tục Hướng phát triển Khắc phục lỗi tồn Lưu trữ trình chơi sở liệu để xem sau KẾT LUẬN CHUNG Qua đồ án giúp em hoàn thiện kiến thức học trường biết cách vận dụng vào dự án thực tế Về em hoàn thành yêu cầu đề đồ án sở ngành mạng Xây dựng thành công chương trình hoạt động tốt Tuy nhiên, chương trình tồn thiếu sót hạn chế cần phải khắc phục 39 Báo cáo đồ án Sở Ngành Mạng TÀI LIỆU THAM KHẢO [1] YinYang's Programing Blog, Win32 – Giới thiệu kĩ thuật Hook khái niệm https://yinyangit.wordpress.com/2011/08/07/win32-introduction-to-hook-andsome-basic-concepts/ [2] Miscrosoft Developer Network, Hooks Overview https://msdn.microsoft.com/en-us/library/ms644959(v=vs.85).aspx [3] Wikipeadia, Mạng Máy Tính https://vi.wikipedia.org/wiki/M%E1%BA%A1ng_m%C3%A1y_t%C3%ADnh [4] Wikipedia, Cờ Gánh https://vi.wikipedia.org/wiki/C%E1%BB%9D_g%C3%A1nh [5] O7planning, Hướng dẫn lập trình Java Socket http://o7planning.org/vi/10393/huong-dan-lap-trinh-java-socket [6] Oracle Docs, Package java.net https://docs.oracle.com/javase/7/docs/api/java/net/package-summary.html [7] Evatotus+, Instroduction to JavaFx for Game Development https://gamedevelopment.tutsplus.com/tutorials/introduction-to-javafx-forgame-development cms-23835 [8] Code.makery.ch, JavaFx Event Handling Examples http://code.makery.ch/blog/javafx-8-event-handling-examples/ 40 .. .Báo cáo đồ án Cơ Sở Ngành Mạng DANH SÁCH HÌNH VẼ Báo cáo đồ án Cơ Sở Ngành Mạng DANH SÁCH BẢNG BIỂU Báo cáo đồ án Cơ Sở Ngành Mạng LỜI MỞ ĐẦU Nguyên lý hệ điều hành Lập trình Mạng tảng... 13 Báo cáo đồ án Cơ Sở Ngành Mạng Cơ sở liệu Chương trình sử dụng sqlite để lưu trữ kí tự ví tắt Các từ viết tắt nghĩa lưu trữ table word Hình Cấu trúc table word 14 Báo cáo đồ án Cơ Sở Ngành Mạng. .. 22 Báo cáo đồ án Cơ Sở Ngành Mạng - Tầng logic tác nghiệp: Mô hình hóa quy tắc tác nghiệp - Tầng dịch vụ hạ tầng: Cung cấp chức bổ trợ cần thiết cho ứng dụng 23 Báo cáo đồ án Cơ Sở Ngành Mạng

Ngày đăng: 06/06/2017, 22:36

Từ khóa liên quan

Mục lục

  • DANH SÁCH HÌNH VẼ

  • DANH SÁCH BẢNG BIỂU

  • LỜI MỞ ĐẦU

  • PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH

  • TIÊU ĐỀ: XÂY DỰNG ỨNG DỤNG GÕ TẮT

  • CHƯƠNG 1. CƠ SỞ LÝ THUYẾT

    • 1. Giới thiệu Hook

    • 2. Cơ chế của Hook – Hook chain

    • 3. Các loại Hook

    • 4. Hook Procedure

    • 5. Cài đặt hook

      • 5.1 Cài đặt một Filter Function vào chuỗi các Filter Function

      • 5.2 Gỡ bỏ một Filter Function ra khỏi chuỗi các Filter Function

      • 5.3 Gọi Filter Function kế tiếp trong chuỗi các Filter Function

      • 6. Thư viện liên kết động DLL

        • 6.1 Khái niệm

        • 6.2 Cách thức hoạt động

        • 6.3 Các loại liên kết động

        • 6.4 Tại sao sử dụng DLL

        • CHƯƠNG 2. PHÂN TÍCH THIẾT KẾ HỆ THỐNG

          • 1. Yêu cầu chức năng

          • 2. Yêu cầu giao diện

          • 3. Thuật toán

          • 4. Cơ sở dữ liệu

Tài liệu cùng người dùng

Tài liệu liên quan