A. 五子棋電腦下棋思路 (人機對賽)(java

橫向、縱向、左斜向、右斜向進行檢查。每行棋一步都進行這四個方向的檢查。當出現連三或沖四時電腦進行阻擋。當然還要考慮行棋規則啊。
我自己編寫過。

B. 求五子棋的人工智慧的演算法描述~~~

可以採用這樣的笨演算法,運行起來慢點,但是很簡單易懂,而且效果很好。如果能夠加以優化,則其實是很好的演算法:

1、首先遍歷整個棋盤,找到一個可以落子的點,然後假設自己在該點落子,再然後判斷如果棋子落到這個點上後會對自己有什麼利益,比如會不會形成沖4活三、雙活三等等,(事先將沖四活三、雙活三等效果定義上利益值,當然,如果是五個子連起來了的話,利益值要被定義成最高,最好是無窮大的),將各種效果的利益值相加,得到己方的利益值。
2、將角色互換一下,重復第一步,得到對方的利益值(其實是遞桂演算法)。
3、將己方的利益值減去對方的利益值,得到該點的總利益值。
4、整個棋盤所有能落子的點都計算出利益值之後,找出利益值最大的那個點,將棋子落到該點。

當然,這個演算法可以有很大程度的優化,比如,如果沒有相鄰的棋子,可以放棄該點。還有一旦找出可以勝利的點,就不再繼續往下計算。。。。

模擬演算法:
int liyi(角色, 層次)
{
if(層次=0)
return 0;

for(第一個可以落子的點 到 最後一個可以落子的點)
{
int 利益,最大利益;

//遞桂...
利益 = 獲取本角色利益值() - liyi(角色=相反角色,層次-1);

if(利益>最大利益)
{
最大利益 = 利益;
保存該點。
}
落子到所保存的點。
}

C. 有誰知道五子棋比較NB的人工智慧演算法,用VB實現,,急求!!!!

'在窗體上加入以下控制項
'image1(0),image1(0) - 黑白棋圖片
'image2,image3(0)
'form中的picture圖片為棋盤。因無法上傳,請自行領會。

Option Explicit
Dim I, J, K, Counter, Firstmoved, Rt, Gen, r, flag As Integer
Dim Grid(225), H(224), V(224), RL(224), LR(224), Tb(2), Order(225) As Integer

Private Sub Form_Initialize()
lblHelp.Top = 0
lblHelp.Left = 0
Image1(0).Top = -1000
Image1(1).Top = -1000
lblHelp.Left = -lblHelp.Width

lblHelp = vbCrLf + vbCrLf + " 游戲幫助" + vbCrLf _
+ vbCrLf + vbCrLf + "●游戲規則:黑方先行,輪流弈子,任一方向先連成五子者勝." _
+ vbCrLf + vbCrLf + vbCrLf + "●操作提示:①可選擇[先後]、[難度]和[對手]菜單設置游戲," _
+ vbCrLf + vbCrLf + " 只有按[游戲]->[開始]後才可在棋盤上落子." _
+ vbCrLf + vbCrLf + " ②按[游戲]->[清盤]可重玩並設置游戲." _
+ vbCrLf + vbCrLf + " ③落子後按[動作]菜單下的選擇可任意悔棋和恢復." _
+ vbCrLf + vbCrLf + " ④各功能菜單都提供了快捷鍵(Alt+相應字母)." _
+ vbCrLf + vbCrLf + vbCrLf + "●有什麼問題請與本人聯系.電子郵件:[email protected]." _
+ vbCrLf + vbCrLf + vbCrLf + "●本頁面單擊後隱藏."
End Sub

Private Sub Form_Resize()
Me.Height = 5800
Me.Width = 5100
End Sub

Private Sub lblHelp_Click()
lblHelp.Visible = False
End Sub

Private Sub mnuAfter_Click()
Firstmoved = 0
mnuAfter.Checked = True
mnuFirst.Checked = False
End Sub

Private Sub Form_Load()
Dim I As Integer
For I = 1 To 224
Load Image3(I) '載入棋子控制項
Image3(I).Top = (I \ 15) * 22 + 5
Image3(I).Left = (I Mod 15) * 22 + 5
Image3(I).Visible = True
Next
Ini
End Sub

'游戲初始化
Sub Ini()
For I = 0 To 224
Image3(I) = Image2
Image3(I).Enabled = False
Grid(I) = 0
V(I) = 0
H(I) = 0
LR(I) = 0
RL(I) = 0
Next I
mnuBack.Enabled = False
Counter = 0
Gen = 0
If mnuAfter.Checked = True Then
Firstmoved = 0
Else
Firstmoved = 1
End If
mnuStart.Enabled = True
End Sub

'一方是否可獲勝
Function LineWin(Piece As Integer) As Integer
Dim mun As Integer
LineWin = 225
'五子一線
mun = Piece * 5
For I = 0 To 224
If H(I) = mun Or V(I) = mun Or RL(I) = mun Or LR(I) = mun Then
LineWin = 225 + Piece
Exit Function
End If
Next I

'四子一線
mun = Piece * 4
For I = 0 To 224
If H(I) = mun Then
For K = 0 To 4
If Grid(I + K) = 0 Then LineWin = I + K: Exit Function
Next K
End If

If V(I) = mun Then
For K = 0 To 4
If Grid(I + K * 15) = 0 Then LineWin = I + K * 15: Exit Function
Next K
End If

If RL(I) = mun Then
For K = 0 To 4
If Grid(I + K * 14) = 0 Then LineWin = I + K * 14: Exit Function
Next K
End If

If LR(I) = mun Then
For K = 0 To 4
If Grid(I + K * 16) = 0 Then LineWin = I + K * 16: Exit Function
Next K
End If
Next I
End Function

'計算機走棋
Sub ComputerMove()
Dim ToMove As Integer
If Counter = 0 Then
Randomize
I = Int(Rnd * 7 + 4)
J = Int(Rnd * 7 + 4)
If Grid(I * 15 + J) = 0 Then ToMove = I * 15 + J
Else
If mnuLower.Checked = True Then ToMove = Defend Else ToMove = Attempt
End If
Counter = Counter + 1
If Firstmoved = 0 Then Image3(ToMove) = Image1(0) Else Image3(ToMove) = Image1(1)
Grid(ToMove) = 2
Order(Counter) = ToMove
LineGen ToMove, 6
If LineWin(6) = 231 Then
MsgBox "您輸了!"
Ini
Exit Sub
End If
If Counter = 225 Then
MsgBox "和棋"
Ini
Exit Sub
End If
End Sub

'低級模式
Function Defend() As Integer
Rt = LineWin(6)
If Rt < 225 Then Defend = Rt: Exit Function
Rt = LineWin(1)
If Rt < 225 Then Defend = Rt: Exit Function
'查找落子位置
Rt = FindBlank
If Rt < 225 Then Defend = Rt: Exit Function
End Function

'悔棋
Private Sub mnuBack_Click()
mnuComeback.Enabled = True
If (Counter + Firstmoved) Mod 2 = 0 Then Rt = -1 Else Rt = -6
Grid(Order(Counter)) = 0
Image3(Order(Counter)) = Image2
LineGen Order(Counter), Rt
Counter = Counter - 1
If mnuComputer.Checked = True Then
Grid(Order(Counter)) = 0
Image3(Order(Counter)) = Image2
LineGen Order(Counter), -1
Counter = Counter - 1
Else
flag = 1 - flag
End If
r = r + 1
If Counter = 1 And Firstmoved = 0 And mnuComputer.Checked = True Then mnuBack.Enabled = False
If Counter = 0 Then mnuBack.Enabled = False
End Sub

'恢復棋子
Private Sub mnuComeback_Click()
mnuBack.Enabled = True
Counter = Counter + 1
If (Counter + Firstmoved) Mod 2 = 0 Then
Grid(Order(Counter)) = 1
Image3(Order(Counter)) = Image1(1 - Firstmoved)
LineGen Order(Counter), 1
Else
Grid(Order(Counter)) = 2
Image3(Order(Counter)) = Image1(Firstmoved)
LineGen Order(Counter), 6
End If
If mnuComputer.Checked = True Then
Counter = Counter + 1
Grid(Order(Counter)) = 2
Image3(Order(Counter)) = Image1(Firstmoved)
LineGen Order(Counter), 6
Else
flag = 1 - flag
End If
r = r - 1
If r = 0 Then mnuComeback.Enabled = False
End Sub

Private Sub mnuComputer_Click() '對手
mnuComputer.Checked = True '電腦
mnuHuman.Checked = False '棋手
End Sub

Private Sub mnuClear_Click() '清盤
Ini
mnuFirst.Enabled = True
mnuAfter.Enabled = True
mnuLower.Enabled = True
mnuHigher.Enabled = True
mnuComputer.Enabled = True
mnuHuman.Enabled = True
End Sub

Private Sub mnuHuman_Click()
mnuHuman.Checked = True
mnuComputer.Checked = False
End Sub

Private Sub mnuStart_Click() '開始
lblHelp.Visible = False
For I = 0 To 224
Image3(I).Enabled = True
Next I
mnuFirst.Enabled = False
mnuAfter.Enabled = False
mnuLower.Enabled = False
mnuHigher.Enabled = False
mnuComputer.Enabled = False
mnuHuman.Enabled = False
If Firstmoved = 0 And mnuComputer.Checked = True Then ComputerMove
If Firstmoved = 0 And mnuHuman.Checked = True Then flag = 1 Else flag = 0
mnuStart.Enabled = False
End Sub

'玩家走棋
Private Sub image3_Click(Index As Integer)
If Grid(Index) <> 0 Then Exit Sub
Counter = Counter + 1
If Firstmoved = 0 Then
Image3(Index) = Image1(1 - flag)
Else
Image3(Index) = Image1(flag)
End If
Grid(Index) = 1 + flag
Order(Counter) = Index
mnuBack.Enabled = True
mnuComeback.Enabled = False
r = 0
LineGen Index, (1 + flag * 5)
If LineWin(1 + flag * 5) = 226 + flag * 5 Then
If flag = 0 Then MsgBox "您贏了!" Else MsgBox "您輸了!"
Ini
Exit Sub
End If
If Counter = 225 Then
MsgBox "和棋"
Ini
Exit Sub
End If

If mnuComputer.Checked = True Then ComputerMove Else flag = 1 - flag
End Sub

'查找可以落子的空位
Function FindBlank() As Integer
Dim wz, fs, lz, RndNum As Integer
fs = -10000
For wz = 0 To 224
If Grid(wz) = 0 Then
Grid(wz) = 2
LineGen wz, 6
Rt = Gen
If Rt > fs Then fs = Rt: lz = wz
Grid(wz) = 0
LineGen wz, -6
End If
Next wz
FindBlank = lz
End Function

'高級模式
Function Attempt() As Integer
Dim wz As Integer
Rt = LineWin(6)
If Rt < 225 Then Attempt = Rt: Exit Function
Rt = LineWin(1)
If Rt < 225 Then Attempt = Rt: Exit Function
'查找落子位置
Rt = linethree(6)
If Rt < 225 Then Attempt = Rt: Exit Function

Rt = linethree(1)
If Rt < 225 Then
Grid(Tb(0)) = 2
LineGen Tb(0), 6
Rt = Gen: wz = Tb(0)
Grid(Tb(0)) = 0
LineGen Tb(0), -6
Grid(Tb(1)) = 2
LineGen Tb(1), 6
If Rt < Gen Then Rt = Gen: wz = Tb(1)
Grid(Tb(1)) = 0
LineGen Tb(1), -6
Grid(Tb(2)) = 2
LineGen Tb(2), 6
If Rt < Gen Then Rt = Gen: wz = Tb(2)
Grid(Tb(2)) = 0
LineGen Tb(2), -6
Attempt = wz
Exit Function
End If

Rt = FindBlank
If Rt < 225 Then Attempt = Rt: Exit Function
End Function

Private Sub mnuFirst_Click() '先後手
Firstmoved = 1
mnuAfter.Checked = False
mnuFirst.Checked = True
End Sub

Private Sub mnuHigher_Click()
mnuLower.Checked = False
mnuHigher.Checked = True
End Sub

Private Sub mnuLower_Click() '難度
mnuLower.Checked = True
mnuHigher.Checked = False
End Sub

'局勢評估
Function LineGen(ij, Piece)
Dim b, e, mun As Integer
I = ij \ 15
J = ij Mod 15
'橫線影響
b = IIf(J - 4 > 0, J - 4, 0)
e = IIf(J > 10, 10, J)
For K = b To e
mun = H(I * 15 + K)
If mun < 6 Then Gen = Gen + mun * 2 ^ mun
If mun > 5 And mun Mod 6 = 0 Then mun = mun \ 6 - 1: Gen = Gen - mun * 2 ^ mun
H(I * 15 + K) = H(I * 15 + K) + Piece
mun = H(I * 15 + K)
If mun < 6 Then Gen = Gen - mun * 2 ^ mun
If mun > 5 And mun Mod 6 = 0 Then mun = mun \ 6 - 1: Gen = Gen + mun * 2 ^ mun
Next K

'豎線影響
b = IIf(I - 4 > 0, I - 4, 0)
e = IIf(I > 10, 10, I)
For K = b To e
mun = V(K * 15 + J)
If mun < 6 Then Gen = Gen + mun * 2 ^ mun
If mun > 5 And mun Mod 6 = 0 Then mun = mun \ 6 - 1: Gen = Gen - mun * 2 ^ mun
V(K * 15 + J) = V(K * 15 + J) + Piece
mun = V(K * 15 + J)
If mun < 6 Then Gen = Gen - mun * 2 ^ mun
If mun > 5 And mun Mod 6 = 0 Then mun = mun \ 6 - 1: Gen = Gen + mun * 2 ^ mun
Next K

'撇線影響
b = IIf(I - 4 > 0, I - 4, 0)
e = IIf(I > 10, 10, I)
b = IIf(b > J + I - IIf(J + 4 > 14, 14, J + 4), b, J + I - IIf(J + 4 > 14, 14, J + 4))
e = IIf(e > J + I - IIf(J > 4, J, 4), J + I - IIf(J > 4, J, 4), e)
For K = b To e
mun = RL(K * 15 + I + J - K)
If mun < 6 Then Gen = Gen + mun * 2 ^ mun
If mun > 5 And mun Mod 6 = 0 Then mun = mun \ 6 - 1: Gen = Gen - mun * 2 ^ mun
RL(K * 15 + I + J - K) = RL(K * 15 + I + J - K) + Piece
mun = RL(K * 15 + I + J - K)
If mun < 6 Then Gen = Gen - mun * 2 ^ mun
If mun > 5 And mun Mod 6 = 0 Then mun = mun \ 6 - 1: Gen = Gen + mun * 2 ^ mun
Next K

'捺線影響
b = IIf(I - 4 > 0, I - 4, 0)
e = IIf(I > 10, 10, I)
b = IIf(b > I - J + IIf(J - 4 > 0, J - 4, 0), b, I - J + IIf(J - 4 > 0, J - 4, 0))
e = IIf(e > I - J + IIf(J > 10, 10, J), I - J + IIf(J > 10, 10, J), e)
For K = b To e
mun = LR(K * 15 - I + J + K)
If mun < 6 Then Gen = Gen + mun * 2 ^ mun
If mun > 5 And mun Mod 6 = 0 Then mun = mun \ 6 - 1: Gen = Gen - mun * 2 ^ mun
LR(K * 15 - I + J + K) = LR(K * 15 - I + J + K) + Piece
mun = LR(K * 15 - I + J + K)
If mun < 6 Then Gen = Gen - mun * 2 ^ mun
If mun > 5 And mun Mod 6 = 0 Then mun = mun \ 6 - 1: Gen = Gen + mun * 2 ^ mun
Next K
End Function

'是否存在三子一線(可發展成五子聯線)
Function linethree(Piece As Integer) As Integer
Dim mun As Integer
linethree = 225
'三子一線
mun = Piece * 3
For I = 0 To 224
If H(I) = mun Then
If Grid(I) = 0 Then
If I Mod 15 < 10 Then
If Grid(I + 5) = 0 Then
For K = 1 To 4
If Grid(I + K) = 0 Then
Tb(0) = I + K
Tb(1) = I
Tb(2) = I + 5
linethree = Tb(0)
Exit Function
End If
Next K
End If
End If
End If
End If

If V(I) = mun Then
If Grid(I) = 0 Then
If (I \ 15) < 10 Then
If Grid(I + 75) = 0 Then
For K = 1 To 4
If Grid(I + K * 15) = 0 Then
Tb(0) = I + K * 15
Tb(1) = I
Tb(2) = I + 75
linethree = Tb(0)
Exit Function
End If
Next K
End If
End If
End If
End If

If RL(I) = mun Then
If Grid(I) = 0 Then
If (I \ 15) < 10 And I Mod 15 > 4 Then
If Grid(I + 70) = 0 Then
For K = 1 To 4
If Grid(I + K * 14) = 0 Then
Tb(0) = I + K * 14
Tb(1) = I
Tb(2) = I + 70
linethree = Tb(0)
Exit Function
End If
Next K
End If
End If
End If
End If

If LR(I) = mun Then
If Grid(I) = 0 Then
If (I \ 15) < 10 And I Mod 15 < 10 Then
If Grid(I + 80) = 0 Then
For K = 1 To 4
If Grid(I + K * 16) = 0 Then
Tb(0) = I + K * 16
Tb(1) = I
Tb(2) = I + 80
linethree = Tb(0)
Exit Function
End If
Next K
End If
End If
End If
End If
Next I
End Function

Private Sub munHelp_Click() '幫助
lblHelp.Visible = True
End Sub

D. 五子棋程序原理

如何在已輸出區再進行輸入?
這個問題很顯然得用到C語言圖形方面的知識,在圖形界版面下有一個函數是gotoxy(x,y)[好像權是這個名字] 可以定位到當前畫面的任何一個位置。
單機版的五子棋不太好寫,我個人認為判斷電腦出棋的步驟不是那麼簡單的應該用到數據結構的知識也許會用到樹吧。如果樓主說的有三個棋子就堵塞好像考慮的不太全面吧。

E. 五子棋人工智慧演算法講解

五子棋演算法可簡可繁,要看你對自己五子棋程序智能的要求, 人機對戰的意思就是人和電腦下,也就是說電腦會思考如何下棋....其實這才是五子棋程序的核心.如果只實現人與人對戰的話,是一件很簡單的事情,無非就是繪制棋盤,然後繪制下棋的效果,再寫個下棋合法性判斷,勝負判斷....大概就搞定了....所以核心其實是人機對戰的電腦那部分人工智慧.這東西吧,可以研究的很多,不過主要的幾個設計要點就是搜索演算法和估值演算法,這兩個是最主要的,還有提高電腦思考銷率的方法就有多cpu的計算機多線程思考的設計....通過一些手段讓電腦變得更像人類棋手的,例如利用一些遺傳演算法之類的讓電腦具有學習能力,可以在失敗中吸取教訓,開局庫,歷史啟發之類的一大堆......但是總而言之,這一系列演算法的設計沒有一個標准,只要能讓你的電腦下棋下的更聰明,更快那就是好演算法.國內有一個叫王曉春的寫過一本叫<<pc游戲編程( 人機博弈)>>的書,這是一本研究人機博弈程序很經典的書,書的後面還附了一個五子棋的程序實例,你可以參考一下.下面是csdn的下載地址,你也可以自己去搜一下.http://download.csdn.net/source/1925326

F. 為什麼電腦五子棋很厲害

電腦不厲害 那還叫電腦啊
世界上最厲害的象棋冠軍都下不贏電腦
何況你

G. 畢業設計:五子棋的人工智慧演算法實現,用BP神經網路

可以的!
之所以叫BP網路,是因為使用了反向傳遞演算法,這是一種結果導向的自學習專方法,用在五子棋上是屬可以的。因為五子棋的游戲方法正是很明顯的結果導向的過程。
簡單說這么個過程:
1.設置輸入和輸出類型,比如都是坐標[x1,y1]、[x2,y2]...
2.訓練:
你告訴網路
A情況下應該輸出A1
B情況下應該輸出B1
C情況下應該輸出C1
...
A+B情況下應該輸出AB1
3.測試:
你問網路A+B+C情況下,應該輸出多少?在哪裡下子(就是[x,y]是多少?)網路就根據前面BP訓練的結果自動算出你要的坐標。

用Matlab神經網路工具箱做吧,不是很難。另外,五子棋的棋盤別太大了,訓練難度和時間是隨棋盤大小成級數增長的。

H. 求五子棋人機對戰演算法

總的來說,要讓電腦知道該在哪一點下子,就要根據盤面的形勢,為每
一可能落子的點計算其重要程度,也就是當這子落下後會形成什麼棋型(如:「沖四」、「活三」等),然後通覽
全盤選出最重要的一點,這便是最基本的演算法。當然,僅靠當前盤面進行判定是遠遠不夠的,這樣下棋很輕易掉進
玩家設下的陷阱,因為它沒有考慮以後的變化。所以在此基礎上我們加入遞歸調用,即:在電腦中猜測出今後幾步
的各種走法,以便作出最佳選擇,這也是我們下棋時常說的「想了幾步」。如此一來您的程序便具有一定的水平了。
什麼?不信!過來試試吧!
總體思路弄清之後,下面進行具體討論:
一:數據結構
先來看看數據結構,我們需要哪些變數?
首先得為整個棋盤建立一張表格用以記錄棋子信息,我們使用一個15*15的二維數組 Table[15][15] (15*15是
五子棋棋盤的大小),數組的每一個元素對應棋盤上的一個交叉點,用『0』表示空位、『1』代表己方的子、『2』
代表對方的子;這張表也是今後分析的基礎。
在此之後還要為電腦和玩家雙方各建立一張棋型表Computer[15][15][4]和Player[15][15][4],用來存放棋型
數據,就是剛才所說的重要程度,比如用『20』代表「沖四」的點,用『15』代表「活三」的點,那麼在計算重要
性時,就可以根據20>15得出前者比後者重要,下子時電腦便會自動選擇「沖四」的點。那為什麼棋型表要使用三
維數組呢?因為棋盤上的每一個點都可以與橫、豎、左斜、右斜四個方向的棋子構成不同的棋型,所以一個點總共
有4個記錄;這樣做的另一個好處是可以輕易判定出復合棋型,例如:假如同一點上有2個『15』就是雙三、有一個『15』和一個『20』就是四三。
怎麼樣!3個數組構成了程序的基本數據骨架,今後只要再加入一些輔助變數便可以應付自如了。應該不會太
難吧?OK!有了這么多有用的數據,我們就可以深入到程序的流程中去了。
二:程序流程
我們主要討論五子棋的核心演算法,即:人工智慧部分,而其他像圖形顯示、鍵盤滑鼠控制等,因較為簡單,所
以就不作過多介紹了。
我們看到本程序由六個基本功能模塊構成,各模塊的具體分析如下:
(1)初始化:首先,建立盤面數組Table[15][15]、對戰雙方的棋型表Computer[15][15][4]和Player[15]
[15][4]並將它們清零以備使用;然後初始化顯示器、鍵盤、鼠等輸入輸出設備並在屏幕上畫出棋盤。
(2)主循環控制模塊:控制下棋順序,當輪到某方下子時,負責將程序轉到相應的模塊中去,主要擔當一個
調度者的角色。
(3)玩家下子:當輪到玩家下時,您通過鍵盤或滑鼠在棋盤上落子,程序會根據該點的位置,在Table[15]
[15]數組的相應地方記錄『2』,以表明該子是玩家下的。
(4)盤面分析填寫棋型表:本程序核心模塊之一,人工智慧演算法的根本依據!其具體實現方法如下:您在下
五子棋時,一定會先根據棋盤上的情況,找出當前最重要的一些點位,如「活三」、「沖四」等;然後再在其中
選擇落子點。但是,電腦不會像人一樣分析問題,要讓它知道哪是「活三」、哪是「沖四」,就得在棋盤上逐點
計算,一步一步的教它。
先來分析己方的棋型,我們從棋盤左上角出發,向右逐行搜索,當碰到一個空白點時,以它為中心向左挨個
查找,假如碰到己方的子則記錄然後繼續,假如碰到對方的子、空白點或邊界就停止查找。左邊完成後再向右進
行同樣的操作;最後把左右兩邊的記錄合並起來,得到的數據就是該點橫向上的棋型,然後把棋型的編號填入到Computer[x][y][n]中就行了(x、y代表坐標,n=0、1、2、3分別代表橫、豎、左斜、右斜四個方向)。而其他三
個方向的棋型也可用同樣的方法得到,當搜索完整張棋盤後,己方棋型表也就填寫完畢了。然後再用同樣的方法
填寫對方棋型表。
注重:所有棋型的編號都要事先定義好,越重要的號數越大!
OK! 怎麼樣?有點累了吧?不過千萬別泄氣!因為好戲還在後頭。
Let's go!
(5)電腦下子:有了上面填寫的兩張棋型表,現在要作的就是讓電腦知道在哪一點下子了。其中最簡單的
計算方法,就是遍歷棋型表Computer[15][15][4]和Player[15][15][4]找出其中數值最大的一點,在該點下子即
可。但這種演算法的弱點非常明顯,只顧眼前利益,不能顧全大局,這就和許多五子棋初學者一樣犯了「目光短淺」
的毛病。
要解決這個問題,我們引入『今後幾步猜測法』,具體方法是這樣的: 首先, 讓電腦分析一個可能的點,
假如在這兒下子將會形成對手不得不防守的棋型(例如:『沖四』、『活三』);那麼下一步對手就會照您的思
路下子來防守您,如此一來便完成了第一步的猜測。這時再調用模塊4對猜測後的棋進行盤面分析,假如出現了
『四三』、『雙三』或『雙四』等制勝點,那麼己方就可以獲勝了(當然對黑棋而言『雙三』、『雙四』是禁手
,另當別論);否則照同樣的方法向下分析,就可猜測出第二步、第三步……
等一等,要是盤面上沒有對手必須防的棋型,哪該怎麼辦呢?進攻不成的話就得考慮防守了,將自己和對手
調換一下位置,然後用上面的方法來猜測對手的棋,這樣既可以防住對手巧妙的攻擊,又能侍機發動反擊,何樂
而不為呢!
但是必須告訴大家的是:猜測法的運算量相當之大,據我的經驗,用Pentium-100猜測3步的走法平均需要15
秒以上時間,所以建議猜測量在5步以內。可別小瞧了這5步,有時它甚至會走出讓您拍手叫絕的妙著呢!
(6)勝敗判定:務須多言,某方形成五子連即獲勝;若黑棋走出『雙三』、『雙四』或長連即以禁手判負。
到現在為止,整個五子棋軟體就基本完成了,其水平大約在中級上下。當然,這種演算法並不是最好的,但我
相信它的基本思路是正確的。

I. 跪求VC五子棋人工智慧源代碼

只要人工智慧還是整個的程序。。。
智能的話,其實首先是考慮玩家上一步走的位置,
然後掃描周圍有沒有即將連成4子的情況。
有的話就堵上,沒有就考慮調整自己的棋型
然而圖形我一點也不會,寫出來也只能用控制台拼湊圖形所以還是算了= =
控制台真心醜死了。。。。。。