技术方案
vue2+vue-router2+iview+socket.io+webpack+nodejs+express+typescript
使用
cnpm install
//debug
npm run dev
//product
npm run build
github
https://github.com/Barry215/Gobang (内有演示链接) 如果您觉得还可以,就star支持一下哈~
游戏方式
- 玩家vs人机
- 玩家vs玩家
具体功能
人机
可以选择白棋或黑棋,先下或后下,与机器人进行五子棋练习
简单版
电脑只搜索当前最佳一点,速度快
困难版
电脑搜索4步之后的最佳子,但是速度慢,尤其手机速度感人
算法实现
-
利用了博弈树的极大极小值的思想,分数越高,电脑越有利,玩家越不利
即电脑从所有低分结果中选出最高分,玩家假设聪明到能从所有高分结果中选出最低分
-
由于博弈树的分支会越来越大,呈指数型增长,所以采用AlphaBeta剪枝算法
即假设min层中,已得最大值为a,则之后遍历的兄弟节点中的子节点一旦出现小于a的值,该兄弟节点就会被裁剪掉
因为兄弟节点会选择子节点中最小的值作为自己的值,而兄弟节点的上一层需要最大的值,所以该兄弟节点已无用
-
虽然有了剪枝,但是速度依旧不快,而且AlphaBeta剪枝依赖遍历所得的最优解,但是从头开始遍历的要很久才会找到最优解,所以我们需要先找到一个最优解,然后再对其兄弟节点计算,这样会剪枝掉更多的节点,这就是所谓的启发式搜索
-
关于棋盘评分函数,也就是是各个点的得分总和,每个点的评分函数则是关键,有模式匹配的,有赢法加权的
玩家
- 查看玩家
- 邀请玩家
- 修改昵称
- 悔棋功能
- 认输功能
- 标记新棋
- 智能提醒
代码还是要清理下,太多 map和编译后的文件了
@Binaryify 嗯嗯
这一长串技术栈让我眼前一黑 不过还是赞一个先
看在玩人机让我赢了两把阿尔法狗的份上,给你一个star吧,虽然赢得是简单版的
表示战胜了困难版阿法狗
请问你的项目里如何引入iview UI 框架的,我看了源码,没看到import iview呢,我的typescript项目里需要引入iview但是不成功。多谢