昨晚在那裏思考人生,以爲,人對於世界是面向過程,世界對於人是面向對象。。。
思考思考着,忽然來了靈感,五子棋對於棋盤而言,不也就是一個對象麼。。。而後就去寫了個五子棋遊戲。
開始打算用原生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
我有遞歸眩暈症。。。寫起來的時候卻是不繞,可是解釋起來就特別繞,你們若是有興趣能夠對着代碼看,我先去休息一下子,犯暈。3d