JAVA課程項(xiàng)目—網(wǎng)絡(luò)黑白棋開(kāi)發(fā)文檔(共17頁(yè))_第1頁(yè)
JAVA課程項(xiàng)目—網(wǎng)絡(luò)黑白棋開(kāi)發(fā)文檔(共17頁(yè))_第2頁(yè)
JAVA課程項(xiàng)目—網(wǎng)絡(luò)黑白棋開(kāi)發(fā)文檔(共17頁(yè))_第3頁(yè)
JAVA課程項(xiàng)目—網(wǎng)絡(luò)黑白棋開(kāi)發(fā)文檔(共17頁(yè))_第4頁(yè)
JAVA課程項(xiàng)目—網(wǎng)絡(luò)黑白棋開(kāi)發(fā)文檔(共17頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、JAVA課程項(xiàng)目開(kāi)發(fā)文檔課程名稱(chēng): 高級(jí)語(yǔ)言程序設(shè)計(jì) 課程項(xiàng)目: 網(wǎng)絡(luò)黑白棋 作者: XXX 所在系部: 軟件工程 班級(jí): XXX 學(xué)號(hào): XXX 指導(dǎo)老師: XX 日期: XX 一、 系統(tǒng)使用說(shuō)明和測(cè)試用例首先是對(duì)于整個(gè)游戲的使用說(shuō)明以及游戲運(yùn)行的測(cè)試:數(shù)據(jù)庫(kù)部分:打開(kāi) MySQL 進(jìn)入所建的數(shù)據(jù)庫(kù)othellogame,在這個(gè)數(shù)據(jù)庫(kù)里,建立了一張表格名叫userinfo用所建的數(shù)據(jù)庫(kù)othellogame,打開(kāi)userinfo,里面有部分已經(jīng)保存的用戶(hù)資料,但是有些地方出現(xiàn)了“?”,應(yīng)該是MYSQL編碼問(wèn)題,導(dǎo)致漢字不能顯示 :下面開(kāi)始展示我寫(xiě)的黑白棋程序的使用(由于時(shí)間倉(cāng)促,界面做的并不

2、是十分完善):注冊(cè)與登錄:1 首先運(yùn)行服務(wù)器端SERVER,然后運(yùn)行登陸程序USERS,呈現(xiàn)的是登陸界面,在這里你可以實(shí)現(xiàn)登陸或者注冊(cè)新用戶(hù):這個(gè)是注冊(cè)界面,在這里實(shí)現(xiàn)注冊(cè),userinfo里會(huì)出現(xiàn)你所注冊(cè)的一條記錄但是如果用戶(hù)名存在,會(huì)出現(xiàn)如下圖第二幅的顯示,若是E-mail格式不對(duì),會(huì)出現(xiàn)下圖第一幅的顯示:用正確的用戶(hù)名,正確的用戶(hù)信息填寫(xiě)格式登陸,在USERINFO里會(huì)有新注冊(cè)用戶(hù)的一條記錄出現(xiàn)下面進(jìn)入登陸界面,若是用戶(hù)名在數(shù)據(jù)庫(kù)里有記錄,會(huì)顯示如下界面:點(diǎn)擊確定,進(jìn)入游戲大廳(這個(gè)游戲大廳只能容下九個(gè)房間。在同一個(gè)房間里,默認(rèn)第一次坐下的為白方,第二次為黑方,之后進(jìn)入者作為觀(guān)戰(zhàn)對(duì)象):

3、游戲大廳:進(jìn)入第一桌,進(jìn)入游戲界面,在界面的左側(cè)是聊天界面,下面為輸入被容,上面是聊天記錄顯示,中間是棋盤(pán),右側(cè)分別顯示玩家的昵稱(chēng)、玩對(duì)戰(zhàn)狀態(tài)、執(zhí)子方,棋子狀態(tài)以及時(shí)間狀態(tài)(默認(rèn)為十分鐘,若游戲開(kāi)始,否則超時(shí)自動(dòng)退出游戲界面,超時(shí)將被判負(fù)),下面顯示的是部分功能按鈕,包括悔棋、存盤(pán)、調(diào)用棋盤(pán)、認(rèn)輸、玩家信息,具體功能實(shí)現(xiàn)將在如下做介紹:在登陸界面登陸第二,第三個(gè)用戶(hù),游戲大廳第一桌的顯示分別如下(其他桌顯示不變,依然是坐下(白方):這是第二個(gè)用戶(hù) : 這是第三個(gè)用戶(hù): 當(dāng)黑方和白方都已經(jīng)進(jìn)入時(shí),會(huì)彈出對(duì)話(huà)框,告訴玩家游戲已經(jīng)開(kāi)始,此時(shí)計(jì)時(shí)狀態(tài)重新定為十分鐘,游戲開(kāi)始(默認(rèn)白方先手,一局之后對(duì)戰(zhàn)

4、雙方交換座位與棋子顏色,依然是白方先手):游戲的運(yùn)行:1、落子下面開(kāi)始下棋,(只有黑方和白方點(diǎn)擊才有用,觀(guān)戰(zhàn)方點(diǎn)擊會(huì)彈出對(duì)話(huà)框)下棋時(shí)若是落子處不能下棋(沒(méi)子下或者對(duì)方執(zhí)子),都會(huì)彈出對(duì)話(huà)框: 2、決定勝負(fù):有勝負(fù)之后,會(huì)出現(xiàn)對(duì)話(huà)框,同時(shí)對(duì)戰(zhàn)雙方交換座位(以黑方勝為例),黑白與觀(guān)戰(zhàn)方同時(shí)清盤(pán),數(shù)據(jù)庫(kù)里在勝負(fù)上修改記錄,第二局開(kāi)始3、按鈕功能:l 悔棋:首先要征求對(duì)方同意,最多可悔棋四步,但是觀(guān)戰(zhàn)狀態(tài)不能悔棋(實(shí)現(xiàn)方法在后面介紹)請(qǐng)求悔棋: 征求對(duì)方同意: 同意悔棋: 不同意悔棋: 同意悔棋之后,棋盤(pán)狀態(tài)回到上一步:悔棋前: 請(qǐng)求悔棋,對(duì)方同意后: l 存盤(pán):點(diǎn)擊按鈕,當(dāng)前棋盤(pán)狀態(tài)等相關(guān)游戲信息

5、將保存在源代碼文檔里,命名為savefile.datl 調(diào)用存盤(pán):存盤(pán)時(shí): 請(qǐng)求調(diào)用棋盤(pán): 同意調(diào)用后,復(fù)盤(pán)l 玩家信息:點(diǎn)擊后,會(huì)出現(xiàn)當(dāng)前桌上所有玩家的信息,顯示該玩家的狀態(tài): l 認(rèn)輸(觀(guān)戰(zhàn)狀態(tài)不能認(rèn)輸):點(diǎn)擊 點(diǎn)擊“是”: 之后的過(guò)程與下棋勝利相同部分方法的測(cè)試(主要是網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)方法的的測(cè)試):l 這是服務(wù)器端的測(cè)試“a client connected”是代表客戶(hù)端和服務(wù)器已經(jīng)建立了聯(lián)系,后面是服務(wù)器端向所有客戶(hù)端的發(fā)出的字符串內(nèi)容:l 這是客戶(hù)端的測(cè)試(以白方為例)“connected”代表客戶(hù)端與服務(wù)器端建立了連接;之后是客戶(hù)端收到的服務(wù)器的消息(前面的字母代表要完成的任務(wù),后面

6、數(shù)字用來(lái)篩選客戶(hù)端,再往后是要發(fā)送的信息;“Write SUCCESSFULLY”是在判定勝負(fù)之后,將用戶(hù)的勝負(fù)信息寫(xiě)到數(shù)據(jù)庫(kù)成功顯示) 二、 整體架構(gòu)Server服務(wù)器,存儲(chǔ)游戲大廳以及部分客戶(hù)端的信息;處理和篩選客戶(hù)端發(fā)來(lái)的信息Users登陸和注冊(cè),可啟動(dòng)多個(gè)客戶(hù)端Client所有的游戲主程序,包括游戲大廳的建立;處理和篩選服務(wù)器端發(fā)發(fā)來(lái)的信息,做出各種反應(yīng)MYSQL數(shù)據(jù)庫(kù),儲(chǔ)存所有注冊(cè)用戶(hù)的信息登陸,注冊(cè),查詢(xún)UsernameString(用于處理)UsernameServer類(lèi):l Start方法:一直等待有新的客戶(hù)端與服務(wù)器建立聯(lián)系l Client類(lèi): Copy方法:用二維數(shù)組,采用

7、堆棧的方式存儲(chǔ)最近為此改變后的棋盤(pán)狀態(tài) Send方法:將客戶(hù)端收到的信息按順序發(fā)給集合類(lèi)clients中的客戶(hù)端 Run方法:隨時(shí)接受所有客戶(hù)端發(fā)來(lái)的字符串,通過(guò)判斷開(kāi)頭字母進(jìn)行處理,包括游戲大廳每一桌的人數(shù)(ask);進(jìn)入游戲后改變游戲大廳的狀態(tài)(select);同意悔棋(shia);其他開(kāi)頭會(huì)將內(nèi)容用send方法發(fā)給全部客戶(hù)端Client類(lèi):游戲的主程序,包括游戲大廳,之后進(jìn)入游戲的主程序,包括聊天、計(jì)時(shí)等 Listener類(lèi):實(shí)現(xiàn)了actionPerformed接口,是認(rèn)輸、調(diào)用棋盤(pán)、玩家信息按鈕的監(jiān)聽(tīng)器,負(fù)責(zé)向服務(wù)器相應(yīng)的發(fā)送的字符串 TListener類(lèi):同樣實(shí)現(xiàn)了actionPer

8、formed接口,是游戲大廳的具體實(shí)現(xiàn),點(diǎn)擊進(jìn)入相應(yīng)的游戲界面 TFListener類(lèi):用于實(shí)現(xiàn)悔棋和聊天的信息發(fā)送 Play類(lèi):畫(huà)棋盤(pán)和完成落子的鼠標(biāo)點(diǎn)擊,其中l(wèi)istener方法調(diào)用了check1和check2 (確定是否可以落子,改變棋盤(pán)數(shù)組)jugde1和jugde2(確定是否有子可下) Select方法:客戶(hù)端連接到服務(wù)器后,向服務(wù)器發(fā)送字符串請(qǐng)求發(fā)送游戲大廳狀態(tài) Xingqi方法:?jiǎn)为?dú)啟動(dòng)一個(gè)線(xiàn)程記錄行棋時(shí)間,超時(shí)判負(fù) Receive方法:?jiǎn)为?dú)啟動(dòng)線(xiàn)程,負(fù)責(zé)收取客戶(hù)端的信息,通過(guò)調(diào)用其他方法完成相應(yīng)信息的命令與展示Users類(lèi):注冊(cè)和登陸界面,登陸后將實(shí)例化新的client,調(diào)用s

