564501075畢業(yè)設計(論文)基于JAVA的“五子棋”網(wǎng)絡游戲開發(fā)

上傳人:仙*** 文檔編號:32393368 上傳時間:2021-10-14 格式:DOC 頁數(shù):76 大?。?.95MB
收藏 版權申訴 舉報 下載
564501075畢業(yè)設計(論文)基于JAVA的“五子棋”網(wǎng)絡游戲開發(fā)_第1頁
第1頁 / 共76頁
564501075畢業(yè)設計(論文)基于JAVA的“五子棋”網(wǎng)絡游戲開發(fā)_第2頁
第2頁 / 共76頁
564501075畢業(yè)設計(論文)基于JAVA的“五子棋”網(wǎng)絡游戲開發(fā)_第3頁
第3頁 / 共76頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《564501075畢業(yè)設計(論文)基于JAVA的“五子棋”網(wǎng)絡游戲開發(fā)》由會員分享,可在線閱讀,更多相關《564501075畢業(yè)設計(論文)基于JAVA的“五子棋”網(wǎng)絡游戲開發(fā)(76頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、第一章 系統(tǒng)概述 1.1 課題意義 本程序旨在用JAVA實現(xiàn)一個基本于C/S模式的五子棋網(wǎng)絡對戰(zhàn)游戲。玩家作為客戶端通過服務器端與其它玩家進行對戰(zhàn),聊天等功能。通過實現(xiàn)本程序加深對計算機網(wǎng)絡編程的了解。 1.2 國內(nèi)外有關研究動態(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)實世界無法展現(xiàn)的潛能,改變了單機版游戲固定、呆板、與機器對話的狀況。

2、網(wǎng)絡游戲的這些優(yōu)勢不僅使其在電腦游戲行業(yè)中異軍突起并在某種程度上取代了單機版游戲,而且成為網(wǎng)絡業(yè)三大(網(wǎng)上金融、網(wǎng)上教育和網(wǎng)絡游戲)贏利且利潤優(yōu)厚的領域之一[1]。   網(wǎng)絡作為一種新興的傳播方式,主要包括三大內(nèi)容:娛樂、資訊、通訊。提到網(wǎng)絡娛樂,過去主要指的是單機版游戲,沒有引入網(wǎng)絡的概念[2]但隨著科技的發(fā)展,游戲娛樂產(chǎn)業(yè)也在成長[3]目前,國內(nèi)的游戲娛樂產(chǎn)業(yè)正處于起步階段,特點表現(xiàn)為:第一,它是一種文化的傳播。娛樂產(chǎn)業(yè)可以潛移默化地改變?nèi)说挠^念,當前,很多多媒體的播放已被電腦網(wǎng)絡所取代[4]。第二,網(wǎng)絡游戲加強了人與人的溝通。第三,網(wǎng)絡游戲具有一定的教育意義[5]。網(wǎng)絡游戲所具有的角色

3、扮演的功能,使得玩家能通過互助更好地完成游戲中的各項任務。網(wǎng)絡無國界,游戲在網(wǎng)絡文化產(chǎn)業(yè)世界的發(fā)展中地位會越來越高[6]。 目前在國外,休閑游戲如棋類等,玩家的年齡跨度非常大,這和我國目前網(wǎng)游市場以青少年為主要消費人群的狀況截然不同[7]。其實,網(wǎng)絡可以解決空間的問題,網(wǎng)絡和生活越來越息息相關,因此,開辟適合各個年齡層的游戲產(chǎn)品迫在眉睫。同時,這也涉及到一個企業(yè)開發(fā)的能力。娛樂產(chǎn)業(yè)發(fā)展到一定程度,通過不斷鍛煉和經(jīng)驗的積累,完全可以通過融入娛樂的成分把教條的東西深入淺出地展現(xiàn)給消費者[8] 。 就國內(nèi)的發(fā)展來看,最近這兩三年內(nèi)國內(nèi)的游戲公司如雨后春筍般的成立,所開發(fā)或代理的網(wǎng)絡游戲更是不勝枚

4、舉。以全球游戲業(yè)界的發(fā)展來看,這幾年韓國的表現(xiàn)最為突出,特別是在網(wǎng)絡游戲的技術研發(fā)興游戲制作,其所發(fā)行的網(wǎng)絡游戲更成為全球游戲產(chǎn)業(yè)重要的指標之一。去年在美國洛杉磯所舉行的 E3(Electronic Entertainment Exposition)展中,已經(jīng)有幾家的韓國廠商擠入世界第一線的游戲開發(fā)廠商之列[9]。 近幾年來,由于 3D 硬體繪圖技術的突破,使得即時描繪的書面越來越精致,而且3D遊戲性更多元化更逼近真實世界,因此在遊戲產(chǎn)業(yè)中,3D 游戲已經(jīng)逐漸取代2D游戲為游戲市場的主流,即使是網(wǎng)絡游戲,也慢慢趨向3D化。然而游戲3D化將會帶來的游戲開發(fā)上的困難等問題,這些問題以后都需要逐

