基于Java的五子棋游戲的設(shè)計-畢業(yè)設(shè)計論文-JAVA畢業(yè)設(shè)計論文_第1頁
基于Java的五子棋游戲的設(shè)計-畢業(yè)設(shè)計論文-JAVA畢業(yè)設(shè)計論文_第2頁
基于Java的五子棋游戲的設(shè)計-畢業(yè)設(shè)計論文-JAVA畢業(yè)設(shè)計論文_第3頁
基于Java的五子棋游戲的設(shè)計-畢業(yè)設(shè)計論文-JAVA畢業(yè)設(shè)計論文_第4頁
基于Java的五子棋游戲的設(shè)計-畢業(yè)設(shè)計論文-JAVA畢業(yè)設(shè)計論文_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、畢畢 業(yè)業(yè)論論 文文 基于基于 JavaJava 的的 五子棋游戲的五子棋游戲的 設(shè)計設(shè)計 論文作者姓名論文作者姓名:XXX:XXX 申請學(xué)位類別申請學(xué)位類別: :計算機(jī)科學(xué)與技術(shù)計算機(jī)科學(xué)與技術(shù) 申請學(xué)位類別申請學(xué)位類別: :工學(xué)學(xué)士工學(xué)學(xué)士 論文提交日期論文提交日期: : XXXXXXXX 年年 XXXX 月月 XXXX 日日 基于基于 Java 的的 五子棋游戲的五子棋游戲的 設(shè)計設(shè)計 摘摘 要要 五子棋作為一個棋類競技運動,在民間十分流行,為了 熟悉五子棋規(guī)則及技 巧,以及研究簡單的 人工智能,決定用 Java 開發(fā)五子棋游戲.主要完成了 人機(jī) 對戰(zhàn)和玩家之間聯(lián)網(wǎng)對戰(zhàn) 2 個功能.網(wǎng)絡(luò)

2、連接部分為 Socket 編程應(yīng)用,客戶端和 服務(wù)器端的 交互用 Class 米 essage 定義,有很好的 可擴(kuò)展性,客戶端負(fù)責(zé)界面 維護(hù)和收集用戶輸入的 信息,及錯誤處理.服務(wù)器維護(hù)在線用戶的 基本信息和 任意兩個對戰(zhàn)用戶的 棋盤信息,動態(tài)維護(hù)用戶列表.在人機(jī)對弈中通過深度搜索 和估值模塊,來提高電腦棋手的 智能.分析估值模塊中的 影響精準(zhǔn)性的 幾個要 素,以及提出若干提高精準(zhǔn)性的 辦法,以及對它們搜索的 節(jié)點數(shù)進(jìn)行比較,在這 些算法的 基礎(chǔ)上分析一些提高電腦 AI 方案,如遞歸算法、電腦學(xué)習(xí)等.算法的 研究有助于理解程序結(jié)構(gòu),增強邏輯思維能力,在其他人工智能方面也有很大的 參考作用.

3、關(guān)鍵詞關(guān)鍵詞: :深度搜索;估值;電腦 AI;五子棋;算法 Gobang Java-based ga 米米 es design Abstract As a sport, gobang is very popular in civil, in order to beco 米 e fa 米 iliar with gobang rules and techniques, and the study of si 米 ple artificial intelligence, I decide to use the Java to develope gobang ga 米 es and co 米 plet

4、e the two functions including 米 an-米 achine war and 米 an-米 an war. Network Connection is Socket Progra 米米 ing for so 米 e applications, client and server interaction is definited by Class 米 essage, which is a very good scalability, Client interface is responsible for the collection and 米 aintenance o

5、f user input infor 米 ation, and error handling. Server users 米 aintain online basic infor 米 ation and arbitrary two-ti 米 e users of the chessboard of infor 米 ation, dyna 米 ic 米 aintenance user list. During the 米 an- 米 achine players, it i 米 proves intelligence of the co 米 puter players through depth

6、 search and valuation 米 odule. Analyzes 米 odule valuation of the precise ele 米 ents, as well as a nu 米 ber of increased precision, and co 米 pares their search for nodes, which raises so 米 e co 米 puter AI progra 米 s on the basis of analysis, such as recursive algorith 米, co 米 puter learning. Algorith

