1、概述
之前因为某种原因被要求开发五子棋的双人对战,以及人机对战,短时间没有开发出来,后来发现,实现AI 人机对战会困难一点,会用到一些算法(例如:基于博弈树的五子棋算法)
本文主要讲一下五子棋前端界面以及落子动作的实现,并不会涉及到AI 的算法实现部分,游戏的模式为单机双人对战模式。涉及的知识只有HTML CSS JS,容易上手。
2、实现布局
实现布局采用canvas画布去绘制界面。主要包含两个实现的要点,棋盘的绘制、棋子的绘制。
- HTML 结构 以及 样式
1 | <div class="wrapCanvas"> |
1 | html,body{ |
- 棋盘的绘制
根据画布的宽高/棋盘格子的宽和高=格子的数量,从而绘制相应的格子。首先一个名为index.js的JS文件中,添加如下配置信息。
1 | //配置信息 |
接着在index.js文件中添加init 方法,作为整个脚本文件的直行入口。
1 | //主入口 |
然后创建一个drawBoard方法,主要就是绘制横线和竖线。同时也初始化了tagboard,用于后面落子时,判断当前格子是否有棋子。
1 | // 画棋盘 |
- 棋子的绘制以及下棋逻辑实现
接着就是棋子的绘制,调用canvas的arc方法画圆。下棋的逻辑比较简单,主要就是判断对我方执棋还是对方执棋。
首先在init 方法里添加棋盘点击事件,调用画棋子的方法。
1 | //初始化方法 |
然后继续实现画棋子的方法,创建一个drawChees的方法:
1 | //❀棋子 |
实现棋子落在准确的位置上,需要特别注意的是需要以棋盘上的横线和竖线的交叉点为圆心进行一个半径为格子宽度一般的圆来判断落子的合法区域,在init方法里调用drawChees 方法前判断棋子的落下点,这里我们实现一个judgeMouseXY 方法,即判断鼠标点的区域是否是我们上面说的圆的区域内。
1 | //判断鼠标的位置 |
最终实现的效果

说在后面的话:
本文的五子棋并没有开发人机大战以及判断输赢,就当是留个好奇给大家,大家自行查阅相关资料,了解如何去实现!加油,前端er。
下载源码可以去:
我的网站:初心日志
加油!!!!