五子棋游戏之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

相关文章
相关标签/搜索