基于java的“網(wǎng)絡(luò)版五子棋”游戲的設(shè)計(jì)和實(shí)現(xiàn)【畢業(yè)論文】_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  本科畢業(yè)論文</b></p><p><b> ?。?0 屆)</b></p><p>  基于Java的“網(wǎng)絡(luò)版五子棋”游戲的設(shè)計(jì)和實(shí)現(xiàn)</p><p><b>  摘 要</b></p><p>  目前,隨著計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,以計(jì)算機(jī)技術(shù)

2、和網(wǎng)絡(luò)技術(shù)為核心的現(xiàn)代網(wǎng)絡(luò)技術(shù)已經(jīng)在現(xiàn)實(shí)生活和生產(chǎn)中得到了廣泛的使用,休閑類網(wǎng)絡(luò)游戲集趣味性,娛樂性,互動(dòng)性和益智性于一體,已經(jīng)成為多數(shù)人群的休閑方式,也為多數(shù)人所喜好。</p><p>  本設(shè)計(jì)收集了關(guān)于JAVA基礎(chǔ)的書籍,著重收錄了關(guān)于SOCKET編程的內(nèi)容,找到了五子棋概述和規(guī)則的資料,查閱了網(wǎng)絡(luò)通信技術(shù)的相關(guān)論文,同時(shí)也參考了很多關(guān)于五子棋實(shí)現(xiàn)的程序資料以及關(guān)于JAVA開發(fā)工具的介紹的文檔。在期間,作者

3、學(xué)習(xí)了多線程技術(shù)、數(shù)據(jù)傳輸技術(shù)、SOCKET編程技術(shù),研究了網(wǎng)絡(luò)通信原理、JAVA編寫原理等一系列的原理。開發(fā)了五子棋網(wǎng)絡(luò)對(duì)戰(zhàn)的代碼,實(shí)現(xiàn)了網(wǎng)絡(luò)聊天、聯(lián)機(jī)對(duì)戰(zhàn)、網(wǎng)絡(luò)通信、界面組織如:棋盤、建立服務(wù)器、連接到服務(wù)器等功能。通過對(duì)以上技術(shù)的學(xué)習(xí)和研究,利用SOCKET編程,能服務(wù)器與客戶端之間的連接,利用多線程技術(shù)完成了服務(wù)器端與客戶端之間的數(shù)據(jù)傳輸、網(wǎng)絡(luò)通信,使得兩個(gè)客戶端能夠同步的進(jìn)行處理。</p><p>  

4、關(guān)鍵詞: JAVA 多線程 SOCKET 五子棋</p><p><b>  Abstract</b></p><p>  At present , with the development of computer networks , computer and network technology as the core of modern network te

5、chnology has been widely used in real life and production, the casual game set interesting , entertaining, interactive and puzzle in one, has become the majority population of leisure, but also for the majority of people

6、 have preferences.    The design of the collection of books on the JAVA -based , focusing on the collection of content SOCKET programming , found the data ov</p><p>  Keywords: JAVA multith

7、reading SOCKET Gobang</p><p><b>  目錄</b></p><p><b>  1 緒論1</b></p><p>  1.1 背景及意義1</p><p>  1.2 選題的目的1</p><p>  1.3 五子棋介紹2&l

8、t;/p><p>  1.4 主要完成內(nèi)容2</p><p>  2 開發(fā)環(huán)境及工具介紹3</p><p>  2.1 開發(fā)環(huán)境及運(yùn)行環(huán)境3</p><p>  2.1.1 開發(fā)環(huán)境3</p><p>  2.1.2 運(yùn)行環(huán)境3</p><p>  2.1.2 開發(fā)工具3</p&

9、gt;<p>  2.2 Java 簡(jiǎn)介3</p><p>  2.2.1 Java的起源和發(fā)展3</p><p>  2.2.2 Java特點(diǎn)4</p><p>  2.3 Java Socket 網(wǎng)絡(luò)編程簡(jiǎn)介5</p><p>  2.3.1 Java Socket 網(wǎng)絡(luò)編程基礎(chǔ)5</p>

10、<p>  2.3.2 Socket編程的實(shí)現(xiàn)6</p><p>  2.4 Java 圖形編程7</p><p>  2.5多線程機(jī)制7</p><p>  3 需求分析和總體設(shè)計(jì)9</p><p>  3.1 需求分析作用9</p><p>  3.1.1 界面需求分析9</p&

11、gt;<p>  3.1.2 軟件需求分析9</p><p>  3.2 總體設(shè)計(jì)9</p><p>  3.2.1 系統(tǒng)設(shè)計(jì)思想10</p><p>  3.2.2 系統(tǒng)總體設(shè)計(jì)10</p><p>  3.3 功能模塊及流程11</p><p>  3.3.1 系統(tǒng)主要模塊11

12、</p><p>  3.3.2服務(wù)器端作用12</p><p>  3.3.3客戶端作用13</p><p>  4 詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)15</p><p>  4.1 系統(tǒng)主流程15</p><p>  4.2 如何判斷輸贏16</p><p>  4.3 開發(fā)環(huán)境的搭建19&

13、lt;/p><p>  4.4 功能模塊的界面實(shí)現(xiàn)20</p><p>  5 軟件的測(cè)試23</p><p>  5.1 軟件測(cè)試的方法23</p><p><b>  6 總結(jié)語25</b></p><p><b>  參考文獻(xiàn)26</b></p>

14、<p><b>  1 緒論</b></p><p><b>  1.1 背景及意義</b></p><p><b>  1.背景</b></p><p>  隨著經(jīng)濟(jì)社會(huì)的迅速發(fā)展,人們生活水平有了很大的提高,人們的生活觀念也發(fā)生了巨大的改變。高品質(zhì)的生活、現(xiàn)代化得生活方式成為人們共

15、同追求的目標(biāo);休閑、娛樂性活動(dòng)作為時(shí)尚生活中的一部分,而被大多數(shù)的人所追捧。棋類項(xiàng)目作為一種智力型項(xiàng)目,可以益智健心、修身養(yǎng)性,也可以滿足人們對(duì)于娛樂和休閑的新需求。一些項(xiàng)目比如五子棋等等,由于項(xiàng)目本身互動(dòng)的特點(diǎn),一直被人們所喜愛,因此得以生存和發(fā)展,成為許多人喜愛的休閑娛樂性棋類項(xiàng)目。</p><p>  而今,以網(wǎng)絡(luò)技術(shù)為核心和計(jì)算機(jī)技術(shù)的現(xiàn)代網(wǎng)絡(luò)技術(shù)已經(jīng)在現(xiàn)實(shí)生活得到了十分的廣泛的使用。休閑類網(wǎng)絡(luò)游戲集合了

16、益智性、趣味性、互動(dòng)性、娛樂性于一體,已經(jīng)成為多數(shù)人群的選擇的休閑方式。</p><p>  借此,本論文在分析了當(dāng)前計(jì)算機(jī)網(wǎng)絡(luò)的蓬勃發(fā)展和人們對(duì)于休閑娛樂性生活方式的追求,以java語言為工具,在MyEclipse的環(huán)境那下,以精美的界面,以常規(guī)安全的socket建立連接,設(shè)計(jì)更為益智的網(wǎng)絡(luò)版五子棋游戲,增強(qiáng)了趣味性和益智性。</p><p><b>  2.意義</b&

