![計(jì)算機(jī)科學(xué)系課程設(shè)計(jì)報(bào)告基于Java的五子棋游戲_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-9/29/f29292da-2e17-448b-81ea-e836826c8684/f29292da-2e17-448b-81ea-e836826c86841.gif)
![計(jì)算機(jī)科學(xué)系課程設(shè)計(jì)報(bào)告基于Java的五子棋游戲_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-9/29/f29292da-2e17-448b-81ea-e836826c8684/f29292da-2e17-448b-81ea-e836826c86842.gif)
![計(jì)算機(jī)科學(xué)系課程設(shè)計(jì)報(bào)告基于Java的五子棋游戲_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-9/29/f29292da-2e17-448b-81ea-e836826c8684/f29292da-2e17-448b-81ea-e836826c86843.gif)
![計(jì)算機(jī)科學(xué)系課程設(shè)計(jì)報(bào)告基于Java的五子棋游戲_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-9/29/f29292da-2e17-448b-81ea-e836826c8684/f29292da-2e17-448b-81ea-e836826c86844.gif)
![計(jì)算機(jī)科學(xué)系課程設(shè)計(jì)報(bào)告基于Java的五子棋游戲_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-9/29/f29292da-2e17-448b-81ea-e836826c8684/f29292da-2e17-448b-81ea-e836826c86845.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 南開(kāi)大學(xué)濱海學(xué)院計(jì)算機(jī)科學(xué)系課程設(shè)計(jì)報(bào)告 - 27 - 南開(kāi)大學(xué)濱海學(xué)院計(jì)算機(jī)科學(xué)系課 程 設(shè) 計(jì) 報(bào) 告 課題名稱:基于java的五子棋游戲 專 業(yè):數(shù)字媒體 班 級(jí):2班 學(xué)號(hào)姓名: 指導(dǎo)教師: 完成日期:2011年6月21日目錄第一章 緒論21.1背景介紹21.2研究?jī)r(jià)值2第二章 開(kāi)發(fā)工具與語(yǔ)言簡(jiǎn)介32.1 java簡(jiǎn)介32.2 eclipse開(kāi)發(fā)環(huán)境簡(jiǎn)介4第三章 五子棋的相關(guān)知識(shí)53.1 五子棋簡(jiǎn)介53.2 五子棋基本規(guī)則5第四章 程序設(shè)計(jì)流程及具體實(shí)現(xiàn)64.1 mvc設(shè)計(jì)模式64.2 程序設(shè)計(jì)104.2.1 單機(jī)五子棋104.2.2 判斷輸贏的算法134.2.3 交互界面的繪制13
2、4.2.4 設(shè)置悔棋134.2.5 儲(chǔ)存棋盤(pán)信息和加載144.2.5 tcp網(wǎng)路編程144.2.5 網(wǎng)絡(luò)五子棋17第五章 在windows平臺(tái)下的發(fā)布與效果展示19第六章 總結(jié)與展望24致謝25摘要:隨著計(jì)算機(jī)普及,網(wǎng)絡(luò)的飛速發(fā)展,網(wǎng)絡(luò)技術(shù)的成熟,計(jì)算機(jī)的發(fā)展為集辦公、娛樂(lè)于一體新式工具。在這一背景下,網(wǎng)絡(luò)游戲的需求與日俱增,五子棋作為傳統(tǒng)游戲之一,其歷史源遠(yuǎn)流長(zhǎng),而傳統(tǒng)游戲的開(kāi)發(fā)更符合用戶的品味,更受用戶的喜愛(ài)。使用java語(yǔ)言開(kāi)發(fā)的五子棋游戲程序,將五子棋游戲移植到網(wǎng)絡(luò)中更符合現(xiàn)代人娛樂(lè)理念,滿足用戶異地自由選擇游戲?qū)κ?、?shí)現(xiàn)單機(jī)和雙人對(duì)戰(zhàn)的游戲模式,也可以在游戲當(dāng)中進(jìn)行聊天,私聊、群聊等
3、功能,便于用戶實(shí)時(shí)進(jìn)行信息交流。同時(shí),注意從游戲的圖形界面上優(yōu)化,使得java五子棋游戲軟件具有很強(qiáng)的可操作性。本文論述了用java語(yǔ)言開(kāi)發(fā)出的一款通俗易懂而充滿樂(lè)趣的五子棋小游戲。key words:gobang double against single machine the java language understandableabstract: along with the computer popularization, the rapid development of the network, the network technology maturity, the devel
4、opment of the computer for set office, entertainment in one new tool. in this context, the network games demand grows day by day, as a traditional game, one of gobang its long history, and the development of the traditional game more accord with users are more taste, the users favorite.use java lang
5、uage development of the game program, will gobang federation to transplant network game more accord with modern entertainment idea, meet user free choice different game opponent, and game mode, also can be in the middle of the game chat, private chat, group chat, and other functions, convenient for
6、the user to exchange of information in real time. at the same time, pay attention from the games graphical interface optimization, makes java gobang game software has very strong operation.this paper discusses the java language with developed a straightaway and fun gobang little game第一章:緒論1.1 背景介紹隨著
7、科技突飛猛進(jìn)的發(fā)展,電腦已經(jīng)進(jìn)入了家家戶戶,而現(xiàn)在越來(lái)越多的熱門(mén)詞匯也與電腦有了關(guān)系,與電腦有關(guān)的知識(shí)也越來(lái)越受學(xué)生的喜愛(ài),很多學(xué)生在高考填寫(xiě)志愿時(shí)會(huì)選擇與計(jì)算機(jī)有關(guān)的學(xué)科,如數(shù)字媒體技術(shù),影視動(dòng)畫(huà),網(wǎng)絡(luò)編程等。同時(shí),許多公司里的有關(guān)計(jì)算機(jī)軟件開(kāi)發(fā)的項(xiàng)目有越來(lái)越高的薪酬,計(jì)算機(jī)人才也是供不應(yīng)求。當(dāng)然,軟件的日益更新和增加也不再滿足人們的需求。于是,很多人便自己動(dòng)手開(kāi)發(fā)自己所需要的軟件,只有自己才最清楚自己是需要什么樣的軟件。java語(yǔ)言作為一種面向?qū)ο蟮木幊陶Z(yǔ)言,具有分布式,可移植,高性能,多線程等特點(diǎn)。而且與c+相比,它通俗易懂而且操作性更強(qiáng),并且除去了指針等方面的要求。通過(guò)一定的學(xué)習(xí),人們
8、可以使用java開(kāi)發(fā)工具開(kāi)發(fā)出功能齊全,滿足特殊需求的應(yīng)用程序,對(duì)于學(xué)習(xí)者掌握一定的技能和開(kāi)拓思維都有很大的幫助。五子棋游戲是一款較為常見(jiàn)的小游戲,通過(guò)雙方下棋來(lái)實(shí)現(xiàn)勝負(fù)。我們小組制作的五子棋游戲是通過(guò)兩種模式,單機(jī)和聯(lián)網(wǎng),讓玩家自己來(lái)決定所需的游戲模式,然后進(jìn)行游戲。并且其中可以自行選擇黑棋或者白棋,并有悔棋和存盤(pán)等附加功能。在實(shí)現(xiàn)過(guò)程中學(xué)到了許多的專業(yè)知識(shí),同時(shí)也鞏固了在課堂上學(xué)的一系列知識(shí)。通過(guò)研究這一款益智游戲,可以自己動(dòng)手實(shí)現(xiàn)想要的游戲效果。而且在開(kāi)發(fā)研究過(guò)程中,我們可以復(fù)習(xí)所學(xué)過(guò)的許多java語(yǔ)言知識(shí),對(duì)所學(xué)的知識(shí)進(jìn)行系統(tǒng)性復(fù)習(xí),并在研究中得出了自己的心得體驗(yàn)。更可以在開(kāi)發(fā)過(guò)程中得
9、到許多的樂(lè)趣,使知識(shí)有一定的提高。1.2 研究?jī)r(jià)值在系統(tǒng)地學(xué)習(xí)了java語(yǔ)言后,我們小組準(zhǔn)備自己動(dòng)手制作一個(gè)五子棋的小程序,可以將學(xué)過(guò)的眾多java知識(shí)有效地結(jié)合起來(lái)進(jìn)行綜合地運(yùn)用,在課本章程中,接口與多態(tài),異常的處理,i/o操作,多線程和網(wǎng)絡(luò)編程等知識(shí)都得到了一定的綜合運(yùn)用,而且可以對(duì)自己學(xué)過(guò)的技能能夠進(jìn)行檢驗(yàn),更可以全面復(fù)習(xí)有關(guān)的知識(shí)。在研究過(guò)程中雖然會(huì)遇到很多難題,但是通過(guò)自己找資料,與同學(xué)相互探討、研究,然后將難題一一解決,是一件非常能夠鍛煉能力的事情。雖然做出來(lái)的五子棋沒(méi)有網(wǎng)絡(luò)上的如此精致,但是也是充滿樂(lè)趣的一款游戲。從研究流程,設(shè)計(jì)棋盤(pán)到開(kāi)發(fā)代碼,都是自己動(dòng)手制作。而且,可以學(xué)到更
10、多的新知識(shí),在學(xué)習(xí)中得到更多的樂(lè)趣。在五子棋的實(shí)現(xiàn)價(jià)值方面相比之下是無(wú)法和圍棋相比的,但剛好是這點(diǎn),造就了五子棋在社會(huì)可推廣的路。學(xué)棋不是為了出成績(jī),因?yàn)楣谲娪肋h(yuǎn)只有一個(gè)。棋是培養(yǎng)習(xí)慣的一個(gè)載體。他的作用是為社會(huì)培養(yǎng)更多懂得思考他人的社會(huì)人才。由于五子棋比圍棋簡(jiǎn)單易學(xué),更符合目前社會(huì)的發(fā)展。所以他不需要是難度很大的規(guī)則。當(dāng)然對(duì)不同層次的選手使用不同的規(guī)則也是可行的,關(guān)鍵看其產(chǎn)生的社會(huì)價(jià)值。在目前國(guó)內(nèi)連基礎(chǔ)培訓(xùn)都很少的時(shí)候,我想規(guī)則根本不需要考慮而對(duì)于曲子其本身來(lái)說(shuō),它的價(jià)值也是非凡的。有人說(shuō)過(guò),現(xiàn)階段五子棋的價(jià)值主要體現(xiàn)在它的休閑性、趣味性,而并非復(fù)雜性、競(jìng)技性,五子棋現(xiàn)階段還不被人熟知,更談
11、不上職業(yè)化,但只要好好抓住了現(xiàn)階段五子棋的價(jià)值進(jìn)行發(fā)展,相信在不久五子棋就會(huì)逐步被廣大群眾所了解和認(rèn)識(shí),認(rèn)識(shí)到它更深的價(jià)值,那時(shí)五子棋就不僅僅是簡(jiǎn)單的小游戲,職業(yè)化也并非天方夜譚了。相信這一天終會(huì)到來(lái),因?yàn)槲遄悠灞旧淼膬r(jià)值,因?yàn)楣湃说闹腔?,也因?yàn)槟阄业呐?。第二?開(kāi)發(fā)工具與語(yǔ)言簡(jiǎn)介2.1 java簡(jiǎn)介java是一種簡(jiǎn)單的,跨平臺(tái)的,面向?qū)ο蟮?,分布式的,解釋的,健壯的安全的,結(jié)構(gòu)的中立的,可移植的,性能很優(yōu)異的多線程的,動(dòng)態(tài)的語(yǔ)言.在java出現(xiàn)以前,internet上的信息內(nèi)容都是一些乏味死板的html文檔。這對(duì)于那些迷戀于web瀏覽的人們來(lái)說(shuō)簡(jiǎn)直不可容忍。他們迫切希望能在web中看到一些
12、交互式的內(nèi)容,開(kāi)發(fā)人員也極希望能夠在web上創(chuàng)建一類無(wú)需考慮軟硬件平臺(tái)就可以執(zhí)行的應(yīng)用程序,當(dāng)然這些程序還要有極大的安全保障。對(duì)于用戶的這種要求,傳統(tǒng)的編程語(yǔ)言顯得無(wú)能為力,而sun的工程師敏銳地察覺(jué)到了這一點(diǎn),從1994年起,他們開(kāi)始將oak技術(shù)應(yīng)用于web上,并且開(kāi)發(fā)出了hotjava的第一個(gè)版本。當(dāng)sun公司1995年正式以java這個(gè)名字推出的時(shí)候,幾乎所有的web開(kāi)發(fā)人員都想到:噢,這正是我想要的。于是java成了一顆耀眼的明星,丑小鴨一下了變成了白天鵝。java技術(shù)的重要性就不講了,從最近流行的一個(gè)統(tǒng)計(jì)數(shù)據(jù)上來(lái)說(shuō),目前世界上編程語(yǔ)言java 、c 、vb、c+依次排名前4位,這排名
13、本身不說(shuō)明什么,但至少也是工業(yè)界對(duì)編程語(yǔ)言使用上一個(gè)側(cè)面的反映。java編程語(yǔ)言與眾不同之處在于:java程序既是編譯型的(轉(zhuǎn)換為一種稱為java字節(jié)碼的中間語(yǔ)言),又是解釋型的(jvm 對(duì)字節(jié)碼進(jìn)行解析和運(yùn)行)。編譯只進(jìn)行一次,而解釋在每次運(yùn)行程序時(shí)都會(huì)進(jìn)行。編譯后的字節(jié)碼采用一種針對(duì)jvm 優(yōu)化過(guò)的機(jī)器碼形式;解釋器是jvm 的實(shí)現(xiàn)。java具有眾多優(yōu)點(diǎn),比如平臺(tái)無(wú)關(guān)性,安全性,面向?qū)ο?,健壯式,分布式等。與c+相比,java去掉了其中的指針運(yùn)算、結(jié)構(gòu)、typedefs、#define、需要釋放內(nèi)存等功能,減少了平常出錯(cuò)的50%,讓java的語(yǔ)言功能很精煉。而且,因?yàn)閖ava很小,所以整個(gè)
14、解釋器只需215k的ram,并增加了一些很有用的功能。在internet方面,java的出現(xiàn)實(shí)現(xiàn)了互動(dòng)的頁(yè)面,是一次偉大的革命。java并不是為internet、www而設(shè)計(jì)的,它也可以用來(lái)編寫(xiě)?yīng)毩⒌膽?yīng)用程序。java程序需要編譯,它被放置在internet服務(wù)器上,當(dāng)用戶訪問(wèn)服務(wù)器時(shí),java程序被下載到本地的用戶機(jī)上,由瀏覽器解釋運(yùn)行。實(shí)際上有兩種java程序:一種java應(yīng)用程序是一個(gè)完整的程序,如web瀏覽器。另一種java小應(yīng)用程序是運(yùn)行于web瀏覽器中的一個(gè)程序。java程序和它的瀏覽器hotjava,提供了可讓瀏覽器運(yùn)行程序的方法。2.2 eclipse開(kāi)發(fā)環(huán)境簡(jiǎn)介eclipse
15、 是一個(gè)開(kāi)放源代碼的、基于 java 的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。幸運(yùn)的是,eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 java 開(kāi)發(fā)工具。eclipse的本身只是一個(gè)框架平臺(tái),但是眾多插件的支持使得eclipse擁有其他功能相對(duì)固定的ide軟件很難具有的靈活性。許多軟件開(kāi)發(fā)商以eclipse為框架開(kāi)發(fā)自己的ide。eclipse是一個(gè)開(kāi)放源代碼的軟件開(kāi)發(fā)項(xiàng)目,專注于為高度集成的工具開(kāi)發(fā)提供一個(gè)全功能的、具有商業(yè)品質(zhì)的工業(yè)平臺(tái)。它主要由eclipse項(xiàng)目、eclipse工具項(xiàng)目和eclipse技術(shù)項(xiàng)目三個(gè)項(xiàng)目組成,具體包括四個(gè)部分組
16、成eclipse platform、jdt、cdt和pde。jdt支持java開(kāi)發(fā)、cdt支持c開(kāi)發(fā)、pde用來(lái)支持插件開(kāi)發(fā),eclipse platform則是一個(gè)開(kāi)放的可擴(kuò)展ide,提供了一個(gè)通用的開(kāi)發(fā)平臺(tái)。它提供建造塊和構(gòu)造并運(yùn)行集成軟件開(kāi)發(fā)工具的基礎(chǔ)。eclipse platform允許工具建造者獨(dú)立開(kāi)發(fā)與他人工具無(wú)縫集成的工具從而無(wú)須分辨一個(gè)工具功能在哪里結(jié)束,而另一個(gè)工具功能在哪里開(kāi)始。雖然大多數(shù)用戶很樂(lè)于將 eclipse 當(dāng)作 java ide 來(lái)使用,但 eclipse 的目標(biāo)不僅限于此。eclipse 還包括插件開(kāi)發(fā)環(huán)境(plug-in development enviro
17、nment,pde),這個(gè)組件主要針對(duì)希望擴(kuò)展 eclipse 的軟件開(kāi)發(fā)人員,因?yàn)樗试S他們構(gòu)建與 eclipse 環(huán)境無(wú)縫集成的工具。由于 eclipse 中的每樣?xùn)|西都是插件,對(duì)于給 eclipse 提供插件,以及給用戶提供一致和統(tǒng)一的集成開(kāi)發(fā)環(huán)境而言,所有工具開(kāi)發(fā)人員都具有同等的發(fā)揮場(chǎng)所。 eclipse sdk(軟件開(kāi)發(fā)者包)是eclipse platform、jdt和pde所生產(chǎn)的組件合并,它們可以一次下載。這些部分在一起提供了一個(gè)具有豐富特性的開(kāi)發(fā)環(huán)境,允許開(kāi)發(fā)者有效地建造可以無(wú)縫集成到eclipse platform中的工具。eclipse sdk由eclipse項(xiàng)目生產(chǎn)的工具
18、和來(lái)自其它開(kāi)放源代碼的第三方軟件組合而成。eclipse項(xiàng)目生產(chǎn)的軟件以 gpl發(fā)布,第三方組件有各自自身的許可協(xié)議。 eclipse的基礎(chǔ)是富客戶機(jī)平臺(tái)(rich client platform, 即rcp)。rcp包括下列組件: 核心平臺(tái)(啟動(dòng)eclipse,運(yùn)行插件) osgi(標(biāo)準(zhǔn)集束框架) swt(可移植構(gòu)件工具包) jface(文件緩沖,文本處理,文本編輯器) eclipse工作臺(tái)(即workbench ,包含視圖(views)、編輯器(editors)、視角(perspectives)、和向?qū)В╳izards) eclipse采用的技術(shù)是ibm公司開(kāi)發(fā)的(swt),這是一種基于j
19、ava的窗口組件,類似java本身提供的awt和swing窗口組件;不過(guò)ibm聲稱swt比其他java窗口組件更有效率。eclipse的用戶界面還使用了gui中間層jface,從而簡(jiǎn)化了基于swt的應(yīng)用程序的構(gòu)建。eclipse的插件機(jī)制是輕型軟件組件化架構(gòu)。在富客戶機(jī)平臺(tái)上,eclipse使用插件來(lái)提供所有的附加功能,例如支持java以外的其他語(yǔ) 言。 已有的分離的插件已經(jīng)能夠支持c/c+(cdt)、perl、ruby,python、telnet和數(shù)據(jù)庫(kù)開(kāi)發(fā)。插件架構(gòu)能夠支持將任意的擴(kuò)展加入到 現(xiàn)有環(huán)境中,例如配置管理,而決不僅僅限于支持各種編程語(yǔ)言。eclipse的設(shè)計(jì)思想是:一切皆插件。
20、eclipse核心很小,其它所有功能都以插件的形式附加于eclipse核心之上。eclipse基本內(nèi)核包括:圖形api (swt/jface), java開(kāi)發(fā)環(huán)境插件(jdt ),插件開(kāi)發(fā)環(huán)境(pde)等。第三章 五子棋的相關(guān)知識(shí)3.1五子棋簡(jiǎn)介五子棋是一種兩人對(duì)弈的純策略型棋類游戲,相傳起源于四千多年前的堯帝時(shí)期,比圍棋的歷史還要悠久,可能早在“堯造圍棋”之前,民間就已有五子棋游戲。有關(guān)早期五子棋的文史資料與圍棋有相似之處,因?yàn)楣糯遄悠宓钠寰吲c圍棋是完全相同的。在上古的神話傳說(shuō)中有“女?huà)z造人,伏羲做棋”一說(shuō),增山海經(jīng)中記載:“休輿之山有石焉,名曰帝臺(tái)之棋,五色而文狀鶉卵?!崩钌谱⒁龂?guó)魏邯
21、鄲淳藝經(jīng)中曰:“棋局,縱橫各十七道,合二百八十九道,白黑棋子,各一百五十枚”??梢?jiàn),五子棋頗有淵源。亦有傳說(shuō),五子棋最初流行于少數(shù)民族地區(qū),以后漸漸演變成圍棋并在炎黃子孫后代中遍及開(kāi)來(lái)。這種非游戲容易上手,老少皆宜,而且趣味橫生,引人入勝;不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。在古代,五子棋棋具雖然與圍棋相類同,但是下法卻是完全不同的。正如辭海中所言,五子棋是“棋類游戲,棋具與圍棋相同,兩人對(duì)局,輪流下子,先將五子連成一行者為勝?!?,至于國(guó)人中有將五子棋稱為“連五子”、“連珠”,也許是源于史書(shū)中“日月如合璧,五星如連珠(漢書(shū))”。再說(shuō)說(shuō)“連珠”的起源,連珠源于日本,是日本
22、棋手對(duì)五子棋改良的結(jié)果。據(jù)日本史料文獻(xiàn)介紹,中國(guó)古代的五子棋先由中國(guó)傳到高麗(朝鮮),然后于公元1688年至1704年日本的元祿時(shí)代再?gòu)母啕悅鞯饺毡荆畛踉诨蕦m和貴族大家庭中流行,到元祿末期,開(kāi)始在民間盛行。1899年,經(jīng)過(guò)公開(kāi)征名,“連珠”這一名稱才被正式確定下來(lái)。目前,職業(yè)連珠在國(guó)際發(fā)展迅速,1988年,國(guó)際連珠聯(lián)盟(rif)在瑞典創(chuàng)立,成員國(guó)包括日本、俄羅斯、瑞典、亞美尼亞、阿塞拜疆、愛(ài)沙尼亞、法國(guó)、拉脫維亞、白俄羅斯等9個(gè)國(guó)家,總部設(shè)在瑞典的斯德哥爾摩?,F(xiàn)在全世界已有數(shù)十個(gè)國(guó)家和地區(qū)成為國(guó)際連珠聯(lián)盟的正式會(huì)員,中國(guó)于1996年正式加入。就各國(guó)五子棋的整體水平而言,目前歐洲實(shí)力最強(qiáng),特別
23、是俄羅斯和愛(ài)沙尼亞,而日本是傳統(tǒng)的連珠強(qiáng)國(guó)。中國(guó)的連珠水平則迅猛增長(zhǎng),特別是連珠研究與網(wǎng)絡(luò)連珠水平天下無(wú)敵,但更能確證實(shí)力的要到正式的大賽中加以驗(yàn)證。3.2五子棋基本規(guī)則玩家根據(jù)自身等級(jí)和習(xí)慣,可以自由選擇不同的游戲房間。其游戲規(guī)則也有所不同。詳細(xì)分為三種棋室:普通棋室、國(guó)標(biāo)棋室、職業(yè)棋室。其中普通棋室不受任何規(guī)則限制;國(guó)標(biāo)棋室有禁手規(guī)則限制;而職業(yè)棋室則在國(guó)標(biāo)棋室的基礎(chǔ)上增加“三手交換”和“五手兩打”兩項(xiàng)規(guī)則。(三手交換:是指黑棋下盤(pán)面第3著棋后,白方在應(yīng)白之前,如感覺(jué)黑方棋形不利于己方,可提出交換,即執(zhí)白棋一方變?yōu)閳?zhí)黑棋一方,而黑方不可以不換。五手兩打:是指黑棋在下盤(pán)面上關(guān)鍵的第5手棋時(shí),
24、必須下兩步棋,讓白棋在這兩步棋中任選一步,然后再繼續(xù)對(duì)弈。)國(guó)際比賽規(guī)則規(guī)定:對(duì)局中如黑方出現(xiàn)禁手,白方應(yīng)立即指出禁手點(diǎn),黑方即負(fù)。如白方在黑方出現(xiàn)禁手后,又落一步白子,黑棋禁手則不成立了。 所以 在有禁手的房間里,如果黑方出現(xiàn)禁手,白方應(yīng)立即按下禁手按鈕 。程序會(huì)判黑方負(fù)。如果這時(shí)白方又在棋盤(pán)上落一子,黑棋禁手則不成立了。為了簡(jiǎn)化用戶對(duì)禁手按鈕的使用,也有走禁手就輸和禁手不能落子規(guī)則的房間,顧名思義不多介紹。雖然采取了禁手的限制,黑棋先行仍有優(yōu)勢(shì),黑棋仍可以必勝。所以如果用戶是高段位的棋手,或者想成為高手一定要選擇國(guó)際上比賽選用的比賽標(biāo)準(zhǔn),即“三手交換,五手兩打”。五子棋行棋順序: 黑先、白
25、后,從天元開(kāi)始相互順序落子。五子棋判斷勝負(fù) : 最先在棋盤(pán)橫向、豎向、斜向形成連續(xù)的相同色五個(gè)棋子的一方為勝。 黑棋禁手判負(fù)(lose),白棋無(wú)禁手。黑棋禁手包括“三、三”(double three)(包括“四、三、三”)、“四、四”(double four)(包括“四、四、三”)、“長(zhǎng)連”(overline)。黑棋只能以“四、三”取勝。 如分不出勝負(fù),則定為平局(draw)。 對(duì)局中中途退場(chǎng)判為負(fù)。 五連與禁手同時(shí)形成,先五為勝。 黑方禁手形成時(shí),白方應(yīng)立即指出。若白方未發(fā)現(xiàn)或發(fā)現(xiàn)后未指明而繼續(xù)應(yīng)子,則不能判黑方負(fù)。 時(shí)間限定:每方20分鐘包干,然后1分鐘讀秒。簡(jiǎn)明職業(yè)連珠五子棋比賽規(guī)則的解
26、釋:1 、五子棋是兩個(gè)人之間進(jìn)行的競(jìng)技活動(dòng),由于對(duì)黑方白方規(guī)則不同,黑棋必須先行。2 、五子棋專用盤(pán)為 1515 ,五連子的方向?yàn)闄M、豎、斜。3 、禁手是對(duì)局中被判為負(fù)的行棋手段。白棋無(wú)禁手。 4 、在棋盤(pán)上以對(duì)局雙方均不可能形成五連為和棋。5 、在對(duì)局中,以在盤(pán)上落下的子又拿起來(lái)為拔子,判負(fù)。在對(duì)局中,一方自行終止比賽,判負(fù)。6 、黑方在落下關(guān)鍵的第五子即形成五連的同時(shí),又形成禁手。此時(shí)因黑方已成連五,故禁手失效,黑方勝。7 、所謂黑方形成禁手,是指黑方一子落下同時(shí)形成兩個(gè)或兩個(gè)以上的活三、沖四及長(zhǎng)連禁手。此時(shí),白方應(yīng)立即向黑方指出禁手,自然而勝。第四章 程序設(shè)計(jì)思路4.1 mvc設(shè)計(jì)模式m
27、vc英文即model-view-controller,即把一個(gè)應(yīng)用的輸入、處理、輸出流程按照model、view、controller的方式進(jìn)行分離,這樣一個(gè)應(yīng)用被分成三個(gè)層模型層、視圖層、控制層。 mvc模式視圖(view)代表用戶交互界面,對(duì)于web應(yīng)用來(lái)說(shuō),可以概括為html界面,但有可能為xhtml、xml和 applet。隨著應(yīng)用的復(fù)雜性和規(guī)模性,界面的處理也變得具有挑戰(zhàn)性。一個(gè)應(yīng)用可能有很多不同的視圖,mvc設(shè)計(jì)模式對(duì)于視圖的處理僅限于視圖上數(shù)據(jù)的采集和處理,以及用戶的請(qǐng)求,而不包括在視圖上的業(yè)務(wù)流程的處理。業(yè)務(wù)流程的處理交予模型(model)處理。比如一個(gè)訂單的視圖只接受來(lái)自模型
28、的數(shù)據(jù)并顯示給用戶,以及將用戶界面的輸入數(shù)據(jù)和請(qǐng)求傳遞給控制和模型。模型(model):就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定。業(yè)務(wù)流程的處理過(guò)程對(duì)其它層來(lái)說(shuō)是黑箱操作,模型接受視圖請(qǐng)求的數(shù)據(jù),并返回最終的處理結(jié)果。業(yè)務(wù)模型的設(shè)計(jì)可以說(shuō)是mvc最主要的核心。目前流行的ejb模型就是一個(gè)典型的應(yīng)用例子,它從應(yīng)用技術(shù)實(shí)現(xiàn)的角度對(duì)模型做了進(jìn)一步的劃分,以便充分利用現(xiàn)有的組件,但它不能作為應(yīng)用設(shè)計(jì)模型的框架。它僅僅告訴你按這種模型設(shè)計(jì)就可以利用某些技術(shù)組件,從而減少了技術(shù)上的困難。對(duì)一個(gè)開(kāi)發(fā)者來(lái)說(shuō),就可以專注于業(yè)務(wù)模型的設(shè)計(jì)。mvc設(shè)計(jì)模式告訴我們,把應(yīng)用的模型按一定的規(guī)則抽取出來(lái),抽取的層次很重
29、要,這也是判斷開(kāi)發(fā)人員是否優(yōu)秀的設(shè)計(jì)依據(jù)。抽象與具體不能隔得太遠(yuǎn),也不能太近。mvc并沒(méi)有提供模型的設(shè)計(jì)方法,而只告訴你應(yīng)該組織管理這些模型,以便于模型的重構(gòu)和提高重用性。我們可以用對(duì)象編程來(lái)做比喻,mvc定義了一個(gè)頂級(jí)類,告訴它的子類你只能做這些,但沒(méi)法限制你能做這些。這點(diǎn)對(duì)編程的開(kāi)發(fā)人員非常重要。 業(yè)務(wù)模型還有一個(gè)很重要的模型那就是數(shù)據(jù)模型。數(shù)據(jù)模型主要指實(shí)體對(duì)象的數(shù)據(jù) 保存(持續(xù)化)。比如將一張訂單保存到數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)獲取訂單。我們可以將這個(gè)模型單獨(dú)列出,所有有關(guān)數(shù)據(jù)庫(kù)的操作只限制在該模型中。 控制(controller)可以理解為從用戶接收請(qǐng)求, 將模型與視圖匹配在一起,共同完成用戶
30、的請(qǐng)求。劃分控制層的作用也很明顯,它清楚地告訴你,它就是一個(gè)分發(fā)器,選擇什么樣的模型,選擇什么樣的視圖,可以完成什么樣的用戶請(qǐng)求。控制層并不做任何的數(shù)據(jù)處理。例如,用戶點(diǎn)擊一個(gè)連接,控制層接受請(qǐng)求后, 并不處理業(yè)務(wù)信息,它只把用戶的信息傳遞給模型,告訴模型做什么,選擇符合要求的視圖返回給用戶。因此,一個(gè)模型可能對(duì)應(yīng)多個(gè)視圖,一個(gè)視圖可能對(duì)應(yīng)多個(gè)模型。 模型、視圖與控制器的分離,使得一個(gè)模型可以具有多個(gè)顯示視圖。如果用戶通過(guò)某個(gè)視圖的控制器改變了模型的數(shù)據(jù),所有其它依賴于這些數(shù)據(jù)的視圖都應(yīng)反映到這些變化。因此,無(wú)論何時(shí)發(fā)生了何種數(shù)據(jù)變化,控制器都會(huì)將變化通知所有的視圖,導(dǎo)致顯示的更新。這實(shí)際上是
31、一種模型的變化-傳播機(jī)制。模型、視圖、控制器三者之間的關(guān)系和各自的主要功能。運(yùn)行游戲游戲重置 游戲初始化用戶界面 白棋贏 黑棋贏人先 電腦先電腦黑棋人選白棋人選黑棋電腦白棋 判斷control類控制臺(tái)中心networkhelper網(wǎng)絡(luò)服務(wù)器網(wǎng)絡(luò)服務(wù)器chessmodel類棋子模型內(nèi)嵌方法client類客戶端sever類服務(wù)器端chess類棋子模型gobangbox類交互視圖jpaneup基本控件布局mypanel棋子棋盤(pán)繪制在五子棋mvc模式中control類是整個(gè)程序的靈魂,控制各個(gè)部門(mén)的協(xié)調(diào),及時(shí)反饋各方的信息。在gobangbox是整個(gè)視圖窗口,通過(guò)可視化編輯添加了jpanelup面板。
32、這個(gè)面板初始時(shí)為不可視,在網(wǎng)絡(luò)對(duì)戰(zhàn)模式中,修改為可見(jiàn),以便用戶連接和創(chuàng)建連接網(wǎng)絡(luò)。mypanel是一個(gè)畫(huà)板。用來(lái)繪制棋盤(pán)和棋子。通過(guò)repaint()函數(shù)來(lái)重刷面板。chessmodel類是mvc中的m,即模式,內(nèi)嵌了以棋子為類型的對(duì)象數(shù)組,以及一系列和棋子相關(guān)聯(lián)的操作,例如下棋,悔棋,保存,等。對(duì)象和對(duì)象的操作封裝成一個(gè)chessmodel類得數(shù)據(jù)結(jié)構(gòu)。networkhelper網(wǎng)絡(luò)類是mvc的擴(kuò)展,封裝了客戶端和服務(wù)器端網(wǎng)絡(luò)連接的方法。4.2 程序基本框架4.2.1 單機(jī)五子棋開(kāi)始單機(jī)模式下棋落子刷新mypanel更新chessmodel的狀態(tài)值本地硬盤(pán)文件讀入繪制棋盤(pán),設(shè)置panel背景
33、保存判斷是否五子連珠加載游戲結(jié)束關(guān)閉游戲悔棋默認(rèn)模式who win函數(shù)調(diào)用保存棋子狀態(tài)為硬盤(pán)文件單機(jī)模式的設(shè)計(jì)主要集中在mvc的設(shè)計(jì),以及判斷五子連珠的算法。在gobangbox和control以及mypanel類中都有一個(gè)getinstance函數(shù)來(lái)返回各個(gè)類的實(shí)例對(duì)象。這樣control就可以任意調(diào)用各個(gè)類中的變量和函數(shù)。control類:變量:intusercolour記錄用戶棋子顏色intpartercolour記錄對(duì)方棋子顏色booleanturn在單機(jī)模式中,控制棋子的黑白替換booleansiglemode判斷是否為單機(jī)模式booleannetmode判斷是否為網(wǎng)絡(luò)模式boole
34、anpartputchess在網(wǎng)絡(luò)模式中,判斷是否對(duì)方在下棋booleanenable若對(duì)方在下棋,enable為假,則我方不能下棋booleanisserver判斷是否是服務(wù)器booleanisclient判斷是否是客戶端servers服務(wù)器對(duì)象clientc客戶端對(duì)象controlinstance返回自身實(shí)例句柄主要方法:setture方法由布爾值turn來(lái)控制黑白棋子替換。這個(gè)方法只有在單機(jī)模式才能調(diào)用,在網(wǎng)絡(luò)模式中其無(wú)效。userputchess方法是用戶下棋時(shí)調(diào)用。由control來(lái)調(diào)用chessmodel中的setchess方法,并調(diào)用mypanel中的repaint方法重畫(huà)畫(huà)板。
35、在單機(jī)模式中,用戶每下過(guò)一次子后就要setturn來(lái)替換用戶所持棋子,而在網(wǎng)絡(luò)模式中,要判斷enable是否為真,如果為真才可下子,在另一方為黑子的情況下是不能先下子的。并且在另一方放子之前不能連下兩子。這些都是又enable來(lái)控制的。getusercolour和setusercolour方法是用來(lái)獲得和設(shè)置用戶棋子顏色。reback和restart分別是調(diào)用chessmodel中的悔棋和重新開(kāi)始,并重繪畫(huà)板。respond方法是在網(wǎng)絡(luò)模式中一方請(qǐng)求悔棋時(shí),用戶是否同意悔棋請(qǐng)求。chessmodel類:變量:intblack黑子intwhite白子intspace無(wú)子intwidth棋盤(pán)寬in
36、theight棋盤(pán)高stackst堆棧,若悔棋,入棧chesschessboard棋子數(shù)組,每個(gè)對(duì)象為chess方法:getchess和setchess方法返回和設(shè)置,chessboardrowcol對(duì)象的棋子狀態(tài)。在setchess時(shí)把chessboardrowcol的棋子狀態(tài)入棧。whowin方法判斷是否五子連珠。chesspush把棋子的行列值入棧。chessback棋子的列出棧,行出棧。并把chessboardrowcol的棋子狀態(tài)設(shè)置為space。save()和load()方法用來(lái)保存和載入未完成的棋局。chess類內(nèi)嵌int類型chessstate。把棋子狀態(tài)和棋子有機(jī)綁定。gob
37、angbox類布局結(jié)構(gòu)如下:mypanel類initialize為棋盤(pán)界面的初始化。計(jì)算長(zhǎng)寬值并對(duì)棋盤(pán)添加mousepressed監(jiān)聽(tīng)事件,監(jiān)聽(tīng)用戶的點(diǎn)擊位置,通過(guò)e.getx();和e.gety()來(lái)獲得。drawchess和drawpanel方法畫(huà)棋子和畫(huà)棋盤(pán)。compute方法是在初始時(shí)和用戶變換界面大小時(shí)計(jì)算棋盤(pán)繪制的位置。4.2.2判斷輸贏的算法whowin方法的設(shè)計(jì)從下子的那個(gè)位置,上下左右左上左下右上右下下八個(gè)方位來(lái)判斷是否和新下的子同色。且連色不能中間斷。用j1,j2,j3,j4四個(gè)int值來(lái)記錄連子的個(gè)數(shù),如果個(gè)數(shù)大于等于四個(gè)就返回真值。如果中間出現(xiàn)間斷,則用break跳出循
38、環(huán),不再計(jì)算下個(gè)棋子直接返回假值。4.2.3交互界面的繪制mypanel中的繪制棋盤(pán)函數(shù)。g.drawline在指定位置繪制線。g.drawstring繪制字符串g.filloval繪制圓。背景圖的設(shè)置相對(duì)比較繁瑣。有兩種方式。1.在mypanel中的paintcomponent方法中繪制,調(diào)用畫(huà)圖方法g.drawimage(im,0,0,getwidth(),getheight(),this);且在初始化函數(shù)中初始化im = toolkit.getdefaulttoolkit().getimage(pic/bc.jpg);把im用默認(rèn)工具包來(lái)包裝。2.在gobangbox底層加一個(gè)jlabl
39、e,為jlable加圖像。this.getlayeredpane().add(background, new integer(integer.min_value)設(shè)置jlabel在gobangbox的最底層。并把所有的panel和控件都設(shè)置為透明。把其setopaque設(shè)置為(false);4.2.3設(shè)置悔棋悔棋的設(shè)置使用數(shù)據(jù)結(jié)構(gòu)棧。棧(stack)是操作限定在表的尾端進(jìn)行的線性表。表尾由于要進(jìn)行插入、刪除等操作,所以,它具有特殊的含義,把表尾稱為棧頂(top),另一端是固定的,叫棧底(bottom)。當(dāng)棧中沒(méi)有數(shù)據(jù)元素時(shí)叫空棧(empty stack)。在棧頂插入一個(gè)元素稱為壓?;蛘哌M(jìn)棧,從
40、棧頂刪除一個(gè)元素稱為出棧或者退棧。仍然用線性表的表示方法,則??梢詫?xiě)為:s=(a1,a2,an-1)當(dāng)指定一端為棧頂時(shí),另一端就是棧底。棧底的元素個(gè)數(shù)n稱為棧的長(zhǎng)度。??梢苑譃轫樞驐:玩湕!S靡黄B續(xù)的存儲(chǔ)空間來(lái)存儲(chǔ)棧中的數(shù)據(jù)元素,這樣的棧稱為順序棧(sequence stack)。類似于順序表,用一維數(shù)組來(lái)存放順序棧中的數(shù)據(jù)元素。棧頂指示器top設(shè)在數(shù)組下標(biāo)為0的端,top隨著插入和刪除而變化,當(dāng)棧為空時(shí),top=-1。鏈棧通常用單鏈表來(lái)表示,它的實(shí)現(xiàn)是單鏈表的簡(jiǎn)化。所以,鏈棧結(jié)點(diǎn)的結(jié)構(gòu)與單鏈表結(jié)點(diǎn)的結(jié)構(gòu)一樣,如圖3.3所示。由于鏈棧的操作只是在一端進(jìn)行,為了操作方便,把棧頂設(shè)在鏈表的頭部,
41、并且不需要頭結(jié)點(diǎn)。使用pop()移除堆棧頂部的對(duì)象,并作為此函數(shù)的值返回該對(duì)象。使用push()把項(xiàng)壓入堆棧頂部。在下棋的時(shí)候下子的行列值入棧。表明在此位置有子置入,如果選擇悔棋,則出棧獲取行列值把其值設(shè)置為空。刷新重繪面板即可。4.2.4儲(chǔ)存棋盤(pán)信息和加載java io流的使用流定義: 任何有能力產(chǎn)出數(shù)據(jù)的數(shù)據(jù)源對(duì)象或者有能力接收數(shù)據(jù)的數(shù)據(jù)源對(duì)象。他屏蔽了實(shí)際的i/o設(shè)備處理數(shù)據(jù)的細(xì)節(jié)。流的分類: 按流向分為輸入流和輸出流,下面是對(duì)輸入流和輸出流的定義:輸入流:在java中,可從中讀出一系列字節(jié)的對(duì)象稱為“輸入流”。輸出流:能向其中寫(xiě)入一系列字節(jié)的對(duì)象稱為“輸出流”。 按傳輸單位分為字節(jié)流(
42、stream)結(jié)尾的和字符流(reader和writer); 按功能還可以分為節(jié)點(diǎn)流和過(guò)濾流。 節(jié)點(diǎn)流:負(fù)責(zé)數(shù)據(jù)源和程序之間建立連接;(相當(dāng)于裸槍) 過(guò)濾流:用于給節(jié)點(diǎn)增加功能。(相當(dāng)于功能零部件) 過(guò)濾流的構(gòu)造方式是以其他流位參數(shù)構(gòu)造(這樣的設(shè)計(jì)模式稱為裝飾模式)。注:i/o流是一類很寶貴的資源,使用完后必須調(diào)用close()方法關(guān)閉流并釋放資源。在關(guān)閉流時(shí)只用關(guān)閉最外層的流。 我們將向輸出流寫(xiě)入數(shù)據(jù)信息的叫數(shù)據(jù)源;我們將從輸入流讀取數(shù)據(jù)信息的叫目的地。數(shù)據(jù)源和目的地可以是(而且經(jīng)常)文件,但它們也可能是一個(gè)網(wǎng)絡(luò)連接(),甚至一個(gè)內(nèi)存塊。所有數(shù)據(jù)最終都要保存為一系列字節(jié)。java中以抽象類i
43、nputstream 和outputstreaml來(lái)實(shí)現(xiàn)單字節(jié)的字符。以抽象類reader和writer(它們的子類)來(lái)實(shí)現(xiàn)來(lái)專門(mén)處理采用unicode(每個(gè)字符都使用了雙字節(jié))格式保存的信息。在java中,唯一用來(lái)處理文字輸入的是bufferedreader方法。該方法又含了另一個(gè)方法,名為readline(),可用它讀取整行文本。默認(rèn)情況下,流不會(huì)進(jìn)行緩沖。即每讀一次,都會(huì)要求操作系統(tǒng)提供一個(gè)字節(jié)。通過(guò)bufferedinputstream和bufferedoutputstream對(duì)流構(gòu)建器進(jìn)行過(guò)濾分層,實(shí)現(xiàn)緩沖。用printwriter輸出。并且用bufferedreader包裝優(yōu)化。用
44、out.println向硬盤(pán)中寫(xiě)入文件。用bufferedreader輸入。用bufferedreader包裝優(yōu)化。用in.readline()從硬盤(pán)中的文件讀入信息。4.2.5 tcp網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程的目的就是指直接或間接地通過(guò)網(wǎng)絡(luò)協(xié)議與其他計(jì)算機(jī)進(jìn)行通訊。網(wǎng)絡(luò)編程中有兩個(gè)主要的問(wèn)題,一個(gè)是如何準(zhǔn)確的定位網(wǎng)絡(luò)上一臺(tái)或多臺(tái)主機(jī),另一個(gè)就是找到主機(jī)后如何可靠高效的進(jìn)行數(shù)據(jù)傳輸。在tcp/ip協(xié)議中ip層主要負(fù)責(zé)網(wǎng)絡(luò)主機(jī)的定位,數(shù)據(jù)傳輸?shù)穆酚桑蒳p地址可以唯一地確定internet上的一臺(tái)主機(jī)。而tcp層則提供面向應(yīng)用的可靠的或非可靠的數(shù)據(jù)傳輸機(jī)制,這是網(wǎng)絡(luò)編程的主要對(duì)象,一般不需要關(guān)心ip層是
45、如何處理數(shù)據(jù)的。目前較為流行的網(wǎng)絡(luò)編程模型是客戶機(jī)/服務(wù)器(c/s)結(jié)構(gòu)。即通信雙方一方作為服務(wù)器等待客戶提出請(qǐng)求并予以響應(yīng)??蛻魟t在需要服務(wù)時(shí)向服務(wù)器提出申請(qǐng)。服務(wù)器一般作為守護(hù)進(jìn)程始終運(yùn)行,監(jiān)聽(tīng)網(wǎng)絡(luò)端口,一旦有客戶請(qǐng)求,就會(huì)啟動(dòng)一個(gè)服務(wù)進(jìn)程來(lái)響應(yīng)該客戶,同時(shí)自己繼續(xù)監(jiān)聽(tīng)服務(wù)端口,使后來(lái)的客戶也能及時(shí)得到服務(wù)。下圖是客戶端與服務(wù)器的工作流程。java對(duì)這個(gè)模型的支持有很多種api,而這里我只想介紹有關(guān)socket的編程接口,對(duì)于java而言已經(jīng)簡(jiǎn)化了socket的編程接口。首先我們來(lái)討論有關(guān)提供固定位置的服務(wù)方是如何建立的。java提供了serversocket來(lái)對(duì)其進(jìn)行支持.事實(shí)上當(dāng)你創(chuàng)建
46、該類的一個(gè)實(shí)力對(duì)象并提供一個(gè)端口資源你就建立了一個(gè)固定位置可以讓其他計(jì)算機(jī)來(lái)訪問(wèn)你,serversocket server=new serversocket(6789);這里稍微要注意的是端口的分配必須是唯一的。因?yàn)槎丝谑菫榱宋ㄒ粯?biāo)識(shí)每臺(tái)計(jì)算機(jī)唯一服務(wù)的,另外端口號(hào)是從065535之間的,前1024個(gè)端口已經(jīng)被tcp/ip 作為保留端口,因此你所分配的端口只能是1024個(gè)之后的。好了,我們有了固定位置.現(xiàn)在所需要的就是一根連接線了.該連接線由客戶方首先提出要求。因此java同樣提供了一個(gè)socket對(duì)象來(lái)對(duì)其進(jìn)行支持,只要客戶方創(chuàng)建一個(gè)socket的實(shí)例對(duì)象進(jìn)行支持就可以了。socket cl
47、ient =new socket(inetaddress.getlocalhost(),5678);客戶機(jī)必須知道有關(guān)服務(wù)器的ip地址,對(duì)于著一點(diǎn)java也提供了一個(gè)相關(guān)的類inetaddress 該對(duì)象的實(shí)例必須通過(guò)它的靜態(tài)方法來(lái)提供,它的靜態(tài)方法主要提供了得到本機(jī)ip 和通過(guò)名字或ip直接得到inetaddress的方法。 最開(kāi)始,線程只是用于分配單個(gè)處理器的處理時(shí)間的一種工具。但假如操作系統(tǒng)本身支持多個(gè)處理器,那么每個(gè)線程都可分配給一個(gè)不同的處理器,真正進(jìn)入“并行運(yùn)算”狀態(tài)。從程序設(shè)計(jì)語(yǔ)言的角度看,多線程操作最有價(jià)值的特性之一就是程序員不必關(guān)心到底使用了多少個(gè)處理器。程序在邏輯意義上被分
48、割為數(shù)個(gè)線程;假如機(jī)器本身安裝了多個(gè)處理器,那么程序會(huì)運(yùn)行得更快,毋需作出任何特殊的調(diào)校。 多線程是為了同步完成多項(xiàng)任務(wù),不是為了提高運(yùn)行效率,而是為了提高資源使用效率來(lái)提高系統(tǒng)的效率。線程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候?qū)崿F(xiàn)的。創(chuàng)建線程并使得其可以和網(wǎng)絡(luò)連線取得聯(lián)系。然后由線程來(lái)執(zhí)行剛才的操作,要?jiǎng)?chuàng)建線程要么直接繼承thread要么實(shí)現(xiàn)runnable接口,要建立和socket的聯(lián)系只要傳遞引用就可以了。而要執(zhí)行線程就必須重寫(xiě)run方法,而run方法所做的事情就是剛才單線程版本main所做的事情。類直接從thread類繼承了下來(lái)。并且通過(guò)構(gòu)造函數(shù)傳遞引用和客戶socket建立了聯(lián)系,這樣每
49、個(gè)線程就有了。一個(gè)通訊管道.同樣我們可以填寫(xiě)run方法,把之前的操作交給線程來(lái)完成,這樣多客戶并行的socket就建立起來(lái)了。線程是程序執(zhí)行的基本原子單位, 一個(gè)進(jìn)程可以由多個(gè)線程組成。在分布式編程中,正確使用線程能夠很好的提高應(yīng)用程序的性能及運(yùn)行效率。實(shí)現(xiàn)原理是將一個(gè)進(jìn)程分成多個(gè)線程,然后讓它們并發(fā)異步執(zhí)行,來(lái)提高運(yùn)行效率。并發(fā)執(zhí)行并不是同時(shí)執(zhí)行(占有cpu),任意時(shí)刻還是只能有一個(gè)線程占用cpu,只不過(guò)是它們爭(zhēng)奪cpu頻繁一些,感覺(jué)到他們似乎都在運(yùn)行。多線程是指程序中包含多個(gè)執(zhí)行流,即在一個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線程來(lái)執(zhí)行不同的任務(wù),也就是說(shuō)允許單個(gè)程序創(chuàng)建多個(gè)并行執(zhí)行的線程來(lái)完成各
50、自的任務(wù)。在java中使用socket(套接字)完成tcp程序的開(kāi)發(fā),使用此類可以方便地建立可靠的、雙向的、持續(xù)的、點(diǎn)對(duì)點(diǎn)的通信連接。在socket的程序開(kāi)發(fā)中,服務(wù)器端使用serversocket等待客戶端的連接,對(duì)于java的網(wǎng)絡(luò)程序來(lái)講,每一個(gè)客戶端都使用一個(gè)socket對(duì)象表示。4.2.6 網(wǎng)絡(luò)五子棋開(kāi)始網(wǎng)絡(luò)對(duì)戰(zhàn)模式服務(wù)器繪制棋盤(pán),設(shè)置panel背景使jpaneup可視化顯示按鈕等基本控件等待連接選擇棋子選擇創(chuàng)建連接按鈕開(kāi)始網(wǎng)絡(luò)對(duì)戰(zhàn)模式客戶端繪制棋盤(pán),設(shè)置panel背景使jpaneup可視化顯示按鈕等基本控件連接端口號(hào)為客戶端創(chuàng)建的端口對(duì)方棋子反饋選擇連接按鈕在五子棋網(wǎng)絡(luò)編程中添加了三
51、個(gè)類。client類,server類和networkhelper類,server類服務(wù)器類,有networkhelpe類的對(duì)象,以net.listen()函數(shù)調(diào)用networkhelpe類來(lái)監(jiān)聽(tīng)是否有客戶端連接。client類是客戶端類。有networkhelpe類的對(duì)象,通過(guò)control實(shí)例的setcolor布爾值來(lái)判斷是否服務(wù)器已設(shè)置過(guò)棋子顏色。通過(guò)control實(shí)例的partputchess布爾值來(lái)判斷是否服務(wù)器在下子狀態(tài)。在networkhelper類中,封裝了與網(wǎng)絡(luò)連接相關(guān)的各個(gè)函數(shù)和變量。變量:intport連接的端口號(hào)threadthread線程printwriterout輸出
52、流bufferedreaderin緩沖輸入流socketsocket套接字serversocketser服務(wù)器和端口綁定對(duì)象方法:listen()為服務(wù)器調(diào)用的函數(shù),監(jiān)聽(tīng)到連接請(qǐng)求,在accept()后建立基本連接。out.println是向另一端發(fā)送消息,建立線程使其后臺(tái)運(yùn)行。connect()為客戶端調(diào)用的函數(shù),socket = new socket(ip, port);輸入服務(wù)器占用的端口號(hào)進(jìn)行連接,建立線程使其后臺(tái)運(yùn)行。parse()函數(shù)是線程的run函數(shù)調(diào)用的,依次讀每一行消息,用line.startswith提取關(guān)鍵字。用line.split( )以空格split分開(kāi)字符串存在va
53、lue數(shù)組中便于程序調(diào)用。悔棋有一套較為復(fù)雜的消息傳送機(jī)制。提出悔棋請(qǐng)求的一方向另一方發(fā)送asking請(qǐng)求。以joptionpane.showconfirmdialog的形式得到反饋,若同意向請(qǐng)求方發(fā)送agreed請(qǐng)求,不同意則向請(qǐng)求方發(fā)送disgreed請(qǐng)求。請(qǐng)求方解析反饋,執(zhí)行相應(yīng)的代碼。服務(wù)器端棋子顏色的選擇也決定下棋的先后順序,所以如果服務(wù)器端選擇的是黑棋,則在客戶端中control實(shí)例中的enable為假,即白棋端不能放子。如果服務(wù)器端選擇的是白棋,則服務(wù)器端中的enable為假。在每次對(duì)方放子時(shí),另一方進(jìn)入waiting消息機(jī)制中,其enable為假,只能等待,不能下子。消息機(jī)制執(zhí)
54、行操作putchess服務(wù)器和客戶端下棋消息waiting在一方下子時(shí),另一方應(yīng)等待。不能執(zhí)行下子。設(shè)置enable為假asking提出悔棋請(qǐng)求agreed反饋同意悔棋請(qǐng)求disgreed反饋不同意悔棋請(qǐng)求chesscolour服務(wù)器方選擇棋子顏色消息。間接決定客戶端方的棋子顏色rebanken在一方悔棋后,悔棋方重新下子,另一方的不能放子,其enable為假restart一方選擇重新開(kāi)始,另一方自動(dòng)重新開(kāi)始。第五章 在windows平臺(tái)下的發(fā)布與效果展示單機(jī)界面:判斷輸贏:保存棋局:加載棋局:網(wǎng)絡(luò)對(duì)戰(zhàn)界面:服務(wù)器方通知客戶端選子:一方提出悔棋請(qǐng)求:另一方反饋是否同意悔棋(單擊確定重刷界面):第六章 總結(jié)與展望通過(guò)這次對(duì)java的學(xué)習(xí),讓我漸漸體會(huì)到了java的博大精深。以及怎么學(xué)習(xí)java,怎么學(xué)習(xí)計(jì)算機(jī)語(yǔ)言,怎樣對(duì)問(wèn)題進(jìn)行解決和運(yùn)用java gui,查找java api的使用都用了更進(jìn)一步的理解。在文檔方面,完成了這次的課程設(shè)計(jì),我們了解到了課程設(shè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 金融科技下知識(shí)產(chǎn)權(quán)融資的實(shí)踐與探索
- 個(gè)人住房抵押貸款合同
- 中外雙方進(jìn)出口合同范本
- 二手房全款交易合同范本
- 個(gè)人租賃倉(cāng)儲(chǔ)空間的合同范本
- 中外合作研發(fā)合同范本(人工智能)
- 專業(yè)技術(shù)人才培養(yǎng)合作合同
- 產(chǎn)業(yè)投資合作協(xié)議合同模板
- 主要農(nóng)作物新品種推廣合同示范文本
- 個(gè)人與合作方倉(cāng)儲(chǔ)運(yùn)輸合同例文
- 測(cè)繪工程產(chǎn)品價(jià)格表匯編
- 拘留所教育課件02
- 語(yǔ)言和語(yǔ)言學(xué)課件
- 《工作場(chǎng)所安全使用化學(xué)品規(guī)定》
- 裝飾圖案設(shè)計(jì)-裝飾圖案的形式課件
- 2022年菏澤醫(yī)學(xué)??茖W(xué)校單招綜合素質(zhì)考試筆試試題及答案解析
- 護(hù)理學(xué)基礎(chǔ)教案導(dǎo)尿術(shù)catheterization
- ICU護(hù)理工作流程
- 廣東版高中信息技術(shù)教案(全套)
- 市政工程設(shè)施養(yǎng)護(hù)維修估算指標(biāo)
- 分布式光伏屋頂調(diào)查表
評(píng)論
0/150
提交評(píng)論