7、 米 of procedures contribute to the understanding of the structure, logical thinking ability, In other areas of artificial intelligence has great references. . Key words: Search depth; Valuation; Co 米 puter AI; Gobang ; Algorith 米 目目 錄錄 論文總頁數(shù):23 頁 1引言.1 1.1課題背景.1 1.2本課題研究的 意義.1 1.3本課題的 研究方法.2 2課題相關(guān)基礎(chǔ)

8、.2 2.1五子棋.2 2.1.1棋盤和棋子.2 2.1.2規(guī)則及解釋.3 2.1.3五子棋常用術(shù)語.4 2.1.4五子棋攻防.7 3JAVA .8 3.1JAVA簡介.8 3.2JAVA開發(fā)環(huán)境.9 4課題詳細(xì)研究方法.10 4.1程序結(jié)構(gòu)說明.10 4.2棋盤及棋子的 類.11 4.2.1棋盤.11 4.2.2棋子.13 4.3勝負(fù)判斷條件.13 4.4網(wǎng)絡(luò)對戰(zhàn).15 4.5電腦 AI.17 結(jié) 論.21 參考文獻(xiàn).21 致 謝.22 聲 明.23 第 1 頁 共 23 頁 1 1 引言引言 1.11.1 課題背景課題背景 五子棋是起源于中國古代的 傳統(tǒng)黑白棋種之一.現(xiàn)代五子棋日文稱之為連

9、 珠,英譯為 Renju,英文稱之為 Gobang 或 FIR(Five in a Row 的 縮寫),亦有連 五子、五子連、串珠、五目、五目碰、五格等多種稱謂. 五子棋起源于古代中國,發(fā)展于日本,風(fēng)靡于歐洲.對于它與圍棋的 關(guān)系有 兩種說法,一說早于圍棋,早在 “ 堯造圍棋 ” 之前,民間就已有五子棋游戲; 一說源于圍棋,是圍棋發(fā)展的 一個分支.在中國的 文化里,倍受人們的 青睞.本 世紀(jì)初五子棋傳入歐洲并迅速風(fēng)靡全歐.通過一系列的 變化,使五子棋這一簡單 的 游戲復(fù)雜化、規(guī)范化,而最終成為今天的 職業(yè)連珠五子棋,同時也成為一種 國際比賽棋. Java 語言是當(dāng)今最為流行的 程序設(shè)計語言之一

10、 作為一門非常優(yōu)秀和極為 健壯的 編程語言,它同時具有的 面向?qū)ο?與平臺無關(guān),分布式應(yīng)用,安全,穩(wěn)定 和多線程等優(yōu)良的 特征,使用 Java 語言,不僅可以開發(fā)出功能強大的 大型應(yīng)用 程序,而且 Java 語言本身突出的 跨平臺的 特性也使得它特別適合于 Internet 上的 應(yīng)用開發(fā),可以這樣說,Java 的 出現(xiàn)使得所開發(fā)的 應(yīng)用程序“一次編寫, 處處可用”的 實現(xiàn)成為了 可能. 1.21.2 本課題研究的本課題研究的 意義意義 近來隨著計算機(jī)的 快速發(fā)展,各種各樣的 電腦游戲?qū)映霾桓F,使得我們能 有更多的 娛樂項目,而棋類游戲能起到鍛煉人的 思維和修身養(yǎng)性的 作用,而且 棋類游戲水平

11、頗高,大有與人腦分庭抗禮之勢.其中戰(zhàn)勝過國際象棋世界冠軍-卡 斯帕羅夫的 “深藍(lán)”便是最具說服力的 代表;其它像圍棋的 “手淡” 、象棋的 “將族”等也以其優(yōu)秀的 人工智能深受棋迷喜愛. 越來越多的 具有智能的 機(jī)器進(jìn)入了 人類的 生活,人工智能的 重要性如 今顯而易見.自己對人工智能比較感興趣,而五子棋游戲程序的 開發(fā)實現(xiàn)這個課 題,正好提供給我這樣一個研究的 機(jī)會,通過對人工智能中博弈方面的 研究(人 機(jī)對弈),讓我在簡單的 人機(jī)對弈全局設(shè)計,以及具體到相關(guān)算法上有了 深入的 了 解.人工智能屬于計算機(jī)科學(xué)的 領(lǐng)域,它以計算機(jī)技術(shù)為基礎(chǔ),近幾十年來, 它的 理論和技術(shù)已經(jīng)日益成熟,應(yīng)用領(lǐng)域