9、elect方法,進(jìn)入游戲大廳,同時(shí)在新的client對(duì)象里保存用戶(hù)名username,其中用了RegisterFace、DataBase、DBUtility、LoginServlet等類(lèi)中的方法,用來(lái)增加、查詢(xún)用戶(hù)信息: RegisterFace 用于用戶(hù)注冊(cè),得到用戶(hù)信息通過(guò)與LoginServlet交互判斷用戶(hù)是否存在,并進(jìn)行注冊(cè) DataBase 連接數(shù)據(jù)庫(kù),通過(guò)getConnection方法得到 Connection對(duì)象從而建立應(yīng)用程序和數(shù)據(jù)庫(kù)的連接。 DBUtility數(shù)據(jù)操作類(lèi),可以查詢(xún)用戶(hù)信息,添加用戶(hù),查詢(xún)用戶(hù)名是否存在,添加用戶(hù),及添加時(shí)用戶(hù)名是否有效 LoginServle

10、t 登錄控制,與用戶(hù)交互 RegisterServlet 注冊(cè)控制,與用戶(hù)交互 InfoItem 存儲(chǔ)用戶(hù)信息,代表一個(gè)已經(jīng)注冊(cè)了的用戶(hù),包括用戶(hù)注冊(cè)的全部信息,使用該類(lèi)對(duì)象,來(lái)保存從數(shù)據(jù)庫(kù)提取的數(shù)據(jù)三、 主要部分關(guān)鍵技術(shù)實(shí)現(xiàn)(一)實(shí)驗(yàn)基本要求(已實(shí)現(xiàn))1初始化:建立網(wǎng)絡(luò)連接,生成棋盤(pán),猜先。(我設(shè)計(jì)的是白方先手,并且是在黑方進(jìn)入房間后自動(dòng)重新計(jì)時(shí),開(kāi)始游戲) 2行棋過(guò)程中,支持回合制行棋,程序判斷合法的行棋位置,吃子,統(tǒng)計(jì)顯示棋子數(shù)目,統(tǒng)計(jì)行棋時(shí)間、判斷輸贏3支持行棋過(guò)程中交流的聊天通道,允許別人旁觀(guān) 4支持悔棋、計(jì)時(shí)等功能:兩人通過(guò)網(wǎng)絡(luò)進(jìn)行對(duì)戰(zhàn)時(shí),一方要悔棋時(shí)需得到對(duì)方的回應(yīng)才能悔棋,超時(shí)

