首页 > 编程语言 >人工智能五子棋游戏——(5)五子棋游戏的算法实现

人工智能五子棋游戏——(5)五子棋游戏的算法实现

时间:2023-02-19 16:22:47浏览次数:40  
标签:minWin 游戏 min 人工智能 max Chessboard 五子棋 ++ var

算法代码设计

五子棋的内层算法决定了人工智能五子棋的反应速度和下棋实力。通过数值搜索算法,以尽量快的响应速度,让玩家感受不到延迟。不断的对算法进行优化,提高人工智能五子棋的棋力水平达到超过一般人水准。

人工智能五子棋赢法算法如下:

var Chessboard = function(row, column) {

    this.data = [];

    this.row = row;

    this.column = column;

    //赢法数组

    this.wins = [];

    //赢法数

    this.count = 0;

    //记录max每一种赢法的已经达成棋子数

    this.maxWin = [];

    //记录min每一种赢法的已经达成棋子数

    this.minWin = [];

    //初始化棋盘,顺便初始化赢法数组

    for (var i = 0; i < row; i++) {

        this.data[i] = [];

        this.wins[i] = [];

        for (var j = 0; j < column; j++) {

            this.data[i][j] = Chessboard.NONE;

            this.wins[i][j] = [];

        }

    }

    //横向赢法

    for (var i = 0; i < row; i++) {

        for (var j = 0; j <= column - 5; j++) {

            for (var k = 0; k < 5; k++) {

                this.wins[i][j + k][this.count] = true;

            }

            this.count++;

        }

    }

    //纵向赢法

    for (var i = 0; i < column; i++) {

        for (var j = 0; j <= row - 5; j++) {

            for (var k = 0; k < 5; k++) {

                this.wins[j + k][i][this.count] = true;

            }

            this.count++;

        }

    }

    //右斜线的赢法

    for (var i = 0; i <= row - 5; i++) {

        for (var j = 0; j <= column - 5; j++) {

            for (var k = 0; k < 5; k++) {

                this.wins[i + k][j + k][this.count] = true;

            }

            this.count++;

        }

    }

    //左斜线的赢法

    for (var i = 0; i <= row - 5; i++) {

        for (var j = column - 1; j >= 4; j--) {

            for (var k = 0; k < 5; k++) {

                this.wins[i + k][j - k][this.count] = true;

            }

            this.count++;

        }

    }

    //初始化max和min每一种赢法的下子情况

    for (var i = 0; i < this.count; i++) {

        this.maxWin[i] = {

            max: 0,

            min: 0

        };

        this.minWin[i] = {

            min: 0,

            max: 0

        };

}

人工智能对各个位置落子的胜算估值部分代码如下:

Chessboard.prototype.evaluate = function() {

    var maxW = minW = 0;

    var maxGroup = {

            "5": 0,

            "4": 0,

            "3": 0,

            "2": 0,

            "1": 0

        },

        minGroup = {

            "5": 0,

            "4": 0,

            "3": 0,

            "2": 0,

            "1": 0

        };

    for (var i = 0; i < this.count; i++) {

        if (this.maxWin[i].max == 5 && !this.maxWin[i].min) {

            return Chessboard.MAX_VALUE;

        }

        if (this.minWin[i].min == 5 && !this.minWin[i].max) {

            return Chessboard.MIN_VALUE;

        }

        if (this.maxWin[i].max == 4 && !this.maxWin[i].min) {

            maxGroup[4]++;

        }

        if (this.minWin[i].min == 4 && !this.minWin[i].max) {

            minGroup[4]++;

        }

        if (this.maxWin[i].max == 3 && !this.maxWin[i].min) {

            maxGroup[3]++;

        }

        if (this.minWin[i].min == 3 && !this.minWin[i].max) {

            minGroup[3]++;

        }

        if (this.maxWin[i].max == 2 && !this.maxWin[i].min) {

            maxGroup[2]++;

        }

        if (this.minWin[i].min == 2 && !this.minWin[i].max) {

            minGroup[2]++;

        }

        if (this.maxWin[i].max == 1 && !this.maxWin[i].min) {

            maxGroup[1]++;

        }

        if (this.minWin[i].min == 1 && !this.minWin[i].max) {

            minGroup[1]++;

        }

    }

    maxW = maxGroup[4] * Chessboard.FOUR_W + maxGroup[3] * Chessboard.THREE_W + maxGroup[2] * Chessboard.TWO_W + maxGroup[1] * Chessboard.ONE_W;

    minW = minGroup[4] * Chessboard.FOUR_W + minGroup[3] * Chessboard.THREE_W + minGroup[2] * Chessboard.TWO_W + minGroup[1] * Chessboard.ONE_W;

    return maxW - minW;

};

标签:minWin,游戏,min,人工智能,max,Chessboard,五子棋,++,var
From: https://www.cnblogs.com/yenaibo/p/17134945.html

相关文章

  • 人工智能五子棋游戏——(2)功能模块简介
    功能模块简介游戏各功能模块的设计也各不相同,游戏中的棋盘系统、计时系统、游戏控制在前端。游戏控制包括玩家黑子控制和人工智能白子控制。后端算法主要负责判定游戏胜负......
  • 人工智能五子棋游戏——(3)算法模块简介
     游戏的运算能力是决定整个游戏性能和性能的关键因素。算法是软件的核心,所以当你自己的工作要做某些事情的时候,它就必须要有一个演算法。一个好的方法可以减少错误率,高效......
  • 【笔记本推荐】【游戏本推荐】【办公本推荐】【设计本推荐】
    (注意:建议在旗舰店、官方旗舰店、官网购买)一、游戏本设计本、办公本推荐如下:华为品牌:(全球第一大电信设备商)1万多:HUAWEIMateBookXPro2022款14.2英寸11代酷睿i716GB......
  • [PKUSC2018]神仙的游戏
    神仙的游戏设s的长度为len,那么当k<=\(\lfloor\frac{len}{2}\rfloor\)时,只需要s[1..k]=s[len-k+1...len]即可。也就是说我们要判断前缀的1与后缀的0是否对应。......
  • 软件测试|教你使用Python实现五子棋游戏(一)
    前言五子棋是我们传统的益智游戏之一,老少皆宜,上手简单,对于锻炼逻辑思维,增强思考能力有很大帮助。那么,我们能不能使用Python来写出五子棋的程序呢,毕竟不是什么时候都有对手和......
  • 教你如何游戏里面禁止ctrl+shift 切输入法
    最近玩刀剑封魔录,这种老游戏,游戏里面ctrl+shift切输入法会很卡.有时候又会误操作. autohotkey搞定.代码如下:GroupAdd,game,ahk_exeSC2_x64.exe;注......
  • 简单的猜拳游戏-JAVA实现
    一个简单的猜拳游戏packagecom.zhou.java.demo02;importjava.util.Random;importjava.util.Scanner;publicclassDemo09{publicstaticvoidmain(String[]args......
  • 怎样才能给人工智能注入有趣的灵魂?
    以ChatGPT为代表的人工智能,理论上无法像人类一样拥有灵魂,但可以通过以下方式赋予其一定的趣味性:个性化-为人工智能添加特定的个性和语言风格,使其在与人类交互时更加......
  • 人工智能导论
    importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspdimportseabornassnsfromsklearn.linear_modelimportSGDRegressorimportjoblibimport......
  • Qt简单版贪吃?游戏
    Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui->setupUi(this);resize(480,500);//设置窗体背景色为黑色setStyleShee......