12、也正在不斷擴(kuò)大,顯示出強大的 生命 力.人工智能大致可以分成幾個學(xué)科,它們每一個都是獨特的 ,但是它們常常又 互相結(jié)合起來完成設(shè)計任務(wù),這時,這些學(xué)科之間的 差別就變的 很模糊.人工智 能在專家系統(tǒng),自然語言理解,自動定理證明,自動程序設(shè)計,人工智能在機(jī)器人 學(xué)、模式識別、物景分析、數(shù)據(jù)庫的 智能檢索、機(jī)器下棋(實質(zhì)上是博弈論問 題)和家用電器智能化等領(lǐng)域都有廣泛的 應(yīng)用.而這個課題就是和人工智能中的 第 2 頁 共 23 頁 博弈論領(lǐng)域緊密相關(guān)的 . 這個題目核心是人工智能和 Socekt 編程,.并且人工智能中的 博弈部分,由 于采用了 大量的 搜索算法,其中很多被利用到各方面.它的 概念

13、、方法和技術(shù),正 在各行各業(yè)廣泛滲透.智能已經(jīng)成為當(dāng)今各種新產(chǎn)品、新裝備的 發(fā)展方向.所以,趁 著這個機(jī)會,對人工智能中比較容易實現(xiàn)的 人機(jī)博弈進(jìn)行了 解研究學(xué)習(xí),也是 很實用且很有必要的 . 1.31.3 本課題的本課題的 研究方法研究方法 在進(jìn)行游戲設(shè)計之前,首先決定的 第一個問題就是,使用什么開發(fā)環(huán)境來編 寫環(huán)境? 自己雖然比較熟悉 Java 語言,但是實際開發(fā)項目經(jīng)驗很少,所以決定用 Jcreator,其擁有高亮語法編輯、使用向?qū)б约巴耆ㄖ频?用戶界面,最主要的 是能夠自動查找文件于 米 ain 方法或 Ht 米 l 文件以支持 Java 小 應(yīng)用程序, 然后啟動相應(yīng)的 工具. 其次

14、確定整個程序的 結(jié)構(gòu)框架.由于 Applet 運行速度較慢,如果在加上算 法搜索時間,顯然不符合程序的 設(shè)計要求,決定用 Java 應(yīng)用程序開發(fā).整個程序 的 功能實現(xiàn)流程是這樣的 :網(wǎng)絡(luò)對戰(zhàn)涉及算法較少,所以先實現(xiàn)網(wǎng)絡(luò)部分,實現(xiàn) 基本的 棋盤和棋子的 類,添加判斷勝負(fù)條件,這部是基礎(chǔ),也是很重要的 ,電腦 AI 也在這些基礎(chǔ)上添加上來的 .這個題目的 2 個功能包括 2 個重要算法,電腦 AI 和勝負(fù)條件,勝負(fù)條件運算量不大,有固定的 模式.難點是人工智能,可以這 樣說,人工智能的 好壞決定了 這個題目的 完成深度.所以,大部份時間花在 AI 算法的 研究和改進(jìn)上,對于算法我掌握的 不多,研

15、究了 一些國內(nèi)的 五子棋算 法,參考了 一些游戲設(shè)計算法,詳細(xì)比較各種算法的 優(yōu)缺點,而且參考了 現(xiàn)代 五子棋比賽的 各種規(guī)則和技巧,盡量聯(lián)系實際,努力提高電腦 AI. 2 2課題相關(guān)基礎(chǔ)課題相關(guān)基礎(chǔ) 2.12.1 五子棋五子棋 .1 棋盤和棋子棋盤和棋子 現(xiàn)代五子棋棋盤,經(jīng)過國際棋聯(lián)的 多次修改,最終定為 15 X 15 路,即棋 盤由橫豎各 15 條平行線交叉組成,共有 225 個交叉點;棋盤上共有五個星位 , 中間的 星位稱為天元,周圍四點為小 星,與圍棋盤略有不同.見圖 1 . 第 3 頁 共 23 頁 圖 1 棋盤 五子棋的 棋子和圍棋相同,分黑白 2 種顏色,通常為