11、判負(fù) 5支持存盤(pán)功能,能夠?qū)?dāng)前已經(jīng)下完的游戲存盤(pán),往后可以打開(kāi)復(fù)盤(pán)。(二)實(shí)驗(yàn)增強(qiáng)功能1建立游戲大廳,支持玩家注冊(cè),記錄玩家戰(zhàn)績(jī),登陸玩家可以選擇對(duì)手進(jìn)入對(duì)戰(zhàn)室,登陸玩家或游客可以選擇對(duì)戰(zhàn)室觀(guān)看比賽。(已實(shí)現(xiàn)) 2使用JavaFX、Flash等技巧,增加交互性。(未實(shí)現(xiàn))主要關(guān)鍵技術(shù)實(shí)現(xiàn): 數(shù)據(jù)庫(kù)實(shí)現(xiàn)注冊(cè)與登錄:首先程序通過(guò)用戶(hù)輸入的數(shù)據(jù)與RegisterServlet進(jìn)行交互,判斷用戶(hù)名是否已經(jīng)存在,若不存在則進(jìn)行相應(yīng)注冊(cè),RegisterServle調(diào)用DBUtility的方法,查詢(xún)用戶(hù)信息,添加用戶(hù)。登錄時(shí)與注冊(cè)基本相同,得到用戶(hù)名與密碼后,通過(guò)LoginServlet與底層數(shù)據(jù)庫(kù)操作

