




免費預覽已結束,剩余29頁可下載查看
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
20102010 屆本科畢業(yè)設計屆本科畢業(yè)設計 設計題目 設計題目 網(wǎng)絡五子棋設計網(wǎng)絡五子棋設計 學生姓名 學生姓名 導師姓名 導師姓名 所在院系 所在院系 信息工程學院信息工程學院 所學專業(yè) 所學專業(yè) 計算機科學與技術計算機科學與技術 完成時間 完成時間 2010 05 252010 05 25 摘摘 要要 目前 隨著計算機網(wǎng)絡的發(fā)展 以計算機技術和網(wǎng)絡技術為核心的現(xiàn)代網(wǎng) 絡技術已經(jīng)在現(xiàn)實生活和生產(chǎn)中得到了廣泛的使用 休閑類網(wǎng)絡游戲集趣味性 娛樂性 互動性和益智性于一體 已經(jīng)成為多數(shù)人群的休閑方式 也為多數(shù)人 所喜好 本軟件使用 JAVA 語言實現(xiàn) 通過對圖形界面 繪圖 布局管理器等去構造 出五子棋游戲的單機功能 在此基礎上 利用 SOCKET 編程 建立起服務器與客 戶端之間的連接 利用多線程技術來處理服務器端與客戶端之間的數(shù)據(jù)傳輸 網(wǎng)絡通信 使得客戶端和服務器端之間能夠同步的進行處理 在網(wǎng)絡對戰(zhàn)中實 現(xiàn)了以下功能 建立游戲 邀請游戲 加入游戲 退出游戲 悔棋 另外 本軟 件還實現(xiàn)了網(wǎng)絡聊天的功能 玩家加入游戲后可以和其他玩家進行對話 在加 載圖片以及繪制棋盤方面 采用雙緩沖技術消除屏幕的閃爍現(xiàn)象 在人機對弈中通過遍歷搜索和估值模塊 來提高電腦棋手的智能 算法的 研究有助于理解程序結構 增強邏輯思維能力 在其他人工智能方面也有很大 的參考作用 關鍵詞 關鍵詞 多線程 SOCKET 遍歷搜索 人工智能 JAVA Network Game Gobang Abstract At present With the development of computer network taking computer technology and the network technology as the core modern network technology is already used in the real life and the production The leisure network game sets interest entertainment interaction and intelligence development in a body and already became the leisure mode of the most people The software uses the JAVA language through a graphical interface graphics layout managers etc to construct a single function of the game on this basis using SOCKET build server and client connection between the use of multiple threads technology to handle data transfer and network communication between server side and client side making processing between client and server side can be synchronized The network battle has following function create game invite game join the game quit game regret the chess On the other hand the software also has the function of net chatting once a player joined the game he can chatting with others In the loading picture and the drawing board use the double buffering technology to eliminate screen flicker During the man machine players it improves intelligence of the computer players through Traverse the search and valuation module Algorithm of procedures contribute to the understanding of the structure logical thinking ability In other areas of artificial intelligence has great references KeyKey Words Words multiple thread SOCKET traverse the search artificial intelligence 目錄目錄 1 緒論 1 1 1 課題背景 1 1 2 選題的背景和意義 1 1 3 主要研究內(nèi)容 1 1 4 五子棋簡介 2 2 開發(fā)環(huán)境及工具介紹 3 2 1 開發(fā)環(huán)境及運行環(huán)境 3 2 1 1 開發(fā)環(huán)境 3 2 1 2 運行環(huán)境 3 2 2 JAVA 簡介 3 2 2 1 Java 的起源與發(fā)展 3 2 2 2 Java 的特點 3 2 3 JAVA SOCKET 網(wǎng)絡編程 5 2 3 1 Java Socket 網(wǎng)絡編程基礎 5 2 3 2 Socket 編程的實現(xiàn) 6 2 4 JAVA圖形編程 6 3 需求分析和總體設計 7 3 1 系統(tǒng)設計思想 7 3 2 系統(tǒng)總體設計 8 3 3 系統(tǒng)功能模塊及流程 8 3 3 1 系統(tǒng)主要功能模塊 8 3 3 2 系統(tǒng)主流程 9 3 4 玩家視圖與操作 10 3 4 1 服務器端 10 3 4 2 客戶端 10 4 概要設計 12 4 1 游戲各主要類的功能與主要對象 12 4 1 1 服務器類 12 4 1 2 游戲客戶端 13 4 1 3 網(wǎng)絡客戶端類 14 4 1 4 棋盤類 15 5 詳細設計 16 5 1 服務器端設計 16 5 2 游戲客戶端設計 17 5 3 網(wǎng)絡客戶端設計 18 5 4 棋盤類設計 19 5 4 1 棋盤類的主要方法 19 5 4 2 電腦落子算法的實現(xiàn) 20 5 5 系統(tǒng)各模塊之間的關系 23 6 軟件實現(xiàn)與測試 24 6 1 軟件測試方案 24 6 2 網(wǎng)絡客戶端測試用例 25 7 總結 27 致謝 28 參考文獻 29 1 1 緒論緒論 1 1 課題背景課題背景 電腦已經(jīng)深入到日常工作和生活的方方面面 比如文字處理 信息管理 輔助設計 圖形圖像處理 教育培訓以及游戲娛樂等 各行各業(yè)的人們無須經(jīng) 過特別的訓練就能夠使用電腦完成許許多多復雜的工作 然而 雖然現(xiàn)在世界 上已經(jīng)充滿了花樣繁多的各種軟件 但它們依然不能滿足用戶的各種特殊需要 人們還不得不開發(fā)適合自己特殊需求的軟件 Java 語言作為一種面向?qū)ο蟮木?程語言 具有分布式 可移植 高性能 多線程等特點 1 如今網(wǎng)絡休閑游戲 發(fā)展迅速 它憑借健康 方便 互動性強 益智等諸多優(yōu)點 成為大部分現(xiàn)代 人休閑娛樂的首選 網(wǎng)絡五子棋游戲是使用 Java 語言開發(fā)的一款游戲 它使用 SOCKET 建立 連接 多線程處理數(shù)據(jù) 這些特點使這款游戲無論是服務器還是客戶端的實現(xiàn) 都相對容易 1 2 選題的背景和意義選題的背景和意義 隨著計算機網(wǎng)絡技術的發(fā)展 網(wǎng)絡游戲已經(jīng)成為計算機技術中最具潛力的熱 點領域 隨著聯(lián)眾世界 騰訊游戲等網(wǎng)絡游戲平臺的拓展 越來越多的人參與到 網(wǎng)絡游戲中 特別是其中一些休閑益智類的棋牌游戲 集趣味性 娛樂性 互 動性和益智性于一體 擁有大量的用戶 因此使用 Java 開發(fā)網(wǎng)絡五子棋游戲是 一個實用性很強的畢業(yè)設計項目 網(wǎng)絡五子棋游戲的總體功能是要設計出具有精美界面的 具備人工智能的 支持網(wǎng)絡對弈的五子棋游戲 本系統(tǒng)最終的目的是建立一個有具體規(guī)則的五子 棋平臺 使兩臺不同計算機的使用者通過一定的網(wǎng)絡連接 達到網(wǎng)絡對弈的目 的 以及單機上的人機對戰(zhàn) 1 3 主要研究內(nèi)容主要研究內(nèi)容 本課題為了熟悉五子棋規(guī)則及技巧 以及研究簡單的人工智能 決定用 Java 開發(fā)五子棋游戲 主要完成了人機對戰(zhàn)和網(wǎng)絡對戰(zhàn) 2 個功能 網(wǎng)絡連接部 分為 Socket 編程應用 客戶端負責界面維護和收集用戶輸入的信息 及錯誤處 理 服務器維護在線用戶的基本信息和任意兩個對戰(zhàn)用戶的棋盤信息 動態(tài)維 護用戶列表 在人機對弈中通過簡單搜索和估值模塊 來提高電腦棋手的智能 分析估值模塊中的影響精準性的幾個要素 以及提出若干提高精準性的辦法 以及對它們的搜索進行比較 在這些算法的基礎上分析一些提高電腦智能方案 2 算法的研究有助于理解程序結構 增強邏輯思維能力 在其他人工智能方面也 有很大的參考作用 1 4 五子棋簡介五子棋簡介 五子棋是一種兩人對弈的純策略型棋類游戲 是起源于中國古代的傳統(tǒng)黑 白棋種之一 發(fā)展于日本 流行于歐美 容易上手 老少皆宜 而且趣味橫生 引人入勝 不僅能增強思維能力 提高智力 而且富含哲理 有助于修身養(yǎng)性 3 2 開發(fā)環(huán)境及工具介紹開發(fā)環(huán)境及工具介紹 2 1 開發(fā)環(huán)境及運行環(huán)境開發(fā)環(huán)境及運行環(huán)境 2 1 1 開發(fā)環(huán)境 AMD Athlon tm 2 10GHz 1G 內(nèi)存 160G 硬盤 Microsoft Windows XP Professional Service Pack 3 JDK 1 60 Eclipse 3 5 2 1 2 運行環(huán)境 Intel Pentium 2 及以上處理器 128M 以上內(nèi)存 20G 以上硬盤 Microsoft Windows 9X NT 操作系統(tǒng) 1024 768 或以上的屏幕分辨率 2 2 Java 簡介簡介 Java 是一種簡單的 面向?qū)ο蟮?分布式的 解釋的 安全的 可移植的 性能優(yōu)異的多線程語言 它以其強安全性 平臺無關性 硬件結構無關性 語 言簡潔 面向?qū)ο蟮奶攸c 在網(wǎng)絡編程語言中占據(jù)了無可比擬的優(yōu)勢 成為實 現(xiàn)電子商務系統(tǒng)的首選語言 2 2 2 1 Java 的起源與發(fā)展 Java 是 Sun 公司在 1995 年推出的新的編程語言 它是一種跨平臺的 應用 于當前高速發(fā)展的網(wǎng)絡編程語言 在編程語言中 可以認為 Basic 語言促使了 C 語言的出現(xiàn) C 語言促使了 C 的出現(xiàn) 而 C 又促使了 Java 語言的出現(xiàn) 自 Java 正式推出之后 以其特有的優(yōu)勢迅速發(fā)展 經(jīng)過幾年的發(fā)展 Java 已經(jīng)在軟件開發(fā)和動態(tài)網(wǎng)站上占有相當大的市場 Java 分為 J2SE J2EE 和 J2ME 三種 J2SE 是 Java 平臺標準版 主要應用于桌面程序和 Java 小應用程序 開發(fā) J2EE 主要用于企業(yè)級開發(fā)和大型網(wǎng)站的開發(fā) J2ME 主要用于手機等移 動設備程序的開發(fā) 3 2 2 2 Java 的特點 前面已經(jīng)提到過 Java 是在開發(fā)家用電器軟件時開發(fā)出來的 怎么樣才能 讓這種軟件在每個平臺上都能正常地運行呢 這就用到了 Java 的平臺無關性 在 Java 出現(xiàn)之前 這個問題是當時每個程序員都難以解決的問題 Java 出現(xiàn)之 4 后 這個問題就徹底解決了 引用他們的目標 就是 只要寫一次程序 在任何 地方 任何時間該程序永遠都能夠運行 Java 是怎么實現(xiàn)平臺無關性的呢 只要安裝 Java 運行系統(tǒng) Java 就可以在 任何處理器上運行 Java 解釋器生成與體系無關的字節(jié)碼指令 這些指令對應 于 Java 虛擬機里表示 Java 解釋器得到字節(jié)碼后 對它進行轉(zhuǎn)換 使之能夠在 不同的平臺上運行 1 簡單性 Java 語言是一種面向?qū)ο蟮恼Z言 它通過提供最基本的方法來完成指定的 任務 開發(fā)者只需要知道一些概念就能夠編寫出一些應用程序 Java 程序相對 較小 其代碼能夠在小機器 例如手機上運行 這應該是大家經(jīng)??梢钥吹降?2 面向?qū)ο笳Z言 Java 的設計集中于對象及其接口 它提供了簡單的類機制以及動態(tài)的接口 模型 對象中封裝了它的狀態(tài)變量和相應的方法 實現(xiàn)了模塊化和信息的隱藏 而類則是提供了對象的原型 并且通過繼承的機制 子類可以使用父類所提供 的方法 以實現(xiàn)代碼的復用 3 健壯性 Java 語言被病毒感染和破壞得最少 大部分病毒程序常用的方法就是通過 巧妙地運用地址變量如指針來獲取計算機的資源 而 Java 正好放棄了難學和危 險的指針功能 從而使 Java 更安全 4 多線程 設計 Java 的目標之一 就是為了滿足人們對創(chuàng)建交互式網(wǎng)上程序的需要 多線程就是為實現(xiàn)這個目標而設計出來的 它使用 Java 編寫出來的應用程序可 以同時執(zhí)行多個任務 多線程機制使應用程序能夠并行執(zhí)行 而且同步機制保 證了對共享數(shù)據(jù)的正確操作 5 自動內(nèi)存管理 可以說自動內(nèi)存管理是 Java 健壯性的體現(xiàn) 內(nèi)存管理是很多種應用程序內(nèi) 的關鍵因素 在網(wǎng)絡上的其他地方讀取大量的數(shù)據(jù) 之后把該數(shù)據(jù)寫入硬盤上 的數(shù)據(jù)庫內(nèi) 一般的設計就是把數(shù)據(jù)讀入內(nèi)存中的某種集合內(nèi) 對這些數(shù)據(jù)執(zhí) 行某些操作 之后把數(shù)據(jù)寫入數(shù)據(jù)庫 在數(shù)據(jù)寫入數(shù)據(jù)庫后 在下一批處理之 前 臨時存儲數(shù)據(jù)的集合必須清空舊數(shù)據(jù) 或者被刪除后再建 這種操作可能 執(zhí)行很多次 在像 C 這些不提供自動垃圾搜集的語言中 手工清空或刪除集 合數(shù)據(jù)結構邏輯上的一點點缺陷就可能導致大量的內(nèi)存被錯誤地收回或丟失 5 Java 的自動內(nèi)存管理正好解決這一點 它使程序員不用再為內(nèi)存管理寫大量的 代碼 4 2 3 Java Socket 網(wǎng)絡編程網(wǎng)絡編程 2 3 1 Java Socket 網(wǎng)絡編程基礎 網(wǎng)絡編程 簡單的理解就是兩臺計算機相互通信 其基本模型就是客戶機 服務器模型 也就是通信雙方中的一方必須提供一個固定的位置 而另一方則 只需要知道這個固定的位置 并去建立兩者之間的聯(lián)系 然后完成數(shù)據(jù)交換 這里提供固定位置的一方通常稱為服務器 而建立聯(lián)系的一方通常稱為客戶端 基于客戶機 服務器的 Socket 通信模型如下圖所示 5 服務響應 服務請求 建立連接 客戶端 服務器端 創(chuàng)建 Socket 類對 象 指定服務器端公認的 Socket 地址和端口 在 Socket 上監(jiān)聽客戶 端的連接請求 阻塞 等待連接的建 立 接收客戶端的請求信息 解釋并處理請求信息 將處理結果返回給客戶端 創(chuàng)建 Socket 類對 象 向服務器端發(fā)送連接請求 向服務器發(fā)出服務請求 接收服務結果 圖圖 1 基于客戶機基于客戶機 服務器的服務器的 Socket 通信模型通信模型 Java 為這個模型的實現(xiàn)提供了簡化了的 Socket 編程接口 在程序中只要導 入 java io 包就可以方便的使用 java 的 Socket 編程接口 Java 中 Socket 通信模型如下圖所示 6 Server ServerSocket ss port ss accept 等待連接 OutputStream InputStream ss close Client Socket s host port 請求連接服務器 OutputStream InputStream s close 圖圖 2 Java 中的中的 Socket 編程模型編程模型 2 3 2 Socket 編程的實現(xiàn) Socket 類表示一個系統(tǒng)的 IP 地址和端口號的結合 可以理解為客戶端或者 服務器端的一個特殊對象 它包含兩個處理流的方法 一個是 getInputStream 方法 另一個是 getOutputStream 方法 分別用來獲得網(wǎng)絡的輸入流和輸出流 構造 Socket 對象的示例代碼如下 Socket s new Socket IP port IP 為服務器端的 IP 地址 port 是服務器端的端口號 ServerSocket 是一個專門用來建立 Socket 服務器的類 它可以用服務器需 要使用的端口號作為參數(shù)來創(chuàng)建 ServerSocket 對象 示例代碼如下 ServerSocket ss new ServerSocket TCP PORT 當一個客戶端程序建立一個 Socket 連接 所連接的端口號為上述 TCP PORT 時 服務器對象 ss 便響應這個連接 然后 ss 對象調(diào)用 accept 方法 創(chuàng)建一個代表服務器的 Socket 對象 創(chuàng)建后服務器便可以利用這個 Socket 對象 與客戶端進行通信 示例代碼如下 Socket clientSocket ss accept 在本系統(tǒng)的實現(xiàn)過程中 在支持網(wǎng)絡對弈的服務器類的定義中需要使用 ServerSocket 類來響應多個客戶端的連接請求 2 4 Java 圖形編程圖形編程 Java 中的 Graphics 類是用于繪圖和顯示格式化文本的工具類 在 Java 程序 中繪圖必須在一個窗口 容器 中進行 繪圖窗體經(jīng)常被設計為一個組件容器 一般首先在一個面板中進行繪制 然后再將這個面板添加到顯示窗口中 Graphics 類是在 java awt 包中聲明 顯示格式化文本和繪圖是通過調(diào)用 Graphics 類的 drawXXX 方法實現(xiàn)的 例如 drawString String drawLine 等 繪 圖采用的坐標系是原點在左上角 縱軸向下以像素為單位的坐標系 6 3 需求分析和總體設計需求分析和總體設計 7 網(wǎng)絡互連實現(xiàn)信息的共享成為以后計算機的發(fā)展趨勢 現(xiàn)有的網(wǎng)絡編程模 式主要分成兩類 一種是基于 C S Client Server 客戶機 服務器 模式 另一種是 B S Browser Server 瀏覽器 服務器 模式 C S 程序具有好的交互性 功能強 大 但是客戶端必須安裝客戶端軟件 限制了其應用 B S 模式下要求客戶端 具有瀏覽器 但瀏覽器在安全方面有一些限制 交互性與功能有一些限制 網(wǎng) 絡五子棋系統(tǒng)應用于局域網(wǎng) 對交互性要求較高 本系統(tǒng)選用了 C S 模式進行 實現(xiàn) 網(wǎng)絡內(nèi)部使用 TCP IP 方式利用 Socket 通過傳輸層提供的服務 使用 Java 進行圖形用戶的搭建 系統(tǒng)分成兩個部分 分別為服務端程序以及客戶端 程序 7 本文首先介紹系統(tǒng)設計思想以及相關協(xié)議的制定 以及分別闡述了服務端 程序以及客戶端程序的具體實現(xiàn) 五子棋網(wǎng)絡游戲主要分為兩個部分 游戲服務端和游戲客戶端 五子棋游 戲規(guī)則 游戲雙方各執(zhí)一種顏色的棋子 輪流在棋盤下棋子 一方的棋子在橫 豎 兩個對角線上首先到達五子者為勝方 游戲服務端主要存儲所有連線客戶 的相關信息及各種狀態(tài) 并負責游戲客戶之間信息的傳遞 游戲客戶端提供客 戶連接服務器 具有創(chuàng)建 邀請 加入 悔棋 退出游戲等等功能 并能與聯(lián) 網(wǎng)客戶進行游戲 3 1 系統(tǒng)設計思想系統(tǒng)設計思想 WZQ Client WZQ Client WZQ Client WZQ Client WZQ Server 客戶端 服務 器端 用戶通過 TCP 與服務器 建立連接 通過 UDP 與 服務器交互數(shù)據(jù) 圖圖 3 網(wǎng)絡五子棋設計框架網(wǎng)絡五子棋設計框架 本系統(tǒng)的功能能夠?qū)崿F(xiàn)一個在網(wǎng)絡上供客戶進行對戰(zhàn)的五子棋網(wǎng)絡游戲 客戶只要登陸到服務器上 就能選擇任何其它用戶已創(chuàng)建好的游戲 進行五子 棋對戰(zhàn)游戲 是 C S 模式的網(wǎng)絡游戲 在 C S 模式游戲中 Server 一般提供 所有用戶的全局信息 并能提供客戶之間的信息轉(zhuǎn)發(fā) 客戶之間的通訊必須通 8 過 Server 進行 因為在多個客戶能夠連接到同一臺 Server 上 所以 Server 必須 用 Thread 負責每個用戶的通訊和消息處理 服務端程序通過一個 Thread 線程類監(jiān)聽客戶端的連接 一旦客戶連接 為 該客戶建立連接并啟動一個特定的客戶 thread 利用該連接不斷從客戶讀取數(shù) 據(jù) 實現(xiàn)客戶和服務器或者客戶與客戶之間的信息的交互 客戶端同樣采用的是線程控制的思想 在每一個客戶端連接上服務器后 就為 此客戶端啟動一個網(wǎng)絡收發(fā)數(shù)據(jù)線程 3 2 系統(tǒng)總體設計系統(tǒng)總體設計 系統(tǒng)使用 Socket 技術以及 java 多線程機制結合在進行客戶與服務端之間 信息的交互 但一個真正實用程序必須針對具體應用定制一套協(xié)議用于用戶程 序之間進行交互 而該協(xié)議的定制往往是編寫程序的關鍵也是核心內(nèi)容 該協(xié) 議的完善決定程序是否能夠正常運行 所謂協(xié)議就是程序之間交互的信息的格 式規(guī)定 服務端和客戶端都遵循該協(xié)議才能夠進行對話 通俗講是人類之間 的語言 8 客戶端 服務器 客戶端發(fā)送連接狀 態(tài)信息和聊天信息 服務器端轉(zhuǎn)發(fā)其他 客戶端信息 圖圖 4 客戶端與服務器端的信息交換客戶端與服務器端的信息交換 3 3 系統(tǒng)功能模塊及流程系統(tǒng)功能模塊及流程 3 3 1 系統(tǒng)主要功能模塊 根據(jù)上面的系統(tǒng)的設計要求 可以將此網(wǎng)絡五子棋游戲分為以下幾個模塊 初始化模塊 建立棋盤數(shù)組并清零以備使用 初始化鍵盤 鼠標等輸入 輸出設備并在屏幕上畫出棋盤 加載音樂及顯示詩詞功能 主循環(huán)控制模塊 負責控制下棋順序 當輪到某方下子時 負責將程 序流程轉(zhuǎn)到相應的模塊中 主要擔當一個調(diào)度者的角色 9 玩家落子模塊 即用戶在指定落子區(qū)域單擊后 程序會計算該子的坐 標 并且將棋盤數(shù)組中坐標處記錄棋子的顏色 1 代表黑色 2 代表白 色 以表明是服務方下的棋子還是客戶方下的棋子 分析盤面填寫棋型表模塊 本程序核心模塊之一 人工智能算法的根 本依據(jù) 電腦落子模塊 根據(jù)填寫的棋盤表 選擇最優(yōu)落子位置 勝負判斷模塊 根據(jù)預先設定的規(guī)則 判斷游戲勝負 網(wǎng)絡模塊 在人機對弈的基礎上 添加網(wǎng)絡功能的實現(xiàn) 使兩臺不同 計算機的用戶通過網(wǎng)絡連接 實現(xiàn)網(wǎng)絡對弈的功能 9 3 3 2 系統(tǒng)主流程 某方勝利 某方勝利 某方退出 網(wǎng)絡對弈 人機對弈 否 否 某方退出 開始 初始化 游戲模式 主循環(huán)控制 分析盤面并 填寫棋型表 玩家落子 電腦落子 客戶端一客戶端二 主循環(huán)控制 判斷勝負 結束 判斷勝負重新開始 顯示詩詞音樂 圖圖 5 網(wǎng)絡五子棋游戲流程圖網(wǎng)絡五子棋游戲流程圖 10 3 4 玩家視圖與操作玩家視圖與操作 3 4 1 服務器端 圖圖 6 網(wǎng)絡五子棋服務器端界面網(wǎng)絡五子棋服務器端界面 服務器端主要通過建立流連接來連接客戶端 與客戶端進行相互通信 轉(zhuǎn) 發(fā)信息 接收客戶端的信息 接收信息后按照此客戶端的要求將信息發(fā)送到相 應的客戶端 服務器端起到了中轉(zhuǎn)的作用 10 3 4 2 客戶端 圖圖 7 用戶操作界面用戶操作界面 userPad chatPad chessPad inputPad controlPad 11 玩家進入游戲界面時 首先會彈出一個對話框 提示用戶連接服務器 當 玩家連接上服務器后 就會在界面右上角給出用戶的初始玩家名 在聊天內(nèi)容 框中會給出用戶提示 提醒玩家先創(chuàng)建游戲或者加入別的玩家建立好的游戲 此外如果玩家不想與其他玩家對弈 也可以選擇人機對戰(zhàn) 和電腦對弈 玩家 在邀請其他玩家加入自己建立好的游戲或者要加入其他玩家建立的游戲 需要 玩家選在用戶列表界面選擇要操作的玩家 再發(fā)起邀請或者加入 此游戲界面 簡單 用戶易操作上手 適合各個年齡的人群 游戲各模塊功能如下 各模塊實現(xiàn)功能 userPad 用于顯示服務器發(fā)送過來的當前連接上服務器的用戶列表 即活 動玩家的玩家名稱 chatPad 用于顯示服務器發(fā)送過來的提示信息以及用戶公聊或私聊的內(nèi)容 chessPad 用于繪制棋盤及棋子 以及當前的提示信息 另外人機對戰(zhàn)的主 要功能也在此模塊實現(xiàn) inputPad 用于用戶選擇要公聊或私聊的對象 即所有人或某一具體的玩家 輸入要發(fā)送的消息 發(fā)送給服務器 通過服務器轉(zhuǎn)發(fā)出去 controlPad 用于對當前的游戲界面進行實時的控制 包括 開關音樂 修 改玩家名字 建立游戲 邀請加入 加入游戲 放棄游戲 悔棋和人機對戰(zhàn) 12 4 概要設計概要設計 基于玩家的需求分析 本系統(tǒng)的實現(xiàn)主要用到如下幾個類 1 ChessServer 類 主要用于傳遞玩家信息 2 ChessClient 類 主要用于初始化玩家信息 定義玩家的操作狀態(tài) 3 NetClient 類 主要用于實現(xiàn)網(wǎng)絡用戶的連接 玩家通過此類發(fā)送本方的 游戲狀態(tài)以及接收從服務器傳遞過來的信息進行處理 4 ChessPad 類 主要用于繪制玩家棋盤及棋子 另外電腦落子的算法也全 部在此類中實現(xiàn) 4 1 游戲各主要類的功能與主要對象游戲各主要類的功能與主要對象 4 1 1 服務器類 服務器類用于接收客戶端的連接 并為每個客戶端在服務器端啟動單獨 的一個守護線程 線程的主要功能是接收客戶端發(fā)送過來的消息并做出相應的 處理 客戶端發(fā)送到服務器端的主要消息有兩部分 一部分是客戶端發(fā)送給服 務器端需要服務器端進行處理的 如客戶端發(fā)送過的連接信息 客戶端發(fā)送過 來的改名信息 客戶端發(fā)送過的斷開連接信息等 另一部分是客戶端發(fā)送給服 務器端需要服務端轉(zhuǎn)發(fā)給其他客戶端的消息 如客戶端給游戲另一方發(fā)送的棋 盤狀態(tài)數(shù)據(jù) 倒計時信息 聊天信息 服務器類的主要對象 1 TCP PORT 服務器端用于建立套接字的端口號 為了可靠的用戶連接 因此在服務器端定 義了此端口號為 TCP 的 主要用于建立服務器端與客戶端的 TCP 連接 2 UDP PORT 服務器端用于向客戶端轉(zhuǎn)發(fā)數(shù)據(jù)需要綁定的用戶數(shù)據(jù)報套接字的端口號 玩家發(fā)送給服務器需要轉(zhuǎn)發(fā)的消息時 服務器端的DatagramSocket 就是使用此端口 號建立的 UDP 連接 3 clientDataHash 用于保存客戶端套接字和IP 套接字地址的哈希表 服務器可以通過發(fā)送消息的 客戶端 Socket 得到其 IP 套接字地址 將消息轉(zhuǎn)發(fā)出去 4 clientNameHash 用于保存客戶端套接字和客戶端當前名字的哈希表 同樣是為了轉(zhuǎn)發(fā)客戶 端消息的 5 chessPeerHash 13 用于保存每一對開局玩家信息的哈希表 表中鍵是服務方 值是客戶方 每一對玩家需要交換的如棋盤狀態(tài)數(shù)據(jù) 倒計時信息大都依賴于此哈希表來實 現(xiàn) 圖圖 8 服務器類用況圖服務器類用況圖 4 1 2 游戲客戶端 游戲客戶端的主要功能是為了初始化和組織用戶界面 并且定義了各個 按鈕的功能 游戲客戶端的主要對象如下 1 isGameConnected 用于判定玩家是否與服務器連接 2 isChess 用于判定玩家是否已經(jīng)在開局游戲中 3 isServer 用于判定在此局開局游戲中 當前玩家是不是服務方 即主方 4 isClient 用于判定在此局開局游戲中 當前玩家是不是客戶方 即次方 5 time Time 類的對象 用于啟動玩家倒計時信息 6 shici ShiCi 類的對象 用于在玩家啟動時動態(tài)地顯示五子棋詩的信息 7 sing Sing 類的對象 用于為客戶端啟動音樂功能 14 圖圖 9 游戲客戶端用況圖游戲客戶端用況圖 4 1 3 網(wǎng)絡客戶端類 網(wǎng)絡客戶端的主要功能是當前玩家與其他玩家進行對弈時 網(wǎng)絡客戶端 需要發(fā)送和接收的消息處理 網(wǎng)絡客戶端的主要對象 1 r 隨機函數(shù)類的對象 用于為每個客戶端啟動時 為每一個客戶端隨機分配 一個端口號 玩家使用此端口號來接收信息 2 time 當前玩家方的時間信息 初始化時間為 5 分鐘 3 otherTime 當前開局游戲中對方的時間信息 初始時間為 5 分鐘 圖圖 10 網(wǎng)絡客戶端用況圖網(wǎng)絡客戶端用況圖 15 4 1 4 棋盤類 棋盤類的主要功能是繪制玩家的棋盤狀態(tài)與棋子信息以及電腦落子算法的 實現(xiàn) 棋盤類的主要對象 1 board 玩家所維護的棋盤二維數(shù)組 結果為 1 表示 x y 位置為黑子 結果為 2 表 示 x y 位置為白子 2 withComputer 玩家與電腦對弈的標志 如果當前玩家是與電腦對弈 此變量值為真 否 則為假 3 isMouseEnable 以此變量來控制在網(wǎng)絡對弈的雙方中 當前玩家是否處于可以落子狀態(tài) 因為網(wǎng)絡對弈要求當一玩家下完后 對方才能落子 因此當此變量為真時 玩 家可以落子 當此變量為假時 玩家不可以落子 4 isRegretEnable 判斷當前的悔棋按鈕是否可用 為真時 玩家可以悔棋 為假時 玩家不 可以悔棋 5 isFull 判斷當前的棋盤是否已經(jīng)下滿 當棋盤下滿后 分別給游戲雙方一個提示 然后進行清盤操作 圖圖 11 棋盤類用況圖棋盤類用況圖 16 5 詳細設計詳細設計 5 1 服務器端設計服務器端設計 服務器端主要通過建立流連接來連接客戶端 與客戶端進行相互通信 轉(zhuǎn) 發(fā)信息 接收客戶端的信息 接收信息后按照此客戶端的要求將信息發(fā)送到相 應的客戶端 服務器端起到了中轉(zhuǎn)的作用 服務器端主要方法如下 1 在主類的 Start 函數(shù)中 用于初始化連接的信息為 ss new ServerSocket TCP PORT udpSocket new DatagramSocket UDP PORT ss 為服務器端 Socket 為了保證連接的正確性和轉(zhuǎn)發(fā)數(shù)據(jù)的高效性 因此 定義了兩個端口變量 TCP PORT 和 UDP PORT 服務器端用 TCP PORT實現(xiàn)服務器 套接字 服務器套接字等待請求通過網(wǎng)絡傳入 用UDP PORT用來發(fā)送和接收 數(shù)據(jù)報包的套接字 2 在主類 chessServer 中 其用于接受客戶端連接信息的函數(shù) start 服務 器端每接收一個客戶端連接 就會為每個客戶端在服務器端啟動一個 UDPThread 線程 UDPThread 類繼承了 Thread 它集成了服務器端的所有功能 包括與各客戶端之間的相互通信 轉(zhuǎn)發(fā)信息 3 在方法 actionPerformed ActionEvent e 實現(xiàn)了按鈕的控制功能 4 方法 feedBack String 用于實現(xiàn)服務器端向當前的客戶端發(fā)送消息 服 務器依靠當前客戶端的套接字 從 clientDataHash 表中得到當前客戶的 IP 套接 字 服務器端將消息從此 IP 套接字中轉(zhuǎn)發(fā)出去 String 即為要轉(zhuǎn)發(fā)的消息內(nèi)容 5 方法 publicTalk String 用于實現(xiàn)服務器向所有玩家轉(zhuǎn)發(fā)消息內(nèi)容 在此 方法實現(xiàn)中 服務器采用一個 For 循環(huán)遍歷得到 ClientDataHash 表中的套接字 將消息依次轉(zhuǎn)發(fā)給各個客戶端 String 串為要轉(zhuǎn)發(fā)的消息內(nèi)容 6 方法 getUserList 用于得到當前的玩家列表 以使每個玩家的玩家列表 能夠?qū)崟r更新 一旦每個用戶連接上服務器 服務器就要廣播發(fā)送當前所以玩 有列表信息 7 doMessage String 方法用于對服務器接收到的消息進行處理 8 chessBackTalk String 方法用于對游戲中已經(jīng)對弈玩家的對方發(fā)送消息 此方法依靠 chessPeerHash 表得到玩家對手的名字 再利用 clientNameHash 中 得到對方的套接字 繼而將游戲方發(fā)送過來的消息轉(zhuǎn)發(fā)給對方 17 圖圖 12 服務器類類圖服務器類類圖 5 2 游戲客戶端設計游戲客戶端設計 游戲客戶端主要用于初始化玩家信息 定義玩家的操作狀態(tài) 包括游戲客 戶端界面的結構組織 定義游戲控制按鈕的實現(xiàn) 定義鍵盤事件的實現(xiàn) 主要方法 1 方法 launchFrame 用于在玩家客戶端啟動時 為用戶發(fā)送連接服務器信 息 并且加載詩詞顯示及背景音樂的播放 2 方法 actionPerformed ActionEvent e 用于實現(xiàn)玩家單擊客戶端下文的控制 按鈕的功能 在此方法中主要實現(xiàn)了玩家修改名字 創(chuàng)建游戲 邀請游戲 加 入游戲 放棄游戲以及人機對戰(zhàn)等各個按鈕的功能 參數(shù)為觸發(fā)事件的行為事 件 3 方法 keyPressed KeyEvent e 用于聊天功能的實現(xiàn) 當玩家在輸入框中輸 入了聊天信息后 用戶按回車鍵發(fā)送消息即觸發(fā)此事件 此事件中主要處理了 兩個行為 一是當用戶選擇所有人進行公聊時的處理 二是當玩家選擇某一具 體的玩家進行私聊時的處理 18 圖圖 13 游戲客戶端類類圖游戲客戶端類類圖 5 3 網(wǎng)絡客戶端設計網(wǎng)絡客戶端設計 網(wǎng)絡客戶端主要用于發(fā)送和接收服務器的消息 主要方法 1 方法 connect String int 用于連接服務器 第一個參數(shù)是連接服務器的 IP 地址 第二個參數(shù)是連接服務器的端口號 玩家在此方法中連接上服務器 并 且啟動一個線程用于接受服務器發(fā)送過來的消息 2 方法 restart 用于重新開始游戲 在此方法中要求將倒計時信息重新初 始化 并且進行清理棋盤操作 3 方法 send int String 用于向服務器發(fā)送此玩家的消息狀態(tài) 第一個參數(shù) 是消息類型 第二個參數(shù)是消息內(nèi)容 消息類型有如下幾種 發(fā)送消息類型 0 代表修改客戶端名字 1 代表客戶端建立游戲 2 代表客戶端加入游戲 3 代表向游戲?qū)Ψ酵ǜ婵蛻舳艘鸭尤?19 4 代表客戶端放棄游戲 5 代表客戶端對游戲?qū)Ψ桨l(fā)送過來的放棄操作進行斷開 6 代表游戲一方向另一方提出悔棋請求 7 代表游戲一方向另一方發(fā)送棋盤狀態(tài) 8 代表游戲一方向另一方發(fā)送時間信息 9 代表游戲一方游戲超時 10 代表邀請另一方加入游戲 11 代表受邀玩家同意了加入游戲 12 代表受邀玩家拒絕了加入游戲 4 方法 doMessage DatagramPacket 用于接收從服務器端發(fā)送過來的消息 參數(shù)代表的是玩家接收到的數(shù)據(jù)報 圖圖 14 網(wǎng)絡客戶端類類圖網(wǎng)絡客戶端類類圖 5 4 棋盤類設計棋盤類設計 棋盤類主要用于繪制棋盤以及電腦算法的實現(xiàn) 5 4 1 棋盤類的主要方法 1 方法 paint Graphics 用于繪制棋盤 棋子以及棋盤的背景圖片 為了消 除加載圖片時的窗口閃爍 在此方法中采用了雙緩沖技術 2 方法 clearBoard 用于清空棋盤以及一些變量的初始化操作 3 方法 select 用于實現(xiàn)當玩家與電腦對弈時 選擇誰是先手 以及對按鈕 狀態(tài)的設置 4 方法 is Full 用于判斷當前棋盤是否已無處落子 即棋盤是否已滿 如 果當前棋盤已滿 則向玩家發(fā)送一個提示框 告知玩家此局游戲流局 20 5 方法 judge int int int 用于判斷當前棋子落下時是否游戲勝負已分 第一 個參數(shù)是當前落子的橫坐標 第二個參數(shù)是當前落子的縱坐標 第三個參數(shù)是 當前落子的棋子的顏色 如果游戲獲勝 則方法返回真值 否則返回假值 圖圖 15 棋盤類類圖棋盤類類圖 5 4 2 電腦落子算法的實現(xiàn) 1 行棋簡要相關術語 成五 含有五枚同色棋子所形成的連 包括五連和長連 活四 有兩個點可以成五的四 沖四 只有一個點可以成五的四 死四 不能成五的四 活三 再走一著可以形成活四的三 眠三 再走一著可以形成沖四的三 死三 不能成五的三 活二 再走一著可以形成活三的二 眠二 再走一著可以形成眠三的二 死二 不能成五的二 2 落子算法分析 21 1 數(shù)據(jù)結構 首先為整個棋盤建立一張表格用以記錄棋子信息 使用一個 21 21 的二維 數(shù)組 board 21 21 數(shù)組的每一個元素對應棋盤上的一個交叉點 用 0 表 示空位 1 代表黑子 2 代表白子 這張表也是今后分析的基礎 在此 之后還要為電腦和玩家雙方各建立一張棋型表 Computer 21 21 4 和 Player 15 15 4 用來存放棋型數(shù)據(jù) 就是剛才所說的重要程度 比如用 20 代表 沖四 的點 用 15 代表 活三 的點 那么在計算重要性時 就可以根 據(jù) 20 15 得出前者比后者重要 下子時電腦便會自動選擇 沖四 的點 那為 什么棋型表要使用三維數(shù)組呢 因為棋盤上的每一個點都可以與橫 豎 左斜 右斜四個方向的棋子構成不同的棋型 所以一個點總共有 4 個記錄 這樣做的 另一個好處是可以輕易判斷出復合棋型 例如 如果同一點上有 2 個 15 就 是雙三 有一個 15 和一個 20 就是四三 2 程序流程 本程序由六個基本功能模塊構成 各模塊的詳細分析如下 1 初始化 首先 建立盤面數(shù)組 board 21 21 對戰(zhàn)雙方的棋型表 Computer 21 21 4 和 Player 21 21 4 并將它們清零以備使用 2 主循環(huán)控制模塊 控制下棋順序 當輪到某方下子時 負責將程序轉(zhuǎn)到相應 的模塊中去 主要擔當一個調(diào)度者的角色 3 玩家下子 當輪到玩家下時 玩家通過鼠標在棋盤上落子 程序會根據(jù)該點 的位置 在 board 21 21 數(shù)組的相應地方記錄 4 盤面分析填寫棋型表 本程序核心模塊之一 人工智能算法的根本依據(jù) 其 具體實現(xiàn)方法如下 玩家在下五子棋時 一定會先根據(jù)棋盤上的情況 找出當 前最重要的一些點位 如 活三 沖四 等 然后再在其中選擇落子點 但是 電腦不會像人一樣分析問題 要讓它知道哪是 活三 哪是 沖四 就得在棋盤上逐點計算 一步一步的教它 先來分析己方的棋型 從棋盤左上角出發(fā) 向右逐行搜索 當遇到一個空 白點時 以它為中心向左挨個查找 如果遇到己方的子則記錄然后繼續(xù) 如果 遇到對方的子 空白點或邊界就停止查找 左邊完成后再向右進行同樣的操作 最后把左右兩邊的記錄合并起來 得到的數(shù)據(jù)就是該點橫向上的棋型 然后把 棋型的編號填入到 Computer x y n 中就行了 x y 代表坐標 n 0 1 2 3 分別代表橫 豎 左斜 右斜四個方向 而其他三個方向的棋型也可用同樣 的方法得到 當搜索完整張棋盤后 己方棋型表也就填寫完畢了 然后再用同 樣的方法填寫電腦的棋型表 以下是給出的棋型的計分標準 22 成五 100000 活四 10000 沖四 5000 死四 500 活三 200 眠三 100 死三 50 活二 5 眠二 4 死二 3 5 電腦下子 有了上面填寫的兩張棋型表 現(xiàn)在要作的就是讓電腦知道在哪一 點下子了 遍歷棋型表 Computer 15 15 4 和 Player 15 15 4 找出其中數(shù)值最 大的一點 在該點下子即可 6 勝負判斷 毋須多言 某方形成五子連即獲勝 11 3 算法流程 電腦落子 是否 否 游戲開始 電腦先手 電腦執(zhí)行算法 找 到最佳落子位置 玩家落子 游戲結束 判斷所選棋子位置的四 個方向的結構 并且給出 各個方向上的權值 結合四個角度的權 值 得出總值 循環(huán)得出最大權值 返回最佳落子位置 圖圖 16 人機對戰(zhàn)算法流程人機對戰(zhàn)算法流程 23 5 5 系統(tǒng)各模塊之間的關系系統(tǒng)各模塊之間的關系 圖圖 17 各模塊關系圖各模塊關系圖 系統(tǒng)主要功能的實現(xiàn)在于 ChessServer 類 ChessClient 類 NetClient 類 ChessPad 類之間的交互 在實現(xiàn)人機對弈模塊 主要用到的類是 ChessClient 類 和 ChessPad 類 ChessClient 類用于組織界面及玩家單擊按鈕功能的實現(xiàn) ChessPad 類用于繪制棋盤以及玩家和電腦的落子情況 人機對弈的算法也在本 類中實現(xiàn) 在實現(xiàn)網(wǎng)絡對弈模塊 主要用到的類是 ChessServer 類 ChessClient 類 NetClient 類 服務器類與客戶端類的信息交換依靠 Socket 編程實現(xiàn) 其他 類如 Sing 類 Shici 類 都是在用戶連接服務器后由游戲客戶端類自動調(diào)用其 類來實現(xiàn)功能的 24 6 軟件實現(xiàn)與測試軟件實現(xiàn)與測試 6 1 軟件測試方案軟件測試方案 軟件測試就是利用測試工具按照測試方案和流程對產(chǎn)品進行功能和性能測 試 甚至根據(jù)需要編寫不同的測試工具 設計和維護測試系統(tǒng) 對測試方案可 能出現(xiàn)的問題進行分析和評估 執(zhí)行測試用例后 需要跟蹤故障 以確保開發(fā) 的產(chǎn)品適合需求 軟件測試的目的 1 測試并不僅僅是為了找出錯誤 通過分析錯誤產(chǎn)生的原因和錯誤的 發(fā)生趨勢 可以幫助項目管理者發(fā)現(xiàn)當前軟件開發(fā)過程中的缺陷 以便及 時改進 2 這種分析也能幫助測試人員設計出有針對性的測試方法 改善測試 的效率和有效性 3 沒有發(fā)現(xiàn)錯誤的測試也是有價值的 完整的測試是評定軟件質(zhì)量的 一種方法 軟件測試可以分為黑盒測試和白盒測試 軟件的黑盒測試意味著測試要在軟件的接口處進行 這種方法是把測試對 象看做一個黑盒子 測試人員完全不考慮程序內(nèi)部的邏輯結構和內(nèi)部特性 只 依據(jù)程序的需求規(guī)格說明書 檢查程序的功能是否符合它的功能說明 因此黑 盒測試又叫功能測試或數(shù)據(jù)驅(qū)動測試 黑盒測試主要是為了發(fā)現(xiàn)以下幾類錯誤 1 是否有不正確或遺漏的功能 2 在接口上 輸入是否能正確的接受 能否輸出正確的結果 3 是否有數(shù)據(jù)結構錯誤或外部信息 例如數(shù)據(jù)文件 訪問錯誤 4 性能上是否能夠滿足要求 5 是否有初始化或終止性錯誤 軟件的白盒測試是對軟件的過程性細節(jié)做細致的檢查 這種方法是把測試 對象看做一個打開的盒子 它允許測試人員利用程序內(nèi)部的邏輯結構及有關信 息 設計或選擇測試用例 對程序所有邏輯路徑進行測試 通過在不同點檢查 程序狀態(tài) 確定實際狀態(tài)是否與預期的狀態(tài)一致 因此白盒測試又稱為結構測 試或邏輯驅(qū)動測試 白盒測試主要是想對程序模塊進行如下檢查 1 對程序模塊的所有獨立的執(zhí)行路徑至少測試一遍 2 對所有的邏輯判定 取 真 與取 假 的兩種情況都能至少測一遍 3 在循環(huán)的邊界和運行的界限內(nèi)執(zhí)行循環(huán)體 25 4 測試內(nèi)部數(shù)據(jù)結構的有效性 等等 基于以上的分析 本軟件采用的是黑盒測試的方法 6 2 網(wǎng)絡客戶端測試用例網(wǎng)絡客戶端測試用例 用例名稱 網(wǎng)絡客戶端功能 用例描述 玩家連接上服務器后 能夠依據(jù)系統(tǒng)提示創(chuàng)建或者加入游戲 能夠與其他玩家進行正常的對弈操作 用例入口 運行程序界面下的 ChessClient jar 進入網(wǎng)絡客戶端界面 表表 1 網(wǎng)絡客戶端功能測試網(wǎng)絡客戶端功能測試 測試用例 ID 場景測試步驟預期結果備注 1 初始界面顯示 正 常進入 輸入服務器地址成功進入客戶端啟動服務器 2 初始界面顯示 不 能登錄 未輸入服務器地址 或服務器地址不存 在 給出玩家服務器未 啟動的提示 3 加載詩詞顯示功 能及背景音樂播 放 進入客戶端 正常顯示詩詞及能 夠聽到背景音樂 4 修改名字 正確輸 入 單擊修改名字按鈕 輸入玩家名字 在玩家列表中原來 的名字更改為新的 玩家名 5修改名字 重名 玩家輸入名字在玩 家列表中已經(jīng)存在 系統(tǒng)給出用戶提示 玩家姓名已存在 6創(chuàng)建游戲單擊創(chuàng)建游戲按鈕 系統(tǒng)在聊天框中給 出提示并且在玩家 列表框中游戲名更 改為 等待游戲 玩家 名 7 邀請游戲 正常邀 請 在玩家列表中選擇 一個非游戲中的玩 家 單擊邀請加入 按鈕發(fā)出邀請 系統(tǒng)無
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 女子典當婚姻協(xié)議書
- 合并家庭組建協(xié)議書
- 夫妻婚后貸款協(xié)議書
- 大伯出資建房協(xié)議書
- 學生軍訓承訓協(xié)議書
- 婚宴酒店預定協(xié)議書
- 合作拆除違建協(xié)議書
- 學生單獨回家協(xié)議書
- 學校實踐活動協(xié)議書
- 學校夜間值班協(xié)議書
- 十字頭夾具設計說明書
- 04S202 室內(nèi)消火栓安裝
- 醫(yī)療設備強檢計量目錄(參考)
- 三年級硬筆書法課課件
- 佳發(fā)教育考試網(wǎng)上巡查系統(tǒng)(標準版)
- 投融資部面試題本
- 汽車配件名稱大全全
- 新版pep小學英語四年級下冊《unit-5-my-clothes-Part-B-Read-and-write-》課件
- 康復治療-運動療法-課件
- 《學弈》優(yōu)質(zhì)課一等獎課件
- 橋梁工程傾斜監(jiān)測
評論
0/150
提交評論