5、步解決[10]。 1.3 課題主要內(nèi)容及創(chuàng)新之處 五子棋是一種受大眾廣泛喜愛的游戲,其規(guī)則簡單,變化多端,非常富有趣味性和消遣性。本程序是用JAVA實現(xiàn)的一個基本于C/S模式的五子棋網(wǎng)絡對戰(zhàn)游戲。JAVA是一種簡單的,面向?qū)ο蟮?,分布式的,解釋的,健壯?安全的,結構中立的,可移植的,性能很優(yōu)異的多線程的,動態(tài)的語言。因此用Java開發(fā)的網(wǎng)絡應用系統(tǒng)可以在各種平臺上運行,實現(xiàn)了設備無關性,一次開發(fā)處處運行,大大增加了開發(fā)效率,減少了重復勞動。玩家作為客戶端通過服務器端與其它玩家進行對戰(zhàn),聊天等功能[11]。本程序作為一種網(wǎng)絡游戲,其樂趣是人與人之間的對抗,而不僅僅是人與事先設置的各種程序

6、的對抗,所以比普通的人機對戰(zhàn)游戲更具有生命力,更具有趣味性[12]。而且通過實現(xiàn)本程序可以加深對計算機網(wǎng)絡編程的了解。 第二章 五子棋簡介 2.1 五子棋起源、歷史、簡介 五子棋起源于中國古代的傳統(tǒng)黑白棋[13]。現(xiàn)代五子棋日文稱之為"連珠",英譯為"Renju",英文稱之為"Gobang"或"FIR"(Five in a Row的縮寫),亦有"連五子"、"五子連"、"串珠"、"五目"、"五目碰"、"五格"等多種稱謂。 五子棋不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征"短、平、快",又有古典哲學的高深學問"陰

7、陽易理";它既有簡單易學的特性,為人民群眾所喜聞樂見,又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有"場"的概念,亦有"點"的連接。它是中西文化的交流點,是古今哲理的結晶。 2.2 五子棋規(guī)則說明 2.2.1 棋盤 棋盤正中一點為"天元"。棋盤兩端的橫線稱端線。棋盤左右最外邊的兩條縱線稱邊線。從兩條端線和兩條邊線向正中發(fā)展而縱橫交叉在第四條線形成的四個點稱為"星"。天元和星應在棋盤上用直徑約為0.5厘米的實心小圓點標出。 以持黑方為準,棋盤上的縱軸線從左到右用英文字母A~O標記。橫行線從近到遠用阿拉伯數(shù)字1~15標記。縱橫軸上的橫縱線交叉點

8、分別用橫縱線標記的名稱合寫成。如"天元"H8,四個"星"分別為D4、D12、L12、L4等。見圖2.1 圖 2.1 棋盤 2.2.2 基本規(guī)則 黑白雙方依次落子,任一方先在棋盤上形成橫向、豎向、斜向的連續(xù)的相同顏色的五個(含五個以上)棋子的一方為勝。 2.2.3 陽線和陰線 陽線:棋盤上可見的橫縱直線。 陰線:棋盤上無實線連接的隱形斜線。 2.2.4 連 在棋盤某一陽線或陰線上形成5個以上的同色棋子不間隔地相連。 五連:在棋盤上形成的5個同色棋子的"連"。   長連:在棋盤上形成的6個或6個以上同色棋子的"連"。 2.2.5 "四"包括"活四"和"沖四" 圖

9、2.2 活四說明  活四:在棋盤某一條陽線或陰線上有同色4子不間隔地緊緊相連,且在此4子兩端延長線上各有一個無子的交叉點與此4子緊密相連。見圖2.2   沖四:除"活四"外的,再下一著棋便可形成五連,并且存在五連的可能性的局面。見圖2.3        圖 2.3 沖四說明   白棋再下一著可形成長連的局面也視為"四"。見圖2.4 圖 2.4 白棋長連形成的四 2.2.6 "三"指活三,包括"連三"和"跳三" 活三:在棋盤某一條陽線或陰線上有同色3子不間隔地緊緊相連,且在此3子兩端延長線上各有一個無子的交叉點與此3子緊密相連。 連三:在棋盤某一條陽線或陰線上有同色三子相連

10、,且在此三子兩端延長線上有一端至少有一個,另一端至少有兩個無子的交叉點與此三子緊密相連。 跳三:中間僅間隔一個無子交叉點的連三,但兩端延長線均至少有一個無子的交叉點與此三子相連。 2.2.7 三手可交換 是指黑棋下盤面第3著棋后,白方在應白4著棋之前,如感覺黑方棋形不利于己方,可提出交換,即執(zhí)白棋一方變?yōu)閳?zhí)黑棋一方,而黑方不可以不換。 2.2.8 五手兩打 是指黑棋在下盤面上關鍵的第5手棋時,必須下兩步棋,讓白棋在這兩步棋中任選一步,然后再繼續(xù)對弈。一般說來,白棋肯定拿掉對白方不利的一點,而保留對黑方較為不利的那點讓黑方行棋。 2.2.9 禁手規(guī)則 無禁手: 是指采用最簡單古老

11、的規(guī)則。黑白雙方依次落子,任一方先在棋盤上形成橫向、豎向、斜向的連續(xù)的相同顏色的五個(含五個以上)棋子的一方為勝。這種規(guī)則非常簡單容易理解。適合初學的業(yè)余五子棋愛好者。但是在這種規(guī)則下黑棋勝算較大。甚至已經(jīng)有人證明在黑白雙方都不出現(xiàn)錯誤的情況下,黑棋可以必勝。所以一般要求連續(xù)玩兩盤以上,既任一方執(zhí)黑,執(zhí)白各一次。 有禁手:鑒于無禁手規(guī)則黑棋必勝,人們不斷采用一些方法限制黑棋先行的優(yōu)勢,以平衡黑白雙方的形式。于是針對黑棋的各種禁手逐漸形成。禁手最簡單地說就是一手棋形成長連(連成五個以上連續(xù)相同的棋子),或兩個以上的活三,或者兩個以上的四,并且這些四、活三和長連都要包括這一手棋。 并且規(guī)定,當

