【正文】
共 23 頁(yè) 其中 主要負(fù)責(zé)棋盤的初始化,鼠標(biāo)事件的處理,以及判斷勝負(fù)條件。 運(yùn)行 Java 程序: Java 程序分為兩大類 —— Java 應(yīng)用程序( Application)和 Java 小應(yīng)用程序( Applet)。這種字節(jié)碼可以在許多種不同的計(jì)算機(jī)上運(yùn)行。 Java 具有一個(gè)網(wǎng)絡(luò)功能的程序庫(kù),其中包含與如 HTTP 和 FTP等 TCP/IP 網(wǎng)絡(luò)通信協(xié)議整合的能力。 3 Java Java 簡(jiǎn)介 Java 是美國(guó) Sun 公司開發(fā)的語(yǔ)言,它使用解釋器執(zhí)行代碼,因此,無(wú)需對(duì)源代碼進(jìn)行任何更改即可在 不同計(jì)算機(jī)上運(yùn)行,是真正跨平臺(tái)的編程開發(fā)語(yǔ)言。 當(dāng)有多個(gè)攻擊點(diǎn)可供選擇時(shí),要選擇后續(xù)手段多,又不會(huì)被對(duì)方反先的著點(diǎn)。有四才能有五,有三才有四 ,以此類推。在高段位的比賽中還添加了一些規(guī)定,由于很少用到,就不必詳細(xì)敘述了。 追下取勝:是指白棋逼迫黑 棋形成禁手而取勝的方法。 第 5 頁(yè) 共 23 頁(yè) 圖 4 活三 圖 5 死三 反三:反三不是指一種“三”的形狀,而是指再阻止對(duì)方進(jìn)攻的同時(shí)使自己稱為一 道活三的反攻,稱為反三。見圖 4。黑白雙方的勝負(fù)結(jié)果必須按照職業(yè)五子棋的規(guī)則要求來(lái)決定。 5:對(duì)局中拔子、中途退場(chǎng)均判為負(fù) 6:五連與禁手同時(shí)形成,先五為勝。 關(guān)于計(jì)時(shí),正規(guī)比賽按不同級(jí)別設(shè)置了不同的時(shí)間限制,一般的玩家都沒有這個(gè)限制。 其次確定整個(gè)程序的結(jié)構(gòu)框架。人工智能在專家系統(tǒng),自然語(yǔ)言理解,自動(dòng)定理證明,自動(dòng)程序設(shè)計(jì),人工智能在機(jī)器人學(xué)、模式識(shí)別、物景分析、數(shù)據(jù)庫(kù)的智能檢索、機(jī)器下棋(實(shí)質(zhì)上是博弈論問題)和家用電器智能化等領(lǐng)域都有廣泛的應(yīng)用。通過一系列的變化,使五子棋這一簡(jiǎn)單的游戲復(fù)雜化、規(guī)范化,而最終成為今天的職業(yè)連珠五子棋,同時(shí)也成為一種國(guó)際比賽棋。 Computer AI。主要完成了人機(jī)對(duì)戰(zhàn)和玩家之間聯(lián)網(wǎng)對(duì)戰(zhàn) 2 個(gè)功能 。算法的研究有助于理解程序結(jié)構(gòu),增強(qiáng)邏輯思維能力,在其他人工智能方面也有很大的參考作用。對(duì)于它與圍棋的關(guān)系有兩種說法,一說早于圍棋,早在 “ 堯造圍棋 ” 之前,民間就已有五子棋游戲;一說源于圍棋,是圍棋發(fā)展的一個(gè)分支。 自己對(duì) 人工智能比較感興趣,而五子棋 游戲 程序的開發(fā)實(shí)現(xiàn)這個(gè)課題,正好提供給我這樣一個(gè)研究的機(jī)會(huì),通過對(duì)人工智能中博弈方面的研究(人機(jī)對(duì)弈),讓 我 在簡(jiǎn)單的人機(jī)對(duì)弈全局設(shè)計(jì),以及具體到相關(guān)算法上有了深入的了解。智能已經(jīng)成為當(dāng)今各種新產(chǎn)品、新裝備的發(fā)展方向。 2 課題相關(guān)基礎(chǔ) 五子棋 棋盤和棋子 現(xiàn)代五子棋棋盤,經(jīng)過國(guó)際棋聯(lián)的多次修改,最終定為 15 X 15 路,即棋盤由橫豎各 15 條平行線交叉組成,共有 225 個(gè)交叉點(diǎn);棋盤上共有五個(gè)星位,中間的星位稱為天元,周圍 四點(diǎn)為小星,與圍棋盤略有不同。黑棋禁 手包括“三、三”;“四、四”;“長(zhǎng)連”。如此輪流落子直到某一方首先在棋盤的直線 橫線或斜線上形成連續(xù)的五子或五子以上,則該方就算獲 勝。三分為活三、死三、眠三。見圖5。 圖 6 活四 第 6 頁(yè) 共 23 頁(yè) 圖 7 跳沖四 圖 8 反沖四 如圖 8,黑棋在 1 點(diǎn)進(jìn)攻,形成一子雙殺,這時(shí)白棋的妙手是在 a位活三,它同時(shí)阻擋了黑棋的兩種取勝方法。 之所以這么規(guī)定也是為了規(guī)范比賽,其實(shí)我們業(yè)余的棋手,黑白棋子誰(shuí)先下都不限制,只是先落子會(huì)有比較大的優(yōu)勢(shì),另一方始終處于防守的被動(dòng)狀態(tài)。 長(zhǎng)連:相同顏色的連續(xù)六子或六子以上。 對(duì)局的早期,選點(diǎn)的著眼點(diǎn)主要是使本方的棋子保持聯(lián)系,為以后創(chuàng)造盡可能多的成三、成四的機(jī)會(huì),同時(shí)盡量限制對(duì)方成為好形。 五子棋的取勝思路是由一個(gè)子開始,目標(biāo)是運(yùn)用各種方法在棋盤上發(fā)展出五連乃至長(zhǎng)連而取勝。對(duì)象的封裝性可以使對(duì)象的接口定義明確;繼承性可以增加軟件的可重用性,有助于分類及模版設(shè)計(jì)等。 6:結(jié)構(gòu)中立性 (Architecture Neutral) 第 9 頁(yè) 共 23 頁(yè) 在網(wǎng)絡(luò)上存在許多不同類型的計(jì)算機(jī),從中央處理器到操作系統(tǒng)的機(jī)構(gòu)均有很高的差異性。將編好的源文件保存起來(lái),源文件的擴(kuò)展名必須是 Java。 圖 11 環(huán)境變量 Jcreator 的安裝很簡(jiǎn)單,這里不在詳細(xì)敘述,把路徑配置好就可以了。在具體實(shí)現(xiàn)的時(shí)候再介紹其作用。339。739。,39。,39。,39。用字符數(shù)組存儲(chǔ),最后確定位圖 13 五子棋程序流程圖 第 12 頁(yè) 共 23 頁(yè) 置放上去即可。 //畫橫向標(biāo)識(shí)符 (line,25,15)。 i 15。i15。 } if (board[i][j] == 2){ ()。 (xp,yp,10,28,28)。xi=0amp。x+i15amp。但是我們一般沒有這個(gè)規(guī)則限制,都是輪流先下子。 } 需要注意的一點(diǎn)是落下的棋子如果離任何一方的邊界小于 4,則以邊界為限制判斷是否有一方獲勝,這樣的話也要考慮多種方向,但原理還是和基本情況是一樣的。 圖 23 服務(wù)端監(jiān)聽 圖 15 服務(wù)端監(jiān)聽 第 17 頁(yè) 共 23 頁(yè) 雙擊除自己以外的一個(gè)玩家,發(fā)出游戲請(qǐng)求,同時(shí)要確定自己棋子的顏色,用 MSG 發(fā)回服務(wù)端 。 諾伊曼 ( John von Neumann,19031957)和摩根斯坦恩( Oskar Margenstern, 19021977)在 1944 年出版了《博弈論與經(jīng)濟(jì)行為》( Theory of Games and Economic Behavior)一書 中,最早地提出了關(guān)于博弈論的概念。因?yàn)橛锌赡苡袕?fù)合棋型,比如“四三 ” ..從第一步起,不管是哪一方下子,電腦都有以這點(diǎn)為中心搜索 9X9 的矩陣內(nèi)的所有空白點(diǎn)上棋子的重要性,一顆棋子對(duì)棋型影響的大小有 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ù)測(cè)法”,首先讓電腦分析一個(gè)可能的點(diǎn),如果在這兒下子將會(huì)形成對(duì)手不得不防守的棋型(例如:“沖四”、“活三”);那么下一步對(duì)手就會(huì)照你的思路來(lái)防守你,如第 21 頁(yè) 共 23 頁(yè) 此一來(lái)便完成了第一步的預(yù)測(cè)。但我 并不以為 這是很好的方法。隨著新的算法和理論的研究,人工智能必定會(huì)在人們生活中扮演重要的角色。在此向他表示我最衷心的感謝! 感謝本班的黃澤角同學(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é)機(jī)構(gòu)的學(xué)位或證書而使用過的材料。 [2] 何橋 ,李肅義 .Java 2 程序設(shè)計(jì)簡(jiǎn)明教程 .北京: 中國(guó)水利水電出版社 ,2020。 結(jié) 論 通過本次課題的研究, 用 JAVA 實(shí)現(xiàn)了五子棋人工智能和網(wǎng)絡(luò)游戲。否則照同樣的方法向下分析,就可以預(yù)測(cè)出多步。 if(RectX2RectY2) RectY2 = y+(RectX2x)。 if(x+414) RectX2=14。 第 20 頁(yè) 共 23 頁(yè) y=temp[1]。 for(int i=0。 k5。 k5。 方向 for(i=RectX1,j=y。 在估值的時(shí)候,必須要考慮棋 子的合法落子情況。在這里所抽象化后的博弈問題是,已知參與者集合 (兩 方 ),策略集合 (所有棋著 ),和盈利集合 (贏子輸子 ),最終是想去找到一個(gè)理論上的解或平衡,也就是對(duì)參與雙方來(lái)說都最合理、最優(yōu)的具體策略。 if(==1){ ss = new String(white)。 網(wǎng)絡(luò)部分很簡(jiǎn)單,但是我也做出了自己的特色,就是事件處理 ,做工可根據(jù)具體情況修改,雖然沒有多少實(shí)用價(jià)值,但是也盡量使程序留有擴(kuò)展性。但很多專家表明,先下子有很大的幾率獲勝,即使有禁手,先下子的一方還是有很大的優(yōu)勢(shì),我覺得對(duì)于我們一般玩家而言,這些規(guī)定可以不考慮。i5。i5。思想還是比較簡(jiǎn)單,相同顏色連成五子即勝利,網(wǎng)上有些網(wǎng)友評(píng)論說完整的判斷勝負(fù)條件包括連五和活四,我覺得完全沒必要,活四還要檢查兩邊的棋子,雖然運(yùn)算量不大,但五子棋的標(biāo)準(zhǔn)就是連五即勝,一步之差,我們既要遵守規(guī)則,也要簡(jiǎn)化代碼實(shí)現(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