17、gt;</p><p>  現(xiàn)在人們壓力日益增大,人們需要?jiǎng)谝萁Y(jié)合也獲得更高的工作效率,工作之余的娛樂對(duì)每一個(gè)人來說都是必不可少的放松方式。五子棋游戲簡(jiǎn)單易學(xué)同時(shí)具有很大奧妙性,也非常富有趣味性與消遣性。在經(jīng)過不斷發(fā)展后,五子棋已經(jīng)成為棋盤娛樂的重要的組成部分,它能夠開發(fā)智力、增強(qiáng)思維能力,而且富含哲理,有助于修身養(yǎng)性。是人們休閑娛樂的不二的選擇。而網(wǎng)絡(luò)互動(dòng)娛樂是近幾年迅速發(fā)展起來的新的娛樂形式,成為IT產(chǎn)業(yè)中增

18、長(zhǎng)最快的娛樂形式之一。</p><p>  網(wǎng)絡(luò)五子棋游戲很多是使用Java語言開發(fā)的一款游戲。它使用SOCKET建立連接,多線程處理數(shù)據(jù),這些特點(diǎn)使這款游戲無論是客戶端還是服務(wù)器的實(shí)現(xiàn)都相對(duì)容易。</p><p><b>  1.2 選題的目的</b></p><p>  隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)游戲已經(jīng)成為最具潛力的熱點(diǎn)領(lǐng)域。各種

19、各樣的游戲使人眼花繚亂,而特別是其中一些休閑益智類的棋牌游戲,集娛樂性、趣味性、益智性和互動(dòng)性于一體,擁有很大的用戶。棋類游戲能鍛煉人的思維,起到修身養(yǎng)性的作用。五子棋游戲可以分為兩類:一類是單機(jī)版五子棋游戲,另一類是網(wǎng)絡(luò)五子棋游戲。隨著計(jì)算機(jī)網(wǎng)絡(luò)和JAVA技術(shù)的不斷發(fā)展,使用Java開發(fā)網(wǎng)絡(luò)五子棋游戲?qū)⑹且粋€(gè)實(shí)用性很強(qiáng)的畢業(yè)設(shè)計(jì)項(xiàng)目。</p><p>  網(wǎng)絡(luò)五子棋游戲的總體功能是要設(shè)計(jì)出具有精美界面的,具備人

20、工智能的,支持網(wǎng)絡(luò)對(duì)弈的五子棋游戲。本系統(tǒng)最終的目的是建立一個(gè)有具體規(guī)則的網(wǎng)絡(luò)五子棋平臺(tái),達(dá)到網(wǎng)絡(luò)對(duì)弈的目的。</p><p><b>  1.3 五子棋介紹</b></p><p>  五子棋起源于中國古代的傳統(tǒng)黑白棋種之一,是一種兩人對(duì)弈的純策略型棋類游戲?,F(xiàn)代五子棋日本稱之為“連珠”,英譯為Renju,英文為“FIR”(Five in a Row 的縮寫)或“G

21、obang”,中文有“串珠”、 “五子連”、“連五子”等很多種名字。它發(fā)展于日本,流行于歐美。容易上手,老少皆宜,而且引人入勝;不僅能提高智力,而且富含哲理。</p><p>  傳統(tǒng)五子棋的棋具與圍棋類似,棋子分為黑白兩色,棋盤有大有小,棋子放置于棋盤線交叉點(diǎn)上。兩人對(duì)局,各選一色,輪流落子。五子棋游戲規(guī)則:游戲雙方輪流在棋盤下棋子,一方的棋子在橫、豎、兩個(gè)對(duì)角線上首先到達(dá)五子者為勝方。因?yàn)槲遄悠逶诼渥雍蟛荒芤?/p>

22、動(dòng)或拿掉,所以也可以用紙和筆來進(jìn)行游戲。</p><p>  隨著五子棋的發(fā)展,逐步發(fā)現(xiàn)先行優(yōu)勢(shì)非常大,最后總結(jié)出“先行必勝”的結(jié)論。五子棋成為競(jìng)技運(yùn)動(dòng),核心問題是怎樣解決傳統(tǒng)五子棋下法中“先行必勝”的問題。而競(jìng)技五子棋便是參賽雙方打破“先行必勝”的問題,以棋盤和棋子為介體,進(jìn)行智力性對(duì)抗的競(jìng)技體育項(xiàng)目。</p><p>  1.4 主要完成內(nèi)容</p><p> 

23、 本課題為了分析了五子棋規(guī)則及技巧,以及研究客戶端界面的布局,決定用Java開發(fā)五子棋游戲。主要完成客戶端界面設(shè)計(jì)和網(wǎng)絡(luò)對(duì)戰(zhàn)2個(gè)功能模塊??蛻舳素?fù)責(zé)收集用戶的信息和界面維護(hù),以及錯(cuò)誤處理;服務(wù)器的建立以及對(duì)戰(zhàn)用戶的基本信息和兩個(gè)對(duì)戰(zhàn)用戶的棋盤信息,判斷輸贏。</p><p>  2 開發(fā)環(huán)境及工具介紹</p><p>  2.1 開發(fā)環(huán)境及運(yùn)行環(huán)境</p><p>

24、;  2.1.1 開發(fā)環(huán)境</p><p>  ★ Microsoft Windows XP或以上版本</p><p>  ★ JDK 1.60</p><p>  ★ MyEclipse8.5</p><p>  2.1.2 運(yùn)行環(huán)境</p><p>  ★ Microsoft Windows XP或以上

25、版本 操作系統(tǒng)</p><p>  ★ 1024*768或以上的屏幕分辨率</p><p>  2.1.2 開發(fā)工具</p><p>  Java的開發(fā)工具很多,比如JBuilder、MyEclipse、NetBeans IDE、JCreator 等等,不同的工具可能對(duì)開發(fā)不同的程序有針對(duì)的優(yōu)勢(shì)。我選擇MyEclipse進(jìn)行編寫,我們說一下MyEclipse的優(yōu)勢(shì)

26、。</p><p>  ★ MyEclipse是一種具有可擴(kuò)展的開放源代碼IDE。MyEclipse可以在同一IDE中集成了來自不同供應(yīng)商的工具,并實(shí)現(xiàn)了工具之間的相互操作,從而顯著簡(jiǎn)化了項(xiàng)目工作流程。 </p><p>  ★ MyEclipse框架的靈活性來自于它的擴(kuò)展點(diǎn)。在XML中定義的已知接口,并充當(dāng)插件的耦合點(diǎn)。擴(kuò)展點(diǎn)的范圍包括從簡(jiǎn)單字符串,到一個(gè)Java類的描述。</

27、p><p>  ★ MyEclipse的最大特點(diǎn)是它能接受由Java開發(fā)者自己編寫的開放源代碼插件。</p><p>  2.2 Java 簡(jiǎn)介</p><p>  Java是一種簡(jiǎn)單的、分布式的、面向?qū)ο蟮?、可移植、解釋的、安全的的多線程語言。它以其平臺(tái)無關(guān)性、硬件結(jié)構(gòu)無關(guān)性、強(qiáng)安全性、面向?qū)ο?、語言簡(jiǎn)潔的特點(diǎn),在網(wǎng)絡(luò)編程語言中占據(jù)了無可比擬的優(yōu)勢(shì),成為實(shí)現(xiàn)電子商

28、務(wù)系統(tǒng)的首選語言[2]。</p><p>  2.2.1 Java的起源和發(fā)展</p><p>  Java是Sun公司在1995年推出的新興的編程語言,它是一種跨平臺(tái)的、應(yīng)用于當(dāng)前高速發(fā)展的網(wǎng)絡(luò)的編程語言。在編程語言中,可認(rèn)為Basic語言促使了C語言的出現(xiàn),C語言促進(jìn)了C++的出現(xiàn),而C++又促使了Java語言的出現(xiàn)。</p><p>  自從Java正式推出

29、后,以它特有的優(yōu)勢(shì)迅速發(fā)展,經(jīng)過幾年的發(fā)展,Java已經(jīng)在軟件開發(fā)等領(lǐng)域占有很大的市場(chǎng)。Java分為三種:J2SE、J2EE和J2ME。J2SE是Java平臺(tái)標(biāo)準(zhǔn)版[3],主要應(yīng)用于桌面程序和Java小應(yīng)用程序開發(fā);J2EE主要用于企業(yè)級(jí)開發(fā)和大型網(wǎng)站的開發(fā);J2ME主要用于手機(jī)等移動(dòng)設(shè)備程序的開發(fā)。</p><p>  2.2.2 Java特點(diǎn)</p><p><b>  ★

30、 平臺(tái)無關(guān)性</b></p><p>  Java的平臺(tái)無關(guān)性能讓這種軟件在每個(gè)平臺(tái)上都能正常地運(yùn)行,就是"只要寫一次程序,在任何地方、任何時(shí)間該程序永遠(yuǎn)都能夠運(yùn)行"。Java解釋器生成與體系無關(guān)的字節(jié)碼指令,這些指令對(duì)應(yīng)于Java虛擬機(jī)里表示,Java解釋器得到字節(jié)碼后,對(duì)它進(jìn)行轉(zhuǎn)換,只要安裝Java運(yùn)行系統(tǒng),Java就可以在任何處理器上運(yùn)行。</p><p

31、><b>  ★ 簡(jiǎn)單性</b></p><p>  Java語言是一種面向?qū)ο蟮恼Z言,它通過提供最基本的方法來完成指定的任務(wù),開發(fā)者只要知道一些概念就能夠編寫一些應(yīng)用程序。</p><p><b>  ★ 多線程</b></p><p>  設(shè)計(jì)Java的多線程,是為了滿足人們對(duì)創(chuàng)建交互式網(wǎng)上程序的需要。用Ja

32、va編寫出來的應(yīng)用程序可以同時(shí)執(zhí)行很多任務(wù)。多線程機(jī)制使應(yīng)用程序可以并行執(zhí)行,而且同步機(jī)制保證了對(duì)共享數(shù)據(jù)的正確操作。</p><p><b>  ★ 健壯性</b></p><p>  Java語言被病毒感染和破壞得最少。Java丟棄了難學(xué)和危險(xiǎn)的指針功能,而大部分病毒程序常用的方法就是通過巧妙地運(yùn)用地址變量如指針來獲取計(jì)算機(jī)的資源,從而使程序不安全。</p

33、><p>  ★ 面向?qū)ο笳Z言</p><p>  Java的設(shè)計(jì)集中于對(duì)象及其接口,它提供了簡(jiǎn)單的類機(jī)制以及動(dòng)態(tài)的接口模型。對(duì)象中封裝它的狀態(tài)變量和相應(yīng)的方法,實(shí)現(xiàn)了模塊化和信息的隱藏;而類則是提供對(duì)象的原型,并且通過繼承的機(jī)制,子類可以使用父類所提供的方法,以實(shí)現(xiàn)代碼的復(fù)用。</p><p><b>  ★ 自動(dòng)內(nèi)存管理</b></

34、p><p>  也可以說自動(dòng)內(nèi)存管理是Java健壯性的體現(xiàn),內(nèi)存管理是很多種應(yīng)用程序內(nèi)的很關(guān)鍵因素。在網(wǎng)絡(luò)上的其他地方讀取大量的數(shù)據(jù),之后把該數(shù)據(jù)寫入硬盤上的數(shù)據(jù)庫內(nèi),一般的設(shè)計(jì)就是把數(shù)據(jù)讀入內(nèi)存中的某些集合內(nèi),對(duì)這些數(shù)據(jù)執(zhí)行某些操作,之后把數(shù)據(jù)寫入數(shù)據(jù)庫。在數(shù)據(jù)寫入數(shù)據(jù)庫后,在下一批處理之前,臨時(shí)存儲(chǔ)數(shù)據(jù)的集合必須清空舊數(shù)據(jù),或被刪除后再建。這種操作可能執(zhí)行很多次,很多語言要手工清空或刪除集合數(shù)據(jù)結(jié)構(gòu)。Java的自

35、動(dòng)內(nèi)存管理[4]正好解決這一點(diǎn),它使程序員不用再為內(nèi)存管理寫大量的代碼。</p><p>  2.3 Java Socket 網(wǎng)絡(luò)編程簡(jiǎn)介</p><p>  2.3.1 Java Socket 網(wǎng)絡(luò)編程基礎(chǔ)</p><p>  網(wǎng)絡(luò)編程,簡(jiǎn)單的理解就是兩臺(tái)計(jì)算機(jī)相互通信。其基本模型就是客戶機(jī)/服務(wù)器模型,也就是通信雙方中的一方必須提供一個(gè)固定的端口,而另一方則

36、只需要知道這個(gè)端口,并去建立兩者之間的聯(lián)系,然后完成數(shù)據(jù)交換。這里提供固定位置的一方通常稱為服務(wù)器,而建立聯(lián)系的一方通常稱為客戶端[5]。</p><p>  基于客戶機(jī)/服務(wù)器的Socket通信模型如圖2-1所示:</p><p>  圖2-1 基于客戶機(jī)/服務(wù)器的Socket通信模型圖</p><p>  Socket工作過程如下:</p>&l

37、t;p>  (1)建立連接:服務(wù)器端程序分配一個(gè)端口號(hào),開始監(jiān)聽來自客戶端的請(qǐng)求。當(dāng)客戶請(qǐng)求一個(gè)連接時(shí),服務(wù)器使用accept()方法打開Socket連接,將該Socket連接到此端口上。</p><p>  (2)數(shù)據(jù)通信:服務(wù)器和客戶端使用Socket的InputStream(輸入流)和OutputStream(輸出流)進(jìn)行通信。</p><p>  (3)關(guān)閉連接:通信結(jié)束,服

38、務(wù)器和客戶端程序斷開連接,釋放所有占用的系統(tǒng)資源。</p><p>  Java為這個(gè)模型的實(shí)現(xiàn)提供了簡(jiǎn)化的Socket編程接口。在程序中只要導(dǎo)入java.io包就可以方便的使用java的Socket編程接口。</p><p>  Java中Socket連接機(jī)制如圖2-2所示:</p><p>  圖2-2 Socket的連接機(jī)制[6]</p>&l

39、t;p>  2.3.2 Socket編程的實(shí)現(xiàn)</p><p>  Socket類表示了系統(tǒng)的IP地址和端口號(hào)的結(jié)合,可以理解為客戶端或者服務(wù)器端的一個(gè)特殊對(duì)象。它包含兩個(gè)處理流的方法,一個(gè)是getInputStream(),另一個(gè)是getOutputStream(),分別用來獲得網(wǎng)絡(luò)的輸入流和輸出流。構(gòu)造Socket對(duì)象的代碼如下:</p><p>  Socket s = new

40、 Socket(IP, port); </p><p>  IP,port分別為服務(wù)器端的IP地址和服務(wù)器端的端口號(hào)。</p><p>  ServerSocket類是一個(gè)專門建立Socket服務(wù)器的類,它可以用服務(wù)器需要使用的端口號(hào)作為參數(shù)來創(chuàng)建ServerSocket對(duì)象。示例代碼如下:</p><p>  ServerSocket ss = new Serve

