前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小程序(游戏)----五子棋(AI篇)

微信小程序(游戏)----五子棋(AI篇)

作者头像
Rattenking
发布2021-02-01 11:16:13
1.2K0
发布2021-02-01 11:16:13
举报
文章被收录于专栏:Rattenking

五子棋AI篇DEMO

效果图

AI篇效果图
AI篇效果图

原理

  1. 将棋盘中能够胜利的五子连珠方法遍历一个数组;
  2. 当AI持棋时,遍历棋盘中所有棋子的空位;
  3. 如果用户落子该位置,给用户该位置的五连珠方式进行加分:1连10分,2连20分,3连40分,4连80分;
  4. 如果AI落子该位置,给AI该位置的五连珠方式进行加分:1连15分,2连25分,3连45分,4连85分;
  5. 最后对该位置的分值进行比较,取最大分值位置的坐标,AI在最大分值位落子。

AI代码

代码语言:javascript
复制
computerAI(){
    var playerScore = [],computerScore = [];
    var max = 0,u = 0, v = 0;
    for (var i = 0; i < this.type; i++){
      playerScore[i] = [];
      computerScore[i] = [];
      for (var j = 0; j < this.type; j++){
        playerScore[i][j] = 0;
        computerScore[i][j] = 0;
      }
    }
    for (var x = 0; x < this.type; x++) {
      for (var y = 0; y < this.type; y++) {
        var po = this.checkPosition(x, y);
        if (po.status == 0){
          for (var k = 0; k < this.count; k++) {
            if (this.WIN_ARRAY[x][y][k]){
              if (this.player[k] == 1){
                playerScore[x][y] += 10;
              } else if (this.player[k] == 2){
                playerScore[x][y] += 20;
              } else if (this.player[k] == 3) {
                playerScore[x][y] += 40;
              } else if (this.player[k] == 4) {
                playerScore[x][y] += 80;
              }
              if (this.computer[k] == 1) {
                computerScore[x][y] += 15;
              } else if (this.player[k] == 2) {
                computerScore[x][y] += 25;
              } else if (this.player[k] == 3) {
                computerScore[x][y] += 45;
              } else if (this.player[k] == 4) {
                computerScore[x][y] += 85;
              }

            }
          }
          if (playerScore[x][y] > max){
            max = playerScore[x][y];
            u = x;
            v = y;
          } else if (playerScore[x][y] == max){
            if (computerScore[x][y] > computerScore[u][v]){
              u = x;
              v = y;
            }
          }
          if (computerScore[x][y] > max) {
            max = computerScore[x][y];
            u = x;
            v = y;
          } else if (computerScore[x][y] == max) {
            if (playerScore[x][y] > playerScore[u][v]) {
              u = x;
              v = y;
            }
          }
        }
      }
    }
    var point = this.checkPosition(u,v);
    
    if(point.status == 0){
      this.oneStep(point);
      point.status = -1;

      this.COMPUTER_ARRAY.push(point);
      for (var i = 0; i < this.count; i++) {
        if (this.WIN_ARRAY[point.pointX][point.pointY][k]) {
          this.computer[k]++;
          this.player[k] = 100;
        }
      }
      if (point.status == -1 && this.COMPUTER_ARRAY.length >= this.CHESS_LEN && this.checkWin(point, this.COMPUTER_ARRAY)) {

        wx.showToast({ title: '白棋胜利!' });
        this.isStart = false;
      }
      if (this.isStart) {
        this.isWho = !this.isWho;
      }
    }
  }

注意

此种方式实现的算法AI的防守比较重,进攻性不强,有待优化。而且很简单就能给AI设置陷阱而取得胜。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/01/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 效果图
  • 原理
  • AI代码
  • 注意
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档