五子棋游戏之eval妙用

lackdata

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

所以我把五子棋方向递归写成了如下方式

clipboard.png

我有递归眩晕症。。。写起来的时候倒是不绕,但是解释起来就特别绕,大家如果有兴趣可以对着代码看,我先去休息一会儿,犯晕。

阅读 725
349 声望
3 粉丝
0 条评论
349 声望
3 粉丝
文章目录
宣传栏