基于WebGL与WebSocket技术实现的联网三维五子棋-蔡远迪
发布时间: 2015-01-19 浏览次数: 402

基于WebGL与WebSocket技术实现的三维五子棋

12307130172 蔡远迪SOFT119003.01 网络虚拟环境与计算机应用

   

......

   本次我主要使用了HTML5中的WebGLWebSocket技术制作了一个立体的五子棋小游戏。主要使用的技术是WebGL,在所有版本中出现,实现三维场景的绘制; WebSocket实现通信,使用于联机版本中。

.....

   

   2.1.2 联机版本

   实现联机版本最主要是添加了服务端程序,和客户端服务端之间的通信。服务器端在各个客户端之间传递数据,同时进行棋盘储存与胜负的判定。

   启动服务端,双击RunServer.bat即可,Run Server.bat实质是NodeChessServer.js的命令,即用Node运行ChessServer.js,也可以直接在cmd中于该目录下打入Node ChessServer.js运行。

打开服务器端后可以打开客户端网页连接到服务端程序,本作默认连接到本机地址127.0.0.1,实际联机中需要修改客户端网页中的IP地址为服务器的IP。本作品中为方便处理,选择第一个进入的人为黑棋,第二个为白棋,轮流落子。之后进入的作为旁观者,只能观看前两个人下棋。如果前两个棋手中有人退出,则游戏重新开始,从旁观者中最早进入房间的继续作为棋手。

....

   

   3.4 AI的实现

   关于AI的实现,代码较长,具体实现细节较多,不便具体分析,简单讲讲主要思想。

   AI采用搜索算法,基本思想为遍历现局面下以后所有落子的可能性,并取最优策略。搜索到分出胜负的局面是不可能的,状态数过大,所需等待事件无法接受,所以采取限制搜索深度,只搜索以后的有限步数,并通过估价函数对某一局面评估出一个分数,作为比较的标准,在估价函数设计合理的情况下,分数最高的下法为最好或较好落子选择。

   决定搜索算法性能的因素,估价函数设计的合理性和搜索的深度都非常重要。我采用的估价函数是分别给两子,三子,四子,五子以上给定一个分数,如果一头或两头被堵,该分数会按一定规则减小,对自己和对手都按照这种规则累加分数,自己的分数减去对手的分数作为该局面的分值,具体细节可见代码。搜索的深度不能过大,会造成计算时间过长。同时为了决策更优,又需要尽可能加大搜索深度,此时可进行搜索剪枝,即搜索时抛弃一些不合法或明显较差额下法,可大大减少搜索宽度,减少搜索时间。一个剪枝是只搜索已有棋子位置附近的位置,因为五子棋中突然在较远处落子往往是不合理的着法。同时采用alphabeta搜索,alphabeta是一种基础搜索方法,是在最大最小搜索中加入最优化剪枝的搜索算法。有关资料再网上可以方便地找到,而且表述相当清晰易懂,故此处不作赘述。

....