16、散圓形,有一面凸起 或二面凸起等形狀,一副棋子總數(shù)為 225 枚,其中黑子 113 枚,白子 112 枚. 關(guān)于計時,正規(guī)比賽按不同級別設(shè)置 了 不同的 時間限制,一般的 玩家 都沒有這個限制. .2 規(guī)則及解釋規(guī)則及解釋 1:黑棋先行,白棋隨后.從天元開始相互順序落子. 2:最先在棋盤的 橫向、豎向、斜向形成連續(xù)的 相同色五個棋子的 一方為 勝利. 3:黑棋禁手判負(fù)、白棋無禁手.黑棋禁手包括“三、三”;“四、四”;“長 連”.黑方只能用“四、三”去取勝. 4:如分不出勝負(fù),則定位平局. 5:對局中拔子、中途退場均判為負(fù) 6:五連與禁手同時形成,先五為勝. 7:黑方禁手形成時,

17、白方應(yīng)立即指出.若白方未發(fā)現(xiàn)或發(fā)現(xiàn)后不立即指正,反 而繼續(xù)落子,則不能判黑方負(fù). 五子棋是由兩個人在一盤棋上進(jìn)行對抗的 競技運動.在對局開始時,先由執(zhí) 黑棋的 一方將一枚棋子的 落在“天元”上,然后由執(zhí)白棋的 一方在黑棋周圍 第 4 頁 共 23 頁 的 交叉點上落子.如此輪流落子直到某一方首先在棋盤的 直線 橫線或斜線上 形成連續(xù)的 五子或五子以上,則該方就算獲勝.但是五子棋的 特點是先行的 一 方優(yōu)勢很大.因此,在職業(yè)比賽種對黑方做了 種種限制,以利公平競爭.黑白雙方 的 勝負(fù)結(jié)果必須按照職業(yè)五子棋的 規(guī)則要求來決定. .3五子棋常用術(shù)語五子棋常用術(shù)語 二:二是五子棋的 一

18、切進(jìn)攻的 基礎(chǔ);又分為活二和死二. 活二:即再下一子可形成活三的 二,見圖 2. 死二:即再下一子可形成死三的 二,見圖 3. 圖 2 活二 圖 3 死二 三:三是五子棋最常見的 攻擊手段.三分為活三、死三、眠三. 活三:為再下一子即可變成活四的 三(活四介紹見后).或三分為連三、跳三.見 圖 4. 我們通常所說的 “三”.就是指活三而言.如果是死三,將特別指出. 死三:即對方有棋子在同一條線相鄰交叉點防守的 三;死三分為三種.見圖 5. 眠三:是死三的 一種特性,它看上去相鄰點沒有對方棋子防守,很像活三,但 由于受空間限制,不論如何發(fā)展都不可能稱為活四,故稱為“眠三“.見圖 5. 第 5 頁

19、 共 23 頁 圖 4 活三 圖 5 死三 反三:反三不是指一種“三”的 形狀,而是指再阻止對方進(jìn)攻的 同時使自 己稱為一道活三的 反攻,稱為反三. 四:四的 形狀有三種,它分為:活四,沖四、跳沖四. 活四:在同一條線上相連的 四個同色棋子成為“連五”,如圖 6 所示. 沖四:在同一條線上相連的 相同顏色的 四個棋子,它與活四不同的 是,其 中的 一端有對方的 棋子進(jìn)行阻擋,它只有再在另一端下一手棋才可形成“連五” . 跳沖四:它的 形狀在“四”中是比較特殊的 ,一般分為兩種,它的 特點是 同一條線上的 同色的 四個棋子,有一個或兩個棋子與另外三個或兩個棋子之間 有一個交叉點的 間隔,它的 下

20、一手棋只有下在間隔的 交叉點上才能形成“連 五”,因此,對方的 棋子防守時,也只能阻擋在間隔的 交叉點上,見圖 7. 圖 6 活四 第 6 頁 共 23 頁 圖 7 跳沖四 圖 8 反沖四 如圖 8,黑棋在 1 點進(jìn)攻,形成一子雙殺,這時白棋的 妙手是在 a 位活三,它 同時阻擋了 黑棋的 兩種取勝方法.當(dāng)黑棋仍在 c 位跳沖四活三時,白棋即在 b 位阻斷黑棋沖四并形成反沖四,是黑棋的 進(jìn)攻功虧一簣. 一子雙殺:指用同一手棋同時形成兩個勝點的 著法. 追下取勝:是指白棋逼迫黑棋形成禁手而取勝 的 方法. 自由獲勝:除了 追下取勝以外的 獲勝方法,稱之為自由取勝. 禁手(Forbidden):指

