昨晚在那里思考人生,以为,人对于世界是面向过程,世界对于人是面向对象。。。
思考思考着,忽然来了灵感,五子棋对于棋盘而言,不也就是一个对象么。。。而后就去写了个五子棋游戏。
开始打算用原生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