12、禁與連五同時出現(xiàn)時為黑方取勝禁手不成立,禁手是針對黑棋而言的,白棋沒有任何禁手。例如:黑棋長連是禁手,白棋長連算贏棋。 國際比賽規(guī)則規(guī)定:對局中如黑方出現(xiàn)禁手,白方應立即指出禁手點,黑方即負。如白方在黑方出現(xiàn)禁手后,又落一步白子,黑棋禁手則不成立了。 所以 在"有禁手"的房間里,如果黑方出現(xiàn)禁手,白方應立即按下"禁手"按鈕 。程序會判黑方負。如果這時白方又在棋盤上落一子,黑棋禁手則不成立了。 第三章 方案設計及開發(fā)工具的選取 3.1 選用Java進行開發(fā)的原因 Java是一種簡單的,面向?qū)ο蟮?,分布式的,解釋的,健?/p>

13、的安全的,結構的中立的,可移植的,性能很優(yōu)異的多線程的,動態(tài)的語言[14] 。因此用Java開發(fā)的網(wǎng)絡應用系統(tǒng)可以在各種平臺上運行,大大增加了開發(fā)效率,減少重復勞動。而且,Java集成的網(wǎng)絡功能分有利于開發(fā)網(wǎng)絡應用系統(tǒng)[15] 。 Java具有許多的優(yōu)點: 3.1.1 簡單 Java最初是為對家用電器進行集成控制而設計的一種語言,因此它必須簡單明了。Java語言的簡單性主要體現(xiàn)在以下三個方面:1.Java的風格類似于C++,因而C++程序員是非常熟悉的。從某種意義上講,Java語言是C及C++語言的一個變種,因此,C++程序員可以很快就掌握Java編程技術。2.Java摒棄了C++中容易

14、引發(fā)程序錯誤的地方,如指針和內(nèi)存管理。3.Java提供了豐富的類庫。 3.1.2 面向?qū)ο? 面向?qū)ο罂梢哉f是Java最重要的特性。Java語言的設計完全是面向?qū)ο蟮模恢С诸愃艭語言那樣的面向過程的程序設計技術。Java支持靜態(tài)和動態(tài)風格的代碼繼承及重用。單從面向?qū)ο蟮奶匦詠砜?,Java類似于SmallTalk,但其它特性、尤其是適用于分布式計算環(huán)境的特性遠遠超越了SmallTalk。 3.1.3 分布式 Java包括一個支持HTTP和FTP等基于TCP/IP協(xié)議的子庫。因此,Java應用程序可憑借URL打開并訪問網(wǎng)絡上的對象,其訪問方式與訪問本地文件系統(tǒng)幾乎完全相同。為分布環(huán)境尤其

15、是Internet提供動態(tài)內(nèi)容無疑是一項非常宏偉的任務,但Java的語法特性卻使我們很容易地實現(xiàn)這項目標。 3.1.4 健壯 Java致力于檢查程序在編譯和運行時的錯誤。類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯誤。Java自己操縱內(nèi)存減少了內(nèi)存出錯的可能性。Java還實現(xiàn)了真數(shù)組,避免了覆蓋數(shù)據(jù)的可能。這項功能特征大大縮短了開發(fā)Java應用程序的周期。Java提供Null指針檢測數(shù)組邊界檢測異常出口字節(jié)代碼校驗 3.1.5 結構中立 另外,為了建立Java作為網(wǎng)絡的一個整體,Java將它的程序編譯成一種結構中立的中間文件格式。只要有Java運行系統(tǒng)的機器都能執(zhí)行這種中間代碼?,F(xiàn)在,J

16、ava運行系統(tǒng)有Solaris2.4(SPARC),Win32系統(tǒng)(Windows95和WindowsNT)等.Java源程序被編譯成一種高層次的與機器無關的byte-code格式語言,這種語言被設計在虛擬機上運行,由機器相關的運行調(diào)試器實現(xiàn)執(zhí)行。 3.1.6 安全 Java的安全性可從兩個方面得到保證。一方面,在Java語言里,像指針和釋放內(nèi)存等C++功能被刪除,避免了非法內(nèi)存操作。另一方面,當Java用來創(chuàng)建瀏覽器時,語言功能和一些瀏覽器本身提供的功能結合起來,使它更安全。Java語言在你的機器上執(zhí)行前,要經(jīng)過很多次的測試。它經(jīng)過代碼校驗,檢查代碼段的格式,檢測指針操作,對象操作是否過

17、分以及試圖改變一個對象的類型。 3.1.7 可移植的 同體系結構無關的特性使得Java應用程序可以在配備了Java解釋器和運行環(huán)境的任何計算機系統(tǒng)上運行,這成為Java應用軟件便于移植的良好基礎。但僅僅如此還不夠。如果基本數(shù)據(jù)類型設計依賴于具體實現(xiàn),也將為程序的移植帶來很大不便。例如在Windows3.1中整數(shù)(Integer)為16bits,在Windows95中整數(shù)為32bits,在DECAlpha中整數(shù)為64bits,在Intel486中為32bits。通過定義獨立于平臺的基本數(shù)據(jù)類型及其運算,Java數(shù)據(jù)得以在任何硬件平臺上保持一致。Java語言的基本數(shù)據(jù)類型及其表示方式如下:by