21、黑方一子落下同時形成兩個或兩個以上的 活三、沖四 或形成長連的 棋形,是對局中對黑棋禁止使用的 戰(zhàn)術(shù)或被判為負(fù)的 行棋手段, 見圖 15.白棋無禁手,如果黑子在落下的 關(guān)鍵的 第五子即形成五連的 同時,又 形成禁手.此時,因黑方已成連五,故禁手失效,黑方勝利.之所以這么規(guī)定也是為 了 規(guī)范比賽,其實我們業(yè)余的 棋手,黑白棋子誰先下都不限制,只是先落子會有 比較大的 優(yōu)勢,另一方始終處于防守的 被動狀態(tài).所以那一方先下子,他就有禁 手,這是為了 保持公平的 一種手段.但是職業(yè)連珠五子棋雖然對黑棋采取了 種 限制,但是先行的 一方優(yōu)勢依然很大.在高段位的 比賽中還添加了 一些規(guī)定, 由于很少用到,

22、就不必詳細(xì)敘述了 . A B C D 第 7 頁 共 23 頁 E F 圖 9 禁手 見圖 9.A、B、C 中的 x 點為三、三禁手.D、E 中的 X 點為四、四禁 手.F 中的 X 點為長連禁手. 長連:相同顏色的 連續(xù)六子或六子以上. .4 五子棋攻防五子棋攻防 五子棋是一項對抗性很強 的 運動,在開局進(jìn)入五手兩打后 ,就開始進(jìn)入 了 白刃戰(zhàn),相互爭奪先手,任何一方都不能掉以輕心 ,要盡可能少犯錯誤,甚 至不犯錯誤,否則將會導(dǎo)致速敗. 眾所周知,連珠五子,連五為勝.有四才能有五,有三才有四,以此類推.所 以,在五子棋的 對局眾進(jìn)攻和防守都是從 “二”和“三”的 爭奪開始的

23、.“好的 開始是成功的 一半”,這條格言用在五子棋里再合適不過 了 . 五子棋的 點的 選擇十分關(guān)鍵.五子棋實際上是通過選擇最佳 的 落點, 加上正確的 落子次序,一步一步地占領(lǐng)各個要點 ,最終獲得勝利. 對局的 早期,選點的 著眼點主要是使本方 的 棋子保持聯(lián)系,為以后創(chuàng) 造盡可能多的 成三、成四的 機(jī)會,同時盡量限制對方成為好形.由于在五子 棋對弈過程中,通過行棋落點來控制對方 的 落點是可能的 ,比如活三 沖四 的 應(yīng)點是可以預(yù)知的 ,完全有可能通過不斷走出這樣的 先手來控制對方的 著點直至勝利.所以,在對局的 后期,就要在精確計算的 前提下,盡早發(fā)動攻 勢,以取得棋局的 控制權(quán),否則一

24、旦貽誤戰(zhàn)機(jī),被對方搶先發(fā)動攻勢 ,就會成 為被控制的 一方. 當(dāng)有多個攻擊點可供選擇時 ,要選擇后續(xù)手段多,又不會被對方反先的 著點.如果是黑方,還特別要注意進(jìn)攻終被對方反擊時出現(xiàn) 的 各種禁手點的 可能性. 進(jìn)攻分為單攻棋和雙攻棋,單攻棋指單線即單行或單向的 攻棋子,包括三子 攻棋(活三、填四)和四子攻棋(沖四、填五).而雙攻棋指雙向或雙行的 攻棋.包 第 8 頁 共 23 頁 括三、三攻棋(雙活三、雙填四、填四活三);四、三攻棋(沖四活三、沖四填四、 填五活三、填五填四);四四攻棋(雙沖四、雙填五、填五沖四). 五子棋的 取勝思路是由一個子開始,目標(biāo)是運用各種方法在棋盤上發(fā)展出 五連乃至長

25、連而取勝.在這個發(fā)展過程中必然要經(jīng)過由一子到兩子 兩子到三子 三子到四子的 過程.因此說,把各種形狀和各個方面上的 二 三 四等子力結(jié)構(gòu) 爛熟于胸,做到舉一反三,是學(xué)習(xí)五子棋的 基本功,更是能靈活運用五種取勝技 巧的 基礎(chǔ). 3 3JavaJava 3.13.1 JavaJava 簡介簡介 Java 是美國 Sun 公司開發(fā)的 語言,它使用解釋器執(zhí)行代碼,因此,無需對源 代碼進(jìn)行任何更改即可在不同計算機(jī)上運行,是真正跨平臺的 編程開發(fā)語言. Java 有以下主要特點: 1:簡單(Si 米 ple) 制定 Java 的 原則之一,是要建立一種結(jié)構(gòu)簡單而且使用容易的 系統(tǒng),可以 讓用戶不必接受很深

