【正文】
共 23 頁 其中 主要負(fù)責(zé)棋盤的初始化,鼠標(biāo)事件的處理,以及判斷勝負(fù)條件。 運行 Java 程序: Java 程序分為兩大類 —— Java 應(yīng)用程序( Application)和 Java 小應(yīng)用程序( Applet)。這種字節(jié)碼可以在許多種不同的計算機上運行。 Java 具有一個網(wǎng)絡(luò)功能的程序庫,其中包含與如 HTTP 和 FTP等 TCP/IP 網(wǎng)絡(luò)通信協(xié)議整合的能力。 3 Java Java 簡介 Java 是美國 Sun 公司開發(fā)的語言,它使用解釋器執(zhí)行代碼,因此,無需對源代碼進(jìn)行任何更改即可在 不同計算機上運行,是真正跨平臺的編程開發(fā)語言。 當(dāng)有多個攻擊點可供選擇時,要選擇后續(xù)手段多,又不會被對方反先的著點。有四才能有五,有三才有四 ,以此類推。在高段位的比賽中還添加了一些規(guī)定,由于很少用到,就不必詳細(xì)敘述了。 追下取勝:是指白棋逼迫黑 棋形成禁手而取勝的方法。 第 5 頁 共 23 頁 圖 4 活三 圖 5 死三 反三:反三不是指一種“三”的形狀,而是指再阻止對方進(jìn)攻的同時使自己稱為一 道活三的反攻,稱為反三。見圖 4。黑白雙方的勝負(fù)結(jié)果必須按照職業(yè)五子棋的規(guī)則要求來決定。 5:對局中拔子、中途退場均判為負(fù) 6:五連與禁手同時形成,先五為勝。 關(guān)于計時,正規(guī)比賽按不同級別設(shè)置了不同的時間限制,一般的玩家都沒有這個限制。 其次確定整個程序的結(jié)構(gòu)框架。人工智能在專家系統(tǒng),自然語言理解,自動定理證明,自動程序設(shè)計,人工智能在機器人學(xué)、模式識別、物景分析、數(shù)據(jù)庫的智能檢索、機器下棋(實質(zhì)上是博弈論問題)和家用電器智能化等領(lǐng)域都有廣泛的應(yīng)用。通過一系列的變化,使五子棋這一簡單的游戲復(fù)雜化、規(guī)范化,而最終成為今天的職業(yè)連珠五子棋,同時也成為一種國際比賽棋。 Computer AI。主要完成了人機對戰(zhàn)和玩家之間聯(lián)網(wǎng)對戰(zhàn) 2 個功能 。算法的研究有助于理解程序結(jié)構(gòu),增強邏輯思維能力,在其他人工智能方面也有很大的參考作用。對于它與圍棋的關(guān)系有兩種說法,一說早于圍棋,早在 “ 堯造圍棋 ” 之前,民間就已有五子棋游戲;一說源于圍棋,是圍棋發(fā)展的一個分支。 自己對 人工智能比較感興趣,而五子棋 游戲 程序的開發(fā)實現(xiàn)這個課題,正好提供給我這樣一個研究的機會,通過對人工智能中博弈方面的研究(人機對弈),讓 我 在簡單的人機對弈全局設(shè)計,以及具體到相關(guān)算法上有了深入的了解。智能已經(jīng)成為當(dāng)今各種新產(chǎn)品、新裝備的發(fā)展方向。 2 課題相關(guān)基礎(chǔ) 五子棋 棋盤和棋子 現(xiàn)代五子棋棋盤,經(jīng)過國際棋聯(lián)的多次修改,最終定為 15 X 15 路,即棋盤由橫豎各 15 條平行線交叉組成,共有 225 個交叉點;棋盤上共有五個星位,中間的星位稱為天元,周圍 四點為小星,與圍棋盤略有不同。黑棋禁 手包括“三、三”;“四、四”;“長連”。如此輪流落子直到某一方首先在棋盤的直線 橫線或斜線上形成連續(xù)的五子或五子以上,則該方就算獲 勝。三分為活三、死三、眠三。見圖5。 圖 6 活四 第 6 頁 共 23 頁 圖 7 跳沖四 圖 8 反沖四 如圖 8,黑棋在 1 點進(jìn)攻,形成一子雙殺,這時白棋的妙手是在 a位活三,它同時阻擋了黑棋的兩種取勝方法。 之所以這么規(guī)定也是為了規(guī)范比賽,其實我們業(yè)余的棋手,黑白棋子誰先下都不限制,只是先落子會有比較大的優(yōu)勢,另一方始終處于防守的被動狀態(tài)。 長連:相同顏色的連續(xù)六子或六子以上。 對局的早期,選點的著眼點主要是使本方的棋子保持聯(lián)系,為以后創(chuàng)造盡可能多的成三、成四的機會,同時盡量限制對方成為好形。 五子棋的取勝思路是由一個子開始,目標(biāo)是運用各種方法在棋盤上發(fā)展出五連乃至長連而取勝。對象的封裝性可以使對象的接口定義明確;繼承性可以增加軟件的可重用性,有助于分類及模版設(shè)計等。 6:結(jié)構(gòu)中立性 (Architecture Neutral) 第 9 頁 共 23 頁 在網(wǎng)絡(luò)上存在許多不同類型的計算機,從中央處理器到操作系統(tǒng)的機構(gòu)均有很高的差異性。將編好的源文件保存起來,源文件的擴展名必須是 Java。 圖 11 環(huán)境變量 Jcreator 的安裝很簡單,這里不在詳細(xì)敘述,把路徑配置好就可以了。在具體實現(xiàn)的時候再介紹其作用。339。739。,39。,39。,39。用字符數(shù)組存儲,最后確定位圖 13 五子棋程序流程圖 第 12 頁 共 23 頁 置放上去即可。 //畫橫向標(biāo)識符 (line,25,15)。 i 15。i15。 } if (board[i][j] == 2){ ()。 (xp,yp,10,28,28)。xi=0amp。x+i15amp。但是我們一般沒有這個規(guī)則限制,都是輪流先下子。 } 需要注意的一點是落下的棋子如果離任何一方的邊界小于 4,則以邊界為限制判斷是否有一方獲勝,這樣的話也要考慮多種方向,但原理還是和基本情況是一樣的。 圖 23 服務(wù)端監(jiān)聽 圖 15 服務(wù)端監(jiān)聽 第 17 頁 共 23 頁 雙擊除自己以外的一個玩家,發(fā)出游戲請求,同時要確定自己棋子的顏色,用 MSG 發(fā)回服務(wù)端 。 諾伊曼 ( John von Neumann,19031957)和摩根斯坦恩( Oskar Margenstern, 19021977)在 1944 年出版了《博弈論與經(jīng)濟(jì)行為》( Theory of Games and Economic Behavior)一書 中,最早地提出了關(guān)于博弈論的概念。因為有可能有復(fù)合棋型,比如“四三 ” ..從第一步起,不管是哪一方下子,電腦都有以這點為中心搜索 9X9 的矩陣內(nèi)的所有空白點上棋子的重要性,一顆棋子對棋型影響的大小有 9X9。 // 39。ik=RectX1 amp。i+kRectX2 amp。 } } } 設(shè)定相應(yīng)空位的重要值以后,選取最大的值下 子,代碼如下: private void getBiggest(int [][] arr,int x,int y){ int [] temp=new int[2]。 swt=arr[i][j]。 同理 ,和判斷勝負(fù) 一樣下子 也要考慮邊界 特殊 情況 ,矩形設(shè)置如下: private void setRect(int x,int y){ if(x40) RectX1=x4。 if(RectX1RectY1) RectX1 = x(yRectY1)。我大體說一下這 2種算法的思路:遞歸算法的意思可以說 成“今后幾步預(yù)測法”,首先讓電腦分析一個可能的點,如果在這兒下子將會形成對手不得不防守的棋型(例如:“沖四”、“活三”);那么下一步對手就會照你的思路來防守你,如第 21 頁 共 23 頁 此一來便完成了第一步的預(yù)測。但我 并不以為 這是很好的方法。隨著新的算法和理論的研究,人工智能必定會在人們生活中扮演重要的角色。在此向他表示我最衷心的感謝! 感謝本班的黃澤角同學(xué),他的構(gòu)思給了我很大的幫助,特別是搜索算法方面。 ( 5)學(xué)??梢怨紝W(xué)位論文的全部或部分內(nèi)容(保密學(xué)位論文在解密后遵守此規(guī)定)。s the39。s just say that it brought in enough to eat out in restaurants where they don39。t too wild about it but we always managed to avoid any heavy scenes. So much for romance. I39。t need to get into that here. Let39。We may be stuck here for a little while. Did you make a re servation?39。 replied Miriam. 39。No,39。d had some trouble in getting a cab. As a result, I didn39。s married to a dentist up in Boston. She used to play cello with the Philharmonic but now she39。t get up there all that often. I don39。s one hell of a story. I39。 特此聲明! 作者簽名: 2020年 06月 日 Chapter 1 The night I called at the Manhattan General to pick up this lady doctor I was dating, something quite extraordinary happened. For Miriam and me, it was the first in a chain of events that were to change our lives mine especially in a way that neither of us could possibly have imagined. For what we stumbled across that night was not the beginning of the story. If I am to believe what I have learned so far, the beginning was before and beyond Time as we know it. O ur lifestreams along with those of the handful of other people who became involved have established a brief interface with a cosmic event whose magnitude dwarfs the imagination. If this is starting to sound heavy, hold on. I39。文中除了特別加以標(biāo)注地方外,不包含他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得成都信息工 程學(xué)院或其他教學(xué)機構(gòu)的學(xué)位或證書而使用過的材料。 [2] 何橋 ,李肅義 .Java 2 程序設(shè)計簡明教程 .北京: 中國水利水電出版社 ,2020。 結(jié) 論 通過本次課題的研究, 用 JAVA 實現(xiàn)了五子棋人工智能和網(wǎng)絡(luò)游戲。否則照同樣的方法向下分析,就可以預(yù)測出多步。 if(RectX2RectY2) RectY2 = y+(RectX2x)。 if(x+414) RectX2=14。 第 20 頁 共 23 頁 y=temp[1]。 for(int i=0。 k5。 k5。 方向 for(i=RectX1,j=y。 在估值的時候,必須要考慮棋 子的合法落子情況。在這里所抽象化后的博弈問題是,已知參與者集合 (兩 方 ),策略集合 (所有棋著 ),和盈利集合 (贏子輸子 ),最終是想去找到一個理論上的解或平衡,也就是對參與雙方來說都最合理、最優(yōu)的具體策略。 if(==1){ ss = new String(white)。 網(wǎng)絡(luò)部分很簡單,但是我也做出了自己的特色,就是事件處理 ,做工可根據(jù)具體情況修改,雖然沒有多少實用價值,但是也盡量使程序留有擴展性。但很多專家表明,先下子有很大的幾率獲勝,即使有禁手,先下子的一方還是有很大的優(yōu)勢,我覺得對于我們一般玩家而言,這些規(guī)定可以不考慮。i5。i5。思想還是比較簡單,相同顏色連成五子即勝利,網(wǎng)上有些網(wǎng)友評論說完整的判斷勝負(fù)條件包括連五和活四,我覺得完全沒必要,活四還要檢查兩邊的棋子,雖然運算量不大,但五子棋的標(biāo)準(zhǔn)就是連五即勝,一步之差,我們既要遵守規(guī)則,也要簡化代碼實現(xiàn)盡完整的功能。 //(white, 16 + i * 30, 16 + j * 30, this)。 j 15。 //行 (30 + i * 30, 30, 30 + i * 30, 450)。i9。 // 棋子 X 坐標(biāo) private static int yp。,39。,39。,39。839