12、類(lèi)DBUtility進(jìn)行交互判斷用戶(hù)名和密碼是否正確。 游戲大廳(只有九桌):服務(wù)器端用一維的數(shù)組selct,每一個(gè)客戶(hù)端加到相應(yīng)的桌后,數(shù)組的一項(xiàng)里會(huì)加一。登陸之后,程序調(diào)用client的selct方法,存儲(chǔ)登錄用戶(hù)名,服務(wù)器端收到“ask”的字符串,服務(wù)器端收到后,調(diào)用run方法再給客戶(hù)端發(fā)送開(kāi)頭“want”加selct的內(nèi)容,客戶(hù)端收到后生成窗口,用九個(gè)按鈕(用TListener監(jiān)聽(tīng))實(shí)現(xiàn)簡(jiǎn)易的游戲大廳,點(diǎn)擊后,進(jìn)入游戲界面 用戶(hù)狀態(tài):client類(lèi)里的實(shí)例變量username儲(chǔ)存登錄用戶(hù)的名字,selct數(shù)組里兩個(gè)數(shù)字,分別為桌號(hào)和用戶(hù)是黑方,白方,或者觀(guān)戰(zhàn) 發(fā)送和接受、篩選信息:所有

13、發(fā)送和接受信息在服務(wù)器的,除了在用戶(hù)進(jìn)入游戲大廳的界面之前,所有發(fā)送和接受的字符串都在前面四個(gè)字符都是說(shuō)明了整個(gè)字符串的功用,后面兩位是client中select數(shù)組的中的數(shù)據(jù)。在客戶(hù)端,有不同的方法甄別前四個(gè)字符的內(nèi)容,如果內(nèi)容匹配,則判斷第五位,只有收到的字符串的第五位和select【0】相同,則說(shuō)明此信息為相同桌上的玩家發(fā)送的,才會(huì)執(zhí)行相應(yīng)的內(nèi)容,包括方法xinxi,shengli,started,shengfu等等,主要實(shí)現(xiàn)的是落子,悔棋,復(fù)盤(pán)的請(qǐng)求,勝負(fù)判斷等 棋盤(pán)狀態(tài)和落子:棋盤(pán)狀態(tài)是用二維數(shù)組tt來(lái)實(shí)現(xiàn)的。0為無(wú)子,1為白子,2為黑子,調(diào)用paint方法畫(huà)棋盤(pán)。落子時(shí),用mous