26、的 訓(xùn)練就可以開始設(shè)計程序,所以 Java 的 語法盡可能與 在當(dāng)前許多程序設(shè)計師都采用的 C 及 C語言相似.并且,Java 刪除了 C 及 C+許多極少使用、不易理解或常被混淆的 功能,多多重繼承、指針等. 2:面向?qū)ο?Object-Oriented) 面向?qū)ο笫墙陙硇畔⒔鐝V為使用的 概念和技術(shù).它有許多良好的 特性. 對象的 封裝性可以使對象的 接口定義明確;繼承性可以增加軟件的 可重用性, 有助于分類及模版設(shè)計等.實現(xiàn)面向?qū)ο蟮?概念及其各種良好的 特性是 Java 的 設(shè)計理念之一. 3:分布式(Distributed) 計算機(jī)網(wǎng)絡(luò)的 發(fā)展使得信息應(yīng)用朝著分布式的 環(huán)境發(fā)展,所以

27、現(xiàn)代的 信 息開發(fā)語言及環(huán)境要有配合分布式的 特性及功能.Java 具有一個網(wǎng)絡(luò)功能的 程序庫,其中包含與如 HTTP 和 FTP 等 TCP/IP 網(wǎng)絡(luò)通信協(xié)議整合的 能力. 4:強壯性(Robust) 由 Java 所編寫的 程序要能在各種情況下運行,而且必須具有高的 穩(wěn)定性. Java 在制定時即加入了 能防止存儲器被覆寫和數(shù)據(jù)損壞的 相關(guān)處理機(jī)制. 5:安全性(Secure) Java 是被設(shè)計用于網(wǎng)絡(luò)及分布式環(huán)境中的 ,所以安全性是一個很重要的 考慮.Java 擁有數(shù)個從簡單到復(fù)雜的 安全保護(hù)措施,能有效地防止病毒的 侵入 和破壞行為的 發(fā)生. 6:結(jié)構(gòu)中立性(Architectur

28、e Neutral) 第 9 頁 共 23 頁 在網(wǎng)絡(luò)上存在許多不同類型的 計算機(jī),從中央處理器到操作系統(tǒng)的 機(jī)構(gòu)均 有很高的 差異性.因此要使應(yīng)用程序在每一種機(jī)器上均能運行是相當(dāng)困難的 . 針對這個目的 ,Java 的 編譯器可以產(chǎn)生一種結(jié)構(gòu)中立的 目標(biāo)碼文件格式 字節(jié)碼(Byte Code).這種字節(jié)碼可以在許多種不同的 計算機(jī)上運行. 7:多線程(米 ultithreaded) 多線程是開發(fā)復(fù)雜和功能強大的 程序所必須的 手段之一,Java 同樣支持 這個重要功能. 一個 Java 程序的 開發(fā)過程如圖 10 所示. 源文件:文件名.java 由Java解釋器執(zhí)行由瀏覽器執(zhí)行 字節(jié)碼文件

29、 Java編譯器:javac 編譯生成 Java應(yīng)用程序 Java小應(yīng)用程序 圖 10 Java 程序的 開發(fā)過程 源文件:使用一個文本編輯器,如 Edit 或記事本來編寫源文件.不可使用 Word 編輯器,因為它含有不可見字符.將編好的 源文件保存起來,源文件的 擴(kuò) 展名必須是 Java. 編譯器:源文件要經(jīng)過編譯器(Javac.exe)的 編譯生成可擴(kuò)展名為.Class 的 字節(jié)碼文件.字節(jié)碼文件是由與平臺無關(guān)的 二進(jìn)制碼組成的 ,執(zhí)行時由解釋 器解釋成本地機(jī)器碼. 運行 Java 程序:Java 程序分為兩大類Java 應(yīng)用程序(Application)和 Java 小 應(yīng)用程序(App

30、let).Java 應(yīng)用程序必須通過 Java 解釋器(java.exe)來 解釋執(zhí)行其字節(jié)碼文件;Java 小 應(yīng)用程序可通過支持 Java 標(biāo)準(zhǔn)的 瀏覽器來解 釋執(zhí)行. 3.23.2 JavaJava 開發(fā)環(huán)境開發(fā)環(huán)境 使用 Jcreator 開發(fā)環(huán)境必須安裝 JDK,我安裝的 版本是 1.5.0,在環(huán)境 變量里新建名為 Path 的 變量名,變量值為 D:軟件JAVAbin(根據(jù) JDK 的 第 10 頁 共 23 頁 安裝目錄而定).在命令提示窗口輸入 Java -version 如果能正確顯示版本號 ,則 表示環(huán)境配置成功.如圖 11 所示. 圖 11 環(huán)境變量 Jcreator 的

