java五子棋畢業(yè)設(shè)計(jì)論文_第1頁(yè)
已閱讀1頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  摘 要</b></p><p>  人工智能是一門(mén)正在迅速發(fā)展的新興的,綜合性很強(qiáng)的交叉科學(xué)。它與生物工程、空間技術(shù)一起被并列為二十一世界三大尖端技術(shù)。它的中心任務(wù)是研究如何使計(jì)算機(jī)去做那些過(guò)去只能靠人的智力才能做的工作。目前各發(fā)達(dá)國(guó)家都把人工智能作為重點(diǎn)項(xiàng)目,列入本國(guó)的高科技發(fā)展計(jì)劃當(dāng)中,投入巨大的人力和物力。</p><p>  計(jì)

2、算機(jī)人機(jī)對(duì)弈也是其中之一。作為人智能研究的一個(gè)重要分支,計(jì)算機(jī)博弈是檢驗(yàn)人工水平的一個(gè)重要方面。它的研究為人工智能帶來(lái)了很多重要的方法和理論,產(chǎn)生了廣泛的社會(huì)影響和學(xué)術(shù)影響。</p><p>  五子棋人機(jī)對(duì)弈是計(jì)算機(jī)博弈中的一種。研究其計(jì)算機(jī)算法,可以讓我們看到人工智能的稚形,也有助于我們?nèi)四X的開(kāi)發(fā)。五子棋是我國(guó)發(fā)明的,研究它可以讓更多的外國(guó)人了解五子棋,這有助于我國(guó)優(yōu)秀文化的推廣。</p>&l

3、t;p>  關(guān)鍵詞:人工智能,計(jì)算人機(jī)對(duì)弈,五子棋,算法</p><p><b>  Abstract</b></p><p>  Artificial intelligence is a rapidly developing new, integrated a strong Frontier Science. It is with bio-engineerin

4、g, space technology has been listed as 21 in the world along with the three cutting-edge technology. Its central task is to study how to make the computer do that in the past to rely on human intelligence to do. AI is cu

5、rrently regarded as the focus of the developed countries included in this car's high-tech development projects invested tremendous human and material resources. </p><p>  Key words: Artificial Intelli

6、gence, Man-machine Cchess Computer, </p><p>  Man-machine Chess, Algorithm</p><p><b>  目 錄</b></p><p><b>  摘 要Ⅰ</b></p><p>  AbstractⅡ</p&

7、gt;<p>  目錄 .......................................................................................................................... Ⅲ</p><p>  緒論 ...................................................

8、............................................................ 1</p><p>  需求分析 ....................................................................................................... 2</p><p>  2.

9、1 業(yè)務(wù)需求 ................................................................................................ 2</p><p>  2.2 性能需求 ...................................................................................

10、............. 2</p><p>  2.3 系統(tǒng)平臺(tái)需求 ........................................................................................ 2</p><p>  五子棋相關(guān)基礎(chǔ) ..................................................

11、......................................... 4</p><p>  3.1 五子棋解釋 ............................................................................................ 4</p><p>  3.2 五子棋的基本規(guī)則 ..............

12、.................................................................. 4</p><p>  3.3 五子棋的常用術(shù)語(yǔ) ................................................................................ 5</p><p>  開(kāi)發(fā)工具、環(huán)境及其技術(shù)

13、 ........................................................................... 7</p><p>  4.1 Java簡(jiǎn)介 ................................................................................................. 7</p>

14、;<p>  4.2 Java編程環(huán)境 ......................................................................................... 9 </p><p>  程序設(shè)計(jì)思路與實(shí)現(xiàn) ....................................................................

15、............. 10</p><p>  5.1 程序設(shè)計(jì)思路 ...................................................................................... 10</p><p>  5.2 程序設(shè)計(jì) .................................................

16、............................................. 13</p><p>  結(jié)論 ........................................................................................................................... 33</p><p>

17、;  參考文獻(xiàn) ....................................................................................................................</p><p>  致謝 ......................................................................

18、......................................................</p><p>  附錄 ............................................................................................................................</p><

19、p><b>  第一章:緒論</b></p><p><b>  1.1 前 言</b></p><p>  電腦已經(jīng)深入到日常工作和生活的方方面面,比如文字處理、信息管理、輔助設(shè)計(jì)、圖形圖像處理、教育培訓(xùn)以及游戲娛樂(lè)等。Windows系統(tǒng)的推出使電腦從高雅的學(xué)術(shù)殿堂走入了尋常百姓家,各行各業(yè)的人們無(wú)須經(jīng)過(guò)特別的訓(xùn)練就能夠使用電腦完成許許

20、多多復(fù)雜的工作。然而,雖然現(xiàn)在世界上已經(jīng)充滿了花樣繁多的各種軟件,但它們依然不能滿足用戶的各種特殊需要,人們還不得不開(kāi)發(fā)適合自己特殊需求的軟件。Java語(yǔ)言作為一種面向?qū)ο蟮木幊陶Z(yǔ)言,具有分布式,可移植,高性能,多線程等特點(diǎn)。通過(guò)系統(tǒng)的學(xué)習(xí),人們就可以使用它開(kāi)發(fā)出功能齊全,滿足特殊需求的應(yīng)用程序。Java語(yǔ)言易學(xué)易用,對(duì)學(xué)習(xí)者掌握技能,開(kāi)拓思維都有很大的幫助。 我作為一名學(xué)生,在系統(tǒng)的學(xué)習(xí)了Java語(yǔ)言之后,經(jīng)常用它搞一些小程序。

21、這次畢業(yè)設(shè)計(jì),正好將學(xué)過(guò)的Java語(yǔ)言中的各種技術(shù)綜合起來(lái),用Jbuilder2006開(kāi)發(fā)工具編寫(xiě)一個(gè)小游戲,既對(duì)自己學(xué)過(guò)的技能進(jìn)行一次檢驗(yàn),也能系統(tǒng)地將學(xué)過(guò)的知識(shí)復(fù)習(xí)鞏固。</p><p>  隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)技術(shù)的普及范圍越來(lái)越廣,網(wǎng)絡(luò)能夠提供的服務(wù)多樣、便捷,已經(jīng)成為人們生產(chǎn)生活中不可缺少的重要組成部分。如今網(wǎng)絡(luò)休閑游戲發(fā)展迅速,它憑借健康、方便、互動(dòng)性強(qiáng)、益智等諸多優(yōu)點(diǎn),成為大部分現(xiàn)代人休閑

22、娛樂(lè)的首選。</p><p>  網(wǎng)絡(luò)五子棋游戲是使用Java語(yǔ)言開(kāi)發(fā)的一款游戲。它使用SOCKET建立連接,多線程處理數(shù)據(jù),以及可嵌入網(wǎng)絡(luò)瀏覽器的ALET作為客戶端,這些特點(diǎn)使這款游戲無(wú)論是服務(wù)器還是客戶端的實(shí)現(xiàn)都相對(duì)容易。通過(guò)對(duì)該軟件的編寫(xiě),還可以鞏固我們對(duì)以上各種知識(shí)的掌握和理解。</p><p><b>  第二章 需求分析</b></p>&l

23、t;p>  為了開(kāi)發(fā)出真正滿足用戶需求量的軟件產(chǎn)品,首先必須知道用戶的需求。軟件需求中包括了多個(gè)方面來(lái)說(shuō)明用戶需求。在這一章中,主要從以下幾方面來(lái)說(shuō)明系統(tǒng)的需求。</p><p><b>  2.1業(yè)務(wù)需求</b></p><p>  2.1.1 此系統(tǒng)使用范圍要求</p><p>  此系統(tǒng)為智力游戲,適合于各類(lèi)游戲愛(ài)好者。由于其經(jīng)典性

24、及其游戲的簡(jiǎn)單性,各類(lèi)人士都可以也都愛(ài)玩。人們?cè)谂c電腦對(duì)戰(zhàn)享受娛樂(lè)的同時(shí),也會(huì)體會(huì)到自己的智力也會(huì)有所提升。</p><p>  2.1.2 功能要求</p><p>  該款游戲主要由一下幾個(gè)模塊組成:</p><p>  人機(jī)對(duì)弈模式:選擇該模式可以實(shí)現(xiàn)人與電腦之間的對(duì)弈,電腦會(huì)智能的選擇該在哪處下子,并會(huì)在每次下棋結(jié)束后判斷是否有哪方已經(jīng)獲勝,如果獲勝則結(jié)束本

25、局游戲,并提示玩家游戲結(jié)束。</p><p>  人人對(duì)弈模式:選擇該模式可以實(shí)現(xiàn)人與人之間的對(duì)弈,系統(tǒng)會(huì)提示哪方先下,然后玩家之間交替的下棋,同樣系統(tǒng)會(huì)在下完每次棋后判斷是否有哪方已經(jīng)獲勝,如果獲勝則結(jié)束本局游戲,并提示玩家游戲結(jié)束。</p><p>  悔棋功能:這個(gè)功能也是根據(jù)游戲的實(shí)際需求而存在的,在現(xiàn)實(shí)生活中難免有失誤下錯(cuò)了棋,那么就需要悔棋。此功能提供了悔棋功能,使得下棋的靈活

26、性有所提高。玩家若想悔棋,則只需選擇悔棋按鈕便可以重新下過(guò)剛才的棋。</p><p>  更換棋盤(pán)背景:次功能可以根據(jù)玩家的愛(ài)好任意更換棋盤(pán)的背景顏色,由于每個(gè)人對(duì)顏色的喜好不一樣,因此這個(gè)功能也是非常必需的。也行更換一種玩家所喜歡的顏色,玩家能發(fā)揮得更好。</p><p><b>  2.2 性能需求</b></p><p>  該款五子棋游

27、戲功能雖然簡(jiǎn)單,但最主要的還是實(shí)現(xiàn)了人人對(duì)弈模式和人機(jī)對(duì)弈兩種模式,所以從這個(gè)角度來(lái)說(shuō),該款游戲需要能很好的在兩種模式間良好的轉(zhuǎn)換。雖然系統(tǒng)不大,但要在滿足玩家的基本要求的情況下,電腦有一定的智能,能給于新手一定的幫助。</p><p>  2.3 系統(tǒng)平臺(tái)需求</p><p><b>  編程語(yǔ)言:JAVA</b></p><p>  操作系

28、統(tǒng):Windows xp系列</p><p>  開(kāi)發(fā)工具:Myeclipse</p><p>  第三章 五子棋的相關(guān)基礎(chǔ)</p><p><b>  3.1五子棋解釋</b></p><p>  引用《辭?!分兴裕遄悠迨恰捌孱?lèi)游戲,棋具與圍棋相同,兩人對(duì)局,輪流下子,先將五子連成一行者為勝?!?。五子棋的名稱:日文

29、亦有“連五子、五子連、串珠、五目、五目碰、五格、五石、五法、五聯(lián)、京棋”等多種稱謂,英文則稱之為FIR (Five In A Row的縮寫(xiě))、Gomoku(日語(yǔ)“五目”的羅馬拼音)、Gobang、connect 5、mo-rphion。捷克語(yǔ)piskvorky,韓語(yǔ)omok、韓國(guó)人還稱之為情侶棋。</p><p>  3.2五子棋基本規(guī)則</p><p>  1.五子棋行棋時(shí),黑棋先下第一

30、子,由天元開(kāi)始,后白棋在黑棋周?chē)慕徊纥c(diǎn)的落子。接著黑方再以天元中心的25個(gè)交叉點(diǎn)的范圍內(nèi)落盤(pán)面的第三子,之后黑白雙方相互順序子。</p><p>  2.最先在棋盤(pán)線交點(diǎn)橫向,縱向,斜向形成已方的五個(gè)棋子連續(xù)的一方為勝。</p><p>  3.出現(xiàn)禁手對(duì)方指出后將判負(fù),其中包括兩個(gè)或兩個(gè)以上的活三,活四,長(zhǎng)連均稱之為禁手。</p><p>  4.禁手只對(duì)黑棋有

31、效,白棋無(wú)禁手。</p><p>  5.黑方禁手形成時(shí),白方需立即指出,黑方將被判負(fù)。若白方未發(fā)現(xiàn)黑方禁手存在而繼續(xù)應(yīng)子,其后指出黑方禁手不能判黑方負(fù)。</p><p>  6.黑方連五與禁手同時(shí)形成,因黑方已連成五即黑方已獲勝,故禁手規(guī)則失效。</p><p>  7.在對(duì)局中,在盤(pán)上落下的子又拿起來(lái),此動(dòng)作稱為拔子,若拔子將被判為負(fù)。</p>&

32、lt;p>  8.在對(duì)局中棋子掉落在棋盤(pán)上將被判負(fù)。若推子或蹭子,以盤(pán)面第一落點(diǎn)為準(zhǔn)。用手將棋子推正不算違犯規(guī)則。</p><p>  9.在對(duì)局中,一方自行中止比賽如:中途退場(chǎng),將被判負(fù)。</p><p>  10.在對(duì)局中對(duì)方宣布認(rèn)輸,本局獲勝。</p><p>  11.超過(guò)比賽規(guī)定所用時(shí)間限制,將被判為負(fù):正式比賽期間,遲到時(shí)間超過(guò)比賽容許時(shí)間將被判負(fù)

33、。</p><p>  12.如下至最終一子仍不分勝負(fù)則定為平局。</p><p>  13.中盤(pán)期間雙方 同意和局提議,判定為平局。</p><p>  3.3五子棋常用術(shù)語(yǔ)</p><p>  1.著:也稱“步”。對(duì)局中把一個(gè)棋子按照規(guī)則放到某一交叉點(diǎn),稱之為一著棋。一著是否完成有兩種規(guī)則:</p><p>  (

34、1)在執(zhí)行落子無(wú)悔規(guī)則是,以行棋者的手離開(kāi)棋子為一著已完成。</p><p>  (2)在執(zhí)行限時(shí)規(guī)則時(shí),以行棋者按下棋鐘作為一著已完成。</p><p>  2.PASS :五子棋中引入的英文名稱,即應(yīng)該行棋的一方主動(dòng)放棄此次行棋的機(jī)會(huì),由對(duì)方繼續(xù)行棋。</p><p>  3.先手:對(duì)方必須應(yīng)答的著法,如對(duì)方形成活三必須阻止其形成活四。</p>&

35、lt;p>  4.絕對(duì)先手:相對(duì)先手而言,即形成同色連四或嵌五,對(duì)方必須應(yīng)著,就是絕對(duì)先手。絕對(duì)先手又叫“沖”。</p><p>  5.VCF:(Victory of Continus Four 的縮寫(xiě)) 意思是利用連續(xù)沖四取勝之意。利用連續(xù)不斷的沖四或嵌五的絕對(duì)先手,制止形成連五獲得勝利的一種方法。在對(duì)局接近尾聲或排局解題中一種常見(jiàn)的取勝技巧。</p><p>  6.追下取勝:

36、是指白棋利用黑棋禁手取勝的戰(zhàn)術(shù)。白1 沖四,迫使黑2 形成“四、四”禁手( 即沖四,活四禁手), 這種取勝方法叫做追下取勝。</p><p>  7.自由取勝:追下取勝以外的取勝方法,即未利用黑棋禁手戰(zhàn)術(shù)而取勝。</p><p>  8.一子雙殺:是指對(duì)局中一方落子后出現(xiàn)兩個(gè)叫殺點(diǎn)即兩個(gè)獲勝點(diǎn),而使對(duì)方無(wú)法防守的情形。一般是有兩個(gè)沖四活三點(diǎn),白棋的雙活三,雙四均可稱為一子雙殺。</p

37、><p>  9.陽(yáng)線:棋盤(pán)上可見(jiàn)的橫線與直線的總稱。</p><p>  10.陰線:也稱“斜線”。是棋盤(pán)上不可見(jiàn)的斜行線。</p><p>  11.“四、三”:指同時(shí)具備兩個(gè)先手,其中一個(gè)四,另一個(gè)是活三。</p><p>  12.“活三”、“嵌五”、“沖四”:參見(jiàn)五子棋重要棋形講座。</p><p>  13.

38、禁手:對(duì)局中禁止使用的戰(zhàn)術(shù)或被判為負(fù)的行棋手段。</p><p>  14. 開(kāi)局:也稱“布局”。布局階段大體為七至十幾著之內(nèi)。種類(lèi)繁多,職業(yè)連珠五子棋有二十四種開(kāi)局。    </p><p>  15. 局面:亦稱“局勢(shì)”。為對(duì)局中某一段時(shí)間內(nèi)雙方子力的配置情況。</p><p>  16. 優(yōu)勢(shì):是指足以取勝的優(yōu)勢(shì)局面,其對(duì)方即為敗

39、勢(shì)。</p><p>  17. 妙著:對(duì)局中走出的一步精妙的著法。既合乎邏輯又出人意料,有使局面頓時(shí)改觀的效果,對(duì)局勢(shì)的發(fā)展及對(duì)局的質(zhì)量都有重大影響。</p><p>  18. 好著:也稱“佳著”。對(duì)局中成功的某一步。</p><p>  19. 正著:對(duì)局的某一局面中的正確著法。</p><p>  20. 劣著:對(duì)局中,導(dǎo)致嚴(yán)重不利后

40、果的一步錯(cuò)誤著法。</p><p>  21. 敗著:也稱“失著”“漏著”。對(duì)局中造成局面惡化的一步嚴(yán)重錯(cuò)誤著法。</p><p>  22. 等著:對(duì)局中具有等待性的一步著法,主要意圖是等待有利時(shí)機(jī)。</p><p>  23. 廢著:也稱“空著”。對(duì)局中不起作用的著法。實(shí)際上指浪費(fèi)時(shí)間毫無(wú)疑義的錯(cuò)著。</p><p>  24. 搶先:對(duì)

41、局中利用反活三或沖四的強(qiáng)制手段奪取主動(dòng)權(quán)的著法。</p><p>  25. 打譜:按照棋譜演練著法,是提高棋藝水平的重要方法之一。</p><p>  26. 復(fù)局:也叫“復(fù)著”。對(duì)局結(jié)束又重演對(duì)局的過(guò)程。一般用以研究、比較雙方的成敗得失和著法的優(yōu)劣。</p><p>  第四章 開(kāi)發(fā)工具、環(huán)境及其技術(shù)</p><p>  4.1 J

42、AVA簡(jiǎn)介</p><p><b>  JAVA技術(shù)介紹:</b></p><p>  Java技術(shù)是一門(mén)編程語(yǔ)言,也是一個(gè)平臺(tái),它基于Java虛擬機(jī)技術(shù),借助這個(gè)東西建立了跨平臺(tái)的優(yōu)勢(shì)。(題外話:Java熱門(mén)的原因之一就是一個(gè)跨平臺(tái)的概念,和跨平臺(tái)類(lèi)似跨瀏覽器的好處也是如此,這也是現(xiàn)在AJAX技術(shù)流行的原因之一。另外現(xiàn)在熱炒的RIA富客戶端的概念下的技術(shù)除了AJAX

43、外還有Adobe的Flash/Flex,微軟的Silver Light,SUN的JavaFX等,個(gè)人更看好FLash/Flex,原因是Flash插件在瀏覽器端占用率很高)</p><p>  Java技術(shù)的重要性就不講了,從最近流行的一個(gè)統(tǒng)計(jì)數(shù)據(jù)上來(lái)說(shuō),目前世界上編程語(yǔ)言Java 、C 、VB、C++依次排名前4位,這排名本身不說(shuō)明什么,至少也是工業(yè)界對(duì)編程語(yǔ)言使用上一個(gè)側(cè)面的反映吧。</p>&l

44、t;p>  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)。這段是摘自網(wǎng)上的,編譯原理學(xué)的不是很好,對(duì)這門(mén)語(yǔ)言的背后運(yùn)行機(jī)制理解到這樣了。</p><p>  Java平臺(tái)是一種純軟

45、件平臺(tái),它有三個(gè)版本Java SE、JavaEE、Java ME。</p><p>  Java SE(Java Platform,Standard Edition)這個(gè)版本以前叫做J2SE,后來(lái)版本號(hào)從1.4直接跳到5.0,其實(shí)也就是1.5,所以就叫成Java SE 5.0。目前Java開(kāi)發(fā)人員使用較多的版本是5.0,當(dāng)然還有Java SE 6.0這個(gè)更新的版本。它允許開(kāi)發(fā)和部署在桌面、服務(wù)器、嵌入式環(huán)境和實(shí)時(shí)

46、環(huán)境中使用的Java 應(yīng)用程序。Java SE還包含了支持Java Web服務(wù)開(kāi)發(fā)的類(lèi),并為Java EE這個(gè)版本提供基礎(chǔ)。</p><p>  雖說(shuō)桌面應(yīng)用程序,Java一直不被看好,但也稍微提一下,負(fù)責(zé)桌面GUI開(kāi)發(fā)的類(lèi)庫(kù)我知道的有:JDK自帶的主要是AWT/SWING這個(gè)Java原生類(lèi)庫(kù);也可以使用IBM的SWT/JFace這個(gè)第三方類(lèi)庫(kù)。開(kāi)發(fā)工具我了解的有:NetBeans(最近已經(jīng)是6.0final版了

47、,做GUI有使用VB的感覺(jué)),Eclipse(SWT/JFace這個(gè)項(xiàng)目其實(shí)就是做Eclipse項(xiàng)目時(shí)擴(kuò)展出來(lái)的,所以對(duì)SWT/JFace支持的也不錯(cuò))。</p><p>  Java EE(Java Platform,Enterprise Edition)這個(gè)版本以前叫做J2EE,也就是大家可能聽(tīng)得比較多的,也是Java比較流行的領(lǐng)域,Java的企業(yè)級(jí)版本。Java EE下有很多流行的開(kāi)發(fā)框架,像Struts、

48、Spring、Hibernate這種流行的所謂SSH組合等。</p><p>  根據(jù)項(xiàng)目大小、應(yīng)用領(lǐng)域,技術(shù)平臺(tái)的選擇面還是很多的,除了Java EE,還有.Net,LAMP組合(Linux、Apatch、MySql、PHP組合),相對(duì)來(lái)說(shuō)比較新Ruby在Ruby on Rails的框架應(yīng)用,后兩者可能在相對(duì)來(lái)說(shuō)比較輕量級(jí)的Web領(lǐng)域運(yùn)用成功案例比較多,更重量的企業(yè)級(jí)潛力還有待挖掘。</p>&l

49、t;p>  Java ME(Java Platform,Micro Edition)這個(gè)版本以前叫做J2ME。應(yīng)用領(lǐng)域像各種移動(dòng)設(shè)備和嵌入式設(shè)備,比如:手機(jī)、PDA、電視機(jī)頂盒和打印機(jī)。</p><p>  Java ME不是太熟悉,不過(guò)移動(dòng)設(shè)備和嵌入式設(shè)備的開(kāi)發(fā)個(gè)人覺(jué)得算是比較有意思的領(lǐng)域,最近比較矚目的業(yè)界新聞?dòng)幸粋€(gè)就是Google發(fā)布開(kāi)源智能手機(jī)操作系統(tǒng)開(kāi)發(fā)平臺(tái)Android,也就是前一陣子炒得很火的