41、rSocket(TCP_PORT);</p><p>  當(dāng)一個(gè)客戶端程序建立一個(gè)Socket連接,所連接的端口號(hào)為對(duì)應(yīng)TCP_PORT時(shí),服務(wù)器對(duì)象ss便響應(yīng)這個(gè)連接,在用上述ss對(duì)象調(diào)用accept()創(chuàng)建一個(gè)代表服務(wù)器的Socket對(duì)象。創(chuàng)建后服務(wù)器便可以利用這個(gè)Socket對(duì)象與客戶端進(jìn)行數(shù)據(jù)交換。示例代碼如下:</p><p>  Socket clientSocket = ss

42、.accept();</p><p>  在本系統(tǒng)的實(shí)現(xiàn)過程中,在支持網(wǎng)絡(luò)對(duì)弈的服務(wù)器類的定義中需要使用ServerSocket類來響應(yīng)多個(gè)客戶端的連接請(qǐng)求。能夠同時(shí)建立多個(gè)服務(wù)器,玩家可以選擇不同的服務(wù)器參與游戲。</p><p>  2.4 Java 圖形編程</p><p>  Java中的Graphics類是一個(gè)工具類,用來繪圖和顯示格式化文本,Graph

43、ics類是在java.awt包中聲明的。在Java程序中繪圖必須在一個(gè)窗口或者是一個(gè)容器中進(jìn)行,繪圖窗體經(jīng)常被設(shè)計(jì)為一個(gè)組件容器。顯示格式化文本和繪圖是調(diào)用Graphics類的drawXX()方法完成的,例如drawString(String)等等。繪圖采用的坐標(biāo)系[7]是原點(diǎn)在左上角,縱軸向下以像素為單位的坐標(biāo)系。</p><p><b>  2.5多線程機(jī)制</b></p>

44、<p>  多線程機(jī)制是指單個(gè)程序可以運(yùn)行多個(gè)不同的線程,執(zhí)行不同的任務(wù)。因?yàn)榫€程只能在單個(gè)進(jìn)程的作用域內(nèi)活動(dòng),所以創(chuàng)建線程比創(chuàng)建進(jìn)程要廉價(jià)得多,同一類線程共享代碼和數(shù)據(jù)空間,每個(gè)線程有獨(dú)立的運(yùn)行桟和程序計(jì)數(shù)器(PC),線程切換的開銷小。因此多線程編程在現(xiàn)代軟件設(shè)計(jì)中在量采用。</p><p>  創(chuàng)建新線程必須編寫一個(gè)線程類,用Java編寫多線程代碼有兩種方式</p><p>

45、;  ★ 直接繼承Java的線程類Thread;</p><p>  ★ 實(shí)現(xiàn)Runnable接口</p><p>  無論采用哪種方式均需要在程序中編寫Run()方法,線程在運(yùn)行時(shí)要完成的任務(wù)在該方法實(shí)現(xiàn)。Thread 類封裝了線程的行為。繼承Thread類須重寫run()方法實(shí)現(xiàn)各自的任務(wù)。程序中不要直接調(diào)用線程的run()方法,而是調(diào)用start()方法啟動(dòng)線程,讓其進(jìn)入可調(diào)度的狀態(tài)

46、,線程獲得調(diào)度時(shí)將自動(dòng)執(zhí)行run()方法。</p><p>  由于Java的單重繼承的限制,有些類必須繼承其它個(gè)類時(shí)又要實(shí)現(xiàn)線程的特性。這時(shí)可通過實(shí)現(xiàn)Runnable接口的方式來滿足兩方面的要求。Runnable 接口只有一個(gè)方法 run(),它就是線程運(yùn)行時(shí)要執(zhí)行的方法,只要將具體代碼寫入其中即可。線程在調(diào)度時(shí)將自動(dòng)調(diào)用Runnable 接口對(duì)象的run方法。</p><p>  多線

