文章目錄
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格仔的棋盤,規則是只要沒有落子的地方均可下子,某一方連成五個棋子則獲勝,遊戲結束。權值法在五子棋遊戲中是一種...