50、GPhone(原來(lái)Google出的不是手機(jī),而是一個(gè)手機(jī)操作系統(tǒng)開(kāi)發(fā)平臺(tái))。這個(gè)平臺(tái)貌似會(huì)對(duì)Java ME有些沖擊,按照網(wǎng)上的消息,Android包括:1、高度定制的Linux操作系統(tǒng)內(nèi)核及智能手機(jī)硬件驅(qū)動(dòng)支持;2、經(jīng)過(guò)Google修改過(guò)的Java虛擬機(jī)Dalvik,這里的性能比SUN的Hotspot高,支持大部分Java核心類(lèi)庫(kù);3、大量智能手機(jī)開(kāi)發(fā)核心類(lèi)庫(kù);4、大量現(xiàn)成的智能手機(jī)應(yīng)用軟件;5、基于Eclipse的開(kāi)發(fā)環(huán)境。也是按照網(wǎng)

51、上的說(shuō)法,Java EE提供了統(tǒng)一的編程平臺(tái),但不能調(diào)用操作系統(tǒng)的資源;而Android下直達(dá)操作系統(tǒng),上直達(dá)應(yīng)用軟件,如:瀏覽器、日歷、地圖等。</p><p>  Java開(kāi)發(fā)工具很多,個(gè)人使用的IDE有Eclipse和NetBeans。Eclispe比較流行,各種插件也多,當(dāng)然用起來(lái)也不錯(cuò);NetBeans現(xiàn)在也是越做越好了,介紹這兩個(gè)IDE主要是開(kāi)源的,當(dāng)然還有其它工具如JBuilder、IntelliJ

52、、JCreator。這些IDE各有優(yōu)勢(shì)劣勢(shì),根據(jù)你開(kāi)發(fā)的項(xiàng)目來(lái)選擇了。</p><p>  4.2 JAVA 編程環(huán)境:</p><p>  4.2.1 環(huán)境變量</p><p>  java(TM) SE Development Kits,即JDK。 </p><p><b>  設(shè)置環(huán)境變量:</b></p&g

53、t;<p>  右擊 我的電腦->屬性->高級(jí)->環(huán)境變量,這時(shí)候可以看到以下的環(huán)境變量:Path:系統(tǒng)在任何路徑下都可以識(shí)別Java命令。</p><p>  classPath:為Java加載類(lèi)(包括class,lib)的路徑,只有類(lèi)在classPath中,Java命令才能識(shí)別。</p><p>  JAVA_HOME:Java的安裝路徑。</p&

54、gt;<p>  這三個(gè)變量是必須正確設(shè)置的,否則Java命令將可能不會(huì)正常運(yùn)行,具體設(shè)置如下:</p><p>  Path:  ;C:\Progran Files\java\jdk1.6.0_01\bin </p><p>  classpath:  .;Progran Files\java\jdk1.6.0_01\lib\dt.jar;Progran

55、 Files\java\jdk1.6.0_01\lib\tools.jar </p><p>  JAVA_HOME:  Progran Files\java\jdk1.6.0_01</p><p>  4.2.2 Eclipse插件 </p><p>  XMLBuddy:編輯xml文件;下載地址為 http://www.xmlbuddy.com。 &

56、lt;/p><p>  Fat Jar:打包插件,可以方便的完成各種打包任務(wù),可以包含外部的包等。</p><p>  Log4E:Log4j插件,提供各種與log4j相關(guān)的任務(wù),Log4j專用于為程序輸入調(diào)試信息。</p><p>  Lomboz:Ecilpse的一個(gè)J2EE的插件,可以將很多java應(yīng)用服務(wù)器,J2EE組件和web應(yīng)用開(kāi)發(fā)集成到Eclipse中,可

57、以幫助Java開(kāi)發(fā)者使用Eclipse建立,測(cè)試和部署J2ee應(yīng)用。支持jsp編寫(xiě),包括語(yǔ)法著色和語(yǔ)法檢查:。</p><p>  MyEclipse:J2EE開(kāi)發(fā)插件,支持jsp,EJB,數(shù)據(jù)庫(kù)操作。</p><p>  (6) TomcatPlugin:支持Tomcat插件。</p><p>  第五章 程序設(shè)計(jì)思路與實(shí)現(xiàn)</p><p&g

58、t;  5.1程序設(shè)計(jì)思路</p><p>  5.1.1.設(shè)計(jì)思想</p><p>  1.本程序要實(shí)現(xiàn)五子棋的游戲功能,必須先有一個(gè)棋盤(pán),所以,通過(guò)繼承JPanel,然后在JPanel上畫(huà)出一個(gè)17*17的棋盤(pán),另外還有三個(gè)按鈕:重新開(kāi)局、請(qǐng)黑方下子和請(qǐng)白方下子,提醒用戶進(jìn)行相應(yīng)的操作。當(dāng)然,JPanel必須放在JFrame中,所以,又通過(guò)繼承JFrame得到一個(gè)實(shí)例。</p&

59、gt;<p>  2.對(duì)于下棋的操作,通過(guò)對(duì)JPanel增加鼠標(biāo)事件監(jiān)聽(tīng)器MouseListener,每次當(dāng)用戶點(diǎn)擊鼠標(biāo)時(shí),先取得點(diǎn)擊的坐標(biāo)值,然后換算成對(duì)應(yīng)棋盤(pán)上(即棋盤(pán)數(shù)組)的位置(數(shù)組的下標(biāo))。</p><p>  3.判斷此處是否已經(jīng)有棋子,如果有則提示玩家重新下子,否則通過(guò)java里的畫(huà)圖函數(shù)在此處畫(huà)上棋子,重新刷新輸出棋盤(pán)。</p><p>  4.判斷該顏色棋子