47、程是Java的一個(gè)特點(diǎn),多線程可以使程序反應(yīng)更快、交互性更強(qiáng),并能提高執(zhí)行效率。在網(wǎng)絡(luò)五子中如果服務(wù)器是單線程的,則只能與一個(gè)客戶端相連,就失去了網(wǎng)絡(luò)對(duì)戰(zhàn)的意義了。所以應(yīng)該采用多線程方式。當(dāng)服務(wù)器與一個(gè)客戶端建立連接,就開啟一個(gè)線程與之相連,同時(shí)監(jiān)聽其它用戶的連接。</p><p>  請(qǐng)求的通信協(xié)議規(guī)定:</p><p>  public class Request {</p>

48、;<p>  public static final int LOGIN = 1;//輸入用戶名的請(qǐng)求</p><p>  public static final int CR_ROOM = 2;//創(chuàng)建房間的請(qǐng)求</p><p>  public static final int GET_ROOM = 3;//獲取房間列表的請(qǐng)求</p><p>  

49、public static final int DEL_ROOM = 4;//刪除房間</p><p>  public static final int FLUSH_ROOM = 5;//刷新房間的請(qǐng)求</p><p>  public static final int IN_ROOM = 6;//進(jìn)入房間</p><p>  public static fina

50、l int IN_RESULT = 7;//進(jìn)入房間結(jié)果的請(qǐng)求</p><p>  public static final int CHESS = 8;//落子的請(qǐng)求</p><p>  public static final int SEND_MSG = 9;//發(fā)送聊天請(qǐng)求</p><p>  public static final int NEWS_TART

51、= 10;//新開游戲請(qǐng)求</p><p>  public static final int WIN = 11;//代表贏的請(qǐng)求</p><p>  public static final int GIVEUP = 12;//放棄請(qǐng)求</p><p>  public static final int SUM = 13;//求和</p><p&

52、gt;  public static final int SUM_RESULT = 14;//求和結(jié)果處理</p><p>  public static final int EXIT = 15;//退出</p><p>  public static final int EXIT_ROOM = 16;//退出游戲大廳的請(qǐng)求</p><p>  public sta

53、tic final int ROVS = 17;//轉(zhuǎn)觀戰(zhàn)請(qǐng)求</p><p>  public static final int IN_LOOK = 18;//進(jìn)入觀戰(zhàn)</p><p>  public static final int LOO_GET_DATA = 19;//觀看請(qǐng)求數(shù)據(jù)</p><p>  public static final int BAC

54、K_CHESS = 20;//悔棋</p><p>  public static final int BACK_CHESS_RESULT = 21;//悔棋結(jié)果處理</p><p><b>  }</b></p><p>  3 需求分析和總體設(shè)計(jì)</p><p>  3.1 需求分析作用</p>&

55、lt;p>  軟件需求分析是軟件開發(fā)周期的第一個(gè)階段,也是關(guān)系到軟件開發(fā)成敗的最關(guān)鍵一步。只有通過了軟件需求分析,才能把軟件的功能和性能由總體的概念性和理論性描述轉(zhuǎn)化為具體的規(guī)格說明,從而建立軟件開發(fā)的基礎(chǔ)。實(shí)踐證明,需求分析工作進(jìn)行得準(zhǔn)確程度,在很大程度上決定了軟件開發(fā)的成敗。</p><p>  軟件需求分析的任務(wù)就是讓用戶與開發(fā)者明確開發(fā)的是一個(gè)什么軟件。具體的說,就是通過對(duì)問題及其環(huán)境的理解、分析與

56、綜合把握,建立邏輯模型,完成軟件的邏輯方案設(shè)計(jì)。</p><p>  3.1.1 界面需求分析</p><p>  軟件的界面簡(jiǎn)潔明了而不失精美,操作簡(jiǎn)單容易,功能按鈕名稱簡(jiǎn)單易懂,棋盤的大小,棋子的樣式。</p><p>  3.1.2 軟件需求分析</p><p>  現(xiàn)有的網(wǎng)絡(luò)編程模式主要分成兩類:一種是基于C/S(Client/S

57、erver)模式,另一種是B/S (Browser/Server)模式。網(wǎng)絡(luò)五子棋系統(tǒng)應(yīng)用于局域網(wǎng),對(duì)交互性要求很高,本系統(tǒng)選用了C/S 模式進(jìn)行實(shí)現(xiàn),網(wǎng)絡(luò)內(nèi)部使用TCP/IP 方式利用Socket提供的服務(wù),使用Java Graphics類進(jìn)行用戶圖形界面的搭建。系統(tǒng)分成兩個(gè)部分,分別為服務(wù)端程序以及客戶端程序[8]。結(jié)合實(shí)際情況,將服務(wù)器端的程序和客戶端的程序放在一起,便可以更為方便的建立游戲和參與游戲,有效解決了在局域網(wǎng)中服務(wù)器未

58、開啟,則無法進(jìn)行游戲的缺陷。</p><p>  五子棋網(wǎng)絡(luò)游戲主要分為兩個(gè)部分,游戲服務(wù)端和游戲客戶端。游戲服務(wù)端主要存儲(chǔ)所有連線客戶的相關(guān)信息及各種狀態(tài),并負(fù)責(zé)游戲客戶之間數(shù)據(jù)的傳遞;游戲客戶端提供給客戶聯(lián)機(jī)對(duì)戰(zhàn)按鈕,使其能與其他玩家進(jìn)行游戲。由于將服務(wù)器端和客戶端程序放在一起,所以可以減少界面繪制的冗余代碼,使得客戶端和服務(wù)器端使用相同的界面。</p><p><b>  

59、3.2 總體設(shè)計(jì)</b></p><p>  總體設(shè)計(jì)是軟件開發(fā)過程中的另一個(gè)重要階段,在這一階段中將根據(jù)需求分析中提出的邏輯模型,合理地完成物理模型的設(shè)計(jì)。這個(gè)階段的主要目標(biāo)是將反映了用戶信息需求的邏輯方案轉(zhuǎn)換成物理方案,并為下一階段提供必須的技術(shù)資料。</p><p>  總體設(shè)計(jì)應(yīng)遵循以下原則:</p><p>  ★ 整體性:軟件是作為統(tǒng)一整體

60、而存在的。因此,在總體設(shè)計(jì)中要從整個(gè)軟件的角度去考慮。</p><p>  ★ 靈活性:為保持軟件長(zhǎng)久的生命力,要求該軟件具有很強(qiáng)的環(huán)境適應(yīng)性。為此,該軟件必須具有較好的開放性與結(jié)構(gòu)的可變性。</p><p>  ★ 可靠性:可靠性是指軟件抵御外界干擾的能力及受外界干擾時(shí)的恢復(fù)能力。</p><p>  ★ 經(jīng)濟(jì)性:經(jīng)濟(jì)性是指在滿足游戲軟件需求的前提下,盡可能地減少

61、對(duì)游戲的開銷。</p><p>  3.2.1 系統(tǒng)設(shè)計(jì)思想</p><p>  通過服務(wù)器的連接,不同的玩家可以連接到各自想?yún)⒓颖荣惖姆?wù)器地址,并開始各自的游戲。通過安全的SOCKET連接交換數(shù)據(jù)。通過多線程,使得每個(gè)對(duì)戰(zhàn)的雙方不會(huì)受到第三方數(shù)據(jù)的干擾。本系統(tǒng)的功能能夠?qū)崿F(xiàn)一個(gè)在網(wǎng)絡(luò)上供客戶進(jìn)行對(duì)戰(zhàn)的五子棋網(wǎng)絡(luò)游戲,因?yàn)槭荂/S 模式的網(wǎng)絡(luò)游戲,客戶只要連接到服務(wù)器上,就能選擇任何其

62、它用戶已創(chuàng)建好的游戲進(jìn)行對(duì)戰(zhàn)游戲。在C/S模式游戲中,Server一般提供所有用戶的全部信息,并能提供客戶之間的信息轉(zhuǎn)發(fā)??蛻糁g的通訊必須通過Server進(jìn)行,因?yàn)槎鄠€(gè)客戶能夠連接到同一臺(tái)Server上,所以Server必須用Thread 負(fù)責(zé)每個(gè)用戶的通訊和消息處理。</p><p>  客戶連接成功,Server利用特定的客戶Thread連接不斷從客戶讀取數(shù)據(jù),實(shí)現(xiàn)客戶和服務(wù)器或者客戶與客戶之間的信息的交互

63、??蛻舳送瑯硬捎玫氖蔷€程控制的思想,在每一個(gè)客戶端連接上服務(wù)器后,就為此客戶端啟動(dòng)一個(gè)網(wǎng)絡(luò)收發(fā)數(shù)據(jù)線程。</p><p>  3.2.2 系統(tǒng)總體設(shè)計(jì)</p><p>  系統(tǒng)使用Socket 技術(shù)以及java 多線程機(jī)制進(jìn)行客戶與服務(wù)端之間信息的交互,但一個(gè)真正實(shí)用程序必須針對(duì)具體應(yīng)用定制一套協(xié)議用于用戶程序之間進(jìn)行交互,而該協(xié)議的定制往往是編寫程序的關(guān)鍵也是核心內(nèi)容,該協(xié)議的完善決定

64、程序是否能夠正常運(yùn)行。</p><p>  所謂協(xié)議[9]就是程序之間交互的信息的格式規(guī)定, 服務(wù)端和客戶端都遵循該協(xié)議才能夠進(jìn)行對(duì)話, 通俗講是人類之間的語言。 </p><p>  3.3 功能模塊及流程</p><p>  3.3.1 系統(tǒng)主要模塊</p><p>  游戲各模塊功能如表3-1:</p><p&g

65、t;  表3-1 各模塊功能</p><p>  同時(shí)根據(jù)上面的系統(tǒng)的設(shè)計(jì)要求,可以將此網(wǎng)絡(luò)五子棋游戲分為以下五個(gè)模塊:</p><p>  初始化模塊:建立棋盤數(shù)組并清零;初始化界面并在屏幕上畫出棋盤。</p><p>  主循環(huán)控制模塊:負(fù)責(zé)控制下棋順序,當(dāng)輪到某方下子時(shí),負(fù)責(zé)將程序流程轉(zhuǎn)到相應(yīng)的模塊中。</p><p>  玩家落子模

66、塊:即用戶在指定落子區(qū)域單擊后,程序就會(huì)得到該棋子的坐標(biāo),并且將棋盤數(shù)組中坐標(biāo)處記錄棋子的顏色,1代表白色,2代表黑色,以說明是哪一方下的棋子。</p><p>  勝負(fù)判斷模塊:根據(jù)預(yù)先設(shè)定的五子棋規(guī)則,判斷游戲輸贏。</p><p>  網(wǎng)絡(luò)模塊[10]:網(wǎng)絡(luò)功能的實(shí)現(xiàn),使兩臺(tái)不同計(jì)算機(jī)的用戶通過網(wǎng)絡(luò)連接,實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)弈的功能。</p><p>  網(wǎng)絡(luò)編程的模式