18、te8-bit二進制補碼short16-bit二進制補碼int32-bit二進制補碼long64-bit二進制補碼float32-bitIEEE754浮點數(shù)double32-bitIEEE754浮點數(shù)char16-bitUnicode字符。在任何Java解釋器中,數(shù)據(jù)類型都是依據(jù)以上標準具體實現(xiàn)的。因為幾乎目前使用的所有CPU都能支持以上數(shù)據(jù)類型、8~64位整數(shù)格式的補碼運算和單/雙精度浮點運算。Java編譯器本身就是用Java語言編寫的。Java運算系統(tǒng)的編制依據(jù)POSIX方便移植的限制,用ANSIC語言寫成。Java語言規(guī)范中也沒有任何同具體實現(xiàn)相關的內(nèi)容。 3.1.8 多線程 Jav

19、a的多線程功能使得在一個程序里可同時執(zhí)行多個小任務。線程有時也稱小進程,是一個大進程里分出來的小的獨立的進程。因為Java實現(xiàn)的多線程技術,所以比C和C++更健壯。多線程帶來的更大的好處是更好的交互性能和實時控制性能。當然實時控制性能還取決于系統(tǒng)本身(UNIX,Windows,Macintosh等),在開發(fā)難易程度和性能上都比單線程要好。任何用過當前瀏覽器的人,都感覺為調(diào)一副圖片而等待是一件很煩惱的事情。在Java里,你可用一個單線程來調(diào)一幅圖片,而你可以訪問HTML里的其它信息而不必等它。 3.1.9 與C和C++語言的異同 Java提供了一個功能強大語言的所有功能,但幾乎沒有一點含混特

20、征。C++安全性不好,但C和C++還是被大家所接受,所以Java設計成C++形式,讓大家很容易學習。Java去掉了C++語言的許多功能,讓Java的語言功能很精煉,并增加了一些很有用的功能,Java去掉了以下幾個C和C++功能和特征:指針運算結構typedefs#define需要釋放內(nèi)存全局變量的定義這個功能都是很容易引起錯誤的地方。 3.2 客戶端服務器模式 3.2.1 C/S模式簡介 客戶 機 /服務器(Client/Server)模式是指兩個邏輯(往往是物理的)系統(tǒng)(客戶機/服務器)及其應用程序邏輯組件之間復雜關系的協(xié)同[16]。一般而言,C/S應用系統(tǒng)從物理上都可劃分為客

21、戶機與服務器兩大部分,而邏輯上又可分解為三部分:表達邏輯、業(yè)務處理邏輯和數(shù)據(jù)管理邏輯。C/S應用系統(tǒng)的格局和性能主要取決于這些邏輯成份在客戶機上或在服務器上的組織與分配。C/S模式將一個應用分為兩個部分:前端(客戶端)、后端(服務器)??蛻魴C指提供客戶機服務的邏輯系統(tǒng),服務器指向服務器請求提供服務的邏輯系統(tǒng)。一般來說,客戶機向服務器發(fā)出請求為其完成一部分工作服務器則處理客戶機的請求并返回結果。 C/S 兩層模式主要有以下特點:分布的處理與集中的數(shù)據(jù)操作管理有機地結合;開放式的系統(tǒng);用與操作系統(tǒng)、網(wǎng)絡協(xié)議無關的方式存取數(shù)據(jù),支持多平臺和跨平臺;服務器對用戶是透明的;交互性強;相對B/S模式,C

22、/S模式速度快,更利于處理大量數(shù)據(jù)。 C/S兩層模式中,客戶機并不是毫無運算能力的輸入、輸出設備,而是具有了一定的數(shù)據(jù)處理和數(shù)據(jù)存儲能力,通過把應用軟件的計算和數(shù)據(jù)合理地分配在客戶機和服務器兩端,可以有效地降低網(wǎng)絡通信量和服務器運算量。由于服務器連接個數(shù)和數(shù)據(jù)通信量的限制,這種結構的軟件適于在用戶數(shù)目不多的局域網(wǎng)內(nèi)使用。國內(nèi)目前的大部分ERP(財務)軟件產(chǎn)品即屬于此類結構。C/S模式(Client-Server Architecture)可能是應用軟件開發(fā)所使用的最成功的一種模式。它首先是出現(xiàn)在主機系統(tǒng)中,在局域網(wǎng)環(huán)境下,其性能顯的格外的突出。而現(xiàn)在,C/S模式已經(jīng)成為一種基本的開發(fā)設計模式

23、。雖然C/S應用軟件包含了Client和Server部件并且在網(wǎng)絡中相互交互。但這并不代表說所有的C/S應用軟件均需要按照這樣來設計(即網(wǎng)絡不是必須的),它是允許在單機上運行的。 雖然 兩 層 系統(tǒng)有以上的優(yōu)點,但在多用戶、多數(shù)據(jù)庫、且非安全的網(wǎng)絡環(huán)境下(例如Internet),兩層的應用就有明顯的局限性。服務器端的數(shù)據(jù)庫必須同每一個活動的客戶保持連接,這些連接消耗了大量的運算資源,其結果是隨著客戶數(shù)目的增加,性能不斷下降.由于應用邏輯全部駐留在客戶端,當應用環(huán)境發(fā)生變化需要改變事務邏輯時,每個客戶機上的程序都需要更新,給系統(tǒng)的維護和管理造成了一定的困難。隨著應用系統(tǒng)越來越復雜,客戶端應用程

24、序變得越來越龐大,對客戶機的處理能力要求越來越高,成為所謂的“胖客戶機” 在C/S模式中,工作原理可以簡單的理解為:Client向Server提交一個請求,Server則使用一些方法處理這個請求,并將效果返回給Client. 見圖3.1 圖 3.1 C/S模式原理圖 在處理Client的請求時,Server本身可以成為另一個C/S模式中的Client. 見圖3.2 圖 3.2 server與client關系圖 大部份的人認為在Client-Server應用軟件中,Server做了幾乎所有的工作。但實際上并不是這樣

25、。在實際應用中,Client執(zhí)行了大部份的軟件邏輯并完成了大部份的工作。Server當然也做了些工作。但它主要的工作是接受client的請求并返回結果。 有許多人說C/S結構是分布式結構中最常用的一個例子。的確,它確實是一個常用的架構模式,而且它也確是通過網(wǎng)絡進行Client和Server之間的交互,但是,嚴格來說,C/S模式有可能不是真正意義上的分布式結構。為什么這么說呢?我們首先應該從分布式結構的定義及特性去考慮。分布式系統(tǒng)簡單來說是指通過網(wǎng)絡,進行多于一臺電腦之間的數(shù)據(jù)交互。而它最大的特性在于二點,性能(performance)和可量測性(Scalability). 而C/S模式由于含

26、有一系列的限制,以至于很難達到這二點分布式系統(tǒng)的特性。另一方面,一個單獨的應用軟件的透明度通常也是一個分布式結構的特性,但C/S模式并沒有提供這方向的特性。舉個例子,一個網(wǎng)頁瀏覽器,可以看成是一個Client.而用戶必須輸入網(wǎng)站的網(wǎng)址去連接包含所要求網(wǎng)頁的Server,在這里,它就缺乏了透明性。因此我也可以將這個網(wǎng)頁瀏覽器和服務器看成是在這個系統(tǒng)中的二個獨立的組件。在C/S模式下,應用程序直接存取數(shù)據(jù)庫服務器上的數(shù)據(jù),數(shù)據(jù)庫服務器掛在網(wǎng)絡服務器上,客戶機通過協(xié)議(如TCP/IP)和服務器連接。網(wǎng)絡服務器一般運行Unix或Windows NT等操作系統(tǒng),客戶機一般運行Windows95/98。在

27、C/S模式下,大量的開發(fā)任務在客戶機端。目前各種流行的開發(fā)環(huán)境一般都有開發(fā)數(shù)據(jù)庫的工具,并且支持C/S模式開發(fā)。如Visual C++/Basic、Delphi/C++ Builder、Power Builder等。 3.2.2 C/S模式的限制與應用 C/S模式也含有一系列的限制。那這些限制都是什么呢?其實C/S模式最基本的問題在于其缺乏可量測性,主要原因是由于Server逐漸的變成了性能的瓶頸。在前面介紹了可量測性和性能是分布式結構的二大特點。二者相輔相成,缺乏了可量測性也成為了C/S模式不是一種完全的分布式結構的一個原因。在C/S模式中,服務端通常需要通過獲取和使用一些資源來處理Cl

28、ient的請求,比如說,連接數(shù)據(jù)庫,獲取數(shù)據(jù)信息等。對于一個軟件的開發(fā)設計,任何一個需要訪問共享資源的設計系統(tǒng)均應該在最短的時間內(nèi)獲取到所需資源,這樣其它的用戶就可以有機會去訪問資源。試想一下,如果同一時間,大量的Client同時對Server發(fā)出請求,會出現(xiàn)什么的樣的情況?可能會是Server的崩潰,也可能會是網(wǎng)絡的停滯,但不管是什么,這一點將會讓Server變成一個性能的瓶頸,這也是為什么我說C/S模式對于一個應用軟件的可量測性來說含有一定的限制。(有關可量測性,在下面討論)。C/S模式不適合大型的網(wǎng)絡系統(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)是在另一遠程機器中進行處理。二者的邊界有點模糊,針對不同的系統(tǒng)要進行正確的選擇,這樣才能設計出高性能的系統(tǒng)。 3.2.3 可量測性(Scalability)的討論 什么是可量測性呢?對于一個含有可量測性的系統(tǒng)來說,當其在物理資源(小陸所說的硬件資源)的數(shù)量或者用戶的數(shù)量增加的前提下,仍應盡可能的保持著效率。當然,在實際的操作中,這是不可能的,多多少少性能都會受到影響。拿本程序