60、的上下左右是否滿足連續(xù)五個(gè),是的話提醒相應(yīng)玩家獲勝,不是的話,更換玩家下棋。</p><p>  5.對(duì)于玩家的更換是程序自動(dòng)的,每次用戶點(diǎn)擊鼠標(biāo)后,若本局還未結(jié)束則會(huì)變換玩家,從而畫(huà)出對(duì)應(yīng)黑方白方的棋子,直到有一方獲勝程序技術(shù)。</p><p>  5.1.2.程序設(shè)計(jì)分析</p><p>  1. 本款游戲有“游戲”和“選項(xiàng)”兩個(gè)選項(xiàng),其中“游戲”包括開(kāi)局、重

61、新開(kāi)始、結(jié)束游戲幾個(gè)選項(xiàng);選項(xiàng)里邊則包括對(duì)弈模式、悔棋、更改背景顏色幾個(gè)選項(xiàng),玩家可以根據(jù)具體需要選擇使用。</p><p>  2. 繪制棋盤(pán),17條橫線,17條豎線,在直線交點(diǎn)處下棋子(實(shí)心黑白圓形)。</p><p>  3. 首先程序會(huì)判斷對(duì)弈模式是人機(jī)對(duì)弈還是人人對(duì)弈模式,若是人機(jī)對(duì)弈則是玩家先下,玩家是黑方,電腦是白方。若是人人對(duì)弈,則是黑方先下,黑白交替下子。</p&g

62、t;<p>  4. 棋盤(pán)處于鼠標(biāo)監(jiān)聽(tīng)狀態(tài),當(dāng)鼠標(biāo)在棋盤(pán)上有點(diǎn)擊操作的時(shí)候,程序會(huì)獲得鼠標(biāo)點(diǎn)擊的坐標(biāo)然后換算成對(duì)應(yīng)的棋盤(pán)的位置,再判斷此處是否有棋子,假如沒(méi)有,那么在此處畫(huà)出對(duì)應(yīng)顏色的實(shí)心棋子,假如已經(jīng)有棋子了,則提示玩家此處已經(jīng)有棋子請(qǐng)重新下棋。</p><p>  5. 當(dāng)選擇的是人機(jī)對(duì)弈模式的時(shí)候,輪到電腦下子時(shí),電腦會(huì)通過(guò)算法計(jì)算每個(gè)沒(méi)有棋子的位置的重要性來(lái)選擇最重要的位置下子。</p

63、><p>  6. 人機(jī)對(duì)弈算法簡(jiǎn)介:</p><p>  本款游戲最核心的地方就是算法,因?yàn)檫@是整個(gè)程序最難的模塊。算法的中心思想是:利用分?jǐn)?shù)代表每個(gè)位置的重要程度,越重要的位置的分?jǐn)?shù)值會(huì)越高,當(dāng)電腦下棋時(shí)會(huì)先將電腦和玩家棋型的分?jǐn)?shù)分別計(jì)算一遍,然后選擇二者中分?jǐn)?shù)最高的點(diǎn)下子。如果玩家的分?jǐn)?shù)高,那么代表電腦應(yīng)該防守,如果電腦的分?jǐn)?shù)高,那么代表電腦應(yīng)該進(jìn)攻。</p><p&

64、gt;  具體的分?jǐn)?shù)值賦值如下:</p><p>  解釋一下其中的活,半活,死,半死:</p><p>  活:代表幾個(gè)子是相連的,中間沒(méi)有空格,兩端都至少有一個(gè)空格。</p><p>  半活:代表幾個(gè)子不是相連的,幾個(gè)子中間有一個(gè)空格,兩端都至少有一個(gè)空格。</p><p>  死:代表幾個(gè)子是相連的,中間沒(méi)有空格,但有一端緊挨著對(duì)方的

65、棋子或有一端正好在棋盤(pán)的邊界。</p><p>  半死:代表幾個(gè)子不是相連的,幾個(gè)子中間有一個(gè)空格,而且一端緊挨著對(duì)方的棋子或有一端正好在棋盤(pán)的邊界。</p><p>  每個(gè)位置的分?jǐn)?shù)的計(jì)算方式是各個(gè)方向的分?jǐn)?shù)相加,最后找出電腦棋型和玩家棋型的分?jǐn)?shù)的最高的位置為電腦的下棋點(diǎn)下棋。</p><p>  7. 當(dāng)任何一方有五個(gè)棋子沿著橫,豎,斜連在一起時(shí),系統(tǒng)自動(dòng)判

66、斷贏棋,并顯示黑方或白方勝利。棋局結(jié)束后,任何一方均不能繼續(xù)操作。</p><p>  8.程序流程如下圖4-1:</p><p>  圖5-1 程序流程圖</p><p><b>  5.2 程序設(shè)計(jì)</b></p><p>  這個(gè)游戲程序包含兩個(gè)類(lèi):</p><p>  DrawPanel

67、:棋盤(pán)類(lèi),用于繪畫(huà)棋盤(pán)及棋子。</p><p>  PlayerVsPC:主程序類(lèi),窗口的創(chuàng)建和整個(gè)邏輯程序代碼。</p><p>  類(lèi)DrawPanel代碼:</p><p>  package resource;</p><p>  import java.awt.BasicStroke;</p><p>  i

68、mport java.awt.Color;</p><p>  import java.awt.Graphics;</p><p>  import java.awt.Graphics2D;</p><p>  import java.awt.geom.Ellipse2D;</p><p>  import java.awt.geom.Lin

