2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

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

3、t;p>  關(guān)鍵詞:人工智能,計(jì)算人機(jī)對弈,五子棋,算法</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ù)語 ................................................................................ 5</p><p>  開發(fā)工具、環(huán)境及其技術(shù)

13、 ........................................................................... 7</p><p>  4.1 Java簡介 ................................................................................................. 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)以及游戲娛樂等。Windows系統(tǒng)的推出使電腦從高雅的學(xué)術(shù)殿堂走入了尋常百姓家,各行各業(yè)的人們無須經(jīng)過特別的訓(xùn)練就能夠使用電腦完成許許

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

21、這次畢業(yè)設(shè)計(jì),正好將學(xué)過的Java語言中的各種技術(shù)綜合起來,用Jbuilder2006開發(fā)工具編寫一個(gè)小游戲,既對自己學(xué)過的技能進(jìn)行一次檢驗(yàn),也能系統(tǒng)地將學(xué)過的知識(shí)復(fù)習(xí)鞏固。</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)代人休閑

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

42、AVA簡介</p><p><b>  JAVA技術(shù)介紹:</b></p><p>  Java技術(shù)是一門編程語言,也是一個(gè)平臺(tái),它基于Java虛擬機(jī)技術(shù),借助這個(gè)東西建立了跨平臺(tái)的優(yōu)勢。(題外話:Java熱門的原因之一就是一個(gè)跨平臺(tái)的概念,和跨平臺(tá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ù)上來說,目前世界上編程語言Java 、C 、VB、C++依次排名前4位,這排名本身不說明什么,至少也是工業(yè)界對編程語言使用上一個(gè)側(cè)面的反映吧。</p>&l

44、t;p>  Java編程語言與眾不同之處在于:Java程序既是編譯型的(轉(zhuǎn)換為一種稱為Java字節(jié)碼的中間語言),又是解釋型的(JVM 對字節(jié)碼進(jìn)行解析和運(yùn)行)。編譯只進(jìn)行一次,而解釋在每次運(yùn)行程序時(shí)都會(huì)進(jìn)行。編譯后的字節(jié)碼采用一種針對JVM 優(yōu)化過的機(jī)器碼形式;解釋器是JVM 的實(shí)現(xiàn)。這段是摘自網(wǎng)上的,編譯原理學(xué)的不是很好,對這門語言的背后運(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,后來版本號(hào)從1.4直接跳到5.0,其實(shí)也就是1.5,所以就叫成Java SE 5.0。目前Java開發(fā)人員使用較多的版本是5.0,當(dāng)然還有Java SE 6.0這個(gè)更新的版本。它允許開發(fā)和部署在桌面、服務(wù)器、嵌入式環(huán)境和實(shí)時(shí)

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

47、,做GUI有使用VB的感覺),Eclipse(SWT/JFace這個(gè)項(xiàng)目其實(shí)就是做Eclipse項(xiàng)目時(shí)擴(kuò)展出來的,所以對SWT/JFace支持的也不錯(cuò))。</p><p>  Java EE(Java Platform,Enterprise Edition)這個(gè)版本以前叫做J2EE,也就是大家可能聽得比較多的,也是Java比較流行的領(lǐng)域,Java的企業(yè)級版本。Java EE下有很多流行的開發(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組合),相對來說比較新Ruby在Ruby on Rails的框架應(yīng)用,后兩者可能在相對來說比較輕量級的Web領(lǐng)域運(yùn)用成功案例比較多,更重量的企業(yè)級潛力還有待挖掘。</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不是太熟悉,不過移動(dòng)設(shè)備和嵌入式設(shè)備的開發(fā)個(gè)人覺得算是比較有意思的領(lǐng)域,最近比較矚目的業(yè)界新聞?dòng)幸粋€(gè)就是Google發(fā)布開源智能手機(jī)操作系統(tǒng)開發(fā)平臺(tái)Android,也就是前一陣子炒得很火的

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

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

52、、JCreator。這些IDE各有優(yōu)勢劣勢,根據(jù)你開發(fā)的項(xiàng)目來選擇了。</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>  右擊 我的電腦->屬性->高級->環(huán)境變量,這時(shí)候可以看到以下的環(huán)境變量:Path:系統(tǒng)在任何路徑下都可以識(shí)別Java命令。</p><p>  classPath:為Java加載類(包括class,lib)的路徑,只有類在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)用開發(fā)集成到Eclipse中,可

57、以幫助Java開發(fā)者使用Eclipse建立,測試和部署J2ee應(yīng)用。支持jsp編寫,包括語法著色和語法檢查:。</p><p>  MyEclipse:J2EE開發(fā)插件,支持jsp,EJB,數(shù)據(jù)庫操作。</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è)棋盤,所以,通過繼承JPanel,然后在JPanel上畫出一個(gè)17*17的棋盤,另外還有三個(gè)按鈕:重新開局、請黑方下子和請白方下子,提醒用戶進(jìn)行相應(yīng)的操作。當(dāng)然,JPanel必須放在JFrame中,所以,又通過繼承JFrame得到一個(gè)實(shí)例。</p&

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

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

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

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

63、><p>  6. 人機(jī)對弈算法簡介:</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è)子是相連的,中間沒有空格,兩端都至少有一個(gè)空格。</p><p>  半活:代表幾個(gè)子不是相連的,幾個(gè)子中間有一個(gè)空格,兩端都至少有一個(gè)空格。</p><p>  死:代表幾個(gè)子是相連的,中間沒有空格,但有一端緊挨著對方的

65、棋子或有一端正好在棋盤的邊界。</p><p>  半死:代表幾個(gè)子不是相連的,幾個(gè)子中間有一個(gè)空格,而且一端緊挨著對方的棋子或有一端正好在棋盤的邊界。</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è)類:</p><p>  DrawPanel

67、:棋盤類,用于繪畫棋盤及棋子。</p><p>  PlayerVsPC:主程序類,窗口的創(chuàng)建和整個(gè)邏輯程序代碼。</p><p>  類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、// 畫棋盤網(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>  //畫中間點(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>  //畫旗子</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>  //畫旗子上的標(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>  類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;//棋盤數(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><p>  private DrawPanel panel;//棋盤面板</p><p>  private JLabel label;//棋盤上方的標(biāo)簽</p><p>  private JPanel panel0;//棋盤上方條形面板</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;//記錄選擇的對弈模式</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ī)":"人")+"對弈模式,請按開局開始游戲!");</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("開局");</p><p>  jit[0][1]=new JMenuIte

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

99、e=new JMenuItem[2];</p><p>  mode[0] = new JMenuItem("人人對弈");</p><p>  mode[1] = new JMenuItem("人機(jī)對弈");</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(){//開局</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ī)對弈模式</p><p>

107、  label.setText("游戲開始,請玩家先下棋!");</p><p>  }else{//人人對弈模式</p><p>  label.setText("游戲開始,請"+(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(){//重新開始</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ī)對弈模式</p><p>  label.setText("游戲開始,請玩家先下棋!");</p><p>  }else{//人人對弈模式</p><p>  label.setText("游戲開始,請"+(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)聽</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ī)":"人")+"對弈模式,重新開局將生效!");</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ī)":"人")+"對弈模式,重新開局將生效!");</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é)束,請按開局開始游戲!");</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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論