第6-3课:博弈树与井字棋(Tic-Tac-Toe)
上一課簡單介紹了博弈樹,從編程實現算法的角度看,博弈樹是三種樹中最簡單的一種,無論是原理還是實現都不復雜。這一課,我們就以簡單的井字棋(Tic-Tac-Toe)游戲為例,介紹一下如何用博弈樹實現一個簡單的井字棋 AI,最后的結果并不復雜,我希望大家把關注點放在如何設計數據模型、如何確定落子,以及將博弈樹的理論應用到具體的問題等這樣的過程上,而不是最后的結果。
Tic-Tac-Toe——規則簡單的博弈
小時候,我不知道這游戲的真名是 Tic-Tac-Toe,只知道無聊的時候,和小伙伴們找塊沙地,用小樹枝畫個井字就可以玩半天。井字棋總體來說沒什么難度,只要稍微動動腦,兩個人玩基本上都是平局,現在想想也沒啥意思,但正因為井字棋規則非常簡單,所以適合用來做博弈樹算法講解的例子。
這一課的重點依然是實現過程,也就是說如何將博弈樹的理論應用到一個簡單的游戲實現中,將上一課介紹的算法偽代碼翻譯成具體的算法實現。
棋盤與棋子的數學模型
井字棋游戲的棋盤類似一個 3 × 3 的九宮格形狀,直觀上很容易想到用一個 3 × 3 的二維數組表示棋盤,二維數組每個元素的值代表棋盤上對應位置的狀態,有三種,分別是空、O 型棋子或 X 型棋子。使用二維數組的好處是數據訪問比較直觀,二維數組的兩個下標可以直接表示棋子的位置,但缺點也很明顯,首先是遍歷棋盤需要用兩重循環處理兩個下標,其次是行、列以及斜線方向上都要做是否滿足三點連線的判斷,根據行、列和斜線的下標變化特點,需要用幾套不同的方法處理。
我之前多次說過,很多高效的棋類游戲都用一維數組建模,這一課用井字棋游戲
總結
以上是生活随笔為你收集整理的第6-3课:博弈树与井字棋(Tic-Tac-Toe)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据团队需要的六类角色
- 下一篇: 记来广州找实习1——还在找,还没找到。