人工智能課程設計五子棋_第1頁
人工智能課程設計五子棋_第2頁
人工智能課程設計五子棋_第3頁
人工智能課程設計五子棋_第4頁
人工智能課程設計五子棋_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、百度文庫讓每個人平等地捉升口我人工智能課程設計五子棋百度文庫讓每個人平等地捉升口我一. 引言3五子棋簡介3五子棋的AI構想3二. 開發(fā)工具可行性分析5三. 需求分析6四. 程序設計6程序設計特點6程序總體設計7五. 代碼分析8初始化賦值系統(tǒng)8初始化獲勝組合9重新設定玩家的獲勝標志9處理鼠標事件10獲勝檢查算法12電腦算法(1)14電腦算法(2) 17六. 心得體會20七. 參考文獻203一.引言人工智能也就是所謂的AI(Artificial Intelligence),它是一門很抽象的技術, AI程序的編寫不需要依據(jù)任何既定的思考模式或者規(guī)則。尤其是游戲中的AI可 以完全依程序設計者本身的思考

2、邏輯制作。我個人認為人工智能的核心應該是使 計算機具有自動的處理事件的能力,而我們的所有的研究也應該圍繞著這一方 向。我們今天討論的是策略類的人工智能。策略類人工智能可以說是AI中比較復雜的一種,最常見的策略類AI游戲 就是棋盤式游戲。在這類游戲中,通常的策略類AI程序都是使計算機判斷訂前 狀況下所有可走的棋與可能的獲勝狀況,并計算當前計算機可走棋步的獲勝分數(shù) 或者玩家可走棋步的獲勝分數(shù),然后再決定出一個最佳走法。下面我們先介紹一 下五子棋的AI構想。五子棋簡介下面就五子棋的背景和規(guī)則做一些簡單的介紹。五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一。現(xiàn)代五子棋日文稱之為連 珠,英譯為Renju,英文

3、稱之為Gobang或、FIR(Five in a Row的縮寫), 亦有連五子五子連、串珠、五目、五目碰、五格等多種稱謂。五子棋不僅能增強思維能力,提高智力,而且富含哲理,有助于修身 養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征短、平、快,乂有古典哲學的高深學問 陰陽易理;它既有簡單易學的特性,為人民群眾所喜聞樂見,乂有深奧的技巧 和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀; 既有場的概念,亦有點的連接。它是中西文化的交流點,是古今哲理的結(jié)晶。五子棋的規(guī)則如下:棋盤:采用同圍棋盤一樣的15路或19路線的棋盤, 為了減小問題的規(guī)模,本系統(tǒng)將采用15路線的棋盤。下法:兩人分別執(zhí)黑白

4、兩 色棋子,輪流在棋盤上選擇一個無子的交義點落子。無子的交義點乂被稱為空點。 輸贏判斷:黑、白雙方有一方的5個棋子在橫、豎或斜方向上連接成一線即為該 舌占五子棋的AI構想在山AI所控制的計算機玩家上是不成立的,因為計算機必須知道有那些獲 勝方式,并計算出每下一步棋到棋盤上任一格子的獲勝兒率。一個完整的五子棋的AI構想必須:1、能夠知道所有的獲勝組合2、建立和使用獲勝表3、設定獲勝的分數(shù)4、使電腦具有攻擊和防守的能力(一),求五子棋的獲勝組合在一場五子棋的游戲中,計算機必須要知道有那些的獲勝組合,因此我們必 須求得獲勝組合的總數(shù)。我們假定當前的棋盤為10*10:1、計算水平方向的獲勝組合數(shù),每一

