前端框架及项目面试-聚焦Vue3/React/Webpack(最新升级版)

329 阅读2分钟

download:前端框架及项目面试-聚焦Vue3/React/Webpack(最新升级版)

首先看 getPoint 办法,这个是 AI 的出入口办法,我们要对传入的棋盘数据做一个初始化,调用 initChessData 办法,计算出当前游戏的棋盘行数、列数,并且拷贝了一份棋子数据到本地(深拷贝还是浅拷贝视状况而定)。

this.ai = 3 - point.type;
复制代码

这行代码能够计算出AI是执黑子还是执白子,应该很好了解。

if (started) {
    // AI先下,首子天元
    int centerX = this.cols / 2;
    int centerY = this.rows / 2;
    return new Point(centerX, centerY, this.ai);
}
复制代码

这段代码是处置刚开局时 AI 先行落子的状况,我们这边是简单的将落子点肯定为棋盘中心位置(天元)。开局状况的落子我们能够本人定义,并不是固定的,只是说天元的位置比拟好而已。

    private Point getBestPoint() {
	Point best = null;
        // 初始分值为最小
        int score = -INFINITY;
        /* 遍历一切能下棋的点位,评价各个点位的分值,选择分值最大的点位 */
        for (int i = 0; i < this.cols; i++) {
            for (int j = 0; j < this.rows; j++) {
                if (this.chessData[i][j] != 0) {
                    // 该点已有棋子,跳过
                    continue;
                }
                Point p = new Point(i, j, this.ai);
                // 评价该点AI得分
                int val = evaluate(p);
                // 选择得分最高的点位
                if (val > score) {
                    // 最高分被刷新
                    score = val;
                    // 更新最佳点位
                    best = p;
                }
            }
        }
        return best;
    }
复制代码

然后就到了我们最主要的办法了 getBestPoint,这个办法用于选择出 AI 的最佳落子位置。这个办法的思绪就是遍历棋盘上一切能下棋的点,然后对这个点停止评分,假如这个点的评分比之前点的评分高,就更新当前最佳落子点位,并更新最高分,一切的落子点都评价完成之后,我们就能肯定最好的点位在哪了。

   /**
     * 对当前棋位停止评价
     *
     * @param point 当前棋位
     * @return
     */
    private int evaluate(Point point) {
    	// 中心
    }
复制代码

最后就是评价函数的完成了。

评价函数

在写评价函数之前,我们要先理解一下五子棋的几种棋型。(还不熟的朋友,五子棋入门理解一下:和那威学五子棋)

在这里,我把五子棋棋型大致分为:连五活四冲四活三眠三活二眠二眠一 等共8种棋型。

0:空位 1:黑子 2:白子
连五:11111
活四:011110
冲四:21111
活三:001110
眠三:211100
活二:001100
眠二:001120
眠一:001200