微信小程序五子棋游戏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 相关文章推荐
javascript模拟的Ping效果代码 (Web Ping)
Mar 13 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
Dec 05 Javascript
分享一则javascript 调试技巧
Jan 02 Javascript
学习Bootstrap组件之下拉菜单
Jul 28 Javascript
JS加载器如何动态加载外部js文件
May 26 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
Aug 01 Javascript
Javascript 事件冒泡机制详细介绍
Oct 10 Javascript
微信小程序 地图map实例详解
Jun 07 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
Dec 26 Javascript
JavaScript 高性能数组去重的方法
Sep 20 Javascript
vue 利用路由守卫判断是否登录的方法
Sep 29 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
Dec 04 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
一个用php3编写的简单计数器
2006/10/09 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
JQuery获取表格数据示例代码
2014/05/26 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
python处理cookie详解
2014/02/07 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
Python3 操作符重载方法示例
2017/11/23 Python
numpy向空的二维数组中添加元素的方法
2018/11/01 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
对python中return与yield的区别详解
2020/03/12 Python
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
PHP面试题及答案一
2012/06/18 面试题
销售辞职报告范文
2014/01/12 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript
《废话连篇——致新手》——chinapizza
2022/04/05 无线电
CentOS MySql8 远程连接实战
2022/04/19 MySQL