5、列的獲勝組合是:6,共10列,所以水平 方向的獲勝組合數(shù)為:6*10=602、計算垂直方向的獲勝組合總數(shù),每一行的獲勝組合是:6,共10行,則垂直 方向的獲勝組合數(shù)為:6*10=603、計算正對角線方向的獲勝組合總數(shù),正對角線上的獲勝組合總數(shù)為6+(5+4+3+2+1) *2=364、訃算反對角線方向的獲勝組合總數(shù),反對角線上的獲勝組合總數(shù)為6+(5+4+3+2+1) *2=36這樣所有的獲勝組合數(shù)為:60+60+36+36=192(二)、建立和使用獲勝表我們已經(jīng)計算出了一個10*10的五子棋盤會有192種獲勝方式,這樣我們可 以利用數(shù)組建立獲勝表,獲勝表的主要作用是:1、判斷當前的獲勝方式是

6、否有效;2、判斷當前的獲勝方式中到底有多少子落入該獲勝組合中。詳細的使用您將在 后面的程序中可以看出。(三)、分數(shù)的設定在游戲中為了讓計算機能夠決定下一步最佳的走法,必須先計算出計算機下 到棋盤上任一空格的分數(shù),而其中最高分數(shù)便是計算機下一步的最佳走法。百度文郵-讓每個人平等地捉升口我原理:我們判定當前討論的空格與當前討論的點有兒種獲勝的方式,有兒種 該空格就加兒分。這種原理初聽起來似乎是無法入手,沒關系,當您了解我們后 面的程序后您就會明白這種決策原理了。這種決策有一些缺陷,因為如果只根據(jù)這個模型設計,就有可能出現(xiàn)電腦或 玩家有三個子連成一線的時候,計算機卻判斷不出,它認為其他某些空格是當前

7、 的獲勝的最佳位置而不去攻擊或防守。沒關系我們完全可以通過一個加強算法來 改變當前的分值情況,也就是說當電腦或玩家有三個子或四個子連成一線時,我 們通過加強算法將當前與三個子或四個子有關的空格的分值提高,從而可以彌補 這一缺憾。(四)、攻擊與防守以上的方式,事實上計算機只是計算出了最佳的攻擊位置,為了防守我們還 應訃算當前玩家的最佳的攻擊位置。這樣有什么用呢?道理很簡單,如果玩家最 佳攻擊位置的分數(shù)大于計算機最佳攻擊位置上的分數(shù),那么計算機就將下一步的 棋子擺在玩家的最佳攻擊位上以阻止玩家的進攻,否則訃算機便將棋子下在自己 的最佳攻擊位置上進行攻擊。事實上,這個AI構想是很強大的如果你不是很厲

8、害的五子棋高手的話,可 能很快會被訃算機打敗。我在聯(lián)眾上可是中級棋手啊,跟這種構想打的時候勝率 也不是很高。二. 開發(fā)工具可行性分析本程序采用開發(fā)工具它是Visual的簡稱。提到,就不能不先提一下Visual Basic是Windows環(huán)境下的一種簡單、易學的編程語言,山于其開發(fā)程序的快速、 高效,深受程序員的喜愛。的特點:1、真正成為面向?qū)ο笠约爸С掷^承性的語言。2、窗體設計器支持可視化繼承,并且包含了許多新的特性,比如自動改變窗體 大小、資源本地化支持、數(shù)據(jù)類工具內(nèi)在支持XML數(shù)據(jù)。3、直接建立在.NET的框架結(jié)構上,因此開發(fā)人員可以充分利用所有.NET平臺 特性,也可以與其他的.NET語

9、言交互。4、為Windows應用程序提供了 XCOPY部署,開發(fā)者不再需要為DLL的版本 問題擔憂。三. 需求分析人丄智能的第一大成就是下棋程療;,在下棋程度中應用的某些技術,如向 前看兒步,把困難的問題分解成一些較容易的子問題,發(fā)展成為搜索和問題歸納 這樣的人匸智能基本技術。今天的計算機程序已能夠達到下各種棋和國際象棋的 水平。但是,尚未解決包括人類棋手具有的但尚不能明確表達的能力。如們洞察 棋局的能力。另一個問題是涉及問題的原概念,在人工智能中叫問題表示的選擇, 人們常能找到某種思考問題的方法,從而使求解變易而解決該問題。到U前為止, 人丄智能程序已能知道如何考慮它們要解決的問題,即搜索解

