微信小程序五子棋游戏AI实现方法【附demo源码下载】


Posted in Javascript onFebruary 20, 2019

本文实例讲述了微信小程序五子棋游戏AI实现方法。分享给大家供大家参考,具体如下:

DEMO下载

效果图

微信小程序五子棋游戏AI实现方法【附demo源码下载】

原理

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代码

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设置陷阱而取得胜。

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
JS检测图片大小的实例
Aug 21 Javascript
一个js控制的导航菜单实例代码
Dec 03 Javascript
js输入框邮箱自动提示功能代码实现
Dec 10 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
Jun 05 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
Sep 08 Javascript
VueJs与ReactJS和AngularJS的异同点
Dec 12 Javascript
JavaScript之underscore_动力节点Java学院整理
Jul 03 Javascript
使用vue2实现购物车和地址选配功能
Mar 29 Javascript
node中IO以及定时器优先级详解
May 10 Javascript
详解Vue中组件传值的多重实现方式
Aug 16 Javascript
Express 配置HTML页面访问的实现
Nov 01 Javascript
JavaScript实现HTML导航栏下拉菜单
Nov 25 Javascript
解决element ui select下拉框不回显数据问题的解决
Feb 20 #Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
Feb 20 #Javascript
Vue.js特性Scoped Slots的浅析
Feb 20 #Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
Feb 20 #Javascript
详解关于element级联选择器数据回显问题
Feb 20 #Javascript
JavaScript ES2019中的8个新特性详解
Feb 20 #Javascript
echarts实现词云自定义形状的示例代码
Feb 20 #Javascript
You might like
一个可以删除字符串中HTML标记的PHP函数
2006/10/09 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
2019/04/17 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
jsTree树控件(基于jQuery, 超强悍)[推荐]
2009/09/01 Javascript
js读取cookie方法总结
2014/10/31 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
深入理解Vue nextTick 机制
2018/04/28 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
Python 功能和特点(新手必学)
2015/12/30 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
Python实现名片管理系统
2020/02/14 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
Python3实现英文字母转换哥特式字体实例代码
2020/09/01 Python
Python实现像awk一样分割字符串
2020/09/15 Python
游戏商店:Eneba
2020/04/25 全球购物
启动一个线程是用run()还是start()
2016/12/25 面试题
高分子材料与工程专业推荐信
2013/12/01 职场文书
大学运动会入场词
2014/02/22 职场文书
5s推行计划书
2014/05/06 职场文书
写作技巧:如何撰写商业计划书
2019/08/08 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
为什么mysql字段要使用NOT NULL
2021/05/13 MySQL
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers