版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 1 引言</b></p><p> 隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)技術(shù)的普及范圍越來越廣,網(wǎng)絡(luò)能夠提供的服務(wù)多樣、便捷,已經(jīng)成為人們生產(chǎn)生活中不可缺少的重要組成部分。如今網(wǎng)絡(luò)休閑游戲發(fā)展迅速,它憑借健康、方便、互動(dòng)性強(qiáng)、益智等諸多優(yōu)點(diǎn),成為大部分現(xiàn)代人休閑娛樂的首選。</p><p> 網(wǎng)絡(luò)五子棋游戲是使用Java語言開發(fā)的一款游戲。
2、它使用SOCKET建立連接,多線程處理數(shù)據(jù),以及可嵌入網(wǎng)絡(luò)瀏覽器的APPLET作為客戶端,這些特點(diǎn)使這款游戲無論是服務(wù)器還是客戶端的實(shí)現(xiàn)都相對(duì)容易。通過對(duì)該軟件的編寫,還可以鞏固學(xué)生對(duì)以上各種知識(shí)的掌握和理解。</p><p> 2 JAVA語言概述</p><p> 2.1 JAVA簡介</p><p> JAVA是Sun Microsystem公司開發(fā)的編
3、程語言,是一個(gè)簡單,面向?qū)ο螅植际?,解釋性,?qiáng)壯,安全,與系統(tǒng)無關(guān),可移植,高性能,多線程和動(dòng)態(tài)的語言。</p><p> 2.1.1 JAVA的基本特點(diǎn)</p><p><b> (1) 簡單性</b></p><p> Java與C++語言非常相近,但Java比C++簡單,它拋棄了C++中的一些不是絕對(duì)必要的功能,如頭文件、預(yù)處理文
4、件、指針、結(jié)構(gòu)、運(yùn)算符重載、多重繼承以及自動(dòng)強(qiáng)迫同型。 Java實(shí)現(xiàn)了自動(dòng)的垃圾收集,簡化了內(nèi)存管理的工作。</p><p><b> (2) 面向?qū)ο?lt;/b></p><p> Java提供了簡單的類機(jī)制和動(dòng)態(tài)的構(gòu)架模型。對(duì)象中封裝了它的狀態(tài)變量和方法,很好地實(shí)現(xiàn)了模塊化和信息隱藏;而類則提供了一類對(duì)象的原型,通過繼承和重載機(jī)制,子類可以使用或重新定義父類或超類
5、所提供的方法,從而既實(shí)現(xiàn)了代碼的復(fù)用,又提供了一種動(dòng)態(tài)的解決方案。</p><p><b> (3) 多線程</b></p><p> 多線程使應(yīng)用程序可以同時(shí)進(jìn)行不同的操作,處理不同的事件。在多線程機(jī)制中,不同的線程處理不同的任務(wù),他們之間互不干涉,不會(huì)由于一處等待影響其他部分,這樣容易實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時(shí)交互操作。</p><p><
6、b> (4) 分布性</b></p><p> Java是面向網(wǎng)絡(luò)的語言。通過它提供的類庫可以處理TCP/IP協(xié)議,用戶可以通過URL地址在網(wǎng)絡(luò)上很方便的訪問其他對(duì)象。</p><p> (5) 體系結(jié)構(gòu)中立</p><p> Java是一種網(wǎng)絡(luò)語言,為使Java程序能在網(wǎng)絡(luò)的任何地方運(yùn)行,Java解釋器生成與體系結(jié)構(gòu)無關(guān)的字節(jié)碼結(jié)構(gòu)的文件
7、格式。為了使Java的應(yīng)用程序能不依賴于具體的系統(tǒng),Java語言環(huán)境還提供了用于訪問底層操作系統(tǒng)功能的類組成的包,當(dāng)程序使用這些包時(shí),可以確保它能運(yùn)行在各種支持Java的平臺(tái)上。</p><p><b> (6) 安全性</b></p><p> 用于網(wǎng)絡(luò)、分布環(huán)境下的Java必須要防止病毒的入侵,Java不支持指針,一切對(duì)內(nèi)存的訪問都必須通過對(duì)象的實(shí)例變量來實(shí)現(xiàn)
8、,這樣就防止了程序員使用欺騙手段訪問對(duì)象的私有成員,同時(shí)也避免了指針操作中容易產(chǎn)生的錯(cuò)誤。</p><p> 2.1.2 Java中輸入/輸出流概念</p><p> 過濾流DataInputStream 和DataOutputStream 除了分別作為FilterInputStream 和FilterOutputStream的子類外,還分別實(shí)現(xiàn)了接口DataInput 和DataOu
9、tput。接口DataInput 中定義的方法主要包括從流中讀取基本類型的數(shù)據(jù)、讀取一行數(shù)據(jù)、或者讀取指定長度的字節(jié)數(shù),如readBoolean()、 readInt()、readLine()、readFully()等。接口DataOutput中定義的方法主要是向流中寫入基本類型的數(shù)據(jù)或者寫入一定長度的字節(jié)數(shù)組,如writeChar()、writeDouble()。 DataInputStream可以從所連接的輸入流中讀取與機(jī)器無關(guān)的基
10、本類型數(shù)據(jù),用以實(shí)現(xiàn)一種獨(dú)立于具體平臺(tái)的輸入方式;DataOutputStream 可以向所連接的輸出流寫入基本類型的數(shù)據(jù)。</p><p> 2.1.3 Socket 機(jī)制</p><p> Socket是面向客戶/服務(wù)器模型設(shè)計(jì)的,網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通訊連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)雙向鏈路的一端稱為一個(gè)Socket。 Socket通常用來實(shí)現(xiàn)客戶方和服務(wù)方的連接??蛻舫绦蚩?/p>
11、以向Socket寫請(qǐng)求,服務(wù)器將處理此請(qǐng)求,然后通過Socket將結(jié)果返回給用戶。</p><p> Socket通信機(jī)制提供了兩種通訊方式:有聯(lián)接和無聯(lián)接方式,分別面向不同的應(yīng)用需求。使用有聯(lián)接方式時(shí),通信鏈路提供了可靠的,全雙工的字節(jié)流服務(wù)。在該方式下,通信雙方必須創(chuàng)建一個(gè)聯(lián)接過程并建立一條通訊鏈路,以后的網(wǎng)絡(luò)通信操作完全在這一對(duì)進(jìn)程之間進(jìn)行,通信完畢關(guān)閉此聯(lián)接過程。使用無聯(lián)接方式時(shí)其系統(tǒng)開銷比無聯(lián)接方式小
12、,但通信鏈路提供了不可靠的數(shù)據(jù)報(bào)服務(wù),不能保證信源所傳輸?shù)臄?shù)據(jù)一定能夠到達(dá)信宿。在該方式下,通信雙方不必創(chuàng)建一個(gè)聯(lián)接過程和建立一條通訊鏈路,網(wǎng)絡(luò)通信操作在不同的主機(jī)和進(jìn)程之間轉(zhuǎn)發(fā)進(jìn)行。</p><p> 在java中使用套接字相當(dāng)簡單,Java API為處理套接字的通信提供了一個(gè)類java.net.Socket。使得編寫網(wǎng)絡(luò)應(yīng)用程序相對(duì)容易。JAVA支持流套接字(stream socket)和數(shù)據(jù)報(bào)套接字(da
13、tagram socket)。流套接字使用TCP(Transmission Control Protocol,傳輸控制協(xié)議)進(jìn)行數(shù)據(jù)傳輸,而數(shù)據(jù)報(bào)套接字使用UDP(User Datagram Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)。</p><p> 在Socket層實(shí)現(xiàn)的Java網(wǎng)絡(luò)程序是嚴(yán)格同步的。從一臺(tái)機(jī)器發(fā)送數(shù)據(jù)的操作要求對(duì)應(yīng)一個(gè)從其他機(jī)器接受數(shù)據(jù)的操作。</p><p> 2.2
14、 JAVA工具</p><p><b> JDK</b></p><p> 1) Java編譯器</p><p> Java編譯器將Java源代碼文件編譯成可執(zhí)行的Java字節(jié)碼。Java源代碼文件的擴(kuò)展名為 .java,Java編譯器把這種擴(kuò)展名的文件編譯成擴(kuò)展名為.class的文件。源文件中的每個(gè)類在編譯后都將產(chǎn)生一個(gè)class文件,
15、這意味一個(gè)Java源代碼文件可能編譯生成多個(gè)class文件。</p><p> 2) Java解釋器</p><p> Java解釋器對(duì)編譯生成的字節(jié)碼格式的可執(zhí)行程序的運(yùn)行提供支持,它是運(yùn)行非圖形Java程序的命令行工具。</p><p> 3 程序的設(shè)計(jì)思路和算法</p><p> 3.1 人機(jī)博弈的要點(diǎn)人機(jī)對(duì)弈的程序,至少應(yīng)具
16、備以下5個(gè)部分: (1)某種在機(jī)器中表示棋局的方法,能夠讓程序知道博弈的狀態(tài)。 (2)產(chǎn)生合法走法的規(guī)則,以使博弈公正地進(jìn)行,并可判斷人類對(duì)手是否亂走。 (3)從所有合法的走法中選擇最佳的走法技術(shù)。 (4)一種評(píng)估局面優(yōu)劣的方法,用以同上面的技術(shù)配合做出智能的選擇。 (5)一個(gè)界面,有了他,這個(gè)程序才能用。3.2 五子棋特點(diǎn)及規(guī)則 五子棋的娛樂性強(qiáng)、規(guī)則簡單、易學(xué)、流行性廣。普通人不需長
17、時(shí)間專門訓(xùn)練即可自如行棋。因此極受大眾歡迎。五子棋的規(guī)則為: (1)棋盤 采用像圍棋盤一樣的15路或19路線的棋盤,在此采用19路的棋盤。 (2)下法 兩人分別執(zhí)黑白兩色棋子。輪流在棋盤上選擇一個(gè)無子的交叉點(diǎn)落子,無子的交叉點(diǎn)又被稱為空點(diǎn)。 (3)輸贏判斷 黑、白雙方有一方的五個(gè)棋子在橫、豎或斜方向上連接成一線即為該方贏。3.3 算法設(shè)計(jì)3.3.1 博弈樹的搜索過程 在以下討論中,命名2個(gè)博
18、弈者M(jìn)AX和MIN。下面的任務(wù)是為MAX找最佳的移動(dòng)。假設(shè)MAX先移動(dòng),</p><p> 根據(jù)極小極大化分析法,先計(jì)算第3層子結(jié)點(diǎn)h(n)值,然后第2層子結(jié)點(diǎn)的估計(jì)值取他的各后繼子結(jié)點(diǎn)的極小值,根結(jié)點(diǎn)的估計(jì)值取他的各子結(jié)點(diǎn)的極大值。這個(gè)取得最大估計(jì)值的子結(jié)點(diǎn)即為從S出發(fā)的計(jì)算機(jī)方的最佳落子方案。棋盤上某一行、某一列或某一對(duì)角線為一路,這里使 用的棋盤為19行19列,因此,行和列方向上共有19+19=38路;
19、從左下到右上方向的對(duì)角線有37路,同樣,從左上到右下方向的對(duì)角線也有37路。但對(duì)于五子棋來說必須在一條直線上有連續(xù)五個(gè)棋子才能贏。因此,在對(duì)角線上就可以減少8路。所以,整個(gè)棋盤路的總數(shù)為:對(duì)某一棋局n,第i路得分:h(i)=hc(i)-h(huán)m(i)。 其中:hc(i)為計(jì)算機(jī)方在第i路估計(jì)值得分,hm(i)為游戲者一方在第i路得分。對(duì)的得分規(guī)則作如下說明。規(guī)則中+代表一空點(diǎn);o代表對(duì)方棋子;*代表有計(jì)算機(jī)方棋子;++表示連續(xù)2
20、點(diǎn)為空點(diǎn);+++*++表示連續(xù)3個(gè)空點(diǎn)接一個(gè)計(jì)算機(jī)方棋子,再接兩空點(diǎn)。某一規(guī)則+ 表示如在i路上有棋子構(gòu)成形如+++*++則hc(i)=30。其他規(guī)則表示相同。在系統(tǒng)中使用的主要估值規(guī)則如下: 由對(duì)稱性可知++**+++</p><p> 遺傳算法的優(yōu)點(diǎn): (1)由于搜索算法是從問題的解開始的,而不是一組參數(shù)。所以被局部震蕩干擾導(dǎo)致求最優(yōu)解失敗的可能性大大減小。 (2)此算法能
21、將搜索重點(diǎn)集中于性能高的部分,能較快地求出最佳的參數(shù)。在使用中應(yīng)當(dāng)注意的問題如下: 種群數(shù)目 這是影響算法性能的重要因素。種群數(shù)目過大,會(huì)導(dǎo)致運(yùn)算時(shí)間太長,結(jié)果收斂緩慢;種群數(shù)目太小則可能導(dǎo)致算法精度過低,甚至停止不前。 交叉概率 這個(gè)用于控制交叉操作的頻度。此概率過大會(huì)導(dǎo)致種群中的個(gè)體更新過快,較優(yōu)的個(gè)體不能穩(wěn)定的保持和傳遞信息;此概率過小則會(huì)使優(yōu)化的過程緩慢甚至停止不前。 變異概率 這個(gè)概率用于控制產(chǎn)
22、生變異個(gè)體的頻度,目的是防止整個(gè)種群中任意參數(shù)的幾個(gè)基因保持不變。一 般使用一個(gè)很小的概率即足以達(dá)成此任務(wù);概率太大則遺傳信息無法穩(wěn)定傳遞,從而使優(yōu)化過程變成隨機(jī)過程,失去確切的方向而導(dǎo)致失敗。</p><p><b> 4 程序?qū)崿F(xiàn)</b></p><p> 4.1 程序設(shè)計(jì)思路</p><p> 實(shí)現(xiàn)一個(gè)用戶可以Internet上任何
23、地方的不同機(jī)上進(jìn)行游戲,使用多線程和網(wǎng)絡(luò)套接字?jǐn)?shù)據(jù)流的分布式五子棋游戲,根據(jù)要完成的功能,本程序采用多客戶服務(wù)方式。服務(wù)器創(chuàng)建服務(wù)器Socket,始終處于監(jiān)聽等待狀態(tài)??蛻舳耸莿?dòng)作的發(fā)起者,何時(shí)發(fā)出申請(qǐng)由客戶端決定。客戶端向服務(wù)器發(fā)出申請(qǐng),服務(wù)器給予響應(yīng),客戶端發(fā)出申請(qǐng)后立即可從Socket通道去取服務(wù)方的結(jié)果。服務(wù)器接受兩個(gè)客戶端連接后開始一個(gè)線程,不斷接受客戶端發(fā)來的數(shù)據(jù),并把處理后的數(shù)據(jù)傳送給客戶端。服務(wù)器可以創(chuàng)建任意多局(圖3-
24、1)。</p><p> 在對(duì)服務(wù)器與客戶端的設(shè)計(jì)開發(fā)之前,為了使開發(fā)方便,將服務(wù)器與客戶端之間用以通信的變量規(guī)定好。通過編寫一個(gè)接口GameConstant(),在其中定義各個(gè)常量的值:</p><p> public static int PLAYER1 = 1;</p><p> public static int PLAYER2 = 2;</p&
25、gt;<p> public static int PLAYER1_WON = 1;</p><p> public static int PLAYER2_WON = 2;</p><p> public static int DRAW = 3;</p><p> public static int CONTINUE = 4; </p&g
26、t;<p> public static int STOP = 100;</p><p> public static int GAMEPORT = 8000; </p><p> 服務(wù)器和客戶端在設(shè)計(jì)時(shí)繼承接口GameConstant()里面的所有數(shù)據(jù)。</p><p> 4.2 服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)</p><p>
27、 為了使界面友好,服務(wù)器使用圖形組件,創(chuàng)建成一個(gè)可以顯示游戲信息的框架。在框架中創(chuàng)建一個(gè)包含文本區(qū)的滾動(dòng)窗格,并在文本區(qū)顯示游戲信息(圖3-2)。</p><p> 圖3-2 服務(wù)器界面</p><p> Fig.3-2 Interface of Game-server</p><p> 要建立服務(wù)器,需要?jiǎng)?chuàng)建一個(gè)服務(wù)器Socket,并把它附加到一個(gè)端口上,
28、服務(wù)器通過這個(gè)端口監(jiān)聽連接請(qǐng)求。端口標(biāo)識(shí)Socket上的TCP服務(wù)。網(wǎng)絡(luò)的類存放在java.net包中,引入包后通過實(shí)現(xiàn)一個(gè)ServerSocket的實(shí)例就可以創(chuàng)建一個(gè)服務(wù)器Socket,并把它附加到一個(gè)端口(GAMEPORT)上:</p><p> ServerSocket serverSocket = new ServerSocket (GAMEPORT);</p><p>
29、 然后,服務(wù)器使用下列語句開始監(jiān)聽連接請(qǐng)求:</p><p> Socket player1 = serverSocket.accept ();</p><p> Socket player2 = serverSocket.accept ();</p><p> 服務(wù)器開始等待,直到客戶提出連接請(qǐng)求。連接建立后,服務(wù)器通過數(shù)據(jù)輸入流從客戶端接收信
30、息,并且通過數(shù)據(jù)輸出流把相應(yīng)的標(biāo)記發(fā)送給客戶端。</p><p> new DataOutputStream(player1.getOutputStream()).writeInt(PLAYER1);</p><p> new DataOutputStream(player2.getOutputStream()).writeInt(PLAYER2);</p><p&
31、gt; 當(dāng)客戶端滿足開局條件時(shí),就開啟一個(gè)線程處理客戶之間數(shù)據(jù),同時(shí)繼續(xù)監(jiān)聽其它客戶端的連接請(qǐng)求。</p><p> 多線程是Java的一個(gè)特點(diǎn),多線程可以使程序反應(yīng)更快、交互性更強(qiáng),并能提高執(zhí)行效率。創(chuàng)建一個(gè)新的線程的生命周期如下狀態(tài): 新建,就緒,運(yùn)行,阻塞,死亡。</p><p> 在Java中,提供了多種控制線程的方法,在服務(wù)器中用到的主要以下幾種:</p>&
32、lt;p> public void run ()</p><p> Java運(yùn)行系統(tǒng)調(diào)用這個(gè)方法來執(zhí)行線程。在用戶線程類中,必須覆蓋這個(gè)方法并且提供線程執(zhí)行的代碼。</p><p> public void start ()</p><p> 該方法啟動(dòng)線程,它引起對(duì)run()方法的調(diào)用??蛻纛愔械目蛇\(yùn)行對(duì)象調(diào)用該方法。</p>
33、<p> 服務(wù)器程序采用類HandleGame繼承Thread類來實(shí)現(xiàn)對(duì)線程的調(diào)用,同時(shí)對(duì)run ()方法覆蓋。 </p><p> 以下是HandleGame () 類里面主要的數(shù)據(jù)域和方法:</p><p> private char[][] cell:Char類型數(shù)組用來記錄玩家的標(biāo)記。</p><p> private DataInput
34、Stream isFromPlayer1;</p><p> private DataOutputStream osToPlayer1;</p><p> private DataInputStream isFromPlayer2;</p><p> private DataOutputStream osToPlayer2;</p><p&
35、gt; ?。核膫€(gè)數(shù)據(jù)流用來實(shí)現(xiàn)與兩個(gè)玩家之間信息的傳遞。</p><p> public HandleGame (Socket player1, Socket player2):</p><p> 構(gòu)造函數(shù),兩個(gè)參數(shù)用以接收傳遞過來的Socket對(duì)象。</p><p> public void run():對(duì)繼承Thread類中的run ()方法進(jìn)行覆蓋。&l
36、t;/p><p> private boolean isFull() :判斷是否滿格。</p><p> private boolean isWon(int row,int column,char token):</p><p> 判斷新標(biāo)記的單元格是否使一方獲勝。</p><p> 游戲局一旦建立起來,服務(wù)器便于工作交替地從客戶端那里接
37、收數(shù)據(jù)。從客戶端接收到數(shù)據(jù)后,服務(wù)器判斷游戲狀態(tài),并根據(jù)結(jié)果進(jìn)行相關(guān)操作,直至游戲結(jié)束。</p><p> 4.3 客戶端的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 客戶端負(fù)責(zé)與玩家的交互。因此要?jiǎng)?chuàng)建一個(gè)界面,包括一個(gè)20*20的下棋區(qū)域,當(dāng)玩家選定單元格或接收到別的玩家選定的單元格時(shí),用不同的標(biāo)記顯示;兩個(gè)顯示游戲名稱和游戲狀態(tài)的標(biāo)簽和兩個(gè)菜單欄上的按鍵用以進(jìn)行控制,如圖3-3:</p&g
38、t;<p> 圖3-3 客戶端界面</p><p> Fig.3-3 Interface of Game-client</p><p> 這里客戶程序設(shè)計(jì)成一個(gè)Java Applet,用戶可以在Web瀏覽器里運(yùn)行。當(dāng)用戶打開GameClient.html文件時(shí),瀏覽器調(diào)用init ()方法對(duì)界面進(jìn)行初始化。點(diǎn)擊Start時(shí)開啟一個(gè)線程和服務(wù)器連接,通過數(shù)據(jù)流進(jìn)行數(shù)據(jù)交
39、換。</p><p> connectToServer = new Socket("localhost", GAMEPORT);</p><p> isFromServer = new DataInputStream(connectToServer.getInputStream());</p><p> osToServer = new D
40、ataOutputStream(connectToServer.getOutputStream());</p><p> 下面是類GameClient的主要方法和數(shù)據(jù):</p><p> public class GameClient extends JApplet</p><p> implements Runnable, ActionListener, G
41、ameConstants</p><p><b> {</b></p><p> private boolean myTurn = false; :標(biāo)記是否輪到自己下棋</p><p> private char myToken = ' '; :標(biāo)記自己的棋子</p><p> pr
42、ivate char otherToken = ' '; :標(biāo)記對(duì)手的棋子</p><p> private Cell[][] cell = new Cell[20][20]; :生成20*20個(gè)單元格</p><p> private int rowSelected; :記錄所選單元格的行</p><p> privat
43、e int columnSelected; :記錄所選單元格的列</p><p> private boolean continueToPlay = true;</p><p> private boolean waiting = true; </p><p> ?。河涗浻螒蜻M(jìn)行中的狀態(tài)</p><p> public void
44、 init():初始化用戶界面,打開網(wǎng)頁時(shí)由瀏覽器調(diào)用</p><p> public void actionPerformed(ActionEvent e):</p><p> 覆蓋ActionListener接口里面actionPerformed ()方法,用來處理用戶點(diǎn)擊菜單欄引起的操作。</p><p> public void run()</p
45、><p> 覆蓋Runnable接口里的run ()方法,用以對(duì)游戲過程中的數(shù)據(jù)傳輸,處理,控制。</p><p><b> }</b></p><p> 在客戶程序的類中,由于它繼承了Applet類,所以不能再通過聲明Thread類的擴(kuò)展來實(shí)現(xiàn),只能通過實(shí)現(xiàn)Java提供的一個(gè)Runnable接口,進(jìn)行線程的創(chuàng)建和運(yùn)行。Runnable接口的
46、實(shí)現(xiàn)是非常簡單的,它只包含run ()方法,使用時(shí)只要將該方法覆蓋。</p><p> 從游戲設(shè)計(jì)來看,單元格是處理鼠標(biāo)點(diǎn)擊事件和顯示標(biāo)記的GUI對(duì)象。在這里使用的是面板,設(shè)置單元格Cell為JPanel的子類。將Cell類聲明為內(nèi)部類,可以直接使用GameClient類中定義的變量與方法,使程序簡潔明了。</p><p> Cell類中包含以下主要數(shù)據(jù)和方法:</p>
47、<p> public class Cell extends JPanel implements MouseListener</p><p><b> {</b></p><p> private int row; </p><p> private int column;</p><p> p
48、rivate char token = ' ';</p><p> public Cell(int row, int column){}:構(gòu)造函數(shù)</p><p> public void paintComponent(Graphics g){}:</p><p> Graphics對(duì)象g是由Java運(yùn)行系統(tǒng)自動(dòng)創(chuàng)建,這個(gè)對(duì)象控制信息的繪制方式
49、??梢允褂枚x在Graphics類中的多種畫法繪制字符串的幾何圖形。</p><p> public void mouseClicked(MouseEvent e){}</p><p> public void mouseExited(MouseEvent e){}</p><p> public void mouseEntered(MouseEvent e)
50、{}</p><p> public void mouseReleased(MouseEvent e){}</p><p> public void mousePressed(MouseEvent e){}</p><p> :接口MouseListener中的方法。</p><p><b> }</b><
51、/p><p><b> 4.4 程序的運(yùn)行</b></p><p> 首先將編寫好的程序使用Java編譯器編譯,生成以class為擴(kuò)展名的類文件,然后使用Java解釋器分別運(yùn)行服務(wù)器和客戶端??蛻舳税l(fā)出連接,服務(wù)器接收后開啟線程對(duì)游戲進(jìn)行控制,游戲結(jié)束時(shí)關(guān)閉線程。具體流程如圖3-4所示:</p><p><b> 圖3-4 運(yùn)行流程
52、</b></p><p> Fig.3-4 Flow Chart</p><p><b> 5 小結(jié)</b></p><p> 隨著計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,信息技術(shù)給人們帶來的幫助越來越大,單獨(dú)一臺(tái)計(jì)算機(jī)已經(jīng)不能滿足人們的需求,網(wǎng)絡(luò)正在成為大多數(shù)人群生產(chǎn)、生活中密不可分的一部分。Java作為一種分布式和可移植的計(jì)算機(jī)語言,
53、在網(wǎng)絡(luò)軟件開發(fā)上有著特別的優(yōu)點(diǎn)。它開發(fā)方便、快捷,安全性高,對(duì)以往復(fù)雜的功能,尤其是網(wǎng)絡(luò)通信等方面,實(shí)現(xiàn)起來簡潔明了,在網(wǎng)絡(luò)編程領(lǐng)域有著巨大的發(fā)展?jié)摿?。在?dāng)今網(wǎng)絡(luò)經(jīng)濟(jì)飛速發(fā)展的時(shí)代,Java技術(shù)的平臺(tái)無關(guān)性、可重用性、模塊化等特點(diǎn)大大減少了重復(fù)勞動(dòng),無論是開發(fā)用于Internet瀏覽的網(wǎng)站還是功能復(fù)雜的網(wǎng)絡(luò)應(yīng)用系統(tǒng),Java都可以提供有力的支持。相信只要合理地利用Java技術(shù),必定可以在電子商務(wù)、大型網(wǎng)站建設(shè)中發(fā)揮日益重要的作用。<
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)五子棋游戲畢業(yè)設(shè)計(jì)
- 五子棋游戲畢業(yè)設(shè)計(jì)
- 畢業(yè)論文---網(wǎng)絡(luò)五子棋游戲設(shè)計(jì)
- 人機(jī)對(duì)弈五子棋游戲畢業(yè)設(shè)計(jì)
- 網(wǎng)絡(luò)五子棋五子棋設(shè)計(jì)與實(shí)現(xiàn).doc
- 五子棋游戲設(shè)計(jì)報(bào)告
- qt網(wǎng)絡(luò)五子棋五子棋設(shè)計(jì)與實(shí)現(xiàn)
- 五子棋游戲設(shè)計(jì)畢業(yè)論文
- 畢業(yè)論文——五子棋游戲設(shè)計(jì)
- linux環(huán)境下五子棋游戲設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于labview設(shè)計(jì)的五子棋游戲
- 五子棋對(duì)戰(zhàn)游戲
- 畢業(yè)設(shè)計(jì)--五子棋人機(jī)對(duì)弈
- flash五子棋畢業(yè)設(shè)計(jì)論文
- java五子棋畢業(yè)設(shè)計(jì)論文
- java五子棋游戲畢業(yè)論文
- java五子棋畢業(yè)設(shè)計(jì)--java五子棋對(duì)弈程序的設(shè)計(jì)與實(shí)現(xiàn)
- java五子棋畢業(yè)設(shè)計(jì)(整套)
- 畢業(yè)設(shè)計(jì)(論文)linux環(huán)境下五子棋游戲設(shè)計(jì)
- 網(wǎng)絡(luò)五子棋2
評(píng)論
0/150
提交評(píng)論