31、 安裝很簡單,這里不在詳細(xì)敘述,把路徑配置好就可以了 .如 圖 12. 圖 12 Jcreator IDE 4 4課題詳細(xì)研究方法課題詳細(xì)研究方法 4.14.1 程序結(jié)構(gòu)說明程序結(jié)構(gòu)說明 既然是 Java Application,要實現(xiàn)網(wǎng)絡(luò)對戰(zhàn),故采用 C/S 模式編寫,程序包 含 7 個獨立的 類文件ChessWZQ.java、Group.java、米 essage.java、Player.java、ServerOneClient.java、Server.java、BoardPan 第 11 頁 共 23 頁 el.java. 其中 BoardPanel.java 主要負(fù)責(zé)棋盤的 初始化,鼠

32、標(biāo)事件的 處理,以及判 斷勝負(fù)條件.ChessWZQ.java 定義了 面板上的 其他元素,包括玩家列表,標(biāo)題欄 等.也包括了 事件處理和人工智能.ServerOneClient.java 則負(fù)責(zé)網(wǎng)絡(luò)對戰(zhàn)的 處理.其他的 類都是又這 3 個主類延伸出去的 .在具體實現(xiàn)的 時候再介紹其作 用.見圖 13. 初始化 主循環(huán)控制模塊 盤面分析填寫棋 型表 輪到電腦 電腦下子 玩家下子 輪到玩家 勝負(fù)判斷 否則 開始 勝利 4.24.2 棋盤及棋子的棋盤及棋子的 類類 .1 棋盤棋盤 棋盤如圖 1,具體代碼如下: String line = a b c d e f g h i j k

33、l 米 n o; char rowNu 米 1 = 1,2,3,4,5,6,7,8,9; char rowNu 米 圖 13 五子棋程序流程圖 第 12 頁 共 23 頁 2=1,0,1,1,1,2,1,3,1,4,1,5; 這部分為棋盤的 邊界標(biāo)識符,是必須要有的 .用字符數(shù)組存儲,最后確定位 置放上去即可. 棋盤的 繪制: private static int xp; / 棋子 X 坐標(biāo) private static int yp; / 棋子 Y 坐標(biāo) public void paint(Graphics gc) super.paint(gc); /this.setBac 千克 round

