版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、山山東凱東凱文科技文科技職業(yè)職業(yè)學院學院 2012 屆屆畢業(yè)論畢業(yè)論文文 基于 java 的五子游戲的開發(fā)設計 學 院: 信息學院 學生姓名: 李晨誠 指導教師: 李鐵奇 專 業(yè): 計算機網(wǎng)絡技術 班 級: 09 級 1 班 完成時間: 2012 年 6 月 27 日 摘 要 人工智能是一門正在迅速發(fā)展的新興的,綜合性很強的交叉科學。它與生物工程、空間技術一起 被并列為二十一世界三大尖端技術。它的中心任務是研究如何使計算機去做那些過去只能靠人的智力 才能做的工作。目前各發(fā)達國家都把人工智能作為重點項目,列入本國的高科技發(fā)展計劃當中,投入 巨大的人力和物力。 計算機人機對弈也是其中之一。作為人智
2、能研究的一個重要分支,計算機博弈是檢驗人工水平的 一個重要方面。它的研究為人工智能帶來了很多重要的方法和理論,產(chǎn)生了廣泛的社會影響和學術影 響。 五子棋人機對弈是計算機博弈中的一種。研究其計算機算法,可以讓我們看到人工智能的稚形, 也有助于我們?nèi)四X的開發(fā)。五子棋是我國發(fā)明的,研究它可以讓更多的外國人了解五子棋,這有助于 我國優(yōu)秀文化的推廣。 關鍵詞:人工智能,計算人機對弈,五子棋,算法 目 錄 第一章 緒 論 .1 第二章 需求分析 .2 2.1 業(yè)務需求 .2 2.1.1 此系統(tǒng)使用范圍要求 .2 2.1.2 功能要求 .2 2.2 性能需求 .3 2.3 系統(tǒng)平臺需求 .3 第三章 五子棋
3、的相關基礎 .4 3.1 五子棋解釋 .4 3.2 五子棋基本規(guī)則 .4 3.3 五子棋常用術語 .4 第四章 開發(fā)工具、環(huán)境及其技術 .7 4.1 java 簡介.7 4.2 java 編程環(huán)境.8 4.2.1 環(huán)境變量 .8 4.2.2 eclipse 插件 .8 第五章 詳細設計 .10 5.1 程序設計思路 .10 5.1.1設計思想 .10 5.1.2程序設計分析 .10 5.2 程序設計.12 結(jié)論 .22 參考文獻 .23 致 謝 .24 第一章 緒 論 電腦已經(jīng)深入到日常工作和生活的方方面面,比如文字處理、信息管理、輔助設計、圖形 圖像處理、教育培訓以及游戲娛樂等。window
4、s系統(tǒng)的推出使電腦從高雅的學術殿堂走入了尋常 百姓家,各行各業(yè)的人們無須經(jīng)過特別的訓練就能夠使用電腦完成許許多多復雜的工作。然而, 雖然現(xiàn)在世界上已經(jīng)充滿了花樣繁多的各種軟件,但它們依然不能滿足用戶的各種特殊需要, 人們還不得不開發(fā)適合自己特殊需求的軟件。java語言作為一種面向?qū)ο蟮木幊陶Z言,具有分 布式,可移植,高性能,多線程等特點。通過系統(tǒng)的學習,人們就可以使用它開發(fā)出功能齊全, 滿足特殊需求的應用程序。java語言易學易用,對學習者掌握技能,開拓思維都有很大的幫助。 我作為一名學生,在系統(tǒng)的學習了java語言之后,經(jīng)常用它搞一些小程序。這次畢業(yè)設計, 正好將學過的java語言中的各種技
5、術綜合起來,用jbuilder2006開發(fā)工具編寫一個小游戲,既 對自己學過的技能進行一次檢驗,也能系統(tǒng)地將學過的知識復習鞏固。 隨著計算機技術的不斷發(fā)展,網(wǎng)絡技術的普及范圍越來越廣,網(wǎng)絡能夠提供的服務多樣、 便捷,已經(jīng)成為人們生產(chǎn)生活中不可缺少的重要組成部分。如今網(wǎng)絡休閑游戲發(fā)展迅速,它憑 借健康、方便、互動性強、益智等諸多優(yōu)點,成為大部分現(xiàn)代人休閑娛樂的首選。 網(wǎng)絡五子棋游戲是使用java語言開發(fā)的一款游戲。它使用socket建立連接,多線程處理數(shù) 據(jù),以及可嵌入網(wǎng)絡瀏覽器的alet作為客戶端,這些特點使這款游戲無論是服務器還是客戶端 的實現(xiàn)都相對容易。通過對該軟件的編寫,還可以鞏固我們對
6、以上各種知識的掌握和理解。 第二章 需求分析 為了開發(fā)出真正滿足用戶需求量的軟件產(chǎn)品,首先必須知道用戶的需求。軟件需求中包括 了多個方面來說明用戶需求。在這一章中,主要從以下幾方面來說明系統(tǒng)的需求。 2.1 業(yè)務需求 2.1.1 此系統(tǒng)使用范圍要求 此系統(tǒng)為智力游戲,適合于各類游戲愛好者。由于其經(jīng)典性及其游戲的簡單性,各類人士 都可以也都愛玩。人們在與電腦對戰(zhàn)享受娛樂的同時,也會體會到自己的智力也會有所提升。 2.1.2 功能要求 該款游戲主要由一下幾個模塊組成: 五子棋游戲 人 機 對 弈 模 式 人 人 對 弈 模 式 具 有 悔 棋 功 能 更 換 棋 盤 背 景 圖 21 五子棋功能模
7、塊圖 人機對弈模式:選擇該模式可以實現(xiàn)人與電腦之間的對弈,電腦會智能的選擇該在哪處下 子,并會在每次下棋結(jié)束后判斷是否有哪方已經(jīng)獲勝,如果獲勝則結(jié)束本局游戲,并提示玩家 游戲結(jié)束。 人人對弈模式:選擇該模式可以實現(xiàn)人與人之間的對弈,系統(tǒng)會提示哪方先下,然后玩家 之間交替的下棋,同樣系統(tǒng)會在下完每次棋后判斷是否有哪方已經(jīng)獲勝,如果獲勝則結(jié)束本局 游戲,并提示玩家游戲結(jié)束。 悔棋功能:這個功能也是根據(jù)游戲的實際需求而存在的,在現(xiàn)實生活中難免有失誤下錯了 棋,那么就需要悔棋。此功能提供了悔棋功能,使得下棋的靈活性有所提高。玩家若想悔棋, 則只需選擇悔棋按鈕便可以重新下過剛才的棋。 更換棋盤背景:次功
8、能可以根據(jù)玩家的愛好任意更換棋盤的背景顏色,由于每個人對顏色 的喜好不一樣,因此這個功能也是非常必需的。也行更換一種玩家所喜歡的顏色,玩家能發(fā)揮 得更好。 2.2 性能需求 該款五子棋游戲功能雖然簡單,但最主要的還是實現(xiàn)了人人對弈模式和人機對弈兩種模式, 所以從這個角度來說,該款游戲需要能很好的在兩種模式間良好的轉(zhuǎn)換。雖然系統(tǒng)不大,但要 在滿足玩家的基本要求的情況下,電腦有一定的智能,能給于新手一定的幫助。 2.3 系統(tǒng)平臺需求 編程語言:java 操作系統(tǒng):windows xp系列 開發(fā)工具:myeclipse 第三章 五子棋的相關基礎 3.1 五子棋解釋 引用辭海中所言,五子棋是“棋類游戲
9、,棋具與圍棋相同,兩人對局,輪流下子,先 將五子連成一行者為勝。”。五子棋的名稱:日文亦有“連五子、五子連、串珠、五目、五目 碰、五格、五石、五法、五聯(lián)、京棋”等多種稱謂,英文則稱之為fir (five in a row的縮寫)、 gomoku(日語“五目”的羅馬拼音)、gobang、connect 5、mo-rphion。捷克語piskvorky,韓語 omok、韓國人還稱之為情侶棋。 3.2 五子棋基本規(guī)則 1.五子棋行棋時,黑棋先下第一子,由天元開始,后白棋在黑棋周圍的交叉點的落子。 接著黑方再以天元中心的25個交叉點的范圍內(nèi)落盤面的第三子,之后黑白雙方相互順序子。 2.最先在棋盤線交點
10、橫向,縱向,斜向形成已方的五個棋子連續(xù)的一方為勝。 3.出現(xiàn)禁手對方指出后將判負,其中包括兩個或兩個以上的活三,活四,長連均稱之 為禁手。 4.禁手只對黑棋有效,白棋無禁手。 5.黑方禁手形成時,白方需立即指出,黑方將被判負。若白方未發(fā)現(xiàn)黑方禁手存在而 繼續(xù)應子,其后指出黑方禁手不能判黑方負。 6.黑方連五與禁手同時形成,因黑方已連成五即黑方已獲勝,故禁手規(guī)則失效。 7.在對局中,在盤上落下的子又拿起來,此動作稱為拔子,若拔子將被判為負。 8.在對局中棋子掉落在棋盤上將被判負。若推子或蹭子,以盤面第一落點為準。用手 將棋子推正不算違犯規(guī)則。 9.在對局中,一方自行中止比賽如:中途退場,將被判負
11、。 10.在對局中對方宣布認輸,本局獲勝。 11.超過比賽規(guī)定所用時間限制,將被判為負:正式比賽期間,遲到時間超過比賽容許 時間將被判負。 12.如下至最終一子仍不分勝負則定為平局。 13.中盤期間雙方 同意和局提議,判定為平局。 3.3 五子棋常用術語 1.著:也稱“步”。對局中把一個棋子按照規(guī)則放到某一交叉點,稱之為一著棋。一著是 否完成有兩種規(guī)則: (1)在執(zhí)行落子無悔規(guī)則是,以行棋者的手離開棋子為一著已完成。 (2)在執(zhí)行限時規(guī)則時,以行棋者按下棋鐘作為一著已完成。 2.pass :五子棋中引入的英文名稱,即應該行棋的一方主動放棄此次行棋的機會,由 對方繼續(xù)行棋。 3.先手:對方必須應
12、答的著法,如對方形成活三必須阻止其形成活四。 4.絕對先手:相對先手而言,即形成同色連四或嵌五,對方必須應著,就是絕對先手。 絕對先手又叫“沖”。 5.vcf:(victory of continus four 的縮寫) 意思是利用連續(xù)沖四取勝之意。利用連 續(xù)不斷的沖四或嵌五的絕對先手,制止形成連五獲得勝利的一種方法。在對局接近尾聲或排局 解題中一種常見的取勝技巧。 6.追下取勝:是指白棋利用黑棋禁手取勝的戰(zhàn)術。白1 沖四,迫使黑2 形成“四、四” 禁手( 即沖四,活四禁手), 這種取勝方法叫做追下取勝。 7.自由取勝:追下取勝以外的取勝方法,即未利用黑棋禁手戰(zhàn)術而取勝。 8.一子雙殺:是指對
13、局中一方落子后出現(xiàn)兩個叫殺點即兩個獲勝點,而使對方無法防 守的情形。一般是有兩個沖四活三點,白棋的雙活三,雙四均可稱為一子雙殺。 9.陽線:棋盤上可見的橫線與直線的總稱。 10.陰線:也稱“斜線”。是棋盤上不可見的斜行線。 11.“四、三”:指同時具備兩個先手,其中一個四,另一個是活三。 12.“活三”、“嵌五”、“沖四”:參見五子棋重要棋形講座。 13. 禁手:對局中禁止使用的戰(zhàn)術或被判為負的行棋手段。 14. 開局:也稱“布局”。布局階段大體為七至十幾著之內(nèi)。種類繁多,職業(yè)連珠五子 棋有二十四種開局。 15. 局面:亦稱“局勢”。為對局中某一段時間內(nèi)雙方子力的配置情況。 16. 優(yōu)勢:是指
14、足以取勝的優(yōu)勢局面,其對方即為敗勢。 17. 妙著:對局中走出的一步精妙的著法。既合乎邏輯又出人意料,有使局面頓時改 觀的效果,對局勢的發(fā)展及對局的質(zhì)量都有重大影響。 18. 好著:也稱“佳著”。對局中成功的某一步。 19. 正著:對局的某一局面中的正確著法。 20. 劣著:對局中,導致嚴重不利后果的一步錯誤著法。 21. 敗著:也稱“失著”“漏著”。對局中造成局面惡化的一步嚴重錯誤著法。 22. 等著:對局中具有等待性的一步著法,主要意圖是等待有利時機。 23. 廢著:也稱“空著”。對局中不起作用的著法。實際上指浪費時間毫無疑義的錯 著。 24. 搶先:對局中利用反活三或沖四的強制手段奪取主
15、動權的著法。 25. 打譜:按照棋譜演練著法,是提高棋藝水平的重要方法之一。 26. 復局:也叫“復著”。對局結(jié)束又重演對局的過程。一般用以研究、比較雙方的成敗 得失和著法的優(yōu)劣。 第四章 開發(fā)工具、環(huán)境及其技術 4.1 java 簡介 java技術介紹: java技術是一門編程語言,也是一個平臺,它基于java虛擬機技術,借助這個東西建立了 跨平臺的優(yōu)勢。 java技術的重要性,世界上編程語言java 、c 、vb、c+依次排名前4位,這排名本身不說 明什么,至少也是工業(yè)界對編程語言使用上一個側(cè)面的反映吧。 java編程語言與眾不同之處在于:java程序既是編譯型的(轉(zhuǎn)換為一種稱為java字
16、節(jié)碼的 中間語言),又是解釋型的(jvm 對字節(jié)碼進行解析和運行)。編譯只進行一次,而解釋在每 次運行程序時都會進行。編譯后的字節(jié)碼采用一種針對jvm 優(yōu)化過的機器碼形式;解釋器是jvm 的實現(xiàn)。這段是摘自網(wǎng)上的,編譯原理學的不是很好,對這門語言的背后運行機制理解到這樣 了。 java平臺是一種純軟件平臺,它有三個版本java se、javaee、java me。 java se(java platform,standard edition)這個版本以前叫做j2se,后來版本號從1.4 直接跳到5.0,其實也就是1.5,所以就叫成java se 5.0。目前java開發(fā)人員使用較多的版本是 5
17、.0,當然還有java se 6.0這個更新的版本。它允許開發(fā)和部署在桌面、服務器、嵌入式環(huán)境 和實時環(huán)境中使用的java 應用程序。java se還包含了支持java web服務開發(fā)的類,并為java ee這個版本提供基礎。 雖說桌面應用程序,java一直不被看好,但也稍微提一下,負責桌面gui開發(fā)的類庫我知道 的有:jdk自帶的主要是awt/swing這個java原生類庫;也可以使用ibm的swt/jface這個第三方 類庫。開發(fā)工具我了解的有:netbeans(最近已經(jīng)是6.0final版了,做gui有使用vb的感覺), eclipse(swt/jface這個項目其實就是做eclipse
18、項目時擴展出來的,所以對swt/jface支持的 也不錯)。 java ee(java platform,enterprise edition)這個版本以前叫做j2ee,也就是大家可 能聽得比較多的,也是java比較流行的領域,java的企業(yè)級版本。java ee下有很多流行的開發(fā) 框架,像struts、spring、hibernate這種流行的所謂ssh組合等。 根據(jù)項目大小、應用領域,技術平臺的選擇面還是很多的,除了java ee,還有.net,lamp 組合(linux、apatch、mysql、php組合),相對來說比較新ruby在ruby on rails的框架應用, 后兩者可能在相
19、對來說比較輕量級的web領域運用成功案例比較多,更重量的企業(yè)級潛力還有待 挖掘。 java me(java platform,micro edition)這個版本以前叫做j2me。應用領域像各種移動 設備和嵌入式設備,比如:手機、pda、電視機頂盒和打印機。 java me不是太熟悉,不過移動設備和嵌入式設備的開發(fā)個人覺得算是比較有意思的領域, 最近比較矚目的業(yè)界新聞有一個就是google發(fā)布開源智能手機操作系統(tǒng)開發(fā)平臺android,也就 是前一陣子炒得很火的gphone(原來google出的不是手機,而是一個手機操作系統(tǒng)開發(fā)平臺)。 這個平臺貌似會對java me有些沖擊,按照網(wǎng)上的消息,
20、android包括:1、高度定制的linux操 作系統(tǒng)內(nèi)核及智能手機硬件驅(qū)動支持;2、經(jīng)過google修改過的java虛擬機dalvik,這里的性能 比sun的hotspot高,支持大部分java核心類庫;3、大量智能手機開發(fā)核心類庫;4、大量現(xiàn)成 的智能手機應用軟件;5、基于eclipse的開發(fā)環(huán)境。也是按照網(wǎng)上的說法,java ee提供了統(tǒng)一 的編程平臺,但不能調(diào)用操作系統(tǒng)的資源;而android下直達操作系統(tǒng),上直達應用軟件,如: 瀏覽器、日歷、地圖等。 java開發(fā)工具很多,個人使用的ide有eclipse和netbeans。eclispe比較流行,各種插件也 多,當然用起來也不錯;n
21、etbeans現(xiàn)在也是越做越好了,介紹這兩個ide主要是開源的,當然還 有其它工具如jbuilder、intellij、jcreator。這些ide各有優(yōu)勢劣勢,根據(jù)你開發(fā)的項目來選 擇了。 4.2 java 編程環(huán)境 4.2.1 環(huán)境變量 (1)java(tm) se development kits,即 jdk。 (2)設置環(huán)境變量: 右擊 我的電腦-屬性-高級-環(huán)境變量,這時候可以看到以下的環(huán)境變量:path:系統(tǒng) 在任何路徑下都可以識別 java 命令。 classpath:為 java 加載類(包括 class,lib)的路徑,只有類在 classpath 中,java 命令才能識
22、別。 java_home:java 的安裝路徑。 這三個變量是必須正確設置的,否則 java 命令將可能不會正常運行,具體設置如下: path: ;c:progran filesjavajdk1.6.0_01bin classpath: .;progran filesjavajdk1.6.0_01libdt.jar;progran filesjavajdk1.6.0_01libtools.jar java_home: progran filesjavajdk1.6.0_01 4.2.2 eclipse 插件 (1) xmlbuddy:編輯 xml 文件;下載地址為 http:/。 (2) fa
23、t jar:打包插件,可以方便的完成各種打包任務,可以包含外部的包等。 (3) log4e:log4j 插件,提供各種與 log4j 相關的任務,log4j 專用于為程序輸入調(diào)試信息。 (4) lomboz:ecilpse 的一個 j2ee 的插件,可以將很多 java 應用服務器,j2ee 組件和 web 應用開發(fā) 集成到 eclipse 中,可以幫助 java 開發(fā)者使用 eclipse 建立,測試和部署 j2ee 應用。支持 jsp 編 寫,包括語法著色和語法檢查:。 (5) myeclipse:j2ee 開發(fā)插件,支持 jsp,ejb,數(shù)據(jù)庫操作。 (6) tomcatplugin:支
24、持 tomcat 插件。 第五章 詳細設計 5.1 程序設計思路 5.1.1設計思想 1.本程序要實現(xiàn)五子棋的游戲功能,必須先有一個棋盤,所以,通過繼承 jpanel,然后在 jpanel 上畫出一個 17*17 的棋盤,另外還有三個按鈕:重新開局、請黑方下子和請白方下子, 提醒用戶進行相應的操作。當然,jpanel 必須放在 jframe 中,所以,又通過繼承 jframe 得到一 個實例。 2.對于下棋的操作,通過對 jpanel 增加鼠標事件監(jiān)聽器 mouselistener,每次當用戶點擊鼠 標時,先取得點擊的坐標值,然后換算成對應棋盤上(即棋盤數(shù)組)的位置(數(shù)組的下標) 。 3.判斷
25、此處是否已經(jīng)有棋子,如果有則提示玩家重新下子,否則通過 java 里的畫圖函數(shù)在此 處畫上棋子,重新刷新輸出棋盤。 4.判斷該顏色棋子的上下左右是否滿足連續(xù)五個,是的話提醒相應玩家獲勝,不是的話,更 換玩家下棋。 5.對于玩家的更換是程序自動的,每次用戶點擊鼠標后,若本局還未結(jié)束則會變換玩家,從 而畫出對應黑方白方的棋子,直到有一方獲勝程序技術。 5.1.2程序設計分析 1. 本款游戲有“游戲”和“選項”兩個選項,其中“游戲”包括開局、重新開始、結(jié)束游戲 幾個選項;選項里邊則包括對弈模式、悔棋、更改背景顏色幾個選項,玩家可以根據(jù)具體需要 選擇使用。 2. 繪制棋盤,17 條橫線,17 條豎線,
26、在直線交點處下棋子(實心黑白圓形) 。 3. 首先程序會判斷對弈模式是人機對弈還是人人對弈模式,若是人機對弈則是玩家先下,玩 家是黑方,電腦是白方。若是人人對弈,則是黑方先下,黑白交替下子。 4. 棋盤處于鼠標監(jiān)聽狀態(tài),當鼠標在棋盤上有點擊操作的時候,程序會獲得鼠標點擊的坐標 然后換算成對應的棋盤的位置,再判斷此處是否有棋子,假如沒有,那么在此處畫出對應顏色 的實心棋子,假如已經(jīng)有棋子了,則提示玩家此處已經(jīng)有棋子請重新下棋。 5. 當選擇的是人機對弈模式的時候,輪到電腦下子時,電腦會通過算法計算每個沒有棋子的 位置的重要性來選擇最重要的位置下子。 6. 人機對弈算法簡介: 本款游戲最核心的地方
27、就是算法,因為這是整個程序最難的模塊。算法的中心思想是:利用 分數(shù)代表每個位置的重要程度,越重要的位置的分數(shù)值會越高,當電腦下棋時會先將電腦和玩 家棋型的分數(shù)分別計算一遍,然后選擇二者中分數(shù)最高的點下子。如果玩家的分數(shù)高,那么代 表電腦應該防守,如果電腦的分數(shù)高,那么代表電腦應該進攻。 具體的分數(shù)值賦值如下: 分數(shù)電腦玩家 活二6050 半活二4035 死二1010 半死二1010 活三950700 半活三900650 死三100100 半死三100100 活四60003500 半活四50003000 死四4000800 半死四3600750 活五2000015000 半活五100003300
28、 死五2000015000 半死五100003300 解釋一下其中的活,半活,死,半死: 活:代表幾個子是相連的,中間沒有空格,兩端都至少有一個空格。 半活:代表幾個子不是相連的,幾個子中間有一個空格,兩端都至少有一個空格。 死:代表幾個子是相連的,中間沒有空格,但有一端緊挨著對方的棋子或有一端正好在棋盤的 邊界。 半死:代表幾個子不是相連的,幾個子中間有一個空格,而且一端緊挨著對方的棋子或有一端 正好在棋盤的邊界。 每個位置的分數(shù)的計算方式是各個方向的分數(shù)相加,最后找出電腦棋型和玩家棋型的分數(shù) 的最高的位置為電腦的下棋點下棋。 7. 當任何一方有五個棋子沿著橫,豎,斜連在一起時,系統(tǒng)自動判斷
29、贏棋,并顯示黑方或白 方勝利。棋局結(jié)束后,任何一方均不能繼續(xù)操作。 8.程序流程如下圖 4-1: 圖 5-1 程序流程圖 5.2 程序設計 這個游戲程序包含兩個類: drawpanel:棋盤類,用于繪畫棋盤及棋子。 playervspc:主程序類,窗口的創(chuàng)建和整個邏輯程序代碼。 類 drawpanel 代碼: package resource; import java.awt.basicstroke; import java.awt.color; import java.awt.graphics; import java.awt.graphics2d; import java.awt.geom
30、.ellipse2d; import java.awt.geom.line2d; import javax.swing.jpanel; public class drawpanel extends jpanel private int a; private int n,m; public drawpanel(int k,int n1,int m1) a=k; n=n1; m=m1; public void paintcomponent(graphics g) super.paintcomponent(g); graphics2d g2=(graphics2d)g; graphics2d g3=
31、(graphics2d)g; double x=20; double y=20; double width=480; double height=480; double jiange=30; / 畫棋盤網(wǎng)格 for(int i=0;i=width/jiange;i+) g2.draw(new line2d.double(x+i*jiange,y,x+i*jiange,height+y); g2.draw(new line2d.double(x,y+i*jiange,width+x,y+i*jiange); /畫中間點的標記 g3.setpaint(color.red); g3.draw(new
32、 line2d.double(254,245,254,254); g3.draw(new line2d.double(245,254,254,254); g3.draw(new line2d.double(267,245,267,254); g3.draw(new line2d.double(267,254,275,254); g3.draw(new line2d.double(245,266,254,266); g3.draw(new line2d.double(254,266,254,275); g3.draw(new line2d.double(266,275,266,266); g3.
33、draw(new line2d.double(266,266,275,266); /畫旗子 for(int i=1;ia.length-1;i+) for(int j=1;j0 g2.setstroke(new basicstroke(1.5f); g2.draw(new line2d.double(30*m-16,30*n-16,30*m-4,30*n-4); g2.draw(new line2d.double(30*m-16,30*n-4,30*m-4,30*n-16); 類 playervspc 代碼: package resource; import java.awt.color; i
34、mport java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import java.awt.toolkit; import java.awt.dimension; import javax.swing.jcolorchooser; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing
35、.jmenu; import javax.swing.jmenubar; import javax.swing.jmenuitem; import javax.swing.jpanel; public class playervspc private jframe frame;/整個窗口 private jmenubar bar;/菜單欄 private jmenuitem jit;/菜單項數(shù)組 private jmenuitem mode;/模式項數(shù)組 private jmenu jm;/菜單 public boolean isblack; /是否為黑方下子狀態(tài) private int qi
36、pan;/棋盤數(shù)組 private int row;/當前行 private int col;/當前列 private int prow; private int pcol; private color c=new color(145,125,62);/棋盤背景顏色 private drawpanel panel;/棋盤面板 private jlabel label;/棋盤上方的標簽 private jpanel panel0;/棋盤上方條形面板 private boolean isend; private int qixingpc; private int qixingplayer; pri
37、vate boolean ispc = true; /記錄當前下棋模式 private boolean cmode = true;/記錄選擇的對弈模式 public playervspc() frame=new jframe(五子棋游戲); bar=new jmenubar(); jm=new jmenu2; jit=new jmenuitem2; qipan=new int1919; qixingpc = new int1717; qixingplayer = new int1717; for(int i=0;i19;i+) for(int j=0;j19;j+) qipanij=0; fo
38、r(int i=0;i17;i+) for(int j=0;j17;j+) qixingpcij=0; qixingplayerij=0; label = new jlabel(人+(ispc?機:人)+對弈模式,請按開局開始游戲!); panel0=new jpanel(); additems(); addeventaction(); printqipan(0,0); public void additems() jm0=new jmenu(游戲); jm1=new jmenu(選項); jit0=new jmenuitem3; jit00=new jmenuitem(開局); jit01=
39、new jmenuitem(重新開始); jit02=new jmenuitem(結(jié)束游戲); jit1=new jmenuitem3; jit10=new jmenu(對弈模式); mode=new jmenuitem2; mode0 = new jmenuitem(人人對弈); mode1 = new jmenuitem(人機對弈); jit10.add(mode0); jit10.add(mode1); jit11=new jmenuitem(悔棋); jit12=new jmenuitem(背景顏色); for(int i=0;ijm.length;i+) for(int j=0;jj
40、iti.length;j+) jmi.add(jitij); panel0.add(label); bar.add(jm0); bar.add(jm1); frame.setjmenubar(bar); frame.add(panel0,north); /給菜單項設定事件 public void addeventaction() jit00.addactionlistener(new actionlistener()/開局 public void actionperformed(actionevent e) row=prow=0;col=pcol=0; ispc=cmode; isblack
41、= true; isend = false; for(int i=0;i19;i+) for(int j=0;j19;j+) if(i=0|j=0|i=(qipan.length-1)|j=(qipan.length-1) qipanij = -1; else qipanij=0; if(ispc)/人機對弈模式 label.settext(游戲開始,請玩家先下棋!); else/人人對弈模式 label.settext(游戲開始,請+(isblack?黑:白)+方先下棋!); printqipan(row,col); addeventhandler(); ); jit01.addaction
42、listener(new actionlistener()/重新開始 public void actionperformed(actionevent e) row=prow=0;col=pcol=0; isblack = true; isend = false; for(int i=0;i19;i+) for(int j=0;j19;j+) if(i=0|j=0|i=(qipan.length-1)|j=(qipan.length-1) qipanij = -1; else qipanij=0; if(ispc)/人機對弈模式 label.settext(游戲開始,請玩家先下棋!); else
43、/人人對弈模式 label.settext(游戲開始,請+(isblack?黑:白)+方先下棋!); printqipan(row,col); addeventhandler(); ); /給模式選項添加事件監(jiān)聽 mode0.addactionlistener(new actionlistener() public void actionperformed(actionevent e) cmode = false; label.settext(已選擇人+(cmode?機:人)+對弈模式,重新開局將生效!); ); mode1.addactionlistener(new actionlistener() public void actionperformed(actionevent e) cmode = true; label.settext(已選擇人+(cmode?機:人)+對弈模式,重新開局將生效!); ); jit02.addactionlistener(new actionlistener()/結(jié)束游戲 public void actionperformed(actionevent e) label.sette
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鹽城師范學院《語文教學論》2021-2022學年第一學期期末試卷
- 鹽城師范學院《網(wǎng)上開店》2021-2022學年期末試卷
- 鹽城師范學院《跆拳道》2022-2023學年第一學期期末試卷
- 2024不銹鋼采購合同范文
- 人教版四年級上冊數(shù)學第六單元《除數(shù)是兩位數(shù)的除法》測試卷及參考答案(綜合卷)
- 北師大版四年級上冊數(shù)學第一單元 認識更大的數(shù) 測試卷含答案【滿分必刷】
- 冀教版四年級上冊數(shù)學第六單元 認識更大的數(shù) 測試卷【能力提升】
- 2024年寶馬轎跑車合作協(xié)議書
- 2024個人承包經(jīng)營合同
- 2024農(nóng)民專業(yè)合作社社員股份合同書
- 電子百拼練習題
- 廢舊鋰電池綜合回收利用
- 糖皮質(zhì)激素用藥原則
- 無人機航拍服務投標方案(技術方案)
- 不良清收培訓課件
- 【格力電器財務績效分析案例(定量論文)8400字】
- 部編版二年級下冊道德與法治《學習有方法》教學課件
- 2018版國家基藥物目錄excel版-完美整理
- xxx小學四年級語文上期中質(zhì)量分析總結(jié)
- 籃球隊成立策劃書-2
- 2023體育訓練基地租賃協(xié)議書
評論
0/150
提交評論