版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、分類(lèi)號(hào):tp311.1 u d c:d10621-408-(2008) 2478-0密 級(jí):公 開(kāi) 編 號(hào):2004032成都信息工程學(xué)院學(xué)位論文網(wǎng)絡(luò)聊天與五子棋的設(shè)計(jì)與實(shí)現(xiàn)論文作者姓名:申請(qǐng)學(xué)位專(zhuān)業(yè):網(wǎng)絡(luò)工程申請(qǐng)學(xué)位類(lèi)別:工學(xué)學(xué)士指導(dǎo)教師姓名(職稱(chēng)):(副教授)論文提交日期:2007年05月24日網(wǎng)絡(luò)聊天與五子棋的設(shè)計(jì)與實(shí)現(xiàn)摘 要20世紀(jì)末,隨著計(jì)算機(jī)科學(xué)的發(fā)展,網(wǎng)絡(luò)應(yīng)用越來(lái)越廣泛,為廣大網(wǎng)絡(luò)用戶(hù)提供了更加周到和人性化的服務(wù)。個(gè)性化已逐漸成為當(dāng)今網(wǎng)絡(luò)應(yīng)用的潮流。本論文提出一個(gè)集聊天和五子棋游戲于一體的網(wǎng)絡(luò)應(yīng)用系統(tǒng)的解決方案,并對(duì)其具體應(yīng)用中的實(shí)現(xiàn)模塊進(jìn)行剖析。首先,此系統(tǒng)包括聊天和游戲兩個(gè)模
2、塊,聊天模塊具有用戶(hù)注冊(cè)、加載好友、添加和刪除好友、發(fā)送消息、接收消息、多人聊天等功能。游戲模塊具有悔棋、戰(zhàn)績(jī)顯示、人機(jī)對(duì)弈、人人對(duì)弈、聊天等功能。其次,此系統(tǒng)利用java語(yǔ)言進(jìn)行開(kāi)發(fā)的。系統(tǒng)使用socket來(lái)完成服務(wù)端和客戶(hù)端之間的通信,使用多線(xiàn)程技術(shù)支持多用戶(hù)操作,使用sql 2000對(duì)數(shù)據(jù)進(jìn)行永久性存儲(chǔ)。最后,此系統(tǒng)服務(wù)端通過(guò)定期的將數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)到內(nèi)存中的方式解決數(shù)據(jù)庫(kù)并發(fā)訪(fǎng)問(wèn)的瓶頸問(wèn)題。關(guān)鍵詞:網(wǎng)絡(luò)聊天;棋盤(pán)分割算法 ;設(shè)計(jì)模式;五子棋;design and realization of gobang and network chatabstractat the end of 20
3、th century, with the development of computer science, internet applications technology is widely used. this makes network users can enjoy more convenient and individual services. personalization is the trend of todays internet applications.this thesis proposes a solution of internet application syst
4、em that it sets chat、 gobang development in a body , and has dissected its realization module while employing specifically. firstly, this system includes two modules of chat and game the chat module can possess functions like users registration,loading good friends,adding and deleting the good frien
5、ds,and sending and receiving message,chating with many people ,and so on. the game module can possess function like retracting a false move、showing the record of victory,man-machine match,man-man match,chating, and so on. secondly, this system is developed by java language. this system uses socket t
6、o finish communication between the server and the client, it uses multi-threading technology to support for multi-client, uses sql 2000 to store permanent data. finally, the systems server solves the problem of the bottleneck of database through regularly updated information into memory from the dat
7、abase.key words:network chat; algorithm of partitioning chessboard;design patterns ;gobang; 目 錄論文總頁(yè)數(shù):38頁(yè)1 引言11.1 設(shè)計(jì)背景11.2 設(shè)計(jì)意義11.3 設(shè)計(jì)方法11.4 本論文的目的及工作內(nèi)容22 系統(tǒng)需求分析22.1業(yè)務(wù)用例分析22.2用例圖42.2.1基本用例42.2.2游戲子用例42.2.3聊天子用例52.3用例簡(jiǎn)要說(shuō)明52.4基本用例描述52.5擴(kuò)展用例描述82.6后續(xù)用例描述93 系統(tǒng)分析報(bào)告93.1 系統(tǒng)類(lèi)圖93.1.1用戶(hù)界面類(lèi)103.1.2業(yè)務(wù)處理類(lèi)103.1.3數(shù)據(jù)訪(fǎng)
8、問(wèn)類(lèi)103.1.4權(quán)限管理類(lèi)103.1.5異常處理類(lèi)113.2 類(lèi)的職責(zé)說(shuō)明113.4類(lèi)的靜態(tài)結(jié)構(gòu)123.5用例動(dòng)態(tài)分析123.6用戶(hù)界面原形134 系統(tǒng)設(shè)計(jì)報(bào)告164.1主要類(lèi)詳細(xì)設(shè)計(jì)圖164.1.1 游戲模塊類(lèi)設(shè)計(jì)164.1.2 聊天模塊類(lèi)設(shè)計(jì)164.2游戲類(lèi)的職責(zé)說(shuō)明174.3聊天類(lèi)的職責(zé)說(shuō)明184.4 主要活動(dòng)圖:204.4.1游戲客戶(hù)端與服務(wù)端活動(dòng)圖:204.4.2聊天服務(wù)端與客戶(hù)端活動(dòng)圖214.5 主要狀態(tài)圖224.5.1 用戶(hù)聊天狀態(tài)圖:224.5.2 用戶(hù)游戲狀態(tài)圖234.6 服務(wù)端與客戶(hù)端整體設(shè)計(jì)思想234.7 數(shù)據(jù)包設(shè)計(jì)235系統(tǒng)算法的詳細(xì)分析報(bào)告255.1 數(shù)據(jù)庫(kù)并發(fā)訪(fǎng)問(wèn)
9、瓶頸問(wèn)題解決方案255.2棋盤(pán)分割算法的詳細(xì)分析255.3 人機(jī)對(duì)弈的算法分析305.4 數(shù)據(jù)庫(kù)表效率問(wèn)題的解決方案325.5 防止灌水性注冊(cè)的解決方案335.6 整體提升性能的解決方案335.7 用戶(hù)下載好友和黑名單列表信息的實(shí)現(xiàn)說(shuō)明335.8多人并發(fā)聊天的實(shí)現(xiàn)方式335.9 多用戶(hù)并發(fā)下棋的實(shí)現(xiàn)方式345.10 用戶(hù)移動(dòng)好友,刪除好友,增加好友的實(shí)現(xiàn)說(shuō)明345.11 棋盤(pán)結(jié)構(gòu)的構(gòu)造說(shuō)明345.12 游戲積分處理的實(shí)現(xiàn)說(shuō)明345.13 悔棋功能的實(shí)現(xiàn)方式355.14音樂(lè)播放器的實(shí)現(xiàn)說(shuō)明35第6章系統(tǒng)測(cè)試與性能分析356.1系統(tǒng)測(cè)試方案356.2系統(tǒng)測(cè)試環(huán)境和測(cè)試條件356.3 系統(tǒng)性能分析3
10、5結(jié)論36參考文獻(xiàn)36致謝37聲明381 引言1.1 設(shè)計(jì)背景 在互聯(lián)網(wǎng)飛速發(fā)展及個(gè)人計(jì)算機(jī)普及的當(dāng)今社會(huì),各個(gè)領(lǐng)域都在充分利用著計(jì)算機(jī)資源。為了讓處于不同地方的人能通過(guò)計(jì)算機(jī)進(jìn)行實(shí)時(shí)通信和休閑愉悅,人們開(kāi)發(fā)出基于互聯(lián)網(wǎng)的網(wǎng)絡(luò)游戲和聊天工具。滕訊的qq就是行業(yè)中很好的聊天工具,但同時(shí)也是病毒的傳播工具。許多軟件開(kāi)發(fā)公司,他們需要一個(gè)自己公司內(nèi)部獨(dú)立的通信工具進(jìn)行通信和交流經(jīng)驗(yàn)?,F(xiàn)在的通信工具中只有滕訊qq,msn等幾個(gè)通信工具。隨著分布式系統(tǒng)領(lǐng)域的熱化,分布式處理技術(shù)也成為處理異步程序的主要技術(shù)。故以此作為研究對(duì)象來(lái)對(duì)通信原理進(jìn)行研究并對(duì)分布式處理技術(shù)及socket通信技術(shù)作比較。計(jì)算機(jī)硬件的
11、降低,使得計(jì)算機(jī)進(jìn)入所有家庭。休閑愉悅更是計(jì)算機(jī)提供給人們一個(gè)休閑的渠道。網(wǎng)絡(luò)游戲使得人們能感受到現(xiàn)實(shí)社會(huì)中感受不到的異度空間。1.2 設(shè)計(jì)意義現(xiàn)在只有幾個(gè)通信工具,而且是面向大眾的。雖然功能很強(qiáng)大,但是不適合作為企業(yè)內(nèi)部交流信息的通信工具,而且成為網(wǎng)絡(luò)病毒傳播的一種工具。作為企業(yè)內(nèi)部的通信工具應(yīng)該具有操作簡(jiǎn)單,實(shí)時(shí)響應(yīng)等特點(diǎn)。許多大型的網(wǎng)絡(luò)游戲并不適合所有的計(jì)算機(jī)用戶(hù),并且大型的網(wǎng)絡(luò)游戲需要安裝。給那些只希望休閑愉悅的人帶來(lái)很大的麻煩,所以通過(guò)瀏覽器和非安裝程序作為游戲的客戶(hù)端能很好的滿(mǎn)足所有的計(jì)算機(jī)用戶(hù)。網(wǎng)絡(luò)中的五子棋游戲需要雙人對(duì)弈,對(duì)于那些單用戶(hù)或者練習(xí)技術(shù)的人來(lái)說(shuō)需要找到一個(gè)人來(lái)和他
12、對(duì)弈。而對(duì)于那些人機(jī)對(duì)弈的五子棋程序又不能很好的滿(mǎn)足人牛刀小試的愿望。所以通過(guò)此次畢業(yè)設(shè)計(jì)來(lái)開(kāi)發(fā)一個(gè)實(shí)時(shí)通信和網(wǎng)絡(luò)五子棋游戲結(jié)合一體的程序。通過(guò)此應(yīng)用設(shè)計(jì)來(lái)學(xué)習(xí)和掌握游戲的開(kāi)發(fā)過(guò)程和算法實(shí)現(xiàn)。1.3 設(shè)計(jì)方法根據(jù)通信原理結(jié)合java的相關(guān)技術(shù)編寫(xiě)java版本的網(wǎng)絡(luò)聊天程序。并用java語(yǔ)言來(lái)編寫(xiě)網(wǎng)絡(luò)五子棋游戲。聊天程序采用c/s模式,游戲程序采用c/s和b/s模式。用sql2000數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)永久性的數(shù)據(jù)。游戲帳戶(hù)注冊(cè)的網(wǎng)頁(yè)頁(yè)面采用asp語(yǔ)言進(jìn)行設(shè)計(jì)。為防止用戶(hù)的灌水性注冊(cè)程序中采用驗(yàn)證碼機(jī)制進(jìn)行注冊(cè)。服務(wù)器端程序采用singleton模式并基于時(shí)間的回調(diào)定期的刷新數(shù)據(jù)庫(kù)中的數(shù)據(jù)到內(nèi)存中,通過(guò)
13、此方式解決數(shù)據(jù)庫(kù)并發(fā)訪(fǎng)問(wèn)的瓶頸問(wèn)題并加速業(yè)務(wù)響應(yīng)速度。在數(shù)據(jù)庫(kù)設(shè)計(jì)中根據(jù)表分割原理將頻繁使用的數(shù)據(jù)放到一張表中,不經(jīng)常用到的表放到另一張表中。游戲采用棋盤(pán)分割的算法進(jìn)行輸贏判斷。1.4 本論文的目的及工作內(nèi)容本論文主要詳細(xì)介紹程序的構(gòu)架和各功能的實(shí)現(xiàn)方式及程序中的主要算法。主要包括如下:(1)程序的構(gòu)架設(shè)計(jì);(2)服務(wù)端程序的設(shè)計(jì);(3)客戶(hù)端的程序設(shè)計(jì);(4)客戶(hù)端和服務(wù)端的通信機(jī)制;(5)程序中的多線(xiàn)程設(shè)計(jì)和實(shí)現(xiàn);(6)數(shù)據(jù)庫(kù)并發(fā)訪(fǎng)問(wèn)瓶頸的解決方案;(7)提升數(shù)據(jù)庫(kù)性能的解決方案;(8)用戶(hù)注冊(cè)功能的實(shí)現(xiàn)方式; (9)用戶(hù)下載好友信息的實(shí)現(xiàn)方式;(10)用戶(hù)刪除好友,添加好友,轉(zhuǎn)變好友類(lèi)型
14、的實(shí)現(xiàn)方式;(11)多人并發(fā)聊天的實(shí)現(xiàn)邏輯;(12)音樂(lè)播放器的實(shí)現(xiàn)說(shuō)明;(13)處理多用戶(hù)聊天消息的邏輯;(14)用戶(hù)下載游戲數(shù)據(jù)的邏輯;(15)游戲規(guī)則維護(hù)的邏輯; (16)游戲積分處理邏輯;(17)處理多用戶(hù)同時(shí)游戲的邏輯(18)人機(jī)對(duì)弈的算法; (19)輸贏判斷的算法;2 系統(tǒng)需求分析2.1業(yè)務(wù)用例分析系統(tǒng)應(yīng)該具有如下功能:(1)注冊(cè)帳戶(hù)用戶(hù)進(jìn)入游戲前,界面中提供注冊(cè)的標(biāo)志。注冊(cè)時(shí)采用驗(yàn)證碼的機(jī)制防止惡意用戶(hù)的灌水注冊(cè)。(2)用戶(hù)登錄用戶(hù)通過(guò)帳戶(hù)登錄后方可進(jìn)入游戲。(3)游戲采用積分制度游戲的勝負(fù)都有一定的分值。系統(tǒng)根據(jù)用戶(hù)的勝負(fù)狀態(tài)給用戶(hù)加載相應(yīng)的分值,且此分值是累積的。用戶(hù)通過(guò)自己
15、的合法帳戶(hù)進(jìn)入游戲后系統(tǒng)取得該帳戶(hù)的所有信息包括注冊(cè)信息,及歷史游戲的積分。(4)用戶(hù)可以自主選擇桌面在游戲中用戶(hù)可以自主地選擇進(jìn)入某個(gè)桌面,而不是固定進(jìn)入一個(gè)桌面。游戲提供多個(gè)游戲桌面,提供給眾多用戶(hù)選擇。游戲能容納一定數(shù)量人同時(shí)游戲。服務(wù)器不會(huì)有負(fù)擔(dān),并且服務(wù)器能準(zhǔn)確地定位和轉(zhuǎn)發(fā)每個(gè)游戲?qū)碾p方的數(shù)據(jù)包。(5)用戶(hù)可以自主選擇對(duì)弈者系統(tǒng)給用戶(hù)一定的自由度能讓用戶(hù)自主的選擇對(duì)弈方,并可在未開(kāi)始對(duì)弈的時(shí)候隨意變換座位。進(jìn)入游戲后則不提供任意跳出游戲而與其它人進(jìn)行對(duì)弈。在此種情況下只有對(duì)弈方同意離開(kāi)方可退出游戲進(jìn)入游戲主界面?;謴?fù)自由選擇對(duì)弈方的功能。(6)對(duì)弈中可以進(jìn)行聊天對(duì)弈雙方可以在對(duì)弈的
16、同時(shí)進(jìn)行聊天。消息欄中保留聊天的記錄。且消息的發(fā)送和接收同步運(yùn)行。有常用短語(yǔ)選擇欄,用戶(hù)可以通過(guò)選擇它當(dāng)中的短語(yǔ)進(jìn)行快速聊天。(7)自動(dòng)判斷輸贏程序能自動(dòng)判斷對(duì)弈雙方的輸贏并結(jié)束此次游戲,計(jì)算出對(duì)弈雙方的游戲得分,并把詳細(xì)信息顯示給用戶(hù),最后更新到數(shù)據(jù)庫(kù)中。(8)對(duì)弈中用戶(hù)可以請(qǐng)求對(duì)方結(jié)束此次對(duì)弈用戶(hù)在對(duì)弈的時(shí)候可以通過(guò)向?qū)Ψ缴暾?qǐng)退出游戲的渠道退出游戲。只有在對(duì)方同意退出請(qǐng)求時(shí)雙方才可以退出游戲。如果強(qiáng)制退出應(yīng)該給與處罰,處罰的方式是給強(qiáng)制退出者扣除一定的游戲積分。(9)游戲中具有悔棋功能游戲提供悔棋申請(qǐng)的功能,只有在對(duì)弈方同意對(duì)方悔棋的時(shí)候,方可悔棋。(10)服務(wù)器具有記錄用戶(hù)的登陸信息的功
17、能服務(wù)器記錄每個(gè)用戶(hù)登錄的信息以及ip地址,目的為了監(jiān)控服務(wù)器的工作狀態(tài)和客戶(hù)端之間的通信是否異常。(11)悔棋采用扣分機(jī)制悔棋申請(qǐng)需要有一定的代價(jià),要扣除積分的。在游戲結(jié)束的時(shí)候進(jìn)行統(tǒng)計(jì)。積分分等級(jí),獲勝有固定的分值,和棋沒(méi)有分值但在有悔棋時(shí)同時(shí)統(tǒng)計(jì)。強(qiáng)制退出有固定的懲罰分?jǐn)?shù)。(12)提供人機(jī)對(duì)弈的功能,并提供人機(jī)對(duì)弈和人人對(duì)弈轉(zhuǎn)換的功能。(13)聊天程序采用登錄驗(yàn)證的機(jī)制,具有增加好友,刪除好友,改變好友類(lèi)型等功能。(14)用戶(hù)具有修改密碼和找回密碼的功能修改密碼和查找密碼都需要在密碼提示問(wèn)題正確的情況下方可查詢(xún)。(15)用戶(hù)能任意和好友進(jìn)行獨(dú)立聊天且不會(huì)發(fā)生數(shù)據(jù)混亂(16)用戶(hù)能在聊天程
18、序中進(jìn)入游戲并取得相應(yīng)的游戲數(shù)據(jù)。(17)具有播放音樂(lè)的功能。2.2用例圖2.2.1基本用例圖1 用戶(hù)基本業(yè)務(wù)用例圖2.2.2游戲子用例圖2 游戲子用例圖2.2.3聊天子用例圖3 聊天子用例圖2.3用例簡(jiǎn)要說(shuō)明a1: 用戶(hù)注冊(cè)帳號(hào)。a2: 用戶(hù)登錄聊天程序。a3: 用戶(hù)登錄游戲程序。a4: 用戶(hù)查找密碼。a5: 用戶(hù)退出游戲。a7: 用戶(hù)開(kāi)始聊天。a6: 用戶(hù)進(jìn)入游戲。a8: 用戶(hù)打開(kāi)音樂(lè)播放器播放音樂(lè)。2.4基本用例描述a1(基本)前置條件:用戶(hù)打開(kāi)游戲客戶(hù)端或者登錄了游戲網(wǎng)站的主頁(yè)選擇了注冊(cè)功能。后置條件:用戶(hù)注冊(cè)成功或者注冊(cè)失敗并顯示注冊(cè)失敗的原因。主要流程:a-1用戶(hù)登錄了客戶(hù)端或真接
19、登錄了游戲網(wǎng)站主頁(yè)。a-2用戶(hù)選擇了注冊(cè)。a-3用戶(hù)輸入注冊(cè)信息。a-4點(diǎn)擊注冊(cè)按鈕。a-5顯示注冊(cè)結(jié)果。異常路徑:b-1如果a-3中用戶(hù)輸入了不合法的消息,則顯示相應(yīng)的提示消息。b-2如果a-3中用戶(hù)輸入了已經(jīng)存在的用戶(hù),則顯示用戶(hù)已經(jīng)存在此帳戶(hù)名,要求注冊(cè)用戶(hù)重新填寫(xiě)帳戶(hù)名的提示消息。b-3如果a-4中用戶(hù)沒(méi)有輸入完整的注冊(cè)信息。則顯示相應(yīng)的提示消息。并定位到?jīng)]有輸入的地方。b-4如果a-4中用戶(hù)點(diǎn)擊注冊(cè)后服務(wù)器因不知名的故障或者服務(wù)器忙碌,則顯示相應(yīng)的請(qǐng)求失敗的提示信息?;顒?dòng)圖:圖4 注冊(cè)用戶(hù)活動(dòng)圖a2:(基本)前置條件:用戶(hù)打開(kāi)了聊天的應(yīng)用程序,并輸入了合法的用戶(hù)帳戶(hù)。后置條件:下載好
20、友列表進(jìn)入聊天主界面。主要流程:a-1: 打開(kāi)應(yīng)用程序。a-2: 輸入合法的登錄帳戶(hù)。a-3: 登錄a-4: 進(jìn)入聊天。異常路徑:b-1: 如果a-2中沒(méi)有輸入信息則顯示用戶(hù)的幫助消息。b-2: 如果a-3服務(wù)器繁忙的時(shí)候或者網(wǎng)絡(luò)帶寬受限時(shí)應(yīng)該顯示用戶(hù)正在進(jìn)登錄中的提示消息。或網(wǎng)絡(luò)終端,則提示登錄失敗的信息。b-3: 如果a-4中服務(wù)端異常,則顯示相應(yīng)的提示信息?;畛虉D:圖5 登陸聊天程序活動(dòng)圖a3: (基本)前置條件:打開(kāi)客戶(hù)端程序。后置條件:登錄成功或者顯示登陸失敗的原因。主要流程:a-1: 輸入用戶(hù)帳戶(hù)。a-2: 輸入用戶(hù)密碼。a-3: 輸入用戶(hù)驗(yàn)證碼。a-4: 登陸。異常路徑:b-1:
21、 輸入了不是有效的帳戶(hù),則進(jìn)行相應(yīng)的提示。b-2: 輸入了空密碼則自動(dòng)清空并作相應(yīng)的提示。b-3: 如果服務(wù)器關(guān)閉或者什么原因使登錄不能進(jìn)行則顯示相應(yīng)提示消息?;畛虉D:圖6 游戲登陸活動(dòng)圖a4: (基本)前置條件:輸入要查詢(xún)的帳戶(hù)名,和有效的密碼提示問(wèn)題以及新密碼。后置條件:修改成新密碼。主要流程:a-1: 輸入用戶(hù)的帳戶(hù)名。a-2: 輸入密碼提示問(wèn)題。a-3: 輸入密碼提示問(wèn)題的答案。a-4: 修改密碼成功。異常路徑:b-1: 在a-1中輸入錯(cuò)誤的帳戶(hù)名或者在a-2中輸入錯(cuò)誤的密碼提示問(wèn)題或者在a-3中輸入錯(cuò)誤的密碼提示答案則顯示不能修改密碼的出錯(cuò)消息。a5: (基本)前置條件:用戶(hù)沒(méi)有進(jìn)行
22、游戲且處在游戲桌場(chǎng)選擇的界面中。后置條件:用戶(hù)退出游戲客戶(hù)端與服務(wù)器斷開(kāi)連接。主要流程:a-1: 用戶(hù)選擇退出按鈕。a-2: 判斷用戶(hù)是否具有正常退出的條件。a-3: 退出游戲客戶(hù)端并失去與服務(wù)器的連接。異常路徑:b-1: 本來(lái)就與服務(wù)器失去了連接。選擇退出后則服務(wù)器不能監(jiān)控到客戶(hù)端,掃尾工作部不能正常進(jìn)行,客戶(hù)端顯示出錯(cuò)信息。2.5擴(kuò)展用例描述a6:(擴(kuò)展)前置條件:登錄了聊天應(yīng)用程序或者已經(jīng)進(jìn)入了游戲客戶(hù)端。后置條件:用戶(hù)登錄到游戲中。主要流程:a-1: 用戶(hù)選擇登錄按鈕。a-2: 判斷用戶(hù)帳戶(hù)是否是有效帳戶(hù)。a-3: 進(jìn)入游戲中。異常路徑:b-1:如果在a-1中游戲服務(wù)器關(guān)閉或者出現(xiàn)異常
23、,顯示出錯(cuò)信息。b-2:如果在a-2中輸入不是有效的帳戶(hù),顯示相應(yīng)的信息。a7:(擴(kuò)展)前置條件:選擇了某個(gè)好友。 后置條件:進(jìn)入聊天中。主要流程:a-1: 用戶(hù)選擇自己好友列表中任意一個(gè)好友。a-2: 進(jìn)入好友聊天界面中。a-3: 開(kāi)始聊天。異常路徑:b-1: 如果在a-1中服務(wù)端與客戶(hù)端斷開(kāi)連接,或者服務(wù)器異常等。顯示出錯(cuò)信息。b-2: 如果在a-2中選擇的好友不在線(xiàn)提示出錯(cuò)信息。b-3: 如果在a-3中選擇了黑名單中的用戶(hù)聊天則顯示不能與黑名單中用戶(hù)進(jìn)行聊天的相關(guān)信息。2.6后續(xù)用例描述a8:(后續(xù))前置條件:聊天程序啟動(dòng)。后置條件:打開(kāi)音樂(lè)播放器。主要流程:a-1: 用戶(hù)選擇音樂(lè)播放器
24、按鈕。a-2: 打開(kāi)音樂(lè)播放器。a-3: 選擇音樂(lè)a-4: 播放音樂(lè)(3)選擇播放音樂(lè)進(jìn)行播放。異常路徑:b-1: 如果在a-2中程序異常,顯示出錯(cuò)信息。b-2: 如果在a-3中不存在歌曲,顯示相應(yīng)的提示信息。b-3: 如果在a-4中歌曲類(lèi)型不支持,顯示相應(yīng)的提示信息。3 系統(tǒng)分析報(bào)告3.1 系統(tǒng)類(lèi)圖系統(tǒng)中基本分為三層結(jié)構(gòu)。用戶(hù)層,業(yè)務(wù)層,數(shù)據(jù)訪(fǎng)問(wèn)層。所有的客戶(hù)端程序均不具有操作數(shù)據(jù)訪(fǎng)問(wèn)層的功能。而是交給服務(wù)端進(jìn)行數(shù)據(jù)的操作。根據(jù)各層的功能邏輯抽象出以下幾個(gè)類(lèi):3.1.1用戶(hù)界面類(lèi)圖7 用戶(hù)界面包類(lèi)圖3.1.2業(yè)務(wù)處理類(lèi)圖8 用戶(hù)業(yè)務(wù)包類(lèi)圖3.1.3數(shù)據(jù)訪(fǎng)問(wèn)類(lèi)圖9 數(shù)據(jù)訪(fǎng)問(wèn)包類(lèi)圖3.1.4權(quán)限
25、管理類(lèi)圖10 權(quán)限管理包類(lèi)圖3.1.5異常處理類(lèi)圖11 異常處理包類(lèi)圖3.2 類(lèi)的職責(zé)說(shuō)明1用戶(hù)界面類(lèi)的說(shuō)明(1) 與用戶(hù)交互,接受用戶(hù)的各種輸入并輸出各種提示信息和處理結(jié)果,進(jìn)行界面數(shù)據(jù)的重新組織。(2) 對(duì)輸入數(shù)據(jù)進(jìn)行校驗(yàn),過(guò)濾非法數(shù)據(jù)。(3) 向業(yè)務(wù)層發(fā)送業(yè)務(wù)請(qǐng)求。(4) 根據(jù)業(yè)務(wù)層返回的結(jié)果進(jìn)行界面數(shù)據(jù)的更新。2 數(shù)據(jù)訪(fǎng)問(wèn)類(lèi)職責(zé)說(shuō)明(1) 實(shí)現(xiàn)對(duì)數(shù)據(jù)的查詢(xún)和持久化操作。(2) 保持?jǐn)?shù)據(jù)的唯一性。3 業(yè)務(wù)處代理類(lèi)職責(zé)說(shuō)明(1) 實(shí)現(xiàn)各種業(yè)務(wù)處理邏輯和算法。(2) 對(duì)用戶(hù)的輸入數(shù)據(jù)進(jìn)行合法驗(yàn)證。(3) 向數(shù)據(jù)訪(fǎng)問(wèn)層請(qǐng)求數(shù)據(jù)或向數(shù)據(jù)訪(fǎng)問(wèn)層發(fā)送數(shù)據(jù)進(jìn)行永久性存儲(chǔ)。(4) 向用戶(hù)界面層發(fā)送處理后
26、的結(jié)果。(5) 對(duì)游戲規(guī)則的維護(hù),游戲?qū)?zhàn)的棋步的記錄,對(duì)游戲通信數(shù)據(jù)的封裝與拆分,對(duì)游戲界面的數(shù)據(jù)更新,和游戲中聊天數(shù)據(jù)的轉(zhuǎn)發(fā)。協(xié)調(diào)服務(wù)器端進(jìn)行有序不間斷工作。對(duì)業(yè)務(wù)層中的數(shù)據(jù)更新和邏輯上的整理。對(duì)數(shù)據(jù)積分規(guī)則進(jìn)行判斷并對(duì)數(shù)據(jù)進(jìn)行計(jì)算,同步到數(shù)據(jù)訪(fǎng)問(wèn)類(lèi)中,實(shí)現(xiàn)數(shù)據(jù)的永遠(yuǎn)存儲(chǔ)。4 異常處理類(lèi)職責(zé)說(shuō)明處理系統(tǒng)中出現(xiàn)的各種異常5 權(quán)限管理類(lèi)職責(zé)說(shuō)明驗(yàn)證請(qǐng)求者的請(qǐng)求權(quán)限3.4類(lèi)的靜態(tài)結(jié)構(gòu)圖12 類(lèi)的靜態(tài)結(jié)構(gòu)圖3.5用例動(dòng)態(tài)分析圖13 用例動(dòng)態(tài)分析圖流程說(shuō)明(1) 用戶(hù)界面對(duì)象接收到用戶(hù)的輸入請(qǐng)求后,向業(yè)務(wù)代理類(lèi)發(fā)送處理請(qǐng)求。(2) 業(yè)務(wù)代理類(lèi)對(duì)象接收的請(qǐng)求后,向權(quán)限管理類(lèi)對(duì)象發(fā)送驗(yàn)證權(quán)限請(qǐng)求。(3)
27、 權(quán)限管理類(lèi)對(duì)象驗(yàn)證權(quán)限后,將驗(yàn)證結(jié)果返回各業(yè)務(wù)代理類(lèi)對(duì)象。(4) 業(yè)務(wù)代理類(lèi)根據(jù)收到的權(quán)限驗(yàn)證結(jié)果進(jìn)行以下處理:對(duì)于不符合權(quán)限的請(qǐng)求則向用戶(hù)界面類(lèi)返回相應(yīng)的提示信息,對(duì)于符合權(quán)限的請(qǐng)求,業(yè)務(wù)代理類(lèi)對(duì)象轉(zhuǎn)發(fā)信息給業(yè)務(wù)對(duì)象。(5) 業(yè)務(wù)對(duì)象進(jìn)行業(yè)務(wù)處理。對(duì)于業(yè)務(wù)處理中的數(shù)據(jù)持久化操作,通過(guò)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)對(duì)象進(jìn)行操作。期間的任何異常都交給異常處理類(lèi)對(duì)象處理。最后處理結(jié)果信息給業(yè)務(wù)代理對(duì)象。(6) 業(yè)務(wù)代理對(duì)象收到信息后作進(jìn)一步加工,最后返回給用具界面對(duì)象(7) 用戶(hù)界面對(duì)象根據(jù)收到的信息重新組織數(shù)據(jù)并更新相應(yīng)的界面。3.6用戶(hù)界面原形(1) 登錄界面:圖14 登錄界面圖(2) 聊天程序主界面:圖15
28、聊天界面圖(3) 聊天窗口界面:圖16 聊天窗口(4) 游戲大廳界面:圖17 游戲界面圖(5) 游戲?qū)?zhàn)界面:圖18 游戲?qū)慕缑?6) 音樂(lè)播放器界面:圖19音樂(lè)播放器界面4 系統(tǒng)設(shè)計(jì)報(bào)告4.1主要類(lèi)詳細(xì)設(shè)計(jì)圖4.1.1 游戲模塊類(lèi)設(shè)計(jì)(1)客戶(hù)端類(lèi)設(shè)計(jì):圖20 游戲模塊客戶(hù)端主要類(lèi)的類(lèi)圖(2) 服務(wù)端類(lèi)設(shè)計(jì)圖21 游戲模塊服務(wù)端主要類(lèi)的類(lèi)圖4.1.2聊天模塊類(lèi)設(shè)計(jì)(1)客戶(hù)端類(lèi)設(shè)計(jì)圖22 聊天模塊客戶(hù)端主要類(lèi)的類(lèi)圖(2) 服務(wù)端類(lèi)設(shè)計(jì)圖 23 模塊服務(wù)端主要類(lèi)的類(lèi)圖4.2游戲類(lèi)的職責(zé)說(shuō)明1 gamemainframe說(shuō)明gamemainframe相當(dāng)于系統(tǒng)分析中的用戶(hù)界面類(lèi),此類(lèi)包含了所有
29、與業(yè)務(wù)有關(guān)的界面類(lèi)。是用戶(hù)權(quán)限驗(yàn)證后直接打交道的類(lèi)。負(fù)責(zé)與用戶(hù)交互,并維護(hù)各個(gè)業(yè)務(wù)界面及有序的動(dòng)態(tài)顯示各個(gè)業(yè)務(wù)界面。是業(yè)務(wù)中最接近用戶(hù)的包裝類(lèi)。它當(dāng)中的readtread類(lèi)相當(dāng)于系統(tǒng)分析中的業(yè)務(wù)類(lèi),此業(yè)務(wù)類(lèi)是負(fù)責(zé)網(wǎng)絡(luò)用戶(hù)對(duì)弈邏輯的業(yè)務(wù)邏輯類(lèi)(主要負(fù)責(zé)數(shù)據(jù)包的拆分和分析,然后把數(shù)據(jù)發(fā)送到相應(yīng)的業(yè)務(wù)請(qǐng)求類(lèi)中)業(yè)務(wù)請(qǐng)求類(lèi)包括(chesspane,msgpane,controlpane,vsinfo)。2 accountgameinfo和chaributtonachievement說(shuō)明accountgameinfo 和chaributton都是業(yè)務(wù)中和頁(yè)面構(gòu)造中不可少的元素類(lèi)。accountgamei
30、nfo主要負(fù)責(zé)存儲(chǔ)用戶(hù)的游戲信息。chaributon是界面構(gòu)造中不可缺少的元素類(lèi)它負(fù)責(zé)構(gòu)造每個(gè)臺(tái)面上的椅子。在業(yè)務(wù)類(lèi)中引用他是負(fù)責(zé)處理和記錄每個(gè)用戶(hù)的座位信息,achievement類(lèi)用來(lái)記錄用戶(hù)的積分信息,并在每局結(jié)束時(shí)顯示給用戶(hù)。3 playpane說(shuō)明此類(lèi)是業(yè)務(wù)請(qǐng)求類(lèi)(chesspane,msgpane,controlpane,vsinfo)的包裝類(lèi)。相當(dāng)于系統(tǒng)分析中的業(yè)務(wù)代理類(lèi),主要職責(zé)負(fù)責(zé)幾個(gè)業(yè)務(wù)請(qǐng)求之間的協(xié)調(diào)和調(diào)度,并根就根據(jù)業(yè)務(wù)請(qǐng)求來(lái)動(dòng)態(tài)的規(guī)劃他們之間的序列。最后向業(yè)務(wù)類(lèi)發(fā)送業(yè)務(wù)請(qǐng)求。4 databaseoperate說(shuō)明此類(lèi)是系統(tǒng)分析中數(shù)據(jù)訪(fǎng)問(wèn)類(lèi)。他的職責(zé)負(fù)責(zé)所有與數(shù)據(jù)庫(kù)操作
31、的業(yè)務(wù)請(qǐng)求。他封裝了實(shí)現(xiàn)所有業(yè)務(wù)層需要請(qǐng)求數(shù)據(jù)的數(shù)據(jù)庫(kù)操作的方法。數(shù)據(jù)層只與server端通信。對(duì)其他層是不可見(jiàn)的。5 gamewin說(shuō)明gamewin是直接與用戶(hù)界面打交道的一個(gè)包裝類(lèi)。他負(fù)責(zé)構(gòu)造用戶(hù)游戲大廳。以loginpane為元素進(jìn)行構(gòu)造。并協(xié)調(diào)統(tǒng)一管理所有的loginpane。通過(guò)此類(lèi)可以實(shí)現(xiàn)多用戶(hù)多選擇的游戲規(guī)則。6 chesspane,msgpane,controlpane,vsinfo說(shuō)明這四個(gè)類(lèi)都是業(yè)務(wù)請(qǐng)求類(lèi),chesspane類(lèi)主要負(fù)責(zé)游戲?qū)?,并向業(yè)務(wù)處理類(lèi)發(fā)送業(yè)務(wù)請(qǐng)求。msgpane類(lèi)主要負(fù)責(zé)聊天信息的顯示及向業(yè)務(wù)處理類(lèi)中發(fā)送業(yè)務(wù)請(qǐng)求,controlpane類(lèi)主要負(fù)責(zé)控
32、制游戲的各種狀態(tài)機(jī)。vsinfo類(lèi)主要負(fù)者顯示用戶(hù)的游戲積分信息,并向業(yè)務(wù)處理類(lèi)發(fā)送數(shù)據(jù)更新和存儲(chǔ)的業(yè)務(wù)請(qǐng)求。7 refrushthread 說(shuō)明此類(lèi)主要負(fù)責(zé)用戶(hù)界面的刷新。保證用戶(hù)的界面數(shù)據(jù)更新后能及時(shí)反映到用戶(hù)界面上。8 tablestatus 說(shuō)明此類(lèi)是游戲模塊服務(wù)端中用來(lái)記錄每個(gè)做面信息的類(lèi)。用他來(lái)處理多用戶(hù),多桌面的并發(fā)游戲,在服務(wù)端記錄每個(gè)桌面中對(duì)弈者的信息(包括輸出流),每個(gè)桌面中的邏輯處理都是由它來(lái)精確定位信息,并交給每個(gè)桌面中的用戶(hù)線(xiàn)程來(lái)處理用戶(hù)的業(yè)務(wù)。4.3聊天類(lèi)的職責(zé)說(shuō)明1 chatmainframe說(shuō)明chatmainframe相當(dāng)于系統(tǒng)分析中的界面類(lèi)。它是聊天程序中的
33、主界面也是直接和用戶(hù)交互的類(lèi)。他是chatmainpane的包裝類(lèi)。只有合法用戶(hù)登錄后。chatmainframe才會(huì)把chatmainpane包含進(jìn)來(lái)。它當(dāng)中的readthread類(lèi)相當(dāng)于系統(tǒng)分析中的業(yè)務(wù)類(lèi)。他負(fù)責(zé)一切業(yè)務(wù)的邏輯處理,主要是與server端進(jìn)行通信及處理server端發(fā)來(lái)的信息,并拆分信息,分析數(shù)據(jù),最后將結(jié)果返回給業(yè)務(wù)代理類(lèi)中,最終業(yè)務(wù)代理類(lèi)把結(jié)果呈現(xiàn)給客戶(hù)。2 chatmainpane說(shuō)明此類(lèi)主要負(fù)責(zé)與用戶(hù)交與,相當(dāng)于業(yè)務(wù)系統(tǒng)分析中的業(yè)務(wù)代理類(lèi),提供給用戶(hù)一切業(yè)務(wù)請(qǐng)求的可能。并把用戶(hù)請(qǐng)求的業(yè)務(wù)結(jié)果顯示給用戶(hù)。它保持對(duì)chatwin的引用。只有在用戶(hù)的某個(gè)業(yè)務(wù)請(qǐng)求發(fā)生后。才
34、產(chǎn)生此引用的具體實(shí)例。4 chatwin說(shuō)明此類(lèi)負(fù)責(zé)維護(hù)用戶(hù)聊天界面,并提供一切與聊天有關(guān)業(yè)務(wù)功能。5 accountfriendinfo 說(shuō)明此類(lèi)是聊天程序中好友信息的基本元素類(lèi)。存儲(chǔ)用戶(hù)的詳細(xì)信息。6 music 說(shuō)明此類(lèi)負(fù)責(zé)音樂(lè)文件的播放,它相當(dāng)于系統(tǒng)分析中的業(yè)務(wù)代理類(lèi)。他是直接與用戶(hù)打交道的類(lèi),負(fù)責(zé)維護(hù)播放器的界面,并將用戶(hù)的業(yè)務(wù)請(qǐng)求發(fā)送到播放器的業(yè)務(wù)處理類(lèi)中(wavegraphpaneplaymusic)。最后根據(jù)處理的結(jié)果數(shù)據(jù)進(jìn)行界面的顯示。7 songtablepane 說(shuō)明此類(lèi)負(fù)責(zé)維護(hù)用戶(hù)的音樂(lè)文件列表。顯示用戶(hù)可播放的音樂(lè)文件。提供用戶(hù)操作音樂(lè)文件的業(yè)務(wù)功能。8 srthre
35、ad 說(shuō)明此類(lèi)是聊天模塊和游戲模塊中服務(wù)端的監(jiān)聽(tīng)客戶(hù)端連接的主線(xiàn)程。如果有客戶(hù)端連接服務(wù)端。則此類(lèi)便產(chǎn)生一個(gè)子線(xiàn)程負(fù)責(zé)該客戶(hù)的業(yè)務(wù)操作。9 childthread 說(shuō)明此類(lèi)是負(fù)責(zé)處理,特定客戶(hù)端的業(yè)務(wù)請(qǐng)求。每一個(gè)客戶(hù)端都對(duì)應(yīng)一個(gè)該線(xiàn)程。服務(wù)端處理每個(gè)用戶(hù)的邏輯也都是有各個(gè)用戶(hù)的線(xiàn)程負(fù)責(zé)處理。10 accountstateinfo 說(shuō)明此類(lèi)是聊天模塊服務(wù)端中用來(lái)記錄登錄者信息的類(lèi)。用他來(lái)處理多用戶(hù)并發(fā)聊天,每個(gè)登錄的用戶(hù)信息都會(huì)被服務(wù)端記錄(包括輸出流)。服務(wù)端收到聊聊天消息后,就會(huì)根據(jù)此類(lèi)的記錄取出輸出流,進(jìn)行數(shù)據(jù)的轉(zhuǎn)發(fā)。4.4 主要活動(dòng)圖:4.4.1游戲客戶(hù)端與服務(wù)端活動(dòng)圖:圖22 游戲客戶(hù)
36、端與服務(wù)端活動(dòng)圖流程說(shuō)明:1 游戲服務(wù)端啟動(dòng)。2 游戲客戶(hù)端啟動(dòng)。如果要對(duì)弈則必須需要兩個(gè)以上的客戶(hù)端啟動(dòng)。3 用戶(hù)輸入帳戶(hù),向服務(wù)器端發(fā)送驗(yàn)證請(qǐng)求數(shù)據(jù)包。4 服務(wù)端收到客戶(hù)端的數(shù)據(jù)包后進(jìn)行分析,如果是驗(yàn)證請(qǐng)求信息,則進(jìn)行驗(yàn)證。如果是合法帳戶(hù),則發(fā)送驗(yàn)證成功的消息到客戶(hù)端,同時(shí)記錄日志。如果不是合法帳戶(hù),則向客戶(hù)端發(fā)送驗(yàn)證失敗的消息到客戶(hù)端。5 客戶(hù)端收到信息后,分析數(shù)據(jù)包,如果是登錄失敗的數(shù)據(jù)包,則提示登錄失敗的消息并返回到登錄窗口中重新登錄。如果是登錄成功的消息,則進(jìn)入游戲大廳。如果是其他消息則繼續(xù)進(jìn)行分析數(shù)據(jù)包的內(nèi)容,如果是開(kāi)始對(duì)弈的消息,則根據(jù)數(shù)據(jù)包中的內(nèi)容初始化用戶(hù)的游戲積分信息,如
37、果是聊天信息則在客戶(hù)端顯示聊天信息,如果是棋步消息,則更新客戶(hù)端的數(shù)據(jù)。6 用戶(hù)成功登錄后進(jìn)入游戲大廳,選擇游戲場(chǎng)地,客戶(hù)端程序驗(yàn)證用戶(hù)選擇的場(chǎng)地是否可用,如果可用則做下。如果不可用則顯示已作下者的頭像,用戶(hù)重新選擇場(chǎng)地。當(dāng)用戶(hù)坐下后,客戶(hù)端則判斷對(duì)弈雙方是否準(zhǔn)備好,如果準(zhǔn)備好了則開(kāi)始對(duì)弈,并向服務(wù)端發(fā)送命令消息。如果沒(méi)有準(zhǔn)備好則繼續(xù)判斷。7 服務(wù)端收到客戶(hù)端開(kāi)始對(duì)弈的消息后,到數(shù)據(jù)庫(kù)中取得對(duì)弈雙方的游戲積分信息,并記錄日志,最后發(fā)送給對(duì)弈客戶(hù)端。8 客戶(hù)端收到服務(wù)端的初始化信息后,初始化游戲積分,然后進(jìn)入對(duì)弈界面中。9 用戶(hù)開(kāi)始下棋,首先用戶(hù)選擇落棋的位置,客戶(hù)端程序判斷用戶(hù)的落棋點(diǎn)是否有效
38、。如果有效則落棋,并進(jìn)行全盤(pán)掃描,判斷是否有贏棋或者棋盤(pán)是否已經(jīng)充滿(mǎn)棋子,如果有贏棋或者充滿(mǎn)棋子,則提示客戶(hù)端相應(yīng)的輸贏消息。最后將棋步和判斷結(jié)果發(fā)送到服務(wù)端。10 服務(wù)端收到用戶(hù)的棋步消息后,則組織數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā)給對(duì)弈者。11 客戶(hù)端收到棋步更新消息或者聊天信息,則顯示聊天消息或者更新游戲的數(shù)據(jù)。如果是輸贏的消息,則結(jié)束游戲?qū)?,并顯示相應(yīng)的提示框。此時(shí)用戶(hù)可以選擇退出游戲,或者重新開(kāi)始游戲,或者返回大廳等命令。如果不是輸贏消息,則跳轉(zhuǎn)到9中繼續(xù)執(zhí)行。4.4.2聊天服務(wù)端與客戶(hù)端活動(dòng)圖圖23 聊天服務(wù)器與客戶(hù)端活動(dòng)圖流程說(shuō)明:1 聊天服務(wù)器啟動(dòng),客戶(hù)端啟動(dòng)。2 用戶(hù)輸入帳戶(hù)進(jìn)行登錄,并向服務(wù)
39、端發(fā)送驗(yàn)證請(qǐng)求數(shù)據(jù)包。3 服務(wù)端收到客戶(hù)端的數(shù)據(jù)包后,進(jìn)行分析。如果是驗(yàn)證請(qǐng)求信息,則進(jìn)行驗(yàn)證,如果驗(yàn)證失敗,則向客戶(hù)端發(fā)送登陸失敗的消息,如果驗(yàn)證成功,則取得用戶(hù)的好友列表信息,最后發(fā)送到請(qǐng)求客戶(hù)端。4 客戶(hù)端收到服務(wù)端的數(shù)據(jù)包后,進(jìn)行分析。如果是登錄失敗的消息,則提示登錄失敗,并返回到登錄窗口中重新登錄。如果是登錄成功的消息,則初始化用戶(hù)的的好友列表和黑名單列表。5用戶(hù)選擇各種業(yè)務(wù)如:登陸游戲添加好友打開(kāi)音樂(lè)播放器聊天。6 用戶(hù)選擇好友中的某個(gè)好友或者多個(gè)好友進(jìn)行聊天,最后將聊天信息發(fā)送到服務(wù)端。7 服務(wù)端收到數(shù)據(jù)包后。分析數(shù)據(jù),如果是聊天數(shù)據(jù),則修改數(shù)據(jù)包,轉(zhuǎn)發(fā)給要聊天者。8 用戶(hù)收到聊
40、天消息后,則顯示聊天信息,或者跳轉(zhuǎn)到5中繼續(xù)執(zhí)行或者退出聊客戶(hù)端。4.5 主要狀態(tài)圖4.5.1 用戶(hù)聊天狀態(tài)圖:圖24 用戶(hù)聊天狀態(tài)轉(zhuǎn)換圖4.5.2 用戶(hù)游戲狀態(tài)圖圖25 用戶(hù)游戲狀態(tài)轉(zhuǎn)換圖4.6 服務(wù)端與客戶(hù)端整體設(shè)計(jì)思想系統(tǒng)采用c/s模式,所有客戶(hù)端之間的通信都是通過(guò)服務(wù)端進(jìn)行轉(zhuǎn)發(fā)。為了能有序的正確的轉(zhuǎn)發(fā)每個(gè)用戶(hù)的數(shù)據(jù)。服務(wù)端采用多線(xiàn)程機(jī)制,每個(gè)線(xiàn)程對(duì)應(yīng)一個(gè)客戶(hù)端。首先服務(wù)端有一個(gè)監(jiān)聽(tīng)主線(xiàn)程,監(jiān)聽(tīng)用戶(hù)的連接。一旦有某個(gè)用戶(hù)連接了服務(wù)端,服務(wù)端便產(chǎn)生一個(gè)子線(xiàn)程負(fù)責(zé)處理該客戶(hù)的業(yè)務(wù)??蛻?hù)端和服務(wù)端通信是基于socket進(jìn)行通信。客戶(hù)端和服務(wù)端通信采用一定格式的數(shù)據(jù)包進(jìn)行通信。服務(wù)端收到客戶(hù)端的
41、數(shù)據(jù)包后將根據(jù)包頭信息決定是那種業(yè)務(wù)請(qǐng)求并進(jìn)行相應(yīng)業(yè)務(wù)處理,最后將處理結(jié)果發(fā)送到客戶(hù)端??蛻?hù)端段收到數(shù)據(jù)包后,同樣根據(jù)包頭信息決定是那種業(yè)務(wù)的處理結(jié)果,最后更新到相應(yīng)的界面中。聊天客戶(hù)端采用記錄聊天窗口對(duì)象的機(jī)制處理多用戶(hù)的聊天信息。采用的存儲(chǔ)結(jié)構(gòu)是hashmap。首先用戶(hù)在選擇與某個(gè)人聊天時(shí),系統(tǒng)就到窗體信息記錄表中查找是否有該用戶(hù)的聊天窗口信息記錄,如果有則把該窗體換出設(shè)置為當(dāng)前活躍的窗體。若沒(méi)有則建立聊天窗口對(duì)象,并將聊天窗口對(duì)象的信息加入到聊天窗口信息記錄表中。當(dāng)用戶(hù)收到聊天消息時(shí),系統(tǒng)分析數(shù)據(jù)后同樣到聊天窗口信息記錄表中查找是否有該用戶(hù)的聊天窗口對(duì)象,如果有就換出并設(shè)置為活躍窗口,如
42、果沒(méi)有則建立該用戶(hù)的聊天窗口對(duì)象,并將對(duì)象加入到聊天窗口信息記錄表中。用戶(hù)如果關(guān)閉了聊天窗口,聊天窗口信息記錄表將刪除該聊天窗口對(duì)象的記錄信息。游戲客戶(hù)端大部分是在處理用戶(hù)的界面的維護(hù),所以游戲客戶(hù)端采用多線(xiàn)程機(jī)制。一個(gè)線(xiàn)程負(fù)責(zé)數(shù)據(jù)的接收和處理,一個(gè)負(fù)責(zé)用戶(hù)界面的刷新。4.7 數(shù)據(jù)包設(shè)計(jì)表1 數(shù)據(jù)包格式表數(shù)據(jù)包格式發(fā)包端說(shuō)明login:臺(tái)號(hào),椅子號(hào)客戶(hù)端申請(qǐng)入座該臺(tái)號(hào),椅子號(hào)的座位logout:臺(tái)號(hào),椅子號(hào)客戶(hù)端注銷(xiāo)該臺(tái)號(hào),椅子號(hào)的座位,當(dāng)客戶(hù)段換座位時(shí)先發(fā)出lougoutplay!客戶(hù)端請(qǐng)求與入座的另一方開(kāi)始對(duì)弈 ,服務(wù)器可判斷出客戶(hù)的臺(tái)號(hào)和椅子位置 下同go:棋子位置客戶(hù)端請(qǐng)求服務(wù)器轉(zhuǎn)發(fā)一
43、步棋給對(duì)方win:棋子位置客戶(hù)端客戶(hù)下完一步棋后發(fā)現(xiàn)自己贏了將發(fā)送此數(shù)據(jù)包到服務(wù)器要求轉(zhuǎn)發(fā)對(duì)弈方對(duì)方收到后 將這步棋顯示出來(lái)并彈出輸了的信息框peace:棋子位置客戶(hù)端客戶(hù)下完棋發(fā)現(xiàn)雙方打和將發(fā)送數(shù)據(jù)包到服務(wù)器 對(duì)弈方收到服務(wù)器的轉(zhuǎn)發(fā)消息后將這步棋顯示出來(lái)并彈出雙方打和的消息框talk:聊天話(huà)本客戶(hù)端請(qǐng)求服務(wù)器轉(zhuǎn)發(fā)該聊天話(huà)本給對(duì)弈方restart!客戶(hù)端客戶(hù)端點(diǎn)擊”重新對(duì)弈”按鈕后發(fā)送該請(qǐng)求到服務(wù)器,服務(wù)器將轉(zhuǎn)發(fā)該數(shù)據(jù)包到對(duì)弈方agree!客戶(hù)端客戶(hù)收到對(duì)弈方請(qǐng)求重新開(kāi)始對(duì)弈后,若接受,將發(fā)送數(shù)據(jù)包到服務(wù)器讓服器轉(zhuǎn)發(fā)回請(qǐng)求者go back!客戶(hù)端客戶(hù)點(diǎn)擊”返回大廳按鈕后發(fā)送數(shù)據(jù)包到服務(wù)器,服務(wù)
44、器收到后將轉(zhuǎn)發(fā)給對(duì)弈方 ,也導(dǎo)致對(duì)弈方返回大廳exit:臺(tái)號(hào),椅子號(hào)客戶(hù)端用戶(hù)強(qiáng)行關(guān)閉網(wǎng)頁(yè)時(shí),將導(dǎo)致客戶(hù)applet發(fā)送數(shù)據(jù)包到服務(wù)器refresh!客戶(hù)端客戶(hù)請(qǐng)求服務(wù)器將游戲臺(tái)面,椅子的入座情況信息,以刷新自己的游戲大廳seat:臺(tái)號(hào),椅子號(hào)服務(wù)器服務(wù)器向客戶(hù)發(fā)送某臺(tái)上的椅子的情況no seat!服務(wù)器服務(wù)器向客戶(hù)返回該座位不可申請(qǐng)坐下的信息start:椅子號(hào)服務(wù)器客戶(hù)點(diǎn)擊”開(kāi)始對(duì)弈”按鈕后服務(wù)器判斷雙方可進(jìn)行對(duì)弈就向雙方發(fā)送數(shù)據(jù)包c(diǎn)hess:棋子位置服務(wù)器服務(wù)器向客戶(hù)端轉(zhuǎn)發(fā)對(duì)方的一步棋defeat:棋子位置服務(wù)器客戶(hù)端判斷自己贏棋后,發(fā)送數(shù)據(jù)包給服務(wù)器,服務(wù)器將發(fā)出defeat包給對(duì)弈方讓
45、他們彈出一個(gè)提示輸棋的信息框peace!服務(wù)器客戶(hù)端判斷棋局打和后向服務(wù)器發(fā)送打和信息 服務(wù)器轉(zhuǎn)發(fā)該包向?qū)姆奖砻鞔蚝蚼essage:;聊天話(huà)本服務(wù)器客戶(hù)端通過(guò)talk包向服務(wù)器發(fā)送聊天信息,服務(wù)器收到后,發(fā)一個(gè)message包給對(duì)弈方和自己,使聊天話(huà)本顯示出來(lái)agree?服務(wù)器當(dāng)客戶(hù)端點(diǎn)擊”重新對(duì)弈”按鈕后 ,服務(wù)器收到后將發(fā)送此格式包給對(duì)弈方詢(xún)問(wèn)是否愿意重新開(kāi)始agree!服務(wù)器當(dāng)服務(wù)器收到對(duì)弈方同意重新開(kāi)始后將發(fā)送此格式包到原來(lái)的請(qǐng)求方以表明情況go back!服務(wù)器游戲一方通知其已返回游戲大廳之后 服務(wù)器發(fā)送此包通知另一方5系統(tǒng)算法的詳細(xì)分析報(bào)告5.1 數(shù)據(jù)庫(kù)并發(fā)訪(fǎng)問(wèn)瓶頸問(wèn)題解決方案數(shù)
46、據(jù)庫(kù)的設(shè)計(jì)無(wú)非就是建立索引,對(duì)表分割,主鍵的建立,以及sql語(yǔ)句的編寫(xiě)。但一旦這些都經(jīng)過(guò)了優(yōu)化。那么數(shù)據(jù)庫(kù)的并發(fā)訪(fǎng)問(wèn)就成了數(shù)據(jù)庫(kù)應(yīng)用的瓶頸。此次程序中選擇了基于時(shí)間的回調(diào)定期的刷數(shù)據(jù)庫(kù)中的最新數(shù)據(jù)到內(nèi)存中??蛻?hù)端的所有數(shù)據(jù)業(yè)務(wù)請(qǐng)求,server端不會(huì)直接與數(shù)據(jù)庫(kù)操作。而是所有的數(shù)據(jù)業(yè)務(wù)請(qǐng)求都會(huì)與server端的內(nèi)存打交道。為了保證所有客戶(hù)請(qǐng)求數(shù)據(jù)的唯一性,server端采用singleton模式。為了讓客戶(hù)端查詢(xún)速度快,server端的內(nèi)存構(gòu)造采用的是hash方式的hashmap來(lái)構(gòu)造。通過(guò)hash方式檢索定位數(shù)據(jù),在速度上會(huì)得到很大的提高。用戶(hù)請(qǐng)求的數(shù)據(jù)大部分都是異構(gòu)型的數(shù)據(jù)所以根據(jù)應(yīng)用定義
47、相應(yīng)的類(lèi)。hashmap中的value 用相應(yīng)的類(lèi)列表進(jìn)行填充。這樣如果客戶(hù)端請(qǐng)求的是大量異構(gòu)數(shù)據(jù)的時(shí)候只要hash一次就可以精確定位到要查找的數(shù)據(jù)集。如果是查詢(xún)某個(gè)具體的數(shù)據(jù)則會(huì)出現(xiàn)二次遍歷。此時(shí)采用list來(lái)構(gòu)造。在速度上比hashmap速度慢一些,但是他會(huì)減少hash的空間浪費(fèi)問(wèn)題。5.2棋盤(pán)分割算法的詳細(xì)分析所謂的棋盤(pán)分割算法就是根據(jù)落棋點(diǎn)進(jìn)行最小開(kāi)始點(diǎn)前推和最大結(jié)束點(diǎn)后推,得出最小起始點(diǎn)和最大結(jié)束點(diǎn)。元算法如下圖所示圖24 棋盤(pán)分割算法元輸贏判斷和人機(jī)對(duì)弈的算法遍歷則是根據(jù)推算出的最小起始點(diǎn)和最大結(jié)束點(diǎn)進(jìn)行棋盤(pán)的局部遍歷。流程說(shuō)明:1 用戶(hù)落棋。2 取得落棋點(diǎn)的坐標(biāo),并轉(zhuǎn)換為棋盤(pán)中相
48、應(yīng)的坐標(biāo)。3 判斷橫坐標(biāo)是否小于4,是則最小起始點(diǎn)橫坐標(biāo)就為0。如果不小于4,最小起始點(diǎn)橫坐標(biāo)=落棋點(diǎn)的橫坐標(biāo)-4,并繼續(xù)進(jìn)行判斷是否小于10,不小于10 最大結(jié)束點(diǎn)橫坐標(biāo)等于14 ,小于10 則最大結(jié)束點(diǎn)橫坐標(biāo)等于落棋點(diǎn)的橫坐標(biāo)+4。4判斷縱坐標(biāo)是否小于4,是則最小起始點(diǎn)縱坐標(biāo)就為0。如果不小于4,則最小起始點(diǎn)的縱坐標(biāo)=落棋點(diǎn)的縱坐標(biāo)-4,并繼續(xù)進(jìn)行判斷是否小于10,不小于10 最大結(jié)束點(diǎn)縱坐標(biāo)等于14 ,小于10 則最大結(jié)束點(diǎn)縱坐標(biāo)等于落棋點(diǎn)的縱坐標(biāo)+4。 游戲基本流程圖如下:圖25游戲?qū)牧鞒虉D分割算法:首先是在對(duì)角線(xiàn)上對(duì)棋盤(pán)進(jìn)行分割如下圖:圖26 棋盤(pán)”分割圖此時(shí)已經(jīng)對(duì)對(duì)角線(xiàn)分割成對(duì)角
49、線(xiàn)上方和下方。對(duì)上下方繼續(xù)進(jìn)行分割對(duì)角線(xiàn)下方分割如下圖:圖27 “”下方子分割圖在白色線(xiàn)包圍的區(qū)域中具有同一種判斷屬性。在此區(qū)域中縱向向前推最小起始點(diǎn)都會(huì)越界(我們前推的方向是與對(duì)角線(xiàn)平行的);用下圖進(jìn)行舉例分析。圖28 “” 子分割圖此時(shí)根據(jù)與對(duì)角線(xiàn)方向平行。棋子的落棋坐標(biāo)為(3,4),根據(jù)前面橫向前推原理得到他的最小起始點(diǎn)橫向?yàn)檫吔缂礄M向坐標(biāo)為0,那么縱向向前推4個(gè)點(diǎn)后就會(huì)超出其邊界,此時(shí)落棋點(diǎn)的縱向坐標(biāo)前推4個(gè)點(diǎn)正好等于0,這是一個(gè)最邊緣的臨界點(diǎn),且所有白色線(xiàn)包圍的區(qū)域內(nèi)向前推4個(gè)點(diǎn)后都會(huì)小于零,然而此時(shí)推算出的最小起始點(diǎn)和落棋點(diǎn)并不在一條直線(xiàn)上,且不與對(duì)角線(xiàn)平行。所以此區(qū)域有著單獨(dú)的縱
50、向最小起始點(diǎn)的推算方法。(落棋的縱向坐標(biāo)橫向坐標(biāo))如圖所示那么它的縱向最小起始點(diǎn)的坐標(biāo)系就是4-3=1 那么此時(shí)最小起始坐標(biāo)點(diǎn)就是(0,1)。而在黑色線(xiàn)包圍的區(qū)域內(nèi)符合通用的推算法(最小起始點(diǎn)橫向坐標(biāo)點(diǎn)=落棋橫向坐標(biāo)-4,最小起始點(diǎn)縱向坐標(biāo)點(diǎn)=落棋縱向坐標(biāo)點(diǎn)-4)。對(duì)角線(xiàn)上方分割如下圖:圖29 “”上方分割圖此時(shí)在白色線(xiàn)包圍的區(qū)域中有著同一種屬性算法。根據(jù)前面的橫向最小起始點(diǎn)推算法則最小起始點(diǎn)的橫向起始點(diǎn)會(huì)出現(xiàn)越界的問(wèn)題。如下圖舉例說(shuō)明:圖30 “”子分割圖此時(shí)棋子的落點(diǎn)坐標(biāo)為(3,2)根據(jù)前面縱向前推理論得到最小起始點(diǎn)的縱向坐標(biāo)為0,那么根據(jù)通用的橫向最小起始點(diǎn)推算法此時(shí)橫向坐標(biāo)點(diǎn)為0,與落
51、棋點(diǎn)不在一條直線(xiàn)上,且與對(duì)角線(xiàn)不平行。如果在保持與對(duì)角線(xiàn)平行的條件下推算會(huì)出現(xiàn)小于零。所以在白色線(xiàn)包圍的區(qū)域中有著獨(dú)立的最小起始點(diǎn)橫向推算方法。此時(shí)的最小起始點(diǎn)的推算方法為(最小起始點(diǎn)橫向坐標(biāo)=落棋點(diǎn)橫向坐標(biāo)落棋點(diǎn)縱向坐標(biāo),0)根據(jù)此公式得出最小起始點(diǎn)坐標(biāo)為(1,0)在黑色線(xiàn)包圍的區(qū)域中有著通用的最小起始點(diǎn)算法(最小起始點(diǎn)橫向坐標(biāo)=落棋點(diǎn)橫向坐標(biāo)4,最小起始點(diǎn)縱向坐標(biāo)=落棋點(diǎn)縱向坐標(biāo)4)。左下角方向?qū)蔷€(xiàn)分割方法:圖31 “/”分割圖根據(jù)不的同規(guī)則,在對(duì)角線(xiàn)上下方分別作棋盤(pán)分割。對(duì)角線(xiàn)上方分割規(guī)則和算法如下:圖32 “/”分割舉例圖棋盤(pán)被對(duì)角線(xiàn)分割后,主要通過(guò)從落棋點(diǎn)到最大結(jié)束點(diǎn)的棋盤(pán)遍歷方式
52、來(lái)進(jìn)行輸贏判斷。在此對(duì)角線(xiàn)上方的棋盤(pán)又分割成兩個(gè)部分。白色線(xiàn)包圍的區(qū)域內(nèi)具有統(tǒng)一的最大結(jié)束點(diǎn)后推方法,黑色線(xiàn)包圍的區(qū)域中具有統(tǒng)一的最大結(jié)束點(diǎn)后推方法。在白色線(xiàn)包圍的區(qū)域中最大結(jié)束點(diǎn)的縱坐標(biāo)都是0,而最大結(jié)束點(diǎn)的橫坐標(biāo)的=落棋點(diǎn)橫坐標(biāo)+ 落棋點(diǎn)的縱坐標(biāo)。所以該區(qū)域中的最大結(jié)束點(diǎn)坐標(biāo)算法為:最大結(jié)束點(diǎn)坐標(biāo)=(落棋點(diǎn)橫向坐標(biāo)+落棋點(diǎn)縱向坐標(biāo),0)。而在黑色線(xiàn)包圍的區(qū)域內(nèi)的最大結(jié)束點(diǎn)坐標(biāo)的算法為:最大結(jié)束點(diǎn)坐標(biāo)=(落棋點(diǎn)橫向坐標(biāo)+4 ,落棋點(diǎn)縱向坐標(biāo)-4)舉例說(shuō)明:如上圖所示白色棋子落在了白色線(xiàn)包圍的區(qū)域內(nèi)坐標(biāo)為(2,3)則根據(jù)算法他的最大后推結(jié)束點(diǎn)坐標(biāo)=(2+3=5,0)黑色棋子落在黑色線(xiàn)包圍的區(qū)域
53、內(nèi)根據(jù)該區(qū)域的算法得到最大后推結(jié)束點(diǎn)=(2+4=6,8-4=4)即應(yīng)該推到黑色圓圈那截止。 對(duì)角線(xiàn)下方分割規(guī)則和算法:圖33 “/”下方分割舉例圖在白色線(xiàn)包圍的區(qū)域具有統(tǒng)一的最大后推結(jié)束點(diǎn)的算法,黑色線(xiàn)包圍的區(qū)域中有著統(tǒng)一的最大后推結(jié)束點(diǎn)的算法。白色線(xiàn)包圍的區(qū)域中的最大后推結(jié)束點(diǎn)的算法為 :最大后推結(jié)束點(diǎn)坐標(biāo)=(14,落棋點(diǎn)縱向坐標(biāo)-(14-落棋點(diǎn)橫向坐標(biāo))。黑色線(xiàn)包圍的區(qū)域中的最大結(jié)束點(diǎn)坐標(biāo)算法為: 最大后推結(jié)束點(diǎn)坐標(biāo)=(落棋點(diǎn)橫向坐標(biāo)+4,落棋點(diǎn)縱向坐標(biāo)-4)。舉例說(shuō)明如下:如上圖所示,白色棋子落在了白色線(xiàn)包圍的區(qū)域中,坐標(biāo)(11,5),根據(jù)該區(qū)域的最大后推結(jié)束點(diǎn)的算法,得到該落棋點(diǎn)的最大
54、后推結(jié)束點(diǎn)坐標(biāo)=(14,5-(14-11)=2)即最大后推結(jié)束點(diǎn)坐標(biāo)=(14,2)。黑色棋子的坐標(biāo)(5,11)落在黑色線(xiàn)包圍的區(qū)域中根據(jù)該區(qū)域的算法得到該落棋點(diǎn)的最大后推結(jié)束點(diǎn)坐標(biāo)=(5+4=9,11-4=7)即最大后推點(diǎn)為圖中黑色圓圈處(9,7)。5.3 人機(jī)對(duì)弈的算法分析主要采用放射性遍歷棋盤(pán)來(lái)判斷棋子最優(yōu)位置。如下圖所示:圖34 人機(jī)對(duì)弈算法圖用戶(hù)落棋后計(jì)算機(jī)取得用戶(hù)落棋的位置并以該位置為起點(diǎn)放射性的進(jìn)行四個(gè)方向的搜尋統(tǒng)計(jì)棋子。并取得各個(gè)方向的棋子加權(quán)值(遍歷統(tǒng)計(jì)方法采用前面的最小起始點(diǎn)和最大結(jié)束點(diǎn)的分割算法)。對(duì)四個(gè)方向的加權(quán)值進(jìn)行比較取得加權(quán)值最大的那個(gè)方向作為落棋方向的最優(yōu)方向。再
55、在最優(yōu)方向上搜索空位置落棋,算法流程如下圖:圖35 人機(jī)對(duì)弈流程圖流程說(shuō)明:1 用戶(hù)下棋2 判斷下棋點(diǎn)是否是合法下棋點(diǎn),是則落下棋子,不是則重新選擇位置下棋。3 計(jì)算機(jī)取得用戶(hù)落棋的坐標(biāo)并轉(zhuǎn)換成棋盤(pán)結(jié)構(gòu)中的相應(yīng)位置。4 在棋盤(pán)數(shù)組中以此位置作為起點(diǎn)進(jìn)行橫向,縱向,斜向搜索。搜索的距離是五個(gè)棋子位置的距離。5 統(tǒng)計(jì)各個(gè)方向的加權(quán)值。6 根據(jù)各個(gè)方向的加權(quán)值取得最大加權(quán)值的方向作為計(jì)算機(jī)落棋的最優(yōu)方向。7 在此方向上尋找空位置,如果找到則在空位上落棋,如果沒(méi)有找到隨機(jī)落棋。5.4 數(shù)據(jù)庫(kù)表效率問(wèn)題的解決方案如果規(guī)范化設(shè)計(jì)產(chǎn)生了許多4路或更多路合并關(guān)系,而在具體應(yīng)用中會(huì)大量使用這些合并關(guān)系,就可以考慮在數(shù)據(jù)庫(kù)實(shí)體(表)中加入重復(fù)屬性(列)。采用標(biāo)準(zhǔn)的范式進(jìn)行數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)會(huì)在存儲(chǔ)空間上獲得補(bǔ)償,但是在性能上會(huì)有損失,因此數(shù)據(jù)庫(kù)的設(shè)計(jì)不應(yīng)僅僅考慮標(biāo)準(zhǔn)的范式,還要根據(jù)具體的應(yīng)用增加適當(dāng)?shù)娜哂?。為了減少實(shí)體外部屬性數(shù)據(jù)或行數(shù)據(jù)的開(kāi)支而把1個(gè)實(shí)體(表)垂直分割成2個(gè)表(把所有的屬性分成2組)。這樣就把頻繁被訪(fǎng)問(wèn)的數(shù)據(jù)同較少被訪(fǎng)問(wèn)的數(shù)據(jù)分開(kāi)了。所以把用戶(hù)信息表分割成了兩個(gè)表,一個(gè)是用戶(hù)永久不變的信息表和用戶(hù)經(jīng)常變動(dòng)的好友表。而
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高一迎期末系列專(zhuān)欄001期-名篇名句默寫(xiě)(教師版)
- 房地產(chǎn)公司個(gè)人年終工作總結(jié) 15篇
- 感恩節(jié)感恩父母演講稿范文15篇
- 總經(jīng)理年會(huì)致辭(集合15篇)
- 養(yǎng)老保險(xiǎn)知識(shí)
- 數(shù)據(jù)中心運(yùn)維服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 市場(chǎng)監(jiān)管案件審核培訓(xùn)
- 初級(jí)會(huì)計(jì)實(shí)務(wù)-初級(jí)會(huì)計(jì)《初級(jí)會(huì)計(jì)實(shí)務(wù)》模擬試卷479
- 智研咨詢(xún)-2024年中國(guó)消化類(lèi)藥物行業(yè)市場(chǎng)全景調(diào)查、投資策略研究報(bào)告
- 二零二五年度個(gè)人與物流企業(yè)貨物運(yùn)輸信息保密及合作協(xié)議2篇
- 2024-2025學(xué)年山東省濰坊市高一上冊(cè)1月期末考試數(shù)學(xué)檢測(cè)試題(附解析)
- 江蘇省揚(yáng)州市蔣王小學(xué)2023~2024年五年級(jí)上學(xué)期英語(yǔ)期末試卷(含答案無(wú)聽(tīng)力原文無(wú)音頻)
- 數(shù)學(xué)-湖南省新高考教學(xué)教研聯(lián)盟(長(zhǎng)郡二十校聯(lián)盟)2024-2025學(xué)年2025屆高三上學(xué)期第一次預(yù)熱演練試題和答案
- 決勝中層:中層管理者的九項(xiàng)修煉-記錄
- 幼兒園人民幣啟蒙教育方案
- 2024年海南公務(wù)員考試申論試題(A卷)
- 臨床藥師進(jìn)修匯報(bào)課件
- 北京市首都師大附中2025屆數(shù)學(xué)高三第一學(xué)期期末達(dá)標(biāo)測(cè)試試題含解析
- 軍事理論(2024年版)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024年貴州省高職(專(zhuān)科)分類(lèi)考試招收中職畢業(yè)生文化綜合考試語(yǔ)文試題
- 《無(wú)人機(jī)法律法規(guī)知識(shí)》課件-第1章 民用航空法概述
評(píng)論
0/150
提交評(píng)論