五子棋游戏之eval妙用

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值