五子棋遊戲之eval妙用

昨晚在那裏思考人生,以爲,人對於世界是面向過程,世界對於人是面向對象。。。
思考思考着,忽然來了靈感,五子棋對於棋盤而言,不也就是一個對象麼。。。而後就去寫了個五子棋遊戲。
開始打算用原生js寫個就睡覺了。可是後來發現實在是不想操做節點。就去搭了個angular框架往裏面寫。
項目放在了github上面,地址:https://github.com/lackdata/s...
代碼今天整理了下,除去配置和空行等,實際ts代碼在40行左右。
先說說思路:
棋盤是由 n*n個'十'字組成,那麼我去寫了一個長度爲n數組遍歷,這個數組的每個子數組包含16個對象,
每一個對象也就是一個'十'字,對象key就一個'color'默認value'none',(雖然就一個key,可是爲了便於之後擴展,建議寫成對象)
圖片描述git

樣式分爲三類:無棋子'none',有黑色棋子'black',有白色棋子'white'.

判斷是否贏的規則很簡單。
八個方向,倆倆組合,最多判斷4次圖片描述github

以棋子點爲計算點。好比左上方向遞歸計算相同顏色棋子個數+右下方向遞歸計算相同顏色棋子個數
若是個數和爲4,判斷這個顏色的棋子贏,不然,清空個數,從新計算另外的方向。數組

這裏有個難點,就是計算方向的方式(好比座標(col,line)左上方是col-1,line-1)必須傳入到函數中,才能在遞歸的時候公用一個方法去計算。框架

eval能夠將string解析爲function函數

function test(a,b,str){
return eval(str);
}
var x = test(1,3,'a-b')//-2

因此我把五子棋方向遞歸寫成了以下方式spa

clipboard.png

我有遞歸眩暈症。。。寫起來的時候卻是不繞,可是解釋起來就特別繞,你們若是有興趣能夠對着代碼看,我先去休息一下子,犯暈。3d

相關文章
相關標籤/搜索