昨晚在那里思考人生,觉得,人对于世界是面向过程,世界对于人是面向对象。。。
思考思考着,突然来了灵感,五子棋对于棋盘而言,不也就是一个对象么。。。然后就去写了个五子棋游戏。
开始打算用原生js写个就睡觉了。但是后来发现实在是不想操作节点。就去搭了个angular框架往里面写。
项目放在了github上面,地址:https://github.com/lackdata/s...
代码今天整理了下,除去配置和空行等,实际ts代码在40行左右。
先说说思路:
棋盘是由 n*n个'十'
字组成,那么我去写了一个长度为n数组遍历,这个数组的每一个子数组包含16个对象,
每个对象也就是一个'十'
字,对象key
就一个'color'
默认value
为'none'
,(虽然就一个key,但是为了便于以后扩展,建议写成对象)
样式分为三类:无棋子'none',有黑色棋子'black',有白色棋子'white'.
判断是否赢的规则很简单。
八个方向,俩俩组合,最多判断4次。
以棋子点为计算点。比如左上方向递归计算相同颜色棋子个数+右下方向递归计算相同颜色棋子个数
如果个数和为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
所以我把五子棋方向递归写成了如下方式
我有递归眩晕症。。。写起来的时候倒是不绕,但是解释起来就特别绕,大家如果有兴趣可以对着代码看,我先去休息一会儿,犯晕。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。