微信小程序五子棋游戏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 相关文章推荐
jquery网页元素拖拽插件效果及实现
Aug 05 Javascript
js和jquery如何获取图片真实的宽度和高度
Sep 28 Javascript
jquery实现多屏多图焦点图切换特效的方法
May 04 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
Jan 05 Javascript
jQuery循环遍历子节点并获取值的方法
Apr 14 Javascript
Angular中$cacheFactory的作用和用法实例详解
Aug 19 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
Jan 20 Javascript
bootstrap vue.js实现tab效果
Feb 07 Javascript
详解vue slot插槽的使用方法
Jun 13 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
Feb 26 Javascript
解决angular2 获取到的数据无法实时更新的问题
Aug 31 Javascript
js仿360开机效果
Dec 26 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中遍历stdclass object的实现代码
2011/06/09 PHP
使用dump函数,给php加断点测试
2013/06/25 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
js鼠标滑过弹出层的定位IE6bug解决办法
2012/12/26 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
使用js+jquery实现无限极联动
2013/05/23 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
Python学习笔记之os模块使用总结
2014/11/03 Python
Python中使用dom模块生成XML文件示例
2015/04/05 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
python之mock模块基本使用方法详解
2019/06/27 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
python-图片流传输的思路及示例(url转换二维码)
2020/12/21 Python
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
澳大利亚领先的折扣药房:Chemist Direct(有中文站)
2018/11/24 全球购物
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
教师师德教育的自我评价
2013/10/31 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
保护环境倡议书范文
2014/05/13 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
绿色环保口号
2014/06/12 职场文书
销售工作决心书
2015/02/04 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书