微信小程序五子棋游戏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 相关文章推荐
新浪中用来显示flash的函数
Apr 02 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
Feb 20 Javascript
js+css实现回到顶部按钮(back to top)
Mar 02 Javascript
深入探讨Vue.js组件和组件通信
Sep 12 Javascript
js在ie下打开对话窗口的方法小结
Oct 24 Javascript
vue.js初学入门教程(1)
Nov 03 Javascript
ES6新特性七:数组的扩充详解
Apr 21 Javascript
node跨域转发 express+http-proxy-middleware的使用
May 31 Javascript
基于Webpack4和React hooks搭建项目的方法
Feb 05 Javascript
Vue中computed、methods与watch的区别总结
Apr 10 Javascript
Vue拖拽组件列表实现动态页面配置功能
Jun 17 Javascript
从0搭建vue-cli4脚手架
Jun 17 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
针对初学PHP者的疑难问答(1)
2006/10/09 PHP
PHP strtr() 函数使用说明
2008/11/21 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
分享别人写的一个小型js框架
2007/08/13 Javascript
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
jquery实现文本框鼠标右击无效以及不能输入的代码
2010/11/05 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
详解js的六大数据类型
2016/12/27 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
基于vue实现分页效果
2017/11/06 Javascript
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
使用Python脚本操作MongoDB的教程
2015/04/16 Python
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
详解python调度框架APScheduler使用
2017/03/28 Python
Python探索之自定义实现线程池
2017/10/27 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
python快排算法详解
2019/03/04 Python
python实现局域网内实时通信代码
2019/12/22 Python
python如何实现复制目录到指定目录
2020/02/13 Python
解决Django no such table: django_session的问题
2020/04/07 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
小学开学标语
2014/07/01 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
单位未婚证明范本
2014/11/25 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
PHP实现两种排课方式
2021/06/26 PHP