10、答空間,尋找較優(yōu) 解答。在設訃本系統(tǒng)時考慮到用戶需要的是一個操作簡便界面簡單的游戲軟件。 同時要提供人機和人人這樣的功能。特別是人機部分,要考慮到不同級別的用戶。 電腦智能不能太低需要有一定的智能下棋功能。人機對戰(zhàn):選擇和電腦對弈的等級操作,同樣也可以執(zhí)行網(wǎng)絡聯(lián)機的悔棋 等功能,只是因為是人機所以無需通過確認。四. 程序設計游戲中提供兩種選擇模式:人機對戰(zhàn)和人人對戰(zhàn)。在人機對戰(zhàn)中玩家通過選 擇不同的等級和電腦一決高下,可以向后悔棋。在人人對戰(zhàn)中雙方通過選擇一方 作為服務器,通過彈出對話框設置本地應用程序監(jiān)聽端口,而另外一方則作為客 戶端,通過連接服務器選項,在彈出的對話框中設置要連接的服務器的

11、IP地址 和端口號。當雙方都提示連接成功后,兩方才可以進行下棋。如要悔棋則需要通 過對方的同意。同時還可以實現(xiàn)在線聊天。AI的不同等級是以不同的搜索深度 確定的。程序設計特點五子棋游戲程序山于規(guī)則簡單操作簡便等特點,自然就成為程序員對人工 智能研究的首選對象。所以網(wǎng)絡上關于這類的程序很多,但是由于主要都是采用 搜索窮舉技術作為解決方案,這將使得問題的規(guī)模變的很龐大如當搜索深度為3 時,每走一步電腦在將最壞的情況下需要搜索的點將達225*225*225=個。即使 采用的剪枝技術,其某些點的響應的時間也是讓人無法忍受的,如開局時,因為 這個時候每個點都是空的,沒有可以剪枝的點,必須遍歷真?zhèn)€盤面,所

12、以很耗時 間,大約需要30多秒的時間,這個顯然是不可接受的。為了程序設計和玩家的 忍受時間的需要。不得不減小深度,所以絕大部分都釆用深度為2的檢索,很明 顯深度越低系統(tǒng)的智力也相對的降低,需要代價的。本程序的一個主要特點是,采用了高效的優(yōu)化方法,使得在相同的搜索規(guī)模 中所花費的訃算時間大幅度的減小。響應時間明顯得到提高。即使搜索深度達到 4的時候,其響應時間在絕大部分的悄況下還是可以接受的。程序總體設計結(jié)構設計的一條基本原理就是程序應該模塊化,也就是一個大程序應該由許 多規(guī)模適中的模塊按合理的層次結(jié)構組織而成??傮w設訃階段的笫二項主要任務 就是設訃軟件的結(jié)構,也就是確定程序山哪些模塊組成以及模

13、塊間的關系。通常 用層次圖或結(jié)構圖描繪軟件的結(jié)構。1、系統(tǒng)模型7百度文庫讓每個人平等地捉升口我2、結(jié)構圖17游戲有效游戲狀態(tài)標簽不顯示清空picturebox 1的內(nèi)容調(diào)用繪圖函數(shù)繪制肖前電腦先走桌面初始化五. 代碼分析這個階段的任務還不是編寫程序,而是設計出程序的詳細規(guī)格說明。這種規(guī) 格說明的作用很類似于其他丄程領域中丄程師經(jīng)常使用的丄程藍圖,它們應該包 含必要的細節(jié),程序員可以根據(jù)它們寫出實際的程序代碼。下面對該次設計中的主要代碼進行做個分析:初始化賦值系統(tǒng)Sub initplayenvironment() =AmusicV0theplayflag = True=False0yuandia