69、e2D;</p><p>  import javax.swing.JPanel;</p><p>  public class DrawPanel extends JPanel{</p><p>  private int[][] a;</p><p>  private int n,m;</p><p>  pu

70、blic DrawPanel(int k[][],int n1,int m1){</p><p><b>  a=k;</b></p><p><b>  n=n1;</b></p><p><b>  m=m1;</b></p><p><b>  }</b&

71、gt;</p><p>  public void paintComponent(Graphics g){</p><p>  super.paintComponent(g);</p><p>  Graphics2D g2=(Graphics2D)g;</p><p>  Graphics2D g3=(Graphics2D)g;</p

72、><p>  double X=20;</p><p>  double Y=20;</p><p>  double width=480;</p><p>  double height=480;</p><p>  double jiange=30;</p><p><b>  

73、// 畫(huà)棋盤(pán)網(wǎng)格</b></p><p>  for(int i=0;i<=width/jiange;i++){</p><p>  g2.draw(new Line2D.Double(X+i*jiange,Y,X+i*jiange,height+Y));</p><p>  g2.draw(new Line2D.Double(X,Y+i*jian

74、ge,width+X,Y+i*jiange));</p><p><b>  }</b></p><p><b>  //畫(huà)中間點(diǎn)的標(biāo)記</b></p><p>  g3.setPaint(Color.RED);</p><p>  g3.draw(new Line2D.Double(254,2

75、45,254,254));</p><p>  g3.draw(new Line2D.Double(245,254,254,254));</p><p>  g3.draw(new Line2D.Double(267,245,267,254));</p><p>  g3.draw(new Line2D.Double(267,254,275,254));</p

76、><p>  g3.draw(new Line2D.Double(245,266,254,266));</p><p>  g3.draw(new Line2D.Double(254,266,254,275));</p><p>  g3.draw(new Line2D.Double(266,275,266,266));</p><p>  g3

77、.draw(new Line2D.Double(266,266,275,266));</p><p><b>  //畫(huà)旗子</b></p><p>  for(int i=1;i<a.length-1;i++){</p><p>  for(int j=1;j<a[i].length-1;j++){</p><

78、p>  Ellipse2D circle=new Ellipse2D.Double();</p><p>  circle.setFrame(j*30-25, i*30-25, 28, 28);</p><p>  if(a[i][j]==1){</p><p>  g2.setPaint(Color.BLACK);</p><p> 

79、 g2.fill(circle);</p><p>  }else if(a[i][j]==2){</p><p>  g2.setPaint(Color.WHITE);</p><p>  g2.fill(circle);</p><p><b>  }</b></p><p><

80、b>  }</b></p><p><b>  }</b></p><p><b>  //畫(huà)旗子上的標(biāo)記</b></p><p>  if(n>0&&m>0){</p><p>  g2.setPaint(Color.RED);</p>

81、<p>  g2.setStroke(new BasicStroke(1.5f)); </p><p>  g2.draw(new Line2D.Double(30*m-16,30*n-16,30*m-4,30*n-4));</p><p>  g2.draw(new Line2D.Double(30*m-16,30*n-4,30*m-4,30*n-16));</p>

82、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  類(lèi)PlayerVsPC代碼:</p><p>  package resource;</p><p>  

83、import java.awt.Color;</p><p>  import java.awt.event.ActionEvent;</p><p>  import java.awt.event.ActionListener;</p><p>  import java.awt.event.MouseAdapter;</p><p>  

84、import java.awt.event.MouseEvent;</p><p>  import java.awt.Toolkit;</p><p>  import java.awt.Dimension;</p><p>  import javax.swing.JColorChooser;</p><p>  import javax

85、.swing.JFrame;</p><p>  import javax.swing.JLabel;</p><p>  import javax.swing.JMenu;</p><p>  import javax.swing.JMenuBar;</p><p>  import javax.swing.JMenuItem;</p

