版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、JAVA課程項(xiàng)目開發(fā)文檔課程名稱: 高級語言程序設(shè)計(jì) 課程項(xiàng)目: 網(wǎng)絡(luò)黑白棋 作者: XXX 所在系部: 軟件工程 班級: XXX 學(xué)號: XXX 指導(dǎo)老師: XX 日期: XX 一、 系統(tǒng)使用說明和測試用例首先是對于整個(gè)游戲的使用說明以及游戲運(yùn)行的測試:數(shù)據(jù)庫部分:打開 MySQL 進(jìn)入所建的數(shù)據(jù)庫othellogame,在這個(gè)數(shù)據(jù)庫里,建立了一張表格名叫userinfo用所建的數(shù)據(jù)庫othellogame,打開userinfo,里面有部分已經(jīng)保存的用戶資料,但是有些地方出現(xiàn)了“?”,應(yīng)該是MYSQL編碼問題,導(dǎo)致漢字不能顯示 :下面開始展示我寫的黑白棋程序的使用(由于時(shí)間倉促,界面做的并不
2、是十分完善):注冊與登錄:1 首先運(yùn)行服務(wù)器端SERVER,然后運(yùn)行登陸程序USERS,呈現(xiàn)的是登陸界面,在這里你可以實(shí)現(xiàn)登陸或者注冊新用戶:這個(gè)是注冊界面,在這里實(shí)現(xiàn)注冊,userinfo里會(huì)出現(xiàn)你所注冊的一條記錄但是如果用戶名存在,會(huì)出現(xiàn)如下圖第二幅的顯示,若是E-mail格式不對,會(huì)出現(xiàn)下圖第一幅的顯示:用正確的用戶名,正確的用戶信息填寫格式登陸,在USERINFO里會(huì)有新注冊用戶的一條記錄出現(xiàn)下面進(jìn)入登陸界面,若是用戶名在數(shù)據(jù)庫里有記錄,會(huì)顯示如下界面:點(diǎn)擊確定,進(jìn)入游戲大廳(這個(gè)游戲大廳只能容下九個(gè)房間。在同一個(gè)房間里,默認(rèn)第一次坐下的為白方,第二次為黑方,之后進(jìn)入者作為觀戰(zhàn)對象):
3、游戲大廳:進(jìn)入第一桌,進(jìn)入游戲界面,在界面的左側(cè)是聊天界面,下面為輸入被容,上面是聊天記錄顯示,中間是棋盤,右側(cè)分別顯示玩家的昵稱、玩對戰(zhàn)狀態(tài)、執(zhí)子方,棋子狀態(tài)以及時(shí)間狀態(tài)(默認(rèn)為十分鐘,若游戲開始,否則超時(shí)自動(dòng)退出游戲界面,超時(shí)將被判負(fù)),下面顯示的是部分功能按鈕,包括悔棋、存盤、調(diào)用棋盤、認(rèn)輸、玩家信息,具體功能實(shí)現(xiàn)將在如下做介紹:在登陸界面登陸第二,第三個(gè)用戶,游戲大廳第一桌的顯示分別如下(其他桌顯示不變,依然是坐下(白方):這是第二個(gè)用戶 : 這是第三個(gè)用戶: 當(dāng)黑方和白方都已經(jīng)進(jìn)入時(shí),會(huì)彈出對話框,告訴玩家游戲已經(jīng)開始,此時(shí)計(jì)時(shí)狀態(tài)重新定為十分鐘,游戲開始(默認(rèn)白方先手,一局之后對戰(zhàn)
4、雙方交換座位與棋子顏色,依然是白方先手):游戲的運(yùn)行:1、落子下面開始下棋,(只有黑方和白方點(diǎn)擊才有用,觀戰(zhàn)方點(diǎn)擊會(huì)彈出對話框)下棋時(shí)若是落子處不能下棋(沒子下或者對方執(zhí)子),都會(huì)彈出對話框: 2、決定勝負(fù):有勝負(fù)之后,會(huì)出現(xiàn)對話框,同時(shí)對戰(zhàn)雙方交換座位(以黑方勝為例),黑白與觀戰(zhàn)方同時(shí)清盤,數(shù)據(jù)庫里在勝負(fù)上修改記錄,第二局開始3、按鈕功能:l 悔棋:首先要征求對方同意,最多可悔棋四步,但是觀戰(zhàn)狀態(tài)不能悔棋(實(shí)現(xiàn)方法在后面介紹)請求悔棋: 征求對方同意: 同意悔棋: 不同意悔棋: 同意悔棋之后,棋盤狀態(tài)回到上一步:悔棋前: 請求悔棋,對方同意后: l 存盤:點(diǎn)擊按鈕,當(dāng)前棋盤狀態(tài)等相關(guān)游戲信息
5、將保存在源代碼文檔里,命名為savefile.datl 調(diào)用存盤:存盤時(shí): 請求調(diào)用棋盤: 同意調(diào)用后,復(fù)盤l 玩家信息:點(diǎn)擊后,會(huì)出現(xiàn)當(dāng)前桌上所有玩家的信息,顯示該玩家的狀態(tài): l 認(rèn)輸(觀戰(zhàn)狀態(tài)不能認(rèn)輸):點(diǎn)擊 點(diǎn)擊“是”: 之后的過程與下棋勝利相同部分方法的測試(主要是網(wǎng)絡(luò)和數(shù)據(jù)庫方法的的測試):l 這是服務(wù)器端的測試“a client connected”是代表客戶端和服務(wù)器已經(jīng)建立了聯(lián)系,后面是服務(wù)器端向所有客戶端的發(fā)出的字符串內(nèi)容:l 這是客戶端的測試(以白方為例)“connected”代表客戶端與服務(wù)器端建立了連接;之后是客戶端收到的服務(wù)器的消息(前面的字母代表要完成的任務(wù),后面
6、數(shù)字用來篩選客戶端,再往后是要發(fā)送的信息;“Write SUCCESSFULLY”是在判定勝負(fù)之后,將用戶的勝負(fù)信息寫到數(shù)據(jù)庫成功顯示) 二、 整體架構(gòu)Server服務(wù)器,存儲(chǔ)游戲大廳以及部分客戶端的信息;處理和篩選客戶端發(fā)來的信息Users登陸和注冊,可啟動(dòng)多個(gè)客戶端Client所有的游戲主程序,包括游戲大廳的建立;處理和篩選服務(wù)器端發(fā)發(fā)來的信息,做出各種反應(yīng)MYSQL數(shù)據(jù)庫,儲(chǔ)存所有注冊用戶的信息登陸,注冊,查詢UsernameString(用于處理)UsernameServer類:l Start方法:一直等待有新的客戶端與服務(wù)器建立聯(lián)系l Client類: Copy方法:用二維數(shù)組,采用
7、堆棧的方式存儲(chǔ)最近為此改變后的棋盤狀態(tài) Send方法:將客戶端收到的信息按順序發(fā)給集合類clients中的客戶端 Run方法:隨時(shí)接受所有客戶端發(fā)來的字符串,通過判斷開頭字母進(jìn)行處理,包括游戲大廳每一桌的人數(shù)(ask);進(jìn)入游戲后改變游戲大廳的狀態(tài)(select);同意悔棋(shia);其他開頭會(huì)將內(nèi)容用send方法發(fā)給全部客戶端Client類:游戲的主程序,包括游戲大廳,之后進(jìn)入游戲的主程序,包括聊天、計(jì)時(shí)等 Listener類:實(shí)現(xiàn)了actionPerformed接口,是認(rèn)輸、調(diào)用棋盤、玩家信息按鈕的監(jiān)聽器,負(fù)責(zé)向服務(wù)器相應(yīng)的發(fā)送的字符串 TListener類:同樣實(shí)現(xiàn)了actionPer
8、formed接口,是游戲大廳的具體實(shí)現(xiàn),點(diǎn)擊進(jìn)入相應(yīng)的游戲界面 TFListener類:用于實(shí)現(xiàn)悔棋和聊天的信息發(fā)送 Play類:畫棋盤和完成落子的鼠標(biāo)點(diǎn)擊,其中l(wèi)istener方法調(diào)用了check1和check2 (確定是否可以落子,改變棋盤數(shù)組)jugde1和jugde2(確定是否有子可下) Select方法:客戶端連接到服務(wù)器后,向服務(wù)器發(fā)送字符串請求發(fā)送游戲大廳狀態(tài) Xingqi方法:單獨(dú)啟動(dòng)一個(gè)線程記錄行棋時(shí)間,超時(shí)判負(fù) Receive方法:單獨(dú)啟動(dòng)線程,負(fù)責(zé)收取客戶端的信息,通過調(diào)用其他方法完成相應(yīng)信息的命令與展示Users類:注冊和登陸界面,登陸后將實(shí)例化新的client,調(diào)用s
9、elect方法,進(jìn)入游戲大廳,同時(shí)在新的client對象里保存用戶名username,其中用了RegisterFace、DataBase、DBUtility、LoginServlet等類中的方法,用來增加、查詢用戶信息: RegisterFace 用于用戶注冊,得到用戶信息通過與LoginServlet交互判斷用戶是否存在,并進(jìn)行注冊 DataBase 連接數(shù)據(jù)庫,通過getConnection方法得到 Connection對象從而建立應(yīng)用程序和數(shù)據(jù)庫的連接。 DBUtility數(shù)據(jù)操作類,可以查詢用戶信息,添加用戶,查詢用戶名是否存在,添加用戶,及添加時(shí)用戶名是否有效 LoginServle
10、t 登錄控制,與用戶交互 RegisterServlet 注冊控制,與用戶交互 InfoItem 存儲(chǔ)用戶信息,代表一個(gè)已經(jīng)注冊了的用戶,包括用戶注冊的全部信息,使用該類對象,來保存從數(shù)據(jù)庫提取的數(shù)據(jù)三、 主要部分關(guān)鍵技術(shù)實(shí)現(xiàn)(一)實(shí)驗(yàn)基本要求(已實(shí)現(xiàn))1初始化:建立網(wǎng)絡(luò)連接,生成棋盤,猜先。(我設(shè)計(jì)的是白方先手,并且是在黑方進(jìn)入房間后自動(dòng)重新計(jì)時(shí),開始游戲) 2行棋過程中,支持回合制行棋,程序判斷合法的行棋位置,吃子,統(tǒng)計(jì)顯示棋子數(shù)目,統(tǒng)計(jì)行棋時(shí)間、判斷輸贏3支持行棋過程中交流的聊天通道,允許別人旁觀 4支持悔棋、計(jì)時(shí)等功能:兩人通過網(wǎng)絡(luò)進(jìn)行對戰(zhàn)時(shí),一方要悔棋時(shí)需得到對方的回應(yīng)才能悔棋,超時(shí)
11、判負(fù) 5支持存盤功能,能夠?qū)?dāng)前已經(jīng)下完的游戲存盤,往后可以打開復(fù)盤。(二)實(shí)驗(yàn)增強(qiáng)功能1建立游戲大廳,支持玩家注冊,記錄玩家戰(zhàn)績,登陸玩家可以選擇對手進(jìn)入對戰(zhàn)室,登陸玩家或游客可以選擇對戰(zhàn)室觀看比賽。(已實(shí)現(xiàn)) 2使用JavaFX、Flash等技巧,增加交互性。(未實(shí)現(xiàn))主要關(guān)鍵技術(shù)實(shí)現(xiàn): 數(shù)據(jù)庫實(shí)現(xiàn)注冊與登錄:首先程序通過用戶輸入的數(shù)據(jù)與RegisterServlet進(jìn)行交互,判斷用戶名是否已經(jīng)存在,若不存在則進(jìn)行相應(yīng)注冊,RegisterServle調(diào)用DBUtility的方法,查詢用戶信息,添加用戶。登錄時(shí)與注冊基本相同,得到用戶名與密碼后,通過LoginServlet與底層數(shù)據(jù)庫操作
12、類DBUtility進(jìn)行交互判斷用戶名和密碼是否正確。 游戲大廳(只有九桌):服務(wù)器端用一維的數(shù)組selct,每一個(gè)客戶端加到相應(yīng)的桌后,數(shù)組的一項(xiàng)里會(huì)加一。登陸之后,程序調(diào)用client的selct方法,存儲(chǔ)登錄用戶名,服務(wù)器端收到“ask”的字符串,服務(wù)器端收到后,調(diào)用run方法再給客戶端發(fā)送開頭“want”加selct的內(nèi)容,客戶端收到后生成窗口,用九個(gè)按鈕(用TListener監(jiān)聽)實(shí)現(xiàn)簡易的游戲大廳,點(diǎn)擊后,進(jìn)入游戲界面 用戶狀態(tài):client類里的實(shí)例變量username儲(chǔ)存登錄用戶的名字,selct數(shù)組里兩個(gè)數(shù)字,分別為桌號和用戶是黑方,白方,或者觀戰(zhàn) 發(fā)送和接受、篩選信息:所有
13、發(fā)送和接受信息在服務(wù)器的,除了在用戶進(jìn)入游戲大廳的界面之前,所有發(fā)送和接受的字符串都在前面四個(gè)字符都是說明了整個(gè)字符串的功用,后面兩位是client中select數(shù)組的中的數(shù)據(jù)。在客戶端,有不同的方法甄別前四個(gè)字符的內(nèi)容,如果內(nèi)容匹配,則判斷第五位,只有收到的字符串的第五位和select【0】相同,則說明此信息為相同桌上的玩家發(fā)送的,才會(huì)執(zhí)行相應(yīng)的內(nèi)容,包括方法xinxi,shengli,started,shengfu等等,主要實(shí)現(xiàn)的是落子,悔棋,復(fù)盤的請求,勝負(fù)判斷等 棋盤狀態(tài)和落子:棋盤狀態(tài)是用二維數(shù)組tt來實(shí)現(xiàn)的。0為無子,1為白子,2為黑子,調(diào)用paint方法畫棋盤。落子時(shí),用mous
14、ePressed實(shí)現(xiàn)監(jiān)聽,得到Piont的X和Y的坐標(biāo), 調(diào)用check1和check2 (確定是否可以落子,改變棋盤數(shù)組)jugde1和jugde2(確定是否有子可下),落子之后,present變?yōu)榧伲荒茉俾渥樱瑫r(shí),將tt中的元素按順序排列前綴“step”加上桌數(shù)和所屬方發(fā)送給服務(wù)器 翻轉(zhuǎn)算法:以白方點(diǎn)擊一格無子為例:首先需要實(shí)例變量present為TRUE(該玩家才可以下棋),調(diào)用check2,方法返回一個(gè)布爾型的數(shù)組(代表八個(gè)方向),分別對此處(坐標(biāo)對應(yīng)數(shù)元素:tt【i1】【i2】)的八個(gè)方向進(jìn)行搜索,利用二維數(shù)組tt:以向右為例必須滿足tt【i1】【i2】=0, tt【i1】【i2
15、】的元素有等于并i1繼續(xù)增加,有tt【i1】【i2】=,則有方向返回TRUE。之后調(diào)用check1方法,如果該方向上利用check2的返回是TRUE,對tt自i1,i2起做出修改,向服務(wù)器發(fā)送tt狀態(tài),客戶端收到后,相同桌上的客戶端調(diào)用step方法,用paint方法重畫棋盤 判斷是否可以下棋:需要兩個(gè)條件,present為真且搜索全部tt中為0的元素調(diào)用check2方法,得到的數(shù)組元素不全為假時(shí)則可以下棋 悔棋的實(shí)現(xiàn):首先說明的是,在服務(wù)器端有一個(gè)String類型的二維數(shù)組copy,當(dāng)接到開頭為“step”的字符串時(shí),判斷后面的桌數(shù),用堆棧的方式將字符串保存到數(shù)組相應(yīng)的位置。當(dāng)對戰(zhàn)一方請求悔棋
16、時(shí),首先發(fā)送“hiuq”+selct【0】+selct【1】,另一方收到后作出回應(yīng)。同意時(shí),發(fā)送“shia” +selct【0】+selct【1】,服務(wù)器進(jìn)行判斷,把copy中相應(yīng)桌的一維數(shù)組的第二個(gè)元素發(fā)送出去(因?yàn)榈谝粋€(gè)保存的是當(dāng)前棋盤狀態(tài)),同時(shí)將從第二個(gè)起全部元素前移。這樣一共可以悔棋四步。 存盤和復(fù)盤:存盤的實(shí)現(xiàn)僅僅是基礎(chǔ),把當(dāng)前tt的狀態(tài)按順序排成字符串,前綴“step”,保存在文件savefile.dat中。復(fù)盤,即調(diào)用棋盤時(shí),首先發(fā)送請求,另一方同意,則直接將文件中的內(nèi)容,“step”之后插入桌數(shù)和狀態(tài)發(fā)給服務(wù)器,用和落子相同的方法實(shí)現(xiàn)棋盤調(diào)用 勝負(fù)判斷:用jugde2方法搜索
17、整個(gè)棋盤:調(diào)用judge1方法,用check2判斷返回一個(gè)布爾型的數(shù)組當(dāng)數(shù)組中元素全為假時(shí),judge1返回假;judge2中調(diào)用judge1的返回全為假時(shí),judge2返回假,代表一方無子可下,發(fā)送“wuzi” +selct【0】+selct【1】,另一方也用jugde2判斷,若同樣返回假,則勝負(fù)用黑白雙方的棋子多少判斷勝負(fù)。勝負(fù)分出之后,雙方交換座位(即select【1】中1變2,2變1),在清盤,重新開始 戰(zhàn)績在數(shù)據(jù)庫的保存:new RegisterServlet().upDate(username, winscores, lostscores),這樣往數(shù)據(jù)庫里寫入戰(zhàn)績。UpDate方法
18、與DBUtility聯(lián)系,使用update userinfo set winscores=?,lostscores=? where username=?修改底層數(shù)據(jù)庫 玩家信息的顯示:在用戶登錄之后,調(diào)用客戶端select方法,會(huì)將用戶名存儲(chǔ)在客戶端對象的實(shí)例變量username里,點(diǎn)擊按鈕“玩家信息”,發(fā)送信息“chak” +selct【0】+selct【1】,同桌客戶端(包括請求的)收到后,發(fā)送“xinx” +selct【0】+selct【1】+username,客戶端判斷,當(dāng)?shù)谖辶蛔址謩e為selct之中兩個(gè)元素時(shí),用后面的用戶名創(chuàng)建對象InfoItem,即可調(diào)出來該用戶的所有信息 行棋時(shí)間:在客戶端單起個(gè)線程,設(shè)定實(shí)例變量fenzhong=10、miaozhong=0,在黑方進(jìn)入房間之
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 奢侈品行業(yè)客服工作總結(jié)
- 電力水利保安工作總結(jié)
- 機(jī)場行業(yè)安全管理工作總結(jié)
- 重慶中考數(shù)學(xué)試題卷及答案(A卷)
- 木材家具行業(yè)銷售員績效總結(jié)
- 銀行工作總結(jié)團(tuán)隊(duì)精誠共贏未來
- 小學(xué)生節(jié)約糧食反對浪費(fèi)的黑板報(bào)口號
- 2024年服裝行業(yè)線上線下聯(lián)合促銷合同范本3篇
- 家居裝修行業(yè)行政后勤工作總結(jié)
- 園林行業(yè)行政后勤工作總結(jié)
- 信息學(xué)奧賽培訓(xùn)課件 第4課 c++基礎(chǔ)語法for循環(huán)結(jié)構(gòu)(第一課時(shí))
- 劉燕園林花卉學(xué)2、3、4版課后答案
- 專升本英語寫作專題講解課件
- 干預(yù)策略患兒床頭抬高影響
- 電力增容改造技術(shù)標(biāo)模板
- 血培養(yǎng)采集的方法及注意事項(xiàng)
- 梁靜茹《勇氣》的歌詞
- 國家開放大學(xué)02150-計(jì)算機(jī)網(wǎng)絡(luò)(本)期末復(fù)習(xí)題及參考答案
- 國開2023年春《理工英語3》機(jī)考網(wǎng)考期末復(fù)習(xí)資料參考答案
- 員工安全培訓(xùn)教育制度
- 譯林版一年級英語上冊期末試卷
評論
0/150
提交評論