67、和選取</p><p>  網(wǎng)絡(luò)編程模式主要分成兩類: 一種是基于C/S(客戶機(jī)/服務(wù)器)模式, 另一種是B/S(瀏覽器/服務(wù)器)式;C/S 程序具有好的交互性, 功能強(qiáng)大, 但是客戶端必須安裝客戶端軟件, 限制了其應(yīng)用; B/S 模式下要求客戶端具有瀏覽器, 但瀏覽器在安全方面有一些限制, 交互性與功能有一些限制網(wǎng)絡(luò)五子棋系統(tǒng)應(yīng)用,所以一般的網(wǎng)絡(luò)五子棋游戲都選用了C/S 模式進(jìn)行實(shí)現(xiàn),使用TCP/IP 方式利用

68、Socket 通過傳輸層提供服務(wù)。</p><p>  在Socket工作中,用ClientSocket類建立客戶端連接,用ServerSocket類建立服務(wù)器端連接,這兩個(gè)組件分別用來操縱客戶端和服務(wù)器端的Socket對(duì)象進(jìn)行連接和傳輸數(shù)據(jù)。在通信過程中,服務(wù)器端應(yīng)用程序先啟動(dòng),然后等待客戶端的連接請(qǐng)求。在另外一臺(tái)計(jì)算機(jī)上啟動(dòng)客戶端應(yīng)用程序,同時(shí)輸入服務(wù)器端Socket地址和端口號(hào)進(jìn)行選擇服務(wù)器,找到服務(wù)器后就

69、向服務(wù)器端發(fā)請(qǐng)求連接服務(wù)器端,允許連接后即向客戶端Socket收到Accept信號(hào)??蛻舳撕头?wù)器端就正式建立起了后, 就可以分別調(diào)用Tserve Rsocket和TClientSocket的Socket屬性和客戶端進(jìn)行數(shù)據(jù)傳輸??蛻舳撕头?wù)器端Socket組件必須設(shè)置相同的端口號(hào)。</p><p><b>  服務(wù)器端作用</b></p><p>  服務(wù)器端[11

70、]主要通過建立流連接來連接客戶端,與客戶端進(jìn)行相互通信、轉(zhuǎn)發(fā)信息。接收客戶端的信息,接收信息后按照此客戶端的要求將信息發(fā)送到相應(yīng)的客戶端,服務(wù)器端起到了中轉(zhuǎn)的作用。</p><p>  服務(wù)器類用于接收客戶端的連接,并為每個(gè)客戶端在服務(wù)器端啟動(dòng)唯一的守護(hù)線程,線程主要功能是接收客戶端發(fā)送過來的消息并做出相應(yīng)的處理??蛻舳税l(fā)送到服務(wù)器端的主要消息有兩部分:一部分是客戶端發(fā)送給服務(wù)器端需要服務(wù)器端進(jìn)行處理的,如客戶端

71、發(fā)送過的連接信息、客戶端改名信息、客戶端斷開連接信息等;另一部分是客戶端發(fā)送給服務(wù)器端需要服務(wù)端轉(zhuǎn)發(fā)給其他客戶端的消息,如客戶端給游戲另一方發(fā)送的棋盤狀態(tài)數(shù)據(jù)、聊天信息等。</p><p>  玩家進(jìn)入游戲界面時(shí),如果玩家不想進(jìn)入別人已經(jīng)建立好的游戲中,那也可以自己從界面中建立一個(gè)房間,等待其他玩家的進(jìn)入。直接點(diǎn)擊創(chuàng)建房間,這樣一個(gè)自己的游戲就建立了,如果有玩家加入游戲,系統(tǒng)會(huì)提示某某玩家請(qǐng)求進(jìn)入房間,這時(shí)你可以

72、選擇是或者否。游戲各模塊功能跟客服端的模塊相同。</p><p>  服務(wù)器類使用狀況如圖3-1:</p><p>  圖3 -1 服務(wù)器類用況圖</p><p><b>  客戶端作用</b></p><p>  游戲客戶端的主要功能是為了初始化和組織用戶界面,并且定義了各個(gè)按鈕的功能。</p>&l

73、t;p>  玩家進(jìn)入游戲界面時(shí),首先提示玩家選擇聯(lián)機(jī)對(duì)戰(zhàn),當(dāng)玩家選擇聯(lián)機(jī)對(duì)戰(zhàn)后,會(huì)彈出請(qǐng)輸入玩家名的聊天框,輸入玩家名點(diǎn)擊進(jìn)入(在此判斷是否會(huì)有相同名稱的玩家名),跳轉(zhuǎn)到另一個(gè)玩家界面,再此玩家可以創(chuàng)建房間或者加入已經(jīng)有了的房間。</p><p>  游戲客戶端使用狀況如圖3-2:</p><p>  圖3-2 游戲客戶端用況圖</p><p>  客戶端副

74、類的主要功能是當(dāng)前玩家與其他玩家進(jìn)行對(duì)弈時(shí),網(wǎng)絡(luò)客戶端處理需要發(fā)送和接收的消息。</p><p>  圖3-3 棋盤類用況圖</p><p>  4 詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)</p><p><b>  4.1 系統(tǒng)主流程</b></p><p>  玩家進(jìn)入游戲,選擇聯(lián)機(jī)對(duì)戰(zhàn),輸入玩家昵稱,進(jìn)入游戲大廳,選擇進(jìn)入房間、創(chuàng)建房

75、間或者轉(zhuǎn)觀戰(zhàn),進(jìn)入房間,進(jìn)入對(duì)弈階段。對(duì)弈結(jié)束,從新開始。</p><p>  系統(tǒng)主流程如圖4-1:</p><p>  圖4-1 網(wǎng)絡(luò)五子棋游戲流程圖</p><p>  4.2 如何判斷輸贏</p><p>  輸贏的判斷是網(wǎng)絡(luò)五子棋游戲中一個(gè)很重要的部分。當(dāng)雙方每放下一個(gè)棋子的時(shí)候,程序都要進(jìn)行判斷是否已經(jīng)產(chǎn)生了輸贏。如果是,則停止

76、游戲,并發(fā)送結(jié)果給服務(wù)器,服務(wù)器再發(fā)送結(jié)果給對(duì)方。橫,豎或者對(duì)角線方向上擁有五顆同樣的棋子時(shí),即為勝利。</p><p>  圖4-2 五子棋判斷輸贏示意圖</p><p>  當(dāng)在棋盤中放入一個(gè)棋子時(shí),比如白色。程序要計(jì)算它左邊連在一起的白色棋子的個(gè)數(shù),然后計(jì)算右邊與它相連在一起的白色棋子的個(gè)數(shù)。再將兩數(shù)相加,如果為四,與自己加起來剛好為五。則白棋獲勝。用同樣的方法在垂直和對(duì)角線方向進(jìn)