14、ePressed實(shí)現(xiàn)監(jiān)聽(tīng),得到Piont的X和Y的坐標(biāo), 調(diào)用check1和check2 (確定是否可以落子,改變棋盤(pán)數(shù)組)jugde1和jugde2(確定是否有子可下),落子之后,present變?yōu)榧?,不能再落子,同時(shí),將tt中的元素按順序排列前綴“step”加上桌數(shù)和所屬方發(fā)送給服務(wù)器 翻轉(zhuǎn)算法:以白方點(diǎn)擊一格無(wú)子為例:首先需要實(shí)例變量present為T(mén)RUE(該玩家才可以下棋),調(diào)用check2,方法返回一個(gè)布爾型的數(shù)組(代表八個(gè)方向),分別對(duì)此處(坐標(biāo)對(duì)應(yīng)數(shù)元素:tt【i1】【i2】)的八個(gè)方向進(jìn)行搜索,利用二維數(shù)組tt:以向右為例必須滿(mǎn)足tt【i1】【i2】=0, tt【i1】【i2

15、】的元素有等于并i1繼續(xù)增加,有tt【i1】【i2】=,則有方向返回TRUE。之后調(diào)用check1方法,如果該方向上利用check2的返回是TRUE,對(duì)tt自i1,i2起做出修改,向服務(wù)器發(fā)送tt狀態(tài),客戶(hù)端收到后,相同桌上的客戶(hù)端調(diào)用step方法,用paint方法重畫(huà)棋盤(pán) 判斷是否可以下棋:需要兩個(gè)條件,present為真且搜索全部tt中為0的元素調(diào)用check2方法,得到的數(shù)組元素不全為假時(shí)則可以下棋 悔棋的實(shí)現(xiàn):首先說(shuō)明的是,在服務(wù)器端有一個(gè)String類(lèi)型的二維數(shù)組copy,當(dāng)接到開(kāi)頭為“step”的字符串時(shí),判斷后面的桌數(shù),用堆棧的方式將字符串保存到數(shù)組相應(yīng)的位置。當(dāng)對(duì)戰(zhàn)一方請(qǐng)求悔棋

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)前棋盤(pán)狀態(tài)),同時(shí)將從第二個(gè)起全部元素前移。這樣一共可以悔棋四步。 存盤(pán)和復(fù)盤(pán):存盤(pán)的實(shí)現(xiàn)僅僅是基礎(chǔ),把當(dāng)前tt的狀態(tài)按順序排成字符串,前綴“step”,保存在文件savefile.dat中。復(fù)盤(pán),即調(diào)用棋盤(pán)時(shí),首先發(fā)送請(qǐng)求,另一方同意,則直接將文件中的內(nèi)容,“step”之后插入桌數(shù)和狀態(tài)發(fā)給服務(wù)器,用和落子相同的方法實(shí)現(xiàn)棋盤(pán)調(diào)用 勝負(fù)判斷:用jugde2方法搜索

17、整個(gè)棋盤(pán):調(diào)用judge1方法,用check2判斷返回一個(gè)布爾型的數(shù)組當(dāng)數(shù)組中元素全為假時(shí),judge1返回假;judge2中調(diào)用judge1的返回全為假時(shí),judge2返回假,代表一方無(wú)子可下,發(fā)送“wuzi” +selct【0】+selct【1】,另一方也用jugde2判斷,若同樣返回假,則勝負(fù)用黑白雙方的棋子多少判斷勝負(fù)。勝負(fù)分出之后,雙方交換座位(即select【1】中1變2,2變1),在清盤(pán),重新開(kāi)始 戰(zhàn)績(jī)?cè)跀?shù)據(jù)庫(kù)的保存:new RegisterServlet().upDate(username, winscores, lostscores),這樣往數(shù)據(jù)庫(kù)里寫(xiě)入戰(zhàn)績(jī)。UpDate方法

18、與DBUtility聯(lián)系,使用update userinfo set winscores=?,lostscores=? where username=?修改底層數(shù)據(jù)庫(kù) 玩家信息的顯示:在用戶(hù)登錄之后,調(diào)用客戶(hù)端select方法,會(huì)將用戶(hù)名存儲(chǔ)在客戶(hù)端對(duì)象的實(shí)例變量username里,點(diǎn)擊按鈕“玩家信息”,發(fā)送信息“chak” +selct【0】+selct【1】,同桌客戶(hù)端(包括請(qǐng)求的)收到后,發(fā)送“xinx” +selct【0】+selct【1】+username,客戶(hù)端判斷,當(dāng)?shù)谖辶蛔址謩e為selct之中兩個(gè)元素時(shí),用后面的用戶(hù)名創(chuàng)建對(duì)象InfoItem,即可調(diào)出來(lái)該用戶(hù)的所有信息 行棋時(shí)間:在客戶(hù)端單起個(gè)線(xiàn)程,設(shè)定實(shí)例變量fenzhong=10、miaozhong=0,在黑方進(jìn)入房間之

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論