14、n(130, 130)的位置Dim i, j, m, n As IntegerFor i = 0 To 9For j = 0 To 9table(ij) = 0NextNextFor i = 0 To 191pflag(i) = Truecflag(i) = Tnie獲勝標志初始化山于我們設定電腦先手,并下了Nexttable(4, 4) = 14, 4位所以將其值設為1初始化獲勝組合n = 0For i = 0 To 9For j = 0 To 5For m = 0 To 4pwin(j + m, i, n) = Truecwin(j + m, i, n) = TnieNextn = n +

15、 1NextNextFor i = 0 To 9For j = 0 To 5For m = 0 To 4pwin(i, j + m, n) = Truecwin(ij + m, n) = TiueNextn = n + 1NextNextFor i = 0 To 5For j = 0 To 5For m = 0 To 4pwin(j + m, i + m, n) = Truecwin(j + m, i + m, n) = TrueNextn = n + 1NextNext重新設定玩家的獲勝標志山于電腦已下了 4, 4位所以我們需要重新設定玩家的獲勝標志For i = 0 To 5For j =

16、 9 To 4 Step -1For m = 0 To 4pwin(j - m, i + m、n) = Truecwin(j m, i + m, n) = TrueNextn = n + 1NextNextFor i = 0 To 191If pwin(4, 4, i) = True Thenpflag(i) = FalseEnd IfNextEnd Sub處理鼠標事件1、模塊名稱:themousedown2、描述:此函數(shù)主要實行以下功能:(1) 判定當前游戲標志是否有效。(2) 將實際坐標轉(zhuǎn)化成虛擬坐標。(3) 繪制玩家的棋子。(4) 執(zhí)行檢查獲勝函數(shù)。(5) 執(zhí)行電腦算法函數(shù)。Sub th

17、einousedown(ByVal x As Integer, By Vai y As Integer)If theplayflag = False ThenExit SubEnd If檢查游戲狀態(tài)是否有效Dim i, j As IntegerDim zhx, zhy As Integerzhx = Int(x - 10) / 30)zhy = Int(y - 10)/ 30)For i = 0 To 9For j = 0 To 9If table(zhx, zhy) ; 0 ThenExit SubEnd IfNextNext檢查當前鼠標點擊的格子是否有效Dim mycolor As Col

18、orDim g Asg =mycolor =Dini brush 1 As = New SolidBrush(mycoIor)(brush 1, zhx * 30 + 10, zhy * 30 + 10, 30, 30)繪制玩家的棋子table(zhx, zhy) = 2For i = 0 To 191If cwin(zhx, zhy, i) = True Then cflag(i) = FalseEnd If重設電腦的獲勝標志檢查當前玩家是否獲勝Nextcheckwin()diannao()調(diào)用電腦算法End Sub獲勝檢査算法1、模塊名稱:checkwin2、描述:此模塊執(zhí)行以下功能:(1

19、)檢查是否和棋。(2)檢查電腦是否獲勝。(3)檢查玩家是否獲勝。Sub checkwin()Dim i, j, k, m, n As IntegerDim ca As IntegerDim pa As IntegerDim cnormal As Integer = 0For i = 0 To 191If cflag(i) = False Thencnormal = cnormal + IEnd IfNextIf cnormal = 190 Then=True二”和棋,請重新開始!“0theplayflag = FalseExit Sub設定和棋規(guī)則End IfFor i = 0 To 191I

20、f cflag(i) = True Thenca = 0For j = 0 To 9For k = 0 To 9If table(j, k) = 1 ThenIf cwin(j, k, i) = True Thenca = ca + 1End IfEnd IfNextNextIf ca = 5 Then=True二“電腦獲勝,請重新開始”0theplayflag = FalseExit SubEnd IfEnd IfNext檢查電腦是否獲勝For i = 0 To 191If pflag(i) = True Thenpa = 0For j = 0 To 9For k = 0 To 9If ta