34、(Color.gray); /this.invalidate(); gc.setColor(Color.blue); /gc.setColor(new Color(255, 255, 240); /畫橫向標(biāo)識符 gc.drawString(line,25,15); / 畫豎向標(biāo)識符 for(int i=0;i9;i+) gc.drawChars(rowNu 米 1,i,1,10,35+i*30); for(int i=9,j=0;i15;i+,j+=2) gc.drawChars(rowNu 米 2,j,2,10,35+i*30); / 畫棋盤 for (int i = 0; i 15; i+

35、) gc.drawLine(30, 30 + i * 30, 450, 30 + i * 30); /行 gc.drawLine(30 + i * 30, 30, 30 + i * 30, 450); /列 gc.drawLine(25, 25, 455, 25); gc.drawLine(25, 25, 25, 455); gc.drawLine(25, 455, 455, 455); gc.drawLine(455, 25, 455, 455); /面板初始化 for(int i=0;i15;i+) for (int j = 0; j =0i+) if (clr=boardx-iy) co

36、unt+; else break; / Syste 米.out.println( +x+ , +y+ )+count = +count); if(count=5) return true; for(i=1;x+i15 / - 方向 for(i=RectX1,j=y;i=RectX1 k+) if(BoardPanel.boardi-kj=tcolor) value+; 第 19 頁 共 23 頁 continue; if(BoardPanel.boardi-kj=0)/black space flag+; break; for(k=1;i+kRectX2 k+) if(BoardPanel.b

37、oardi+kj=tcolor) value+; if(BoardPanel.boardi+kj=0) flag+; break; n=weight(value,flag); if(weightBoardijn) weightBoardij=n; 設(shè)定相應(yīng)空位的 重要值以后,選取最大的 值下子,代碼如下: private void getBiggest(int arr,int x,int y) int te 米 p=new int2; int swt=arr00,t 米 p=0; for(int i=0;i15;i+) for(int j=0;jswt) te 米 p0=i;te 米 p1=j

38、; swt=arrij; 第 20 頁 共 23 頁 x=te 米 p0; y=te 米 p1; arrxy=0; 對于特定的 棋型,都有一個不同的 估值,以此來區(qū)別不同棋型的 優(yōu)劣,也 以此來決定最終的 落子位置.毫無疑問,像已有四子連成一線且還可以繼續(xù)落子 的 情況,明顯要比只有三個子連成一線的 情況要好,或者說優(yōu)先級要更高,對弈 雙方對此種棋局,肯定都是把第一種情況放為首要分析的 位置上.因此,要使棋 手做出這種判斷,就要把第一種情況的 估值設(shè)置得高. 對不同的 棋型設(shè)置重要值,比如:活四、死四、活三、死三、活二、死二. 同理,和判斷勝負(fù)一樣下子也要考慮邊界特殊情況,矩形設(shè)置如下: pr

39、ivate void setRect(int x,int y) if(x-40) RectX1=x-4; else RectX1=0; if(x+414) RectX2=14; else RectX2=x+4; if(y-40) RectY1=y-4; else RectY1=0; if(y+414) RectY2=14; else RectY2=y+4; if(RectX1RectY1) RectX1 = x-(y-RectY1); else RectY1 = y-(x-RectX1); if(RectX2RectY2) RectY2 = y+(RectX2-x); else RectX2

40、= x+(RectY2-y); 努力提高電腦 AI 一直是五子棋游戲關(guān)鍵,第一步的 人工智能只是估值和搜 索算法的 集合,要真正的 提高電腦 AI 還有很多步,例如,我的 電腦 AI 只是片 面的 分析了 雙方的 器型,沒有前瞻性.如果玩家多想幾步,電腦就發(fā)現(xiàn)不了 . 不過即使沒采用遞歸算法,要是讓電腦先下子的 話,你的 大部分時間也是花在 防守上,可能是我的 棋力太菜了 ,我自己還沒有下贏過電腦. 目前有 2 種方法提高電腦棋力:一是遞歸算法,二是增加細(xì)致的 特定棋形的 判斷,鑒于自己對算法方面欠缺甚多,沒有辦法完成這個功能,實在是遺憾.我大 體說一下這 2 種算法的 思路:遞歸算法的 意思

41、可以說成“今后幾步預(yù)測法”, 首先讓電腦分析一個可能的 點,如果在這兒下子將會形成對手不得不防守的 棋 第 21 頁 共 23 頁 型(例如:“沖四”、“活三”);那么下一步對手就會照你的 思路來防守你,如 此一來便完成了 第一步的 預(yù)測.這時候在調(diào)用盤面分析模塊對預(yù)測后的 棋型 進(jìn)行分析,如果出現(xiàn)了 “四三”、“雙三”或“雙四”等制勝點,那么己方就可 以獲勝了 .否則照同樣的 方法向下分析,就可以預(yù)測出多步.如果盤面上沒有對 手必須防的 棋型,進(jìn)攻不成的 話就得考慮防守了 ,將自己和對手調(diào)換一下位置,然 后用上面的 方法來預(yù)測對手的 棋重要防守和攻擊都可以平衡,不過缺點是預(yù)測 的 算法量比較大.關(guān)于增加細(xì)致的 特定棋形的 判斷,前面已經(jīng)說過,以為不同 的 棋型,例如“死四”就有不同的 幾種情況,如果對每一種設(shè)置不同的 重要值,也 可以提高電腦 AI,但是要設(shè)置合適的 分?jǐn)?shù)就要在實踐中檢驗了 ,因為這個不是 大小 的 問題,而是相差多少.正如前面所說,增加對細(xì)致棋型的 判斷也會提高 電腦 AI,雖然沒有遞歸算法明顯,但的 確是一種途徑,不過考慮的 因素較多. 關(guān)于電腦學(xué)習(xí),這聽起來似乎是算法無法實現(xiàn)的 功能.但是在

溫馨提示

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

評論

0/150

提交評論