30、來當例子,當玩家多的時候,大家都需要排隊,才能進入到游戲,而當玩家少的時候,大家就可以直接連接,進入到游戲中[17]。 3.3 界面開發(fā)工具的選擇 對一個優(yōu)秀的應用程序來說,良好的圖形用戶接口是必不可少的。缺少良好的圖形用戶接口,將會給用戶理解和使用應用程序帶來很多不便。很難想象用戶為了學會使用一個應用程序,去記一大堆命令。Java提Awt和swing包了生成一個良好的圖形用戶接口所需要的;基本元件:面板(Panelcopy;、按鈕(Buttoncopy;、標copy;(Labelcopy;、畫板(Canvasescopy;、滾動條(Scrollbarcopy;、列表框(Listcopy;

31、、文本域(TextFieldcopy;、文本區(qū)(TextAreacopy)。由于本系統(tǒng)是一個休閑娛樂游戲,本身的界面元素也不是很復雜,所以用Java AWT來做界出處理已經(jīng)足夠了。用JAVA AWT做界面也有利于和JAVA內(nèi)部程序的銜接。 3.4 JAVA Socket編程 Java是一種可用于進行網(wǎng)絡編程的語言,它提供了兩種功能強大的網(wǎng)絡支持機制:URL訪問網(wǎng)絡資源的類和用Socket通訊的類,來滿足不同的要求[18]。一是URL用于訪問Internet網(wǎng)上資源的應用;另一種是針對client/server(客戶端/服務器)模式的應用以及實現(xiàn)某些特殊的協(xié)議的應用,它的通訊過程是基

32、于TCP/IP協(xié)議中傳輸層接口socket實現(xiàn)的。 客戶基于服務器之間使用的大部分通訊組件都是基于socket接口來實現(xiàn)的[19]。Socket是兩個程序之間進行雙向數(shù)據(jù)傳輸?shù)木W(wǎng)絡通訊端點,有一個地址和一個端口號來標識。每個服務程序在提供服務時都要在一個端口進行,而想使用該服務的客戶機也必須連接該端口。Socket因為是基于傳輸層,所以它是比較原始的通訊協(xié)議機制。通過Socket的數(shù)據(jù)表現(xiàn)形式為字節(jié)流信息,因此通訊雙方要想完成某項具體的應用則必須按雙方約定的方式進行數(shù)據(jù)的格式化和解釋,它具有更強的靈活性和更廣泛的使用領域。 客戶機/服務器Socket通訊工作模式見圖3.3 圖

33、3.3 客戶機/服務器Socket通訊工作模式 第四章 五子棋詳細設計 根據(jù)上一章介紹的系統(tǒng)實現(xiàn)方案,可以將系統(tǒng)簡要的看為分為三個大的功能模塊,即界面元素的設計,客戶端程序設計和服務器端程序設計。下面就這三個部分的主要功能實現(xiàn)依次進行介紹: 4.1需求規(guī)定 l 棋盤采用 1515 棋盤。 l 游戲采用人與人對弈模式,可以選擇玩家進行游戲。 l 游戲中設有禁守規(guī)則和其他走子限制。 l 只有當五個相同顏色的棋子成線以后才判為獲勝,長連也算獲勝。 l 棋盤顏色與棋子顏色要對比分明,便于其他程序識別。 l 游戲中可以顯示游戲狀態(tài)的信息,但是不能有彈出對話框之類的窗口擋住棋盤。 4

34、.2 運行環(huán)境  硬件配置(推薦): CPU:P4—1GHZ或更高 內(nèi)存:128M或更多 顯示器分辨率:800x600或更高 軟件配置: Jbuilder 9或安裝了JDK 1.4,windowsXP操作系統(tǒng) 運行本軟件的系統(tǒng)平臺: 由于本程序是采用JAVA開發(fā)的,實現(xiàn)了與平臺的無關性,具有很強的可移性,一次開發(fā)處處運行,所以可以在所有平臺運行。   開發(fā)工具: Jbuilder 9 4.3 五子棋客戶端設計 4.3.1 建立15X15棋盤 圖 4.1 五子棋棋盤 4.3.2 界面元素的設計 游

35、戲菜單,玩家列表,聊天窗口以及其它一些狀態(tài)信息。整個程序界面見圖4.2 圖 4.2 系統(tǒng)界面 游戲菜單:可以單擊和人對戰(zhàn),設定禁手規(guī)則,退出,以及作者信息。 玩家列表:玩家可以雙擊列表中的一個玩家請求游戲,當對方接受請求雙方即可以開始游戲。 聊天窗口:一對正在游戲的玩家可以互相聊天。 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ù)學來判斷白子和黑子的是獲勝的組合數(shù) 4.3.4 客戶端程序主要變量說明 表1 客戶端程序主要變量列表 變量 類 型 功 能 board int[][] 用來記錄玩家各自的下子信息,由此表判斷勝負。 pColor Int 用來記錄玩家所選的棋的顏色。 socket Socket 定義一個套接字。 PORT Int 定義服務器端需要監(jiān)聽的端口,客戶端一連接到此端口,服務器端就可以監(jiān)聽到,從而和客戶端建立起通信。 in ObjectInputStrea

37、m 表示客戶端套接字的輸入流,用來接收其它客戶端和服務器端傳來的數(shù)據(jù)。 out ObjectOutputStream 表示客戶端套接字的輸出流,用來向其它客戶端和服務器端輸出數(shù)據(jù)。 serverAddress String 記錄主機即服務器端的IP地址信息,客戶端通過些IP地址連接到服務器的PORT端口。 name String 記錄了當前玩家的名字。 send Char[] 當玩家離開時服務器時會向另一玩家發(fā)離開消息,此變量記錄的便是這個消息字符串。 message Message beginFlag Boolean 記錄游戲開始/結束的標志,也是游

38、戲開始的標志 bpanel BoardPanel 記錄了棋盤信息。包括棋盤的創(chuàng)建以及棋盤響應的事件。 xp Int 記錄了玩家按下的點的橫向的像素位置 yp Int 記錄了玩家按下的點的豎向的像素位置 setting Boolean 是否設置禁手。 coordinateX Int 客戶端向服務器發(fā)送消息時記發(fā)的當前玩家下棋的橫向位置。 coordinateY Int 客戶端向服務器發(fā)送消息時記發(fā)的當前玩家下棋的縱向位置。 msg char[] 記錄了玩家與玩家之間聊天信息。 4.3.5 客戶端主要方法說明 表2 客戶

39、端程序主要方法列表 方 法 名 稱 類 型 功 能 acceptToPlay(Message msg) void 接受一個玩家的游戲請求 arrayToString(char [] arr) String 將字節(jié)流轉換為字符串 drawChess(int x,int y){ void 在指定位置畫一顆棋字 getDeny(Message msg) void 拒絕一個玩家的游戲請求 getDisconnection(Message msg) void 正在游戲時,另一玩家退出,收到服務器發(fā)來的玩家離開消息。 getFailed(Me

40、ssage msg) void 當玩家輸?shù)粲螒驎r顯示失敗信息。 getVictory(Message msg) void 當玩家輸?shù)粲螒驎r顯示勝利信息。 newGame() void 重新開始新游戲,程序回到初始狀態(tài)。 paint(GraphiC/S g) void 重畫棋盤。 putChessman(Message msg) void 玩家下了一個棋子后,通過傳送消息提交到服務器。 requestAnother(Message msg) void 請求與另外的玩家進行游戲。 sendDisconnect() void 向服務器發(fā)送斷開連接請求,退出程序

41、,斷開與服務的連接 clearBoard() void 將棋盤清零,回到初始狀態(tài)。 updateBoard(int x,int y){ void 更新棋盤。 judge(int x,int y,int clr) boolean 判斷棋盤,是否有同顏色的棋子構成五個以上,由些判斷勝負。 4.4 五子棋服務器端設計 服務器端的程序是整個程序的核心,用來處理來自客戶端的請求,傳送消息,服務器程序的設計主要包括:監(jiān)聽端口接收來自客戶端的連接請求,將相互對戰(zhàn)的客戶端編組,向?qū)?zhàn)的客戶傳送聊天信息,處理來自客戶端的消息以及向客戶端發(fā)送消息,勝負的判斷,一些功能轉換函數(shù),處理來自

42、客戶端的連接及斷開連接請求。 4.4.1 服務器端程序主要變量說明 表3 服務器端主要變量說明 變 量 名 類 型 功 能 player String 記錄了每個玩家的基本信息。 in ObjectInputStream 服務器端的輸入流,用來接收來自客戶端的消息。 out ObjectOutputStream 服務器端的輸出流,用來發(fā)送消息到客戶端。 socket Socket 定義一個套接字,用來與客戶端的連接。 gg Group 對戰(zhàn)玩家組的基本信息。 playerList ArrayList 玩家列表。

43、 groupList ArrayList 對戰(zhàn)的玩家列表。 PORT Int 定義服務器端需要監(jiān)聽的端口,客戶端一連接到此端口,服務器端就可以監(jiān)聽到,從而和客戶端建立起通信。 s ServerSocket 服務器端的套接字。 4.4.2 服務器端程序主要方法說明 表4 服務器端主要方法說明 方 法 名 稱 類 型 功 能 說 明 addPlayer(Message player) void 添加一個玩家到玩家列表。 acceptRequest(Messagemsg) void A玩家接受另B玩家的游戲請求,服務器向B玩家發(fā)送接受游戲請求消息

44、。 denyRequest(Messagemsg) void A玩家拒絕B玩家的游戲請求,服務器向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ā)送消息設置是否禁手。 chatmessage(Message msg) void 處理對戰(zhàn)的兩玩家的聊天信息。 judge(Group gg, int x, int y) boolean 判斷勝負。 4.4.3 服務器端主體流程圖(見圖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 服務器端

47、主體流程圖 4.4.4 程序模塊功能說明 表5程序模塊功能說明 類 名 功 能 說 明 BoardPanel 畫出棋盤,處理棋盤事件 ChessWZQ 客戶端主程序,處理客戶端與服務器端的消息傳送 Group 定義一個對戰(zhàn)玩家組 Player 初始化一個玩家信息 Server 初始化服務器端的監(jiān)聽程序 Message 客戶端與服務器端傳送的消息對象 ServerOneClient 服務器端的主體程序,處理與客戶端的交互,轉發(fā)請求 InetAddressTest 用于初始化服務器端的IP地址址信息。 4.4.5

48、 程序主體流程圖(見圖4.5) 圖 4.5程序主體流程圖 第五章 系統(tǒng)測試與性能分析 5.1 系統(tǒng)功能測試 設定JDK1.4的ClassPath和Path后進入到程序所在的目錄,在Dos界面運行server.bat啟動服務器端程序,按照上面步聚再啟動一個Dos 界面運行client1.bat啟動一個客戶端程序,按照上面步聚再啟動一個Dos 界面運行client2.bat啟動一個客戶端程序,至此系統(tǒng)完整界面啟動,見圖5.1 圖 5.1 系統(tǒng)界面 1.由圖6.1可知各界面元素符合需求分析中規(guī)定的要求,游戲界面測試成功。 2.玩家選擇白色棋子,對方則自動選擇黑色棋子,棋子選色測

49、試成功。 3.在玩家列表中雙擊一個玩家請求游戲,雙方建立了連接,游戲正常開始,游戲連接測試成功。 4.在聊天窗口中輸入信息,對方玩家可以收到自己發(fā)的信息,自己也可以收到對方玩家輸入的信息,聊天窗口測試成功。 5.在棋盤上點擊鼠標,程序可以依照程序要求在上面下子,并且可以正常處理判斷勝負,下子過程測試成功。 6.點擊Create中的play with people 則系統(tǒng)提示在玩家列表中選擇玩家進行游戲,Create菜單測試成功。 7.點擊Quit按鈕,游戲可以正常退出并可以正確判斷勝負,退出功能測試成功。 5.2 系統(tǒng)性能分析 1.測試服務器的響應時間 運行客戶端程序

50、client1.bat,玩家名字可以立即出現(xiàn)在服務器端的玩家列表中,由此可知客戶端與服務器的連接速度良好。 2.測試下子過程及勝負的處理響應時間 在棋盤上下一個棋子,服務器端可以接收到下子信息并把信息發(fā)到另外的客戶端,如果此時有任一方的棋子可以五個成一線則可以正確判斷勝負,由些可知系統(tǒng)對下子過程的處理響應時間良好。 由些可以測定系統(tǒng)對各方面的性能響應要求良好,符合需求分析的要求。 結束語 網(wǎng)絡游戲正在形成一個成熟而巨大的產(chǎn)業(yè)。在日本和韓國,電子游戲已經(jīng)相繼超過以汽車制造為代表的傳統(tǒng)制造業(yè)而成為國民經(jīng)濟主導產(chǎn)業(yè)之一

51、。在美國,游戲業(yè)已經(jīng)超越擁有百年歷史的好萊塢電影業(yè)而成為整個電子娛樂產(chǎn)業(yè)的龍頭。根據(jù)市場預測,從2001年到2005年,美國的網(wǎng)絡游戲收入將會以每年50%的速度遞增,由2.3億美元增加到18億美元。2003年, 中國網(wǎng)絡游戲人數(shù)將超過1500萬人。國內(nèi)網(wǎng)站方面,網(wǎng)易、新浪、搜狐、21CN、騰訊、TOM等紛紛進軍網(wǎng)絡游戲。2002年,國內(nèi)網(wǎng)絡游戲從50多款迅速發(fā)展到了130多款。2003年將繼續(xù)成倍增加??梢娋W(wǎng)絡游戲的開發(fā)還存在著巨大的潛力,如何開發(fā)出更好的網(wǎng)絡游戲?qū)⑹俏覀兝^續(xù)努力的目標。通過本程序的開發(fā)我掌握了很多JAVA應用方面的知識,加深了對計算機網(wǎng)絡編程的了解。

52、 參考文獻 [1] 王曉春.PC游戲編程(人機博弈)[M].北京:清華大學出版社,2001 [2] 黎德玲.中國象棋的機器下棋[M].北京:清華大學出版社,2001 [3] 李琳.JAVA核心技術[M].北京:清華大學出版社,2001 [4] 杜誠.JAVA基礎與提高[M].北京:人民郵電出版社,2001 [5] Nils J.Nilsson.人工智能[M].美:機械工業(yè)出版社,2000 [6] 林堯瑞.人工智能導論[M] .北京:清華大學出版社 ,2001 [7] 尼爾松.人工智能[M].北京:機械工業(yè)出版社, 20

53、01 [8] 那威,張照元.連珠五子棋提高捷徑入段升級必讀[M]. 北京:北京體育大學出版社,1998 [9] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.可復用面向?qū)ο筌浖幕A[M].北京:機械工業(yè)出版社,2000 [10] Donald E. Knuth. The Art of Computer Programming[M]. Addison-Wesley,1998 [11] 雷超陽,徐正權,張治元.基于C/S模式中影響數(shù)據(jù)庫系統(tǒng)性能的研究[J].電腦信息技術.2005, 24(1):4~7 [12] 趙子

54、義,李明.Java Socket 編程詳解[J].計算機科學.2003,20(2):11~12 [13] 曾亞純,彭遠威.數(shù)據(jù)庫設計與編程實例詳解[J].信息與電腦.2001,15(5):15~17 [14] 楊世清.基于網(wǎng)絡環(huán)境的游戲開發(fā)技術[J].武漢科技報.2004,18(10):10~13 [15] 李達.現(xiàn)代游戲開發(fā)技術[J].計算機學報.2003,14(3):33~40 [16] 薩師煊,王珊.計算機網(wǎng)絡概論[J].電腦信息報.2001,19(1):30~39 [17] 蔡自興.人工智能技術[J].計算機學報.2002,20(2):5~9 [18] Wiki Discu

55、ssiion,Cost of Design carry. of Design Carry,1999 [19] 許正熙,信息管理論文.論文急救中心.,2001 致謝 最后,我要感謝在這段時間內(nèi)對我的工作進行指導的孫建平老師。在程序的實現(xiàn)過程中,她的指導使我對網(wǎng)絡游戲和計算機網(wǎng)絡編程的認識更加深刻,對人工智能的講解對我來說是全新的,非常有吸引力的。在程序的設計過程中遇到困難的時候,她及時的給了我建議與支持,使得畢業(yè)設計能夠順利進行,并在規(guī)定的時間內(nèi)完成各項任務。 感謝系里領導為我們學生畢業(yè)設計過程中提供的各種方便、理解與支持。有了他們的支持我的畢業(yè)設計才能如期完成。 感謝JA

56、VA中文論壇中開展的討論,我在那里學到了許多關于JAVA網(wǎng)絡編程方面的知識,在寫論文的過程中和程序?qū)崿F(xiàn)上遇到疑問的時候,從那里也得到了很多啟發(fā)。 我還要感謝同組的同學,在設計和調(diào)試遇到困難的時候,很多都是依賴與他們的交流。是他們的鼓勵和熱心幫助讓我順利的完成了設計任務。 附錄 Message類 //Message 類是客戶端與服務器端傳送的消息對象 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; // 是否設置禁手 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、類用于初始化服務器端的監(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)系上傳者。文件的所有權益歸上傳用戶所有。
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!

五月丁香婷婷狠狠色,亚洲日韩欧美精品久久久不卡,欧美日韩国产黄片三级,手机在线观看成人国产亚洲