JS五子棋之人機對戰

2021-10-02 11:06:41 字數 1164 閱讀 3103

文章目錄

1. 效果圖

2. ui篇

3. ai篇

先來看看最終實現的效果吧!

勝利顯示:

主要是使用canvas繪製棋盤以及棋子

canvas繪製棋盤

for(var i=0;i<9;i++)

canvas繪製棋子部分**
var onestep=function(i,j,me)//i,j表示棋盤索引,me表示黑棋或白棋

else

context.fillstyle=gradient;

context.fill();

}

思路:

贏法陣列:使用三維陣列記錄五子棋所有贏法;

贏法的統計陣列:使用一維陣列記錄每種贏法;

判斷勝負根據贏法的統計陣列,如果某一種贏法達到5顆子,那麼某一方也就勝利

ai落子規則根據贏法的統計陣列來進行加分,如果實現5顆子的可能性越大就進行加分

部分**:

var computerai=function()

} // 通過贏法統計陣列為兩個二維陣列分別計分

for(var i=0;i<9;i++)

// 如果玩家(i,j)處和目前最優分數一樣大,則比較電腦在該位置和預落子的位置的分數

else if(myscore[i][j]==max)

}// 如果電腦(i,j)處比目前最優的分數大,則落子在(i,j)處

if(computerscore[i][j]>max)

// 如果電腦(i,j)處和目前最優分數一樣大,則比較玩家在該位置和預落子的位置的分數

else if(computerscore[i][j]==max)}}

}} onestep(u,v,false);

chessboard[u][v]=2;//表示計算機在此處落子

for(var k=0;kui篇

ai篇

五子棋人機對戰

參考 人機對戰 填子遊戲的攻防策略 關於機器的應對策略,在前文中有所表述,不一一解釋,本文進行了修繕和補強,但漏銅依然存在。增加了乙個倒計時功能,測試了一下,感覺一般,還是留在那裡,表明曾經研究過,供今後完善 增加了棋譜儲存功能和回放功能 增加了悔棋功能,這個還是有些用處的。另外策略中增加了禁手。如...

java 五子棋之人機對戰思路詳解

最近做了五子棋,記錄下自己完成五子棋的人機對戰的思路。首先,思路是這樣的 每當人手動下一顆棋子 黑子 的時候,應當遍歷它周圍棋子的情況,並賦予周圍棋子一定的權值,當在機器要下棋子 白子 守護之前,會遍歷整個棋盤的權值情況 棋盤的權值存在乙個二維陣列中 從中找出權值最大的點座標,並下子 白子 這樣的話...

人機對戰五子棋 權值法

前面介紹了監聽機制,窗體使用,重繪機制,畫筆使用,物件傳遞等等概念,接下來我們來談一點演算法的東西,相信大家都玩過五子棋這個遊戲吧,在不包括先手禁手等複雜規則之下,我們只考慮最簡單的15 15格仔的棋盤,規則是只要沒有落子的地方均可下子,某一方連成五個棋子則獲勝,遊戲結束。權值法在五子棋遊戲中是一種...