564501075畢業(yè)設(shè)計(論文)基于JAVA的“五子棋”網(wǎng)絡(luò)游戲開發(fā)
《564501075畢業(yè)設(shè)計(論文)基于JAVA的“五子棋”網(wǎng)絡(luò)游戲開發(fā)》由會員分享,可在線閱讀,更多相關(guān)《564501075畢業(yè)設(shè)計(論文)基于JAVA的“五子棋”網(wǎng)絡(luò)游戲開發(fā)(76頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第一章 系統(tǒng)概述 1.1 課題意義 本程序旨在用JAVA實(shí)現(xiàn)一個基本于C/S模式的五子棋網(wǎng)絡(luò)對戰(zhàn)游戲。玩家作為客戶端通過服務(wù)器端與其它玩家進(jìn)行對戰(zhàn),聊天等功能。通過實(shí)現(xiàn)本程序加深對計算機(jī)網(wǎng)絡(luò)編程的了解。 1.2 國內(nèi)外有關(guān)研究動態(tài) 電腦游戲行業(yè)經(jīng)過二十年的發(fā)展,已經(jīng)成為與影視、音樂等并駕齊驅(qū)的全球最重要的娛樂產(chǎn)業(yè)之一,其年銷售額超過好萊塢的全年收入。互聯(lián)網(wǎng)的出現(xiàn)為電腦游戲行業(yè)發(fā)展注入了新的活力,憑借信息雙向交流、速度快、不受空間限制等優(yōu)勢,讓真人參與游戲,提高了游戲的互動性、仿真性和競技性,使玩家在虛擬世界里可以發(fā)揮現(xiàn)實(shí)世界無法展現(xiàn)的潛能,改變了單機(jī)版游戲固定、呆板、與機(jī)器對話的狀況。
2、網(wǎng)絡(luò)游戲的這些優(yōu)勢不僅使其在電腦游戲行業(yè)中異軍突起并在某種程度上取代了單機(jī)版游戲,而且成為網(wǎng)絡(luò)業(yè)三大(網(wǎng)上金融、網(wǎng)上教育和網(wǎng)絡(luò)游戲)贏利且利潤優(yōu)厚的領(lǐng)域之一[1]。 網(wǎng)絡(luò)作為一種新興的傳播方式,主要包括三大內(nèi)容:娛樂、資訊、通訊。提到網(wǎng)絡(luò)娛樂,過去主要指的是單機(jī)版游戲,沒有引入網(wǎng)絡(luò)的概念[2]但隨著科技的發(fā)展,游戲娛樂產(chǎn)業(yè)也在成長[3]目前,國內(nèi)的游戲娛樂產(chǎn)業(yè)正處于起步階段,特點(diǎn)表現(xiàn)為:第一,它是一種文化的傳播。娛樂產(chǎn)業(yè)可以潛移默化地改變?nèi)说挠^念,當(dāng)前,很多多媒體的播放已被電腦網(wǎng)絡(luò)所取代[4]。第二,網(wǎng)絡(luò)游戲加強(qiáng)了人與人的溝通。第三,網(wǎng)絡(luò)游戲具有一定的教育意義[5]。網(wǎng)絡(luò)游戲所具有的角色
3、扮演的功能,使得玩家能通過互助更好地完成游戲中的各項(xiàng)任務(wù)。網(wǎng)絡(luò)無國界,游戲在網(wǎng)絡(luò)文化產(chǎn)業(yè)世界的發(fā)展中地位會越來越高[6]。 目前在國外,休閑游戲如棋類等,玩家的年齡跨度非常大,這和我國目前網(wǎng)游市場以青少年為主要消費(fèi)人群的狀況截然不同[7]。其實(shí),網(wǎng)絡(luò)可以解決空間的問題,網(wǎng)絡(luò)和生活越來越息息相關(guān),因此,開辟適合各個年齡層的游戲產(chǎn)品迫在眉睫。同時,這也涉及到一個企業(yè)開發(fā)的能力。娛樂產(chǎn)業(yè)發(fā)展到一定程度,通過不斷鍛煉和經(jīng)驗(yàn)的積累,完全可以通過融入娛樂的成分把教條的東西深入淺出地展現(xiàn)給消費(fèi)者[8] 。 就國內(nèi)的發(fā)展來看,最近這兩三年內(nèi)國內(nèi)的游戲公司如雨后春筍般的成立,所開發(fā)或代理的網(wǎng)絡(luò)游戲更是不勝枚
4、舉。以全球游戲業(yè)界的發(fā)展來看,這幾年韓國的表現(xiàn)最為突出,特別是在網(wǎng)絡(luò)游戲的技術(shù)研發(fā)興游戲制作,其所發(fā)行的網(wǎng)絡(luò)游戲更成為全球游戲產(chǎn)業(yè)重要的指標(biāo)之一。去年在美國洛杉磯所舉行的 E3(Electronic Entertainment Exposition)展中,已經(jīng)有幾家的韓國廠商擠入世界第一線的游戲開發(fā)廠商之列[9]。 近幾年來,由于 3D 硬體繪圖技術(shù)的突破,使得即時描繪的書面越來越精致,而且3D遊戲性更多元化更逼近真實(shí)世界,因此在遊戲產(chǎn)業(yè)中,3D 游戲已經(jīng)逐漸取代2D游戲?yàn)橛螒蚴袌龅闹髁?,即使是網(wǎng)絡(luò)游戲,也慢慢趨向3D化。然而游戲3D化將會帶來的游戲開發(fā)上的困難等問題,這些問題以后都需要逐
5、步解決[10]。 1.3 課題主要內(nèi)容及創(chuàng)新之處 五子棋是一種受大眾廣泛喜愛的游戲,其規(guī)則簡單,變化多端,非常富有趣味性和消遣性。本程序是用JAVA實(shí)現(xiàn)的一個基本于C/S模式的五子棋網(wǎng)絡(luò)對戰(zhàn)游戲。JAVA是一種簡單的,面向?qū)ο蟮?,分布式的,解釋的,健壯?安全的,結(jié)構(gòu)中立的,可移植的,性能很優(yōu)異的多線程的,動態(tài)的語言。因此用Java開發(fā)的網(wǎng)絡(luò)應(yīng)用系統(tǒng)可以在各種平臺上運(yùn)行,實(shí)現(xiàn)了設(shè)備無關(guān)性,一次開發(fā)處處運(yùn)行,大大增加了開發(fā)效率,減少了重復(fù)勞動。玩家作為客戶端通過服務(wù)器端與其它玩家進(jìn)行對戰(zhàn),聊天等功能[11]。本程序作為一種網(wǎng)絡(luò)游戲,其樂趣是人與人之間的對抗,而不僅僅是人與事先設(shè)置的各種程序
6、的對抗,所以比普通的人機(jī)對戰(zhàn)游戲更具有生命力,更具有趣味性[12]。而且通過實(shí)現(xiàn)本程序可以加深對計算機(jī)網(wǎng)絡(luò)編程的了解。 第二章 五子棋簡介 2.1 五子棋起源、歷史、簡介 五子棋起源于中國古代的傳統(tǒng)黑白棋[13]?,F(xiàn)代五子棋日文稱之為"連珠",英譯為"Renju",英文稱之為"Gobang"或"FIR"(Five in a Row的縮寫),亦有"連五子"、"五子連"、"串珠"、"五目"、"五目碰"、"五格"等多種稱謂。 五子棋不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征"短、平、快",又有古典哲學(xué)的高深學(xué)問"陰
7、陽易理";它既有簡單易學(xué)的特性,為人民群眾所喜聞樂見,又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有"場"的概念,亦有"點(diǎn)"的連接。它是中西文化的交流點(diǎn),是古今哲理的結(jié)晶。 2.2 五子棋規(guī)則說明 2.2.1 棋盤 棋盤正中一點(diǎn)為"天元"。棋盤兩端的橫線稱端線。棋盤左右最外邊的兩條縱線稱邊線。從兩條端線和兩條邊線向正中發(fā)展而縱橫交叉在第四條線形成的四個點(diǎn)稱為"星"。天元和星應(yīng)在棋盤上用直徑約為0.5厘米的實(shí)心小圓點(diǎn)標(biāo)出。 以持黑方為準(zhǔn),棋盤上的縱軸線從左到右用英文字母A~O標(biāo)記。橫行線從近到遠(yuǎn)用阿拉伯?dāng)?shù)字1~15標(biāo)記??v橫軸上的橫縱線交叉點(diǎn)
8、分別用橫縱線標(biāo)記的名稱合寫成。如"天元"H8,四個"星"分別為D4、D12、L12、L4等。見圖2.1 圖 2.1 棋盤 2.2.2 基本規(guī)則 黑白雙方依次落子,任一方先在棋盤上形成橫向、豎向、斜向的連續(xù)的相同顏色的五個(含五個以上)棋子的一方為勝。 2.2.3 陽線和陰線 陽線:棋盤上可見的橫縱直線。 陰線:棋盤上無實(shí)線連接的隱形斜線。 2.2.4 連 在棋盤某一陽線或陰線上形成5個以上的同色棋子不間隔地相連。 五連:在棋盤上形成的5個同色棋子的"連"。 長連:在棋盤上形成的6個或6個以上同色棋子的"連"。 2.2.5 "四"包括"活四"和"沖四" 圖
9、2.2 活四說明 活四:在棋盤某一條陽線或陰線上有同色4子不間隔地緊緊相連,且在此4子兩端延長線上各有一個無子的交叉點(diǎn)與此4子緊密相連。見圖2.2 沖四:除"活四"外的,再下一著棋便可形成五連,并且存在五連的可能性的局面。見圖2.3 圖 2.3 沖四說明 白棋再下一著可形成長連的局面也視為"四"。見圖2.4 圖 2.4 白棋長連形成的四 2.2.6 "三"指活三,包括"連三"和"跳三" 活三:在棋盤某一條陽線或陰線上有同色3子不間隔地緊緊相連,且在此3子兩端延長線上各有一個無子的交叉點(diǎn)與此3子緊密相連。 連三:在棋盤某一條陽線或陰線上有同色三子相連
10、,且在此三子兩端延長線上有一端至少有一個,另一端至少有兩個無子的交叉點(diǎn)與此三子緊密相連。 跳三:中間僅間隔一個無子交叉點(diǎn)的連三,但兩端延長線均至少有一個無子的交叉點(diǎn)與此三子相連。 2.2.7 三手可交換 是指黑棋下盤面第3著棋后,白方在應(yīng)白4著棋之前,如感覺黑方棋形不利于己方,可提出交換,即執(zhí)白棋一方變?yōu)閳?zhí)黑棋一方,而黑方不可以不換。 2.2.8 五手兩打 是指黑棋在下盤面上關(guān)鍵的第5手棋時,必須下兩步棋,讓白棋在這兩步棋中任選一步,然后再繼續(xù)對弈。一般說來,白棋肯定拿掉對白方不利的一點(diǎn),而保留對黑方較為不利的那點(diǎn)讓黑方行棋。 2.2.9 禁手規(guī)則 無禁手: 是指采用最簡單古老
11、的規(guī)則。黑白雙方依次落子,任一方先在棋盤上形成橫向、豎向、斜向的連續(xù)的相同顏色的五個(含五個以上)棋子的一方為勝。這種規(guī)則非常簡單容易理解。適合初學(xué)的業(yè)余五子棋愛好者。但是在這種規(guī)則下黑棋勝算較大。甚至已經(jīng)有人證明在黑白雙方都不出現(xiàn)錯誤的情況下,黑棋可以必勝。所以一般要求連續(xù)玩兩盤以上,既任一方執(zhí)黑,執(zhí)白各一次。 有禁手:鑒于無禁手規(guī)則黑棋必勝,人們不斷采用一些方法限制黑棋先行的優(yōu)勢,以平衡黑白雙方的形式。于是針對黑棋的各種禁手逐漸形成。禁手最簡單地說就是一手棋形成長連(連成五個以上連續(xù)相同的棋子),或兩個以上的活三,或者兩個以上的四,并且這些四、活三和長連都要包括這一手棋。 并且規(guī)定,當(dāng)
12、禁與連五同時出現(xiàn)時為黑方取勝禁手不成立,禁手是針對黑棋而言的,白棋沒有任何禁手。例如:黑棋長連是禁手,白棋長連算贏棋。 國際比賽規(guī)則規(guī)定:對局中如黑方出現(xiàn)禁手,白方應(yīng)立即指出禁手點(diǎn),黑方即負(fù)。如白方在黑方出現(xiàn)禁手后,又落一步白子,黑棋禁手則不成立了。 所以 在"有禁手"的房間里,如果黑方出現(xiàn)禁手,白方應(yīng)立即按下"禁手"按鈕 。程序會判黑方負(fù)。如果這時白方又在棋盤上落一子,黑棋禁手則不成立了。 第三章 方案設(shè)計及開發(fā)工具的選取 3.1 選用Java進(jìn)行開發(fā)的原因 Java是一種簡單的,面向?qū)ο蟮?,分布式的,解釋的,健?/p>
13、的安全的,結(jié)構(gòu)的中立的,可移植的,性能很優(yōu)異的多線程的,動態(tài)的語言[14] 。因此用Java開發(fā)的網(wǎng)絡(luò)應(yīng)用系統(tǒng)可以在各種平臺上運(yùn)行,大大增加了開發(fā)效率,減少重復(fù)勞動。而且,Java集成的網(wǎng)絡(luò)功能分有利于開發(fā)網(wǎng)絡(luò)應(yīng)用系統(tǒng)[15] 。 Java具有許多的優(yōu)點(diǎn): 3.1.1 簡單 Java最初是為對家用電器進(jìn)行集成控制而設(shè)計的一種語言,因此它必須簡單明了。Java語言的簡單性主要體現(xiàn)在以下三個方面:1.Java的風(fēng)格類似于C++,因而C++程序員是非常熟悉的。從某種意義上講,Java語言是C及C++語言的一個變種,因此,C++程序員可以很快就掌握J(rèn)ava編程技術(shù)。2.Java摒棄了C++中容易
14、引發(fā)程序錯誤的地方,如指針和內(nèi)存管理。3.Java提供了豐富的類庫。 3.1.2 面向?qū)ο? 面向?qū)ο罂梢哉f是Java最重要的特性。Java語言的設(shè)計完全是面向?qū)ο蟮?,它不支持類似C語言那樣的面向過程的程序設(shè)計技術(shù)。Java支持靜態(tài)和動態(tài)風(fēng)格的代碼繼承及重用。單從面向?qū)ο蟮奶匦詠砜?,Java類似于SmallTalk,但其它特性、尤其是適用于分布式計算環(huán)境的特性遠(yuǎn)遠(yuǎn)超越了SmallTalk。 3.1.3 分布式 Java包括一個支持HTTP和FTP等基于TCP/IP協(xié)議的子庫。因此,Java應(yīng)用程序可憑借URL打開并訪問網(wǎng)絡(luò)上的對象,其訪問方式與訪問本地文件系統(tǒng)幾乎完全相同。為分布環(huán)境尤其
15、是Internet提供動態(tài)內(nèi)容無疑是一項(xiàng)非常宏偉的任務(wù),但Java的語法特性卻使我們很容易地實(shí)現(xiàn)這項(xiàng)目標(biāo)。 3.1.4 健壯 Java致力于檢查程序在編譯和運(yùn)行時的錯誤。類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯誤。Java自己操縱內(nèi)存減少了內(nèi)存出錯的可能性。Java還實(shí)現(xiàn)了真數(shù)組,避免了覆蓋數(shù)據(jù)的可能。這項(xiàng)功能特征大大縮短了開發(fā)Java應(yīng)用程序的周期。Java提供Null指針檢測數(shù)組邊界檢測異常出口字節(jié)代碼校驗(yàn) 3.1.5 結(jié)構(gòu)中立 另外,為了建立Java作為網(wǎng)絡(luò)的一個整體,Java將它的程序編譯成一種結(jié)構(gòu)中立的中間文件格式。只要有Java運(yùn)行系統(tǒng)的機(jī)器都能執(zhí)行這種中間代碼。現(xiàn)在,J
16、ava運(yùn)行系統(tǒng)有Solaris2.4(SPARC),Win32系統(tǒng)(Windows95和WindowsNT)等.Java源程序被編譯成一種高層次的與機(jī)器無關(guān)的byte-code格式語言,這種語言被設(shè)計在虛擬機(jī)上運(yùn)行,由機(jī)器相關(guān)的運(yùn)行調(diào)試器實(shí)現(xiàn)執(zhí)行。 3.1.6 安全 Java的安全性可從兩個方面得到保證。一方面,在Java語言里,像指針和釋放內(nèi)存等C++功能被刪除,避免了非法內(nèi)存操作。另一方面,當(dāng)Java用來創(chuàng)建瀏覽器時,語言功能和一些瀏覽器本身提供的功能結(jié)合起來,使它更安全。Java語言在你的機(jī)器上執(zhí)行前,要經(jīng)過很多次的測試。它經(jīng)過代碼校驗(yàn),檢查代碼段的格式,檢測指針操作,對象操作是否過
17、分以及試圖改變一個對象的類型。 3.1.7 可移植的 同體系結(jié)構(gòu)無關(guān)的特性使得Java應(yīng)用程序可以在配備了Java解釋器和運(yùn)行環(huán)境的任何計算機(jī)系統(tǒng)上運(yùn)行,這成為Java應(yīng)用軟件便于移植的良好基礎(chǔ)。但僅僅如此還不夠。如果基本數(shù)據(jù)類型設(shè)計依賴于具體實(shí)現(xiàn),也將為程序的移植帶來很大不便。例如在Windows3.1中整數(shù)(Integer)為16bits,在Windows95中整數(shù)為32bits,在DECAlpha中整數(shù)為64bits,在Intel486中為32bits。通過定義獨(dú)立于平臺的基本數(shù)據(jù)類型及其運(yùn)算,Java數(shù)據(jù)得以在任何硬件平臺上保持一致。Java語言的基本數(shù)據(jù)類型及其表示方式如下:by
18、te8-bit二進(jìn)制補(bǔ)碼short16-bit二進(jìn)制補(bǔ)碼int32-bit二進(jìn)制補(bǔ)碼long64-bit二進(jìn)制補(bǔ)碼float32-bitIEEE754浮點(diǎn)數(shù)double32-bitIEEE754浮點(diǎn)數(shù)char16-bitUnicode字符。在任何Java解釋器中,數(shù)據(jù)類型都是依據(jù)以上標(biāo)準(zhǔn)具體實(shí)現(xiàn)的。因?yàn)閹缀跄壳笆褂玫乃蠧PU都能支持以上數(shù)據(jù)類型、8~64位整數(shù)格式的補(bǔ)碼運(yùn)算和單/雙精度浮點(diǎn)運(yùn)算。Java編譯器本身就是用Java語言編寫的。Java運(yùn)算系統(tǒng)的編制依據(jù)POSIX方便移植的限制,用ANSIC語言寫成。Java語言規(guī)范中也沒有任何同具體實(shí)現(xiàn)相關(guān)的內(nèi)容。 3.1.8 多線程 Jav
19、a的多線程功能使得在一個程序里可同時執(zhí)行多個小任務(wù)。線程有時也稱小進(jìn)程,是一個大進(jìn)程里分出來的小的獨(dú)立的進(jìn)程。因?yàn)镴ava實(shí)現(xiàn)的多線程技術(shù),所以比C和C++更健壯。多線程帶來的更大的好處是更好的交互性能和實(shí)時控制性能。當(dāng)然實(shí)時控制性能還取決于系統(tǒng)本身(UNIX,Windows,Macintosh等),在開發(fā)難易程度和性能上都比單線程要好。任何用過當(dāng)前瀏覽器的人,都感覺為調(diào)一副圖片而等待是一件很煩惱的事情。在Java里,你可用一個單線程來調(diào)一幅圖片,而你可以訪問HTML里的其它信息而不必等它。 3.1.9 與C和C++語言的異同 Java提供了一個功能強(qiáng)大語言的所有功能,但幾乎沒有一點(diǎn)含混特
20、征。C++安全性不好,但C和C++還是被大家所接受,所以Java設(shè)計成C++形式,讓大家很容易學(xué)習(xí)。Java去掉了C++語言的許多功能,讓Java的語言功能很精煉,并增加了一些很有用的功能,Java去掉了以下幾個C和C++功能和特征:指針運(yùn)算結(jié)構(gòu)typedefs#define需要釋放內(nèi)存全局變量的定義這個功能都是很容易引起錯誤的地方。 3.2 客戶端服務(wù)器模式 3.2.1 C/S模式簡介 客戶 機(jī) /服務(wù)器(Client/Server)模式是指兩個邏輯(往往是物理的)系統(tǒng)(客戶機(jī)/服務(wù)器)及其應(yīng)用程序邏輯組件之間復(fù)雜關(guān)系的協(xié)同[16]。一般而言,C/S應(yīng)用系統(tǒng)從物理上都可劃分為客
21、戶機(jī)與服務(wù)器兩大部分,而邏輯上又可分解為三部分:表達(dá)邏輯、業(yè)務(wù)處理邏輯和數(shù)據(jù)管理邏輯。C/S應(yīng)用系統(tǒng)的格局和性能主要取決于這些邏輯成份在客戶機(jī)上或在服務(wù)器上的組織與分配。C/S模式將一個應(yīng)用分為兩個部分:前端(客戶端)、后端(服務(wù)器)??蛻魴C(jī)指提供客戶機(jī)服務(wù)的邏輯系統(tǒng),服務(wù)器指向服務(wù)器請求提供服務(wù)的邏輯系統(tǒng)。一般來說,客戶機(jī)向服務(wù)器發(fā)出請求為其完成一部分工作服務(wù)器則處理客戶機(jī)的請求并返回結(jié)果。 C/S 兩層模式主要有以下特點(diǎn):分布的處理與集中的數(shù)據(jù)操作管理有機(jī)地結(jié)合;開放式的系統(tǒng);用與操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議無關(guān)的方式存取數(shù)據(jù),支持多平臺和跨平臺;服務(wù)器對用戶是透明的;交互性強(qiáng);相對B/S模式,C
22、/S模式速度快,更利于處理大量數(shù)據(jù)。 C/S兩層模式中,客戶機(jī)并不是毫無運(yùn)算能力的輸入、輸出設(shè)備,而是具有了一定的數(shù)據(jù)處理和數(shù)據(jù)存儲能力,通過把應(yīng)用軟件的計算和數(shù)據(jù)合理地分配在客戶機(jī)和服務(wù)器兩端,可以有效地降低網(wǎng)絡(luò)通信量和服務(wù)器運(yùn)算量。由于服務(wù)器連接個數(shù)和數(shù)據(jù)通信量的限制,這種結(jié)構(gòu)的軟件適于在用戶數(shù)目不多的局域網(wǎng)內(nèi)使用。國內(nèi)目前的大部分ERP(財務(wù))軟件產(chǎn)品即屬于此類結(jié)構(gòu)。C/S模式(Client-Server Architecture)可能是應(yīng)用軟件開發(fā)所使用的最成功的一種模式。它首先是出現(xiàn)在主機(jī)系統(tǒng)中,在局域網(wǎng)環(huán)境下,其性能顯的格外的突出。而現(xiàn)在,C/S模式已經(jīng)成為一種基本的開發(fā)設(shè)計模式
23、。雖然C/S應(yīng)用軟件包含了Client和Server部件并且在網(wǎng)絡(luò)中相互交互。但這并不代表說所有的C/S應(yīng)用軟件均需要按照這樣來設(shè)計(即網(wǎng)絡(luò)不是必須的),它是允許在單機(jī)上運(yùn)行的。 雖然 兩 層 系統(tǒng)有以上的優(yōu)點(diǎn),但在多用戶、多數(shù)據(jù)庫、且非安全的網(wǎng)絡(luò)環(huán)境下(例如Internet),兩層的應(yīng)用就有明顯的局限性。服務(wù)器端的數(shù)據(jù)庫必須同每一個活動的客戶保持連接,這些連接消耗了大量的運(yùn)算資源,其結(jié)果是隨著客戶數(shù)目的增加,性能不斷下降.由于應(yīng)用邏輯全部駐留在客戶端,當(dāng)應(yīng)用環(huán)境發(fā)生變化需要改變事務(wù)邏輯時,每個客戶機(jī)上的程序都需要更新,給系統(tǒng)的維護(hù)和管理造成了一定的困難。隨著應(yīng)用系統(tǒng)越來越復(fù)雜,客戶端應(yīng)用程
24、序變得越來越龐大,對客戶機(jī)的處理能力要求越來越高,成為所謂的“胖客戶機(jī)” 在C/S模式中,工作原理可以簡單的理解為:Client向Server提交一個請求,Server則使用一些方法處理這個請求,并將效果返回給Client. 見圖3.1 圖 3.1 C/S模式原理圖 在處理Client的請求時,Server本身可以成為另一個C/S模式中的Client. 見圖3.2 圖 3.2 server與client關(guān)系圖 大部份的人認(rèn)為在Client-Server應(yīng)用軟件中,Server做了幾乎所有的工作。但實(shí)際上并不是這樣
25、。在實(shí)際應(yīng)用中,Client執(zhí)行了大部份的軟件邏輯并完成了大部份的工作。Server當(dāng)然也做了些工作。但它主要的工作是接受client的請求并返回結(jié)果。 有許多人說C/S結(jié)構(gòu)是分布式結(jié)構(gòu)中最常用的一個例子。的確,它確實(shí)是一個常用的架構(gòu)模式,而且它也確是通過網(wǎng)絡(luò)進(jìn)行Client和Server之間的交互,但是,嚴(yán)格來說,C/S模式有可能不是真正意義上的分布式結(jié)構(gòu)。為什么這么說呢?我們首先應(yīng)該從分布式結(jié)構(gòu)的定義及特性去考慮。分布式系統(tǒng)簡單來說是指通過網(wǎng)絡(luò),進(jìn)行多于一臺電腦之間的數(shù)據(jù)交互。而它最大的特性在于二點(diǎn),性能(performance)和可量測性(Scalability). 而C/S模式由于含
26、有一系列的限制,以至于很難達(dá)到這二點(diǎn)分布式系統(tǒng)的特性。另一方面,一個單獨(dú)的應(yīng)用軟件的透明度通常也是一個分布式結(jié)構(gòu)的特性,但C/S模式并沒有提供這方向的特性。舉個例子,一個網(wǎng)頁瀏覽器,可以看成是一個Client.而用戶必須輸入網(wǎng)站的網(wǎng)址去連接包含所要求網(wǎng)頁的Server,在這里,它就缺乏了透明性。因此我也可以將這個網(wǎng)頁瀏覽器和服務(wù)器看成是在這個系統(tǒng)中的二個獨(dú)立的組件。在C/S模式下,應(yīng)用程序直接存取數(shù)據(jù)庫服務(wù)器上的數(shù)據(jù),數(shù)據(jù)庫服務(wù)器掛在網(wǎng)絡(luò)服務(wù)器上,客戶機(jī)通過協(xié)議(如TCP/IP)和服務(wù)器連接。網(wǎng)絡(luò)服務(wù)器一般運(yùn)行Unix或Windows NT等操作系統(tǒng),客戶機(jī)一般運(yùn)行Windows95/98。在
27、C/S模式下,大量的開發(fā)任務(wù)在客戶機(jī)端。目前各種流行的開發(fā)環(huán)境一般都有開發(fā)數(shù)據(jù)庫的工具,并且支持C/S模式開發(fā)。如Visual C++/Basic、Delphi/C++ Builder、Power Builder等。 3.2.2 C/S模式的限制與應(yīng)用 C/S模式也含有一系列的限制。那這些限制都是什么呢?其實(shí)C/S模式最基本的問題在于其缺乏可量測性,主要原因是由于Server逐漸的變成了性能的瓶頸。在前面介紹了可量測性和性能是分布式結(jié)構(gòu)的二大特點(diǎn)。二者相輔相成,缺乏了可量測性也成為了C/S模式不是一種完全的分布式結(jié)構(gòu)的一個原因。在C/S模式中,服務(wù)端通常需要通過獲取和使用一些資源來處理Cl
28、ient的請求,比如說,連接數(shù)據(jù)庫,獲取數(shù)據(jù)信息等。對于一個軟件的開發(fā)設(shè)計,任何一個需要訪問共享資源的設(shè)計系統(tǒng)均應(yīng)該在最短的時間內(nèi)獲取到所需資源,這樣其它的用戶就可以有機(jī)會去訪問資源。試想一下,如果同一時間,大量的Client同時對Server發(fā)出請求,會出現(xiàn)什么的樣的情況?可能會是Server的崩潰,也可能會是網(wǎng)絡(luò)的停滯,但不管是什么,這一點(diǎn)將會讓Server變成一個性能的瓶頸,這也是為什么我說C/S模式對于一個應(yīng)用軟件的可量測性來說含有一定的限制。(有關(guān)可量測性,在下面討論)。C/S模式不適合大型的網(wǎng)絡(luò)系統(tǒng),但對于局域網(wǎng)系統(tǒng)來說是個很好的選擇,換句話說,C/S模式適合10到100用戶的局域
29、網(wǎng)的系統(tǒng)開發(fā),而對于Internet用戶的系統(tǒng)來說,這種模式就不適合了。如果說C/S模式不是一種完全的分布式系統(tǒng),那么它與傳統(tǒng)的分布式系統(tǒng)又有什么差別呢?C/S模式的大部處理是在Client 中執(zhí)行,而傳統(tǒng)的分布式系統(tǒng)是在另一遠(yuǎn)程機(jī)器中進(jìn)行處理。二者的邊界有點(diǎn)模糊,針對不同的系統(tǒng)要進(jìn)行正確的選擇,這樣才能設(shè)計出高性能的系統(tǒng)。 3.2.3 可量測性(Scalability)的討論 什么是可量測性呢?對于一個含有可量測性的系統(tǒng)來說,當(dāng)其在物理資源(小陸所說的硬件資源)的數(shù)量或者用戶的數(shù)量增加的前提下,仍應(yīng)盡可能的保持著效率。當(dāng)然,在實(shí)際的操作中,這是不可能的,多多少少性能都會受到影響。拿本程序
30、來當(dāng)例子,當(dāng)玩家多的時候,大家都需要排隊,才能進(jìn)入到游戲,而當(dāng)玩家少的時候,大家就可以直接連接,進(jìn)入到游戲中[17]。 3.3 界面開發(fā)工具的選擇 對一個優(yōu)秀的應(yīng)用程序來說,良好的圖形用戶接口是必不可少的。缺少良好的圖形用戶接口,將會給用戶理解和使用應(yīng)用程序帶來很多不便。很難想象用戶為了學(xué)會使用一個應(yīng)用程序,去記一大堆命令。Java提Awt和swing包了生成一個良好的圖形用戶接口所需要的;基本元件:面板(Panelcopy;、按鈕(Buttoncopy;、標(biāo)copy;(Labelcopy;、畫板(Canvasescopy;、滾動條(Scrollbarcopy;、列表框(Listcopy;
31、、文本域(TextFieldcopy;、文本區(qū)(TextAreacopy)。由于本系統(tǒng)是一個休閑娛樂游戲,本身的界面元素也不是很復(fù)雜,所以用Java AWT來做界出處理已經(jīng)足夠了。用JAVA AWT做界面也有利于和JAVA內(nèi)部程序的銜接。 3.4 JAVA Socket編程 Java是一種可用于進(jìn)行網(wǎng)絡(luò)編程的語言,它提供了兩種功能強(qiáng)大的網(wǎng)絡(luò)支持機(jī)制:URL訪問網(wǎng)絡(luò)資源的類和用Socket通訊的類,來滿足不同的要求[18]。一是URL用于訪問Internet網(wǎng)上資源的應(yīng)用;另一種是針對client/server(客戶端/服務(wù)器)模式的應(yīng)用以及實(shí)現(xiàn)某些特殊的協(xié)議的應(yīng)用,它的通訊過程是基
32、于TCP/IP協(xié)議中傳輸層接口socket實(shí)現(xiàn)的。 客戶基于服務(wù)器之間使用的大部分通訊組件都是基于socket接口來實(shí)現(xiàn)的[19]。Socket是兩個程序之間進(jìn)行雙向數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)通訊端點(diǎn),有一個地址和一個端口號來標(biāo)識。每個服務(wù)程序在提供服務(wù)時都要在一個端口進(jìn)行,而想使用該服務(wù)的客戶機(jī)也必須連接該端口。Socket因?yàn)槭腔趥鬏攲樱运潜容^原始的通訊協(xié)議機(jī)制。通過Socket的數(shù)據(jù)表現(xiàn)形式為字節(jié)流信息,因此通訊雙方要想完成某項(xiàng)具體的應(yīng)用則必須按雙方約定的方式進(jìn)行數(shù)據(jù)的格式化和解釋,它具有更強(qiáng)的靈活性和更廣泛的使用領(lǐng)域。 客戶機(jī)/服務(wù)器Socket通訊工作模式見圖3.3 圖
33、3.3 客戶機(jī)/服務(wù)器Socket通訊工作模式 第四章 五子棋詳細(xì)設(shè)計 根據(jù)上一章介紹的系統(tǒng)實(shí)現(xiàn)方案,可以將系統(tǒng)簡要的看為分為三個大的功能模塊,即界面元素的設(shè)計,客戶端程序設(shè)計和服務(wù)器端程序設(shè)計。下面就這三個部分的主要功能實(shí)現(xiàn)依次進(jìn)行介紹: 4.1需求規(guī)定 l 棋盤采用 1515 棋盤。 l 游戲采用人與人對弈模式,可以選擇玩家進(jìn)行游戲。 l 游戲中設(shè)有禁守規(guī)則和其他走子限制。 l 只有當(dāng)五個相同顏色的棋子成線以后才判為獲勝,長連也算獲勝。 l 棋盤顏色與棋子顏色要對比分明,便于其他程序識別。 l 游戲中可以顯示游戲狀態(tài)的信息,但是不能有彈出對話框之類的窗口擋住棋盤。 4
34、.2 運(yùn)行環(huán)境 硬件配置(推薦): CPU:P4—1GHZ或更高 內(nèi)存:128M或更多 顯示器分辨率:800x600或更高 軟件配置: Jbuilder 9或安裝了JDK 1.4,windowsXP操作系統(tǒng) 運(yùn)行本軟件的系統(tǒng)平臺: 由于本程序是采用JAVA開發(fā)的,實(shí)現(xiàn)了與平臺的無關(guān)性,具有很強(qiáng)的可移性,一次開發(fā)處處運(yùn)行,所以可以在所有平臺運(yùn)行。 開發(fā)工具: Jbuilder 9 4.3 五子棋客戶端設(shè)計 4.3.1 建立15X15棋盤 圖 4.1 五子棋棋盤 4.3.2 界面元素的設(shè)計 游
35、戲菜單,玩家列表,聊天窗口以及其它一些狀態(tài)信息。整個程序界面見圖4.2 圖 4.2 系統(tǒng)界面 游戲菜單:可以單擊和人對戰(zhàn),設(shè)定禁手規(guī)則,退出,以及作者信息。 玩家列表:玩家可以雙擊列表中的一個玩家請求游戲,當(dāng)對方接受請求雙方即可以開始游戲。 聊天窗口:一對正在游戲的玩家可以互相聊天。 4.3.3 建立與使用獲勝表 int board [10][10];//玩家的每一顆棋子是否在各個獲勝表中 圖 4.3 獲勝表 board [15][15]中的元素都初始化為0;board [15][15]中記錄了兩個玩家的所有落子信息,一方玩家為白子在數(shù)組中用0表示,一方為黑子在數(shù)組中用
36、1表示,所以在整個數(shù)組都是1,0的數(shù)據(jù),根據(jù)正向,反向,斜向上1,0形成的個數(shù)學(xué)來判斷白子和黑子的是獲勝的組合數(shù) 4.3.4 客戶端程序主要變量說明 表1 客戶端程序主要變量列表 變量 類 型 功 能 board int[][] 用來記錄玩家各自的下子信息,由此表判斷勝負(fù)。 pColor Int 用來記錄玩家所選的棋的顏色。 socket Socket 定義一個套接字。 PORT Int 定義服務(wù)器端需要監(jiān)聽的端口,客戶端一連接到此端口,服務(wù)器端就可以監(jiān)聽到,從而和客戶端建立起通信。 in ObjectInputStrea
37、m 表示客戶端套接字的輸入流,用來接收其它客戶端和服務(wù)器端傳來的數(shù)據(jù)。 out ObjectOutputStream 表示客戶端套接字的輸出流,用來向其它客戶端和服務(wù)器端輸出數(shù)據(jù)。 serverAddress String 記錄主機(jī)即服務(wù)器端的IP地址信息,客戶端通過些IP地址連接到服務(wù)器的PORT端口。 name String 記錄了當(dāng)前玩家的名字。 send Char[] 當(dāng)玩家離開時服務(wù)器時會向另一玩家發(fā)離開消息,此變量記錄的便是這個消息字符串。 message Message beginFlag Boolean 記錄游戲開始/結(jié)束的標(biāo)志,也是游
38、戲開始的標(biāo)志 bpanel BoardPanel 記錄了棋盤信息。包括棋盤的創(chuàng)建以及棋盤響應(yīng)的事件。 xp Int 記錄了玩家按下的點(diǎn)的橫向的像素位置 yp Int 記錄了玩家按下的點(diǎn)的豎向的像素位置 setting Boolean 是否設(shè)置禁手。 coordinateX Int 客戶端向服務(wù)器發(fā)送消息時記發(fā)的當(dāng)前玩家下棋的橫向位置。 coordinateY Int 客戶端向服務(wù)器發(fā)送消息時記發(fā)的當(dāng)前玩家下棋的縱向位置。 msg char[] 記錄了玩家與玩家之間聊天信息。 4.3.5 客戶端主要方法說明 表2 客戶
39、端程序主要方法列表 方 法 名 稱 類 型 功 能 acceptToPlay(Message msg) void 接受一個玩家的游戲請求 arrayToString(char [] arr) String 將字節(jié)流轉(zhuǎn)換為字符串 drawChess(int x,int y){ void 在指定位置畫一顆棋字 getDeny(Message msg) void 拒絕一個玩家的游戲請求 getDisconnection(Message msg) void 正在游戲時,另一玩家退出,收到服務(wù)器發(fā)來的玩家離開消息。 getFailed(Me
40、ssage msg) void 當(dāng)玩家輸?shù)粲螒驎r顯示失敗信息。 getVictory(Message msg) void 當(dāng)玩家輸?shù)粲螒驎r顯示勝利信息。 newGame() void 重新開始新游戲,程序回到初始狀態(tài)。 paint(GraphiC/S g) void 重畫棋盤。 putChessman(Message msg) void 玩家下了一個棋子后,通過傳送消息提交到服務(wù)器。 requestAnother(Message msg) void 請求與另外的玩家進(jìn)行游戲。 sendDisconnect() void 向服務(wù)器發(fā)送斷開連接請求,退出程序
41、,斷開與服務(wù)的連接 clearBoard() void 將棋盤清零,回到初始狀態(tài)。 updateBoard(int x,int y){ void 更新棋盤。 judge(int x,int y,int clr) boolean 判斷棋盤,是否有同顏色的棋子構(gòu)成五個以上,由些判斷勝負(fù)。 4.4 五子棋服務(wù)器端設(shè)計 服務(wù)器端的程序是整個程序的核心,用來處理來自客戶端的請求,傳送消息,服務(wù)器程序的設(shè)計主要包括:監(jiān)聽端口接收來自客戶端的連接請求,將相互對戰(zhàn)的客戶端編組,向?qū)?zhàn)的客戶傳送聊天信息,處理來自客戶端的消息以及向客戶端發(fā)送消息,勝負(fù)的判斷,一些功能轉(zhuǎn)換函數(shù),處理來自
42、客戶端的連接及斷開連接請求。 4.4.1 服務(wù)器端程序主要變量說明 表3 服務(wù)器端主要變量說明 變 量 名 類 型 功 能 player String 記錄了每個玩家的基本信息。 in ObjectInputStream 服務(wù)器端的輸入流,用來接收來自客戶端的消息。 out ObjectOutputStream 服務(wù)器端的輸出流,用來發(fā)送消息到客戶端。 socket Socket 定義一個套接字,用來與客戶端的連接。 gg Group 對戰(zhàn)玩家組的基本信息。 playerList ArrayList 玩家列表。
43、 groupList ArrayList 對戰(zhàn)的玩家列表。 PORT Int 定義服務(wù)器端需要監(jiān)聽的端口,客戶端一連接到此端口,服務(wù)器端就可以監(jiān)聽到,從而和客戶端建立起通信。 s ServerSocket 服務(wù)器端的套接字。 4.4.2 服務(wù)器端程序主要方法說明 表4 服務(wù)器端主要方法說明 方 法 名 稱 類 型 功 能 說 明 addPlayer(Message player) void 添加一個玩家到玩家列表。 acceptRequest(Messagemsg) void A玩家接受另B玩家的游戲請求,服務(wù)器向B玩家發(fā)送接受游戲請求消息
44、。 denyRequest(Messagemsg) void A玩家拒絕B玩家的游戲請求,服務(wù)器向B玩家發(fā)送拒絕游戲請求消息。 doMessage(Message msg) int 處理來自客戶端的消息。 getdisconnect(Message msg) void 處理正在游戲的兩個玩家中的斷開連接請求。 getSocket() Socket 獲得一個套接字。 playerRefresh(Messageplayer) void 刷新玩家列表。 putChessman(Message msg) void 處理玩家的下子信息。 requestAnother
45、(Message msg) void 處理一個玩家請求向另外的玩家游戲請求的消息。 updateClient() void 更新玩家列表。 setting(Message msg, boolean flag) void 向?qū)?zhàn)的兩家發(fā)送消息設(shè)置是否禁手。 chatmessage(Message msg) void 處理對戰(zhàn)的兩玩家的聊天信息。 judge(Group gg, int x, int y) boolean 判斷勝負(fù)。 4.4.3 服務(wù)器端主體流程圖(見圖4.4) 客戶端消息 doMessage(),處理來自客戶端的消息
46、,判斷消息類型 2 3==3=2 4 5 7 12 19 21 13 6 putChessman(msg) denyRequest(msg) acceptRequest(msg) checkVictory(msg) setting(msg, flag) playerRefresh(msg) chatmessage(msg) setting(msg, flag) checkVictory(msg) requestAnother(msg 輸出消息到各客戶端 圖 4.4 服務(wù)器端
47、主體流程圖 4.4.4 程序模塊功能說明 表5程序模塊功能說明 類 名 功 能 說 明 BoardPanel 畫出棋盤,處理棋盤事件 ChessWZQ 客戶端主程序,處理客戶端與服務(wù)器端的消息傳送 Group 定義一個對戰(zhàn)玩家組 Player 初始化一個玩家信息 Server 初始化服務(wù)器端的監(jiān)聽程序 Message 客戶端與服務(wù)器端傳送的消息對象 ServerOneClient 服務(wù)器端的主體程序,處理與客戶端的交互,轉(zhuǎn)發(fā)請求 InetAddressTest 用于初始化服務(wù)器端的IP地址址信息。 4.4.5
48、 程序主體流程圖(見圖4.5) 圖 4.5程序主體流程圖 第五章 系統(tǒng)測試與性能分析 5.1 系統(tǒng)功能測試 設(shè)定JDK1.4的ClassPath和Path后進(jìn)入到程序所在的目錄,在Dos界面運(yùn)行server.bat啟動服務(wù)器端程序,按照上面步聚再啟動一個Dos 界面運(yùn)行client1.bat啟動一個客戶端程序,按照上面步聚再啟動一個Dos 界面運(yùn)行client2.bat啟動一個客戶端程序,至此系統(tǒng)完整界面啟動,見圖5.1 圖 5.1 系統(tǒng)界面 1.由圖6.1可知各界面元素符合需求分析中規(guī)定的要求,游戲界面測試成功。 2.玩家選擇白色棋子,對方則自動選擇黑色棋子,棋子選色測
49、試成功。 3.在玩家列表中雙擊一個玩家請求游戲,雙方建立了連接,游戲正常開始,游戲連接測試成功。 4.在聊天窗口中輸入信息,對方玩家可以收到自己發(fā)的信息,自己也可以收到對方玩家輸入的信息,聊天窗口測試成功。 5.在棋盤上點(diǎn)擊鼠標(biāo),程序可以依照程序要求在上面下子,并且可以正常處理判斷勝負(fù),下子過程測試成功。 6.點(diǎn)擊Create中的play with people 則系統(tǒng)提示在玩家列表中選擇玩家進(jìn)行游戲,Create菜單測試成功。 7.點(diǎn)擊Quit按鈕,游戲可以正常退出并可以正確判斷勝負(fù),退出功能測試成功。 5.2 系統(tǒng)性能分析 1.測試服務(wù)器的響應(yīng)時間 運(yùn)行客戶端程序
50、client1.bat,玩家名字可以立即出現(xiàn)在服務(wù)器端的玩家列表中,由此可知客戶端與服務(wù)器的連接速度良好。 2.測試下子過程及勝負(fù)的處理響應(yīng)時間 在棋盤上下一個棋子,服務(wù)器端可以接收到下子信息并把信息發(fā)到另外的客戶端,如果此時有任一方的棋子可以五個成一線則可以正確判斷勝負(fù),由些可知系統(tǒng)對下子過程的處理響應(yīng)時間良好。 由些可以測定系統(tǒng)對各方面的性能響應(yīng)要求良好,符合需求分析的要求。 結(jié)束語 網(wǎng)絡(luò)游戲正在形成一個成熟而巨大的產(chǎn)業(yè)。在日本和韓國,電子游戲已經(jīng)相繼超過以汽車制造為代表的傳統(tǒng)制造業(yè)而成為國民經(jīng)濟(jì)主導(dǎo)產(chǎn)業(yè)之一
51、。在美國,游戲業(yè)已經(jīng)超越擁有百年歷史的好萊塢電影業(yè)而成為整個電子娛樂產(chǎn)業(yè)的龍頭。根據(jù)市場預(yù)測,從2001年到2005年,美國的網(wǎng)絡(luò)游戲收入將會以每年50%的速度遞增,由2.3億美元增加到18億美元。2003年, 中國網(wǎng)絡(luò)游戲人數(shù)將超過1500萬人。國內(nèi)網(wǎng)站方面,網(wǎng)易、新浪、搜狐、21CN、騰訊、TOM等紛紛進(jìn)軍網(wǎng)絡(luò)游戲。2002年,國內(nèi)網(wǎng)絡(luò)游戲從50多款迅速發(fā)展到了130多款。2003年將繼續(xù)成倍增加??梢娋W(wǎng)絡(luò)游戲的開發(fā)還存在著巨大的潛力,如何開發(fā)出更好的網(wǎng)絡(luò)游戲?qū)⑹俏覀兝^續(xù)努力的目標(biāo)。通過本程序的開發(fā)我掌握了很多JAVA應(yīng)用方面的知識,加深了對計算機(jī)網(wǎng)絡(luò)編程的了解。
52、 參考文獻(xiàn) [1] 王曉春.PC游戲編程(人機(jī)博弈)[M].北京:清華大學(xué)出版社,2001 [2] 黎德玲.中國象棋的機(jī)器下棋[M].北京:清華大學(xué)出版社,2001 [3] 李琳.JAVA核心技術(shù)[M].北京:清華大學(xué)出版社,2001 [4] 杜誠.JAVA基礎(chǔ)與提高[M].北京:人民郵電出版社,2001 [5] Nils J.Nilsson.人工智能[M].美:機(jī)械工業(yè)出版社,2000 [6] 林堯瑞.人工智能導(dǎo)論[M] .北京:清華大學(xué)出版社 ,2001 [7] 尼爾松.人工智能[M].北京:機(jī)械工業(yè)出版社, 20
53、01 [8] 那威,張照元.連珠五子棋提高捷徑入段升級必讀[M]. 北京:北京體育大學(xué)出版社,1998 [9] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.可復(fù)用面向?qū)ο筌浖幕A(chǔ)[M].北京:機(jī)械工業(yè)出版社,2000 [10] Donald E. Knuth. The Art of Computer Programming[M]. Addison-Wesley,1998 [11] 雷超陽,徐正權(quán),張治元.基于C/S模式中影響數(shù)據(jù)庫系統(tǒng)性能的研究[J].電腦信息技術(shù).2005, 24(1):4~7 [12] 趙子
54、義,李明.Java Socket 編程詳解[J].計算機(jī)科學(xué).2003,20(2):11~12 [13] 曾亞純,彭遠(yuǎn)威.數(shù)據(jù)庫設(shè)計與編程實(shí)例詳解[J].信息與電腦.2001,15(5):15~17 [14] 楊世清.基于網(wǎng)絡(luò)環(huán)境的游戲開發(fā)技術(shù)[J].武漢科技報.2004,18(10):10~13 [15] 李達(dá).現(xiàn)代游戲開發(fā)技術(shù)[J].計算機(jī)學(xué)報.2003,14(3):33~40 [16] 薩師煊,王珊.計算機(jī)網(wǎng)絡(luò)概論[J].電腦信息報.2001,19(1):30~39 [17] 蔡自興.人工智能技術(shù)[J].計算機(jī)學(xué)報.2002,20(2):5~9 [18] Wiki Discu
55、ssiion,Cost of Design carry. of Design Carry,1999 [19] 許正熙,信息管理論文.論文急救中心.,2001 致謝 最后,我要感謝在這段時間內(nèi)對我的工作進(jìn)行指導(dǎo)的孫建平老師。在程序的實(shí)現(xiàn)過程中,她的指導(dǎo)使我對網(wǎng)絡(luò)游戲和計算機(jī)網(wǎng)絡(luò)編程的認(rèn)識更加深刻,對人工智能的講解對我來說是全新的,非常有吸引力的。在程序的設(shè)計過程中遇到困難的時候,她及時的給了我建議與支持,使得畢業(yè)設(shè)計能夠順利進(jìn)行,并在規(guī)定的時間內(nèi)完成各項(xiàng)任務(wù)。 感謝系里領(lǐng)導(dǎo)為我們學(xué)生畢業(yè)設(shè)計過程中提供的各種方便、理解與支持。有了他們的支持我的畢業(yè)設(shè)計才能如期完成。 感謝JA
56、VA中文論壇中開展的討論,我在那里學(xué)到了許多關(guān)于JAVA網(wǎng)絡(luò)編程方面的知識,在寫論文的過程中和程序?qū)崿F(xiàn)上遇到疑問的時候,從那里也得到了很多啟發(fā)。 我還要感謝同組的同學(xué),在設(shè)計和調(diào)試遇到困難的時候,很多都是依賴與他們的交流。是他們的鼓勵和熱心幫助讓我順利的完成了設(shè)計任務(wù)。 附錄 Message類 //Message 類是客戶端與服務(wù)器端傳送的消息對象 import java.io.Serializable; /** * message list * type = 1 // request of connected,msg =
57、 connectors name * type = 2 // put chessman * type = 3 // request play with another * type = 4 // deny a request for play * type = 5 // agree with request * type = 6 // send victory message * type = 7 // send disconnection * type = 8 // save game but not to disk,it will be lost when ne
58、xt start * type = 9 // add new player to all clients player list * type = 10// response for message type ==1 * type = 11// play with a player,msg save players name ,game set by * // the one who create game * type = 12// setting information * type = 13// setting player color *
59、type = 14// msg for acceptor B to setting color and setings * type = 15// server update message * type = 16// send messages of control or errors * type = 17// failed in the game * type = 18// server socket close * type = 19// player end a game and refresh * tyep = 20// computer win / peo
60、ple win */ public class Message implements Serializable{ byte type; // message type ,eg.1=request of connection boolean setting; // 是否設(shè)置禁手 int color; // chessman color ,1 = black ,2 = white boolean forYourTurn; // judge whether it is for receivers tu
61、rn int coordinateX; // record the coordinate X from 0~14 ,save black or white int coordinateY; // record the coordinate Y from 0~14 ,save black or white char[] msg; public Message(){ setting=true; msg = new char[50]; } } Player類
62、 Player類用于初始化一個玩家信息 import .Socket; public class Player { String self=null; ServeOneClient selfSocket=null; boolean setting = false; int color = 1; public Player(){} } Group類 //Grout類用于定義一個對戰(zhàn)玩家組,每兩個玩家接受對戰(zhàn)時,系統(tǒng)會將他們編為一組并從玩家列 //表消失 public class Group { String se
63、lf=null; ServeOneClient selfSocket=null; String player = null; ServeOneClient playerSocket =null; int selfColor = 0; int playerColor = 0; boolean Setting = false; int board[][]; public Group(){ board = new int[15][15]; } } Server類 //Server
64、類用于初始化服務(wù)器端的監(jiān)聽程序 import java.io.*; import .*; import java.util.ArrayList; public class Server { public static final int PORT = 8180; public static ArrayList playerList = new ArrayList(); public static ArrayList groupList = new ArrayList(); public static void main(String[] args
65、)throws IOException { ServerSocket s = new ServerSocket(PORT); System.out.println("Welcome using ChessWZQ1.0 server (alpha test)...\nAuthor:張良周\nCopyright:scitel \nMail:skywolf_2002@"); System.out.println("Server Started at port "+PORT+"..."); System.out.println("
66、This is on the server!"); try { while(true) { // Blocks until a connection occurs: Socket socket = s.accept(); try { System.out.println("create a socket frome server"); ServeOneClient server = new ServeOneClient(socket); Player client = new Player(); client.
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案