86、><p>  import javax.swing.JPanel;</p><p>  public class PlayerVsPC {</p><p>  private JFrame frame;//整個(gè)窗口</p><p>  private JMenuBar bar;//菜單欄</p><p>  priva

87、te JMenuItem[][] jit;//菜單項(xiàng)數(shù)組</p><p>  private JMenuItem[] mode;//模式項(xiàng)數(shù)組</p><p>  private JMenu[] jm;//菜單</p><p>  public boolean isBlack;//是否為黑方下子狀態(tài)</p><p>  private

88、int[][] qipan;//棋盤(pán)數(shù)組</p><p>  private int row;//當(dāng)前行</p><p>  private int col;//當(dāng)前列</p><p>  private int prow;</p><p>  private int pcol;</p><p>  priv

89、ate Color c=new Color(145,125,62);//棋盤(pán)背景顏色</p><p>  private DrawPanel panel;//棋盤(pán)面板</p><p>  private JLabel label;//棋盤(pán)上方的標(biāo)簽</p><p>  private JPanel panel0;//棋盤(pán)上方條形面板</p>

90、<p>  private boolean isEnd;</p><p>  private int[][] qixingPC;</p><p>  private int[][] qixingPlayer;</p><p>  private boolean isPC = true; //記錄當(dāng)前下棋模式</p><p> 

91、 private boolean cMode = true;//記錄選擇的對(duì)弈模式</p><p>  public PlayerVsPC(){</p><p>  frame=new JFrame("五子棋游戲");</p><p>  bar=new JMenuBar();</p><p>  jm=new JMen

92、u[2];</p><p>  jit=new JMenuItem[2][];</p><p>  qipan=new int[19][19];</p><p>  qixingPC = new int[17][17];</p><p>  qixingPlayer = new int[17][17];</p><p>

93、;  for(int i=0;i<19;i++){</p><p>  for(int j=0;j<19;j++){</p><p>  qipan[i][j]=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>

94、  for(int i=0;i<17;i++){</p><p>  for(int j=0;j<17;j++){</p><p>  qixingPC[i][j]=0;</p><p>  qixingPlayer[i][j]=0;</p><p><b>  }</b></p><p&

95、gt;<b>  }</b></p><p>  label = new JLabel("人"+(isPC?"機(jī)":"人")+"對(duì)弈模式,請(qǐng)按開(kāi)局開(kāi)始游戲!");</p><p>  panel0=new JPanel();</p><p>  addItems(

96、);</p><p>  addEventAction();</p><p>  printqipan(0,0);</p><p><b>  }</b></p><p>  public void addItems(){</p><p>  jm[0]=new JMenu("

97、游戲");</p><p>  jm[1]=new JMenu("選項(xiàng)");</p><p>  jit[0]=new JMenuItem[3];</p><p>  jit[0][0]=new JMenuItem("開(kāi)局");</p><p>  jit[0][1]=new JMenuIte

98、m("重新開(kāi)始");</p><p>  jit[0][2]=new JMenuItem("結(jié)束游戲"); </p><p>  jit[1]=new JMenuItem[3];</p><p>  jit[1][0]=new JMenu("對(duì)弈模式");</p><p>  mod

99、e=new JMenuItem[2];</p><p>  mode[0] = new JMenuItem("人人對(duì)弈");</p><p>  mode[1] = new JMenuItem("人機(jī)對(duì)弈");</p><p>  jit[1][0].add(mode[0]);</p><p>  ji

100、t[1][0].add(mode[1]);</p><p>  jit[1][1]=new JMenuItem("悔棋");</p><p>  jit[1][2]=new JMenuItem("背景顏色");</p><p>  for(int i=0;i<jm.length;i++){</p><

101、p>  for(int j=0;j<jit[i].length;j++){</p><p>  jm[i].add(jit[i][j]);</p><p><b>  }</b></p><p><b>  }</b></p><p>  panel0.add(label);<

102、/p><p>  bar.add(jm[0]);</p><p>  bar.add(jm[1]);</p><p>  frame.setJMenuBar(bar);</p><p>  frame.add(panel0,"North");</p><p><b>  }</b>

103、;</p><p>  //給菜單項(xiàng)設(shè)定事件</p><p>  public void addEventAction(){</p><p>  jit[0][0].addActionListener(new ActionListener(){//開(kāi)局</p><p>  public void actionPerformed(Act

104、ionEvent e) {</p><p>  row=prow=0;col=pcol=0;</p><p>  isPC=cMode;</p><p>  isBlack = true;</p><p>  isEnd = false;</p><p>  for(int i=0;i<19;i++){</

105、p><p>  for(int j=0;j<19;j++){</p><p>  if(i==0||j==0||i==(qipan.length-1)||j==(qipan.length-1)){</p><p>  qipan[i][j] = -1;</p><p><b>  }else{</b></p>

106、;<p>  qipan[i][j]=0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(isPC){//人機(jī)對(duì)弈模式</p><p>

107、  label.setText("游戲開(kāi)始,請(qǐng)玩家先下棋!");</p><p>  }else{//人人對(duì)弈模式</p><p>  label.setText("游戲開(kāi)始,請(qǐng)"+(isBlack?"黑":"白")+"方先下棋!");</p><p><b

108、>  }</b></p><p>  printqipan(row,col);</p><p>  addEventHandler();</p><p><b>  }</b></p><p><b>  });</b></p><p>  jit[0

109、][1].addActionListener(new ActionListener(){//重新開(kāi)始</p><p>  public void actionPerformed(ActionEvent e) {</p><p>  row=prow=0;col=pcol=0;</p><p>  isBlack = true;</p><p&g

110、t;  isEnd = false;</p><p>  for(int i=0;i<19;i++){</p><p>  for(int j=0;j<19;j++){</p><p>  if(i==0||j==0||i==(qipan.length-1)||j==(qipan.length-1)){</p><p>  qip

111、an[i][j] = -1;</p><p><b>  }else{</b></p><p>  qipan[i][j]=0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }&l

112、t;/b></p><p>  if(isPC){//人機(jī)對(duì)弈模式</p><p>  label.setText("游戲開(kāi)始,請(qǐng)玩家先下棋!");</p><p>  }else{//人人對(duì)弈模式</p><p>  label.setText("游戲開(kāi)始,請(qǐng)"+(isBlack?&qu

113、ot;黑":"白")+"方先下棋!");</p><p><b>  }</b></p><p>  printqipan(row,col);</p><p>  addEventHandler();</p><p><b>  }</b>&l

114、t;/p><p><b>  });</b></p><p>  //給模式選項(xiàng)添加事件監(jiān)聽(tīng)</p><p>  mode[0].addActionListener(new ActionListener(){</p><p>  public void actionPerformed(ActionEvent e) {&l

115、t;/p><p>  cMode = false;</p><p>  label.setText("已選擇人"+(cMode?"機(jī)":"人")+"對(duì)弈模式,重新開(kāi)局將生效!");</p><p><b>  }</b></p><p>

116、<b>  });</b></p><p>  mode[1].addActionListener(new ActionListener(){</p><p>  public void actionPerformed(ActionEvent e) {</p><p>  cMode = true;</p><p> 

117、 label.setText("已選擇人"+(cMode?"機(jī)":"人")+"對(duì)弈模式,重新開(kāi)局將生效!");</p><p><b>  }</b></p><p><b>  });</b></p><p>  jit[0][2].a

118、ddActionListener(new ActionListener(){//結(jié)束游戲</p><p>  public void actionPerformed(ActionEvent e) {</p><p>  label.setText("游戲結(jié)束,請(qǐng)按開(kāi)局開(kāi)始游戲!");</p><p>  isEnd=true;&

119、lt;/p><p><b>  }</b></p><p><b>  });</b></p><p>  jit[1][1].addActionListener(new ActionListener(){//悔棋</p><p>  public void actionPerformed(Ac

溫馨提示

  • 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ù)僅提供信息存儲(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)論