求star!一个用vue2+TypeScript+nodejs写的五子棋对战游戏
发布于 10 天前 作者 Barry215 549 次浏览 来自 分享

技术方案

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步之后的最佳子,但是速度慢,尤其手机速度感人

算法实现
  1. 利用了博弈树的极大极小值的思想,分数越高,电脑越有利,玩家越不利

    即电脑从所有低分结果中选出最高分,玩家假设聪明到能从所有高分结果中选出最低分

  2. 由于博弈树的分支会越来越大,呈指数型增长,所以采用AlphaBeta剪枝算法

    即假设min层中,已得最大值为a,则之后遍历的兄弟节点中的子节点一旦出现小于a的值,该兄弟节点就会被裁剪掉

    因为兄弟节点会选择子节点中最小的值作为自己的值,而兄弟节点的上一层需要最大的值,所以该兄弟节点已无用

  3. 虽然有了剪枝,但是速度依旧不快,而且AlphaBeta剪枝依赖遍历所得的最优解,但是从头开始遍历的要很久才会找到最优解,所以我们需要先找到一个最优解,然后再对其兄弟节点计算,这样会剪枝掉更多的节点,这就是所谓的启发式搜索

  4. 关于棋盘评分函数,也就是是各个点的得分总和,每个点的评分函数则是关键,有模式匹配的,有赢法加权的

玩家

  • 查看玩家
  • 邀请玩家
  • 修改昵称
  • 悔棋功能
  • 认输功能
  • 标记新棋
  • 智能提醒
5 回复

代码还是要清理下,太多 map和编译后的文件了

这一长串技术栈让我眼前一黑 不过还是赞一个先

看在玩人机让我赢了两把阿尔法狗的份上,给你一个star吧,虽然赢得是简单版的

表示战胜了困难版阿法狗

回到顶部