21、ble(j, k) = 2 ThenIf pwin(j, k, i) = True Thenpa = pa + 1End IfEnd IfNextNextIf pa = 5 Then=True二”玩家獲勝,請重新開始“0theplayflag = FalseExit SubEn End IfNext檢查玩家是否獲勝End Sub電腦算法1、模塊名稱:diannao2描述:此程序主要執(zhí)行以下功能:(1)初始化賦值系統(tǒng)。(2)賦值加強算法。(3)th算電腦和玩家的最佳攻擊位。(4)比較電腦和玩家的最佳攻擊位并決定電腦的最佳策略。(5)執(zhí)行檢查獲勝函數(shù)。Sub diannao()Dim i, j,

22、k, m, n As IntegerDim de As IntegerDim cab As IntegerDim pab As IntegerFor i = 0 To 9For j = 0 To 9pscore(ij) = 0cscore(i J) = 0NextNext初始化賦值數(shù)組For i = 0 To 191If cflag(i) = True Thencab = 0For j = 0 To 9For k = 0 To 9百度文庫讓每個人平等地捉升口我If table(j, k) = 1 ThenIf cwin(j, k, i) = True Thencab = cab + 1End

23、IfNextNextSelect Case cabCase 3For m = 0 To 9For n = 0 To 9If table(m, n) = 0 ThenIf cwin(m, n, i) = True Then cscore(m, n) = cscore(m, n) + 5End IfEnd IfNextNextCase 4For m = 0 To 9For n = 0 To 9If table(m, n) = 0 ThenIf cwin(m, n, i) = True Thenyuandian(m * 30 + 10, n * 30 + 10) table(m, n) = 1For

24、 de = 0 To 191If pwin(m, n, de) = True Thenpflag(dc) = Falsecheckwin()Exit SubNextEnd IfEnd IfNextNextEnd SelectEnd IfNextFor i = 0 To 191If pflag(i) = Tnje Thenpab = 0For j = 0 To 9For k = 0 To 9If table。,k) = 2 ThenIf pwin(j, k,i) = True Thenpab = pab + 1End IfEnd IfNextNextSelect Case pabCase 3Fo

25、r m = 0 To 9For n = 0 To 9If table(m, n) = 0 ThenIf pwin(m, n,i) = True Thenpscore(m, n) = pscore(m, n) + 30End IfEnd IfNext21百度文庫讓每個人平等地捉升口我NextCase 4For m = 0 To 9For n = 0 To 9If table(m, n) = 0 ThenIf pwin(m, n, i) = True Then yuandian(m * 30 + 10, n * 30 + 10) table(m, n) = 1For de = 0 To 191If

26、 pwin(m, n, de) = Tnie Thenpflag(dc) = Falsecheckwin()Exit SubEnd IfNextEnd IfEnd IfNextNextEnd SelectEnd IfNextEnd If231、賦值系統(tǒng)For i = 0 To 191If cflag(i) = True ThenFor j = 0 To 9If table。, k) = 0 ThenIf cwin(j, k, i) = True ThenFor m = 0 To 9For n = 0 To 9If table(m, n) = 1 ThenIf cwin(m, n, i) = T

27、rue Thencscore(j, k) = cscore(j, k) + 1End IfEnd IfNextNextEnd IfEnd IfNextNextEnd IfNextFor i = 0 To 191If pflag(i) = True ThenFor j = 0 To 9For k = 0 To 9If table(j, k) = 0 ThenIf pwin(j, k, i) = True ThenFor m = 0 To 9For n = 0 To 9If table(m, n) = 2 ThenIf pwin(m, n, i) = True Thenpscore(j, k) = pscore(j, k) + 1End If百度文郵-讓每個人平零地捉升口我NextNextEnd IfEnd IfNextNextEnd IfNext2、分值比較算法Dim a, b,

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論