77、行判斷同色棋子個(gè)數(shù)。如果獲勝,則客戶端發(fā)送信息給服務(wù)器,否則由對(duì)方下棋,并重復(fù)進(jìn)行相同的運(yùn)算。</p><p><b>  具體的算法如下:</b></p><p>  1.豎著判斷輸贏的算法:</p><p>  public boolean isWin(int i,int j){</p><p>  int j1=j

78、-1;</p><p>  int count=1;</p><p>  while(true){ </p><p>  if(j1>=0&&chessBoard[i][j]==chessBoard[i][j1]){</p><p><b>  count++;</b></p>

79、<p><b>  j1--;</b></p><p><b>  }else{</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b>&l

80、t;/p><p><b>  j1=j+1;</b></p><p>  while(true){ </p><p>  if(j1<col&&chessBoard[i][j]==chessBoard[i][j1]){</p><p><b>  count++;</b>&l

81、t;/p><p><b>  j1++;</b></p><p><b>  }else{</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }<

82、;/b></p><p>  if(count>=5){</p><p>  return true;</p><p><b>  }</b></p><p>  return false;</p><p><b>  }</b></p><p

83、>  2.橫著判斷輸贏的算法:</p><p>  public boolean isWin1(int i,int j){</p><p>  int count=1;</p><p>  int i1=i-1;</p><p>  while(true){ </p><p>  if(i1>=0&

84、amp;&chessBoard[i][j]==chessBoard[i1][j]){</p><p><b>  count++;</b></p><p><b>  i1--;</b></p><p><b>  }else{</b></p><p><b>

85、;  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  i1=i+1;</b></p><p>  while(true){ </p><p>  if(

86、i1<row&&chessBoard[i][j]==chessBoard[i1][j]){</p><p><b>  count++;</b></p><p><b>  i1++;</b></p><p><b>  }else{</b></p><p&g

87、t;<b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(count>=5){</p><p>  return true;</p><p><b>

88、  }</b></p><p>  return false;</p><p><b>  }</b></p><p>  3.斜著(東北方向)判斷輸贏的算法</p><p>  public boolean isWin2(int i,int j){</p><p>  int cou

89、nt,i1,j1;</p><p><b>  count=1;</b></p><p>  j1=j+1;i1=i+1;</p><p>  while(true){ </p><p>  if(i1<row&&j1<col&&chessBoard[i][j]==ch

90、essBoard[i1][j1]){</p><p><b>  count++;</b></p><p><b>  i1++;</b></p><p><b>  j1++;</b></p><p><b>  }else{</b></p>

91、<p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  j1=j-1;i1=i-1;</p><p>  while(true){ </p><p&g

92、t;  if(i1>=0&&j1>=0&&chessBoard[i][j]==chessBoard[i1][j1]){</p><p><b>  count++;</b></p><p><b>  i1--;</b></p><p><b>  j1--;</

93、b></p><p><b>  }else{</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(count&g

94、t;=5){</p><p>  return true;</p><p><b>  }</b></p><p>  return false;</p><p><b>  }</b></p><p>  4.斜著(西北方向)判斷輸贏的算法</p><

95、p>  public boolean isWin3(int i,int j){</p><p>  int count,i1,j1;</p><p><b>  count=1;</b></p><p>  j1=j+1;i1=i-1;</p><p>  while(true){ </p>

96、<p>  if(i1>=0&&j1<col&&chessBoard[i][j]==chessBoard[i1][j1]){</p><p><b>  count++;</b></p><p><b>  i1--;</b></p><p><b>  j1

97、++;</b></p><p><b>  }else{</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  j1

98、=j-1;i1=i+1;</p><p>  while(true){ </p><p>  if(i1<row&&j1>=0&&chessBoard[i][j]==chessBoard[i1][j1]){</p><p><b>  count++;</b></p><p

99、><b>  i1++;</b></p><p><b>  j1--;</b></p><p><b>  }else{</b></p><p><b>  break;</b></p><p><b>  }</b><

100、/p><p><b>  }</b></p><p>  if(count>=5){</p><p>  return true;</p><p><b>  }</b></p><p>  return false;</p><p><b&g

101、t;  }</b></p><p>  4.3 開發(fā)環(huán)境的搭建</p><p><b>  1.安裝JDK</b></p><p>  從網(wǎng)站上下載免費(fèi)安裝軟件,并按照要求一步一步安裝。</p><p>  2.安裝MyEclipse</p><p>  從官方網(wǎng)站上下載免費(fèi)壓縮包,在

102、jdk安裝目錄下,解壓此壓縮包即可。</p><p><b>  3.配置環(huán)境變量</b></p><p>  在環(huán)境變量的配置中,假設(shè)JDK的安裝目錄為D:\Program Files\Java\jdk1.6.0_10</p><p><b>  環(huán)境變量PATH</b></p><

103、p>  方法一:在c:\Autoexe.bat文件的底部或者最后以后一個(gè)path命令之后,輸入:SET PATH=%PATH%;D:\Program Files\Java\jdk1.6.0_10\bin</p><p>  方法二:在“系統(tǒng)屬性”對(duì)話框中 直接設(shè)置環(huán)境變量:PATH=……;D:\Program Files\Java\jdk1.6.0_10\bin; </p><p>

104、;  4.4 功能模塊的界面實(shí)現(xiàn)</p><p>  界面是軟件與用戶交互的最直接的層,界面的好壞決定用戶對(duì)軟件的第一印象。而且設(shè)計(jì)良好的界面能夠引導(dǎo)用戶自己完成相應(yīng)的操作,起到向?qū)У淖饔?。同時(shí)界面如同人的面孔,具有吸引用戶的直接優(yōu)勢(shì)。設(shè)計(jì)合理的界面能給用戶帶來輕松愉悅的感受和成功的感覺,相反由于界面設(shè)計(jì)的失敗,讓用戶有挫敗感,再實(shí)用強(qiáng)大的功能都可能在用戶的畏懼與放棄中付諸東流。一個(gè)好的按鈕名稱應(yīng)該是易懂的,用詞

105、準(zhǔn)確的,屏棄模楞兩可的字眼,要與同一界面上的其它按鈕易于區(qū)分,能望文知意最好。理想的情況是用戶不用查閱幫助就能知道該界面的功能并進(jìn)行相關(guān)的正確操作。通常界面設(shè)計(jì)都按Windows 界面的規(guī)范來設(shè)計(jì),可以說:界面遵循規(guī)范化的程度越高,則易用性相應(yīng)的就越好。</p><p>  本系統(tǒng)軟件界面有以下幾個(gè)功能:聯(lián)機(jī)對(duì)戰(zhàn)、輸入玩家姓名、創(chuàng)建房間、觀戰(zhàn)和退出等按鈕。點(diǎn)擊“開始游戲”按鈕,在界面中的展示如圖4-3,4-4,4

106、-5,4-6:</p><p><b>  圖4-3 聯(lián)機(jī)對(duì)戰(zhàn)</b></p><p>  開始游戲(聯(lián)機(jī)對(duì)戰(zhàn))</p><p>  圖4-4 玩家登錄注冊(cè)</p><p>  輸入玩家昵稱,同時(shí)判斷是否有已存在的玩家,若有重新輸入。</p><p><b>  圖4-5 游戲大廳<

107、;/b></p><p>  游戲大廳包括:轉(zhuǎn)觀戰(zhàn),創(chuàng)建房間,進(jìn)入房間(同時(shí)可以處理一些消息)</p><p><b>  圖4-6 玩家對(duì)戰(zhàn)</b></p><p>  五子棋對(duì)戰(zhàn)界面包括:新開,悔棋,放棄,求和,退出,聊天框功能(同時(shí)處理一些消息)</p><p><b>  5 軟件的測(cè)試<

108、/b></p><p>  5.1 軟件測(cè)試的方法</p><p>  軟件測(cè)試就是利用測(cè)試工具按照測(cè)試方案和流程對(duì)產(chǎn)品進(jìn)行功能和性能測(cè)試,甚至根據(jù)需要編寫不同的測(cè)試工具,設(shè)計(jì)和維護(hù)測(cè)試系統(tǒng),對(duì)測(cè)試方案可能出現(xiàn)的問題進(jìn)行分析和評(píng)估。執(zhí)行測(cè)試用例后,需要跟蹤故障,以確保開發(fā)的產(chǎn)品符合需求。</p><p><b>  軟件測(cè)試的目的:</b&g

109、t;</p><p>  ★ 測(cè)試并不僅僅是為了找出錯(cuò)誤。通過分析錯(cuò)誤產(chǎn)生的原因和錯(cuò)誤的發(fā)生趨勢(shì),可以幫助項(xiàng)目管理者發(fā)現(xiàn)當(dāng)前軟件開發(fā)過程中的缺陷,以便改進(jìn)。</p><p>  ★ 這種分析能幫助測(cè)試人員設(shè)計(jì)出有針對(duì)性的測(cè)試方法,改善測(cè)試的效率。</p><p>  ★ 沒有發(fā)現(xiàn)錯(cuò)誤的測(cè)試也是有價(jià)值的。完整的測(cè)試是評(píng)定軟件質(zhì)量的重要方法。</p>

110、<p><b>  軟件測(cè)試的方法:</b></p><p>  軟件測(cè)試可以分為黑盒測(cè)試和白盒測(cè)試。</p><p>  黑盒測(cè)試就是測(cè)試要在軟件的接口處進(jìn)行。這種方法是把測(cè)試內(nèi)容看做一個(gè)盒子,程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性不被測(cè)試人員考慮,只依據(jù)程序的需求規(guī)格說明書來檢查程序的功能是否符合它的功能說明。因此黑盒測(cè)試又叫功能測(cè)試或數(shù)據(jù)驅(qū)動(dòng)測(cè)試。黑盒測(cè)試主要

111、是為了發(fā)現(xiàn)以下4種錯(cuò)誤:</p><p>  ★ 是否有不正確或遺漏的功能。</p><p>  ★ 在接口上,輸入是否能正確的接受。能否輸出正確的結(jié)果。</p><p>  ★ 是否有數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部信息訪問錯(cuò)誤。</p><p>  ★ 是否有初始化和終止性的錯(cuò)誤。</p><p>  白盒測(cè)試是細(xì)致檢查

112、軟件的過程性細(xì)節(jié)。此方法就是叫測(cè)試人員把軟件看成一個(gè)打開的盒子一樣,測(cè)試人員可以利用程序內(nèi)部的邏輯結(jié)構(gòu),設(shè)計(jì)及相關(guān)信息選擇測(cè)試用例,測(cè)試程序所有邏輯路徑。測(cè)試不同點(diǎn)的程序狀態(tài)來確定所測(cè)試出來的是否和預(yù)測(cè)的狀態(tài)相同。白盒測(cè)試又被叫做結(jié)構(gòu)測(cè)試或者邏輯驅(qū)動(dòng)測(cè)試。白盒測(cè)試主要是相對(duì)進(jìn)行的。</p><p><b>  如下程序模塊檢查:</b></p><p>  ★ 對(duì)程

113、序模塊的所有獨(dú)立的執(zhí)行路徑至少測(cè)試一遍。</p><p>  ★ 對(duì)所有的邏輯判定,取“真”與取“假”的兩種情況至少測(cè)一遍。</p><p>  ★ 測(cè)試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性,等等。</p><p>  由以上的分析,本游戲采用的是黑盒測(cè)試的方法。</p><p>  具體測(cè)試結(jié)果如表5-1:</p><p>  

114、表5-1 網(wǎng)絡(luò)客戶端功能測(cè)試</p><p>  用例測(cè)試結(jié)果:正確。</p><p><b>  6 總結(jié)語</b></p><p>  通過幾個(gè)月的對(duì)軟件系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),一個(gè)能夠完成網(wǎng)絡(luò)對(duì)弈的五子棋游戲基本實(shí)現(xiàn)。全部的總結(jié)工作,具體概括如下:</p><p>  論文首先研究對(duì)比了網(wǎng)絡(luò)五子棋游戲的具體優(yōu)勢(shì),分析

115、了C/S和B/S模式的各自的優(yōu)缺點(diǎn)。對(duì)應(yīng)系統(tǒng)的具體要求,構(gòu)建了基于C/S模式的網(wǎng)絡(luò)五子棋對(duì)戰(zhàn)的基本設(shè)計(jì)。</p><p>  采用了網(wǎng)絡(luò)編程中的一種,Socket編程,分析了Socket通信的基本原理及實(shí)現(xiàn)。</p><p>  完成了網(wǎng)絡(luò)五子棋對(duì)弈系統(tǒng)的總體的方案設(shè)計(jì),以Java為編程語言基礎(chǔ),以MyEclipse為五子棋游戲的開發(fā)工具,完成了系統(tǒng)各模塊的設(shè)計(jì),其中包括服務(wù)器模塊、客戶端

116、模塊以及美化界面方面的設(shè)計(jì)。</p><p>  雖然網(wǎng)絡(luò)五子棋這款游戲?qū)崿F(xiàn)了基本的設(shè)計(jì),但是需要改進(jìn)的地方還有很多,早這里我首先感謝一下我的指導(dǎo)老師孫晨霞老師,在程序設(shè)計(jì)和規(guī)劃上給了我很多實(shí)質(zhì)性的建議,但是我個(gè)人認(rèn)為需要改進(jìn)的地方還有有以下幾點(diǎn):</p><p>  游戲界面還是不夠美化,程序設(shè)計(jì)還是存在些許冗余,不能高效率的在個(gè)人PC上運(yùn)行。</p><p> 

117、 對(duì)游戲邏輯模塊進(jìn)行優(yōu)化,進(jìn)一步提高可擴(kuò)展性,以適應(yīng)將來新的需求和變化。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 耿祥義、張躍平:Java基礎(chǔ)教程(第2版),清華大學(xué)出版社,2007.05,P10-P12</p><p>  [2] Harvey M.Deitel,P.J.Deitel:Java大學(xué)基礎(chǔ)教程,劉

118、曉莉,周璐,錢方,等譯,機(jī)械工業(yè)出版社,2006.01,P20-P25</p><p>  [3] 吳春煌:科技論文寫作,中山大學(xué)出版社,2001.07,P15-P35</p><p>  [4] Oaks, Scott:java Threads,Third Edition,O'Reilly Media Inc,2004.03, P12-P20</p><p&g

119、t;  [5] 馮博、應(yīng)群:面向?qū)ο蟮腏ava網(wǎng)絡(luò)編程。清華大學(xué)出版社,2004.11,P152-P155</p><p>  [6] 孫晨霞、楊興運(yùn):Java程序設(shè)計(jì)。中國計(jì)劃出版社2007.8,P188-P191</p><p>  [7]孫更新等:Java畢業(yè)設(shè)計(jì)指南與項(xiàng)目實(shí)踐,科學(xué)出版社,2008.03,P78-P88</p><p>  [8] 單文仁:J

120、ava在我國的應(yīng)用現(xiàn)狀和發(fā)展趨勢(shì),科技成果縱橫,2007.02,P132-P155</p><p>  [9] 孫衛(wèi)琴:JAVA面向?qū)ο缶幊?,電子工業(yè)出版社,2006.07,P65-P69</p><p>  [10] 朱福喜、黃昊著:Java項(xiàng)目開發(fā)與畢業(yè)設(shè)計(jì)指導(dǎo),北京:清華大學(xué)出版社,2008.05,P54-P65</p><p>  [11] 郭驊:Java網(wǎng)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論