微信小程序五子棋游戏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里写一个swing把数据插入数据库
Dec 10 Javascript
js判断横竖屏及禁止浏览器滑动条示例
Apr 29 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
Dec 13 Javascript
分享网页检测摇一摇实例代码
Jan 14 Javascript
理解javascript中的with关键字
Feb 15 Javascript
微信小程序 ecshop地址三级联动实现实例代码
Feb 28 Javascript
JavaScript中的return布尔值的用法和原理解析
Aug 14 Javascript
JS基于递归实现网页版计算器的方法分析
Dec 20 Javascript
angular2中Http请求原理与用法详解
Jan 11 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
Oct 22 Javascript
小程序如何支持使用 async/await详解
Sep 12 Javascript
jQuery实现简易QQ聊天框
Feb 10 jQuery
解决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常用表单验证类用法实例
2015/06/18 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
用javascript实现页面打印的三种方法
2007/03/05 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
举例讲解Django中数据模型访问外键值的方法
2015/07/21 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
python逆向入门教程
2018/01/15 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
python每天定时运行某程序代码
2019/08/16 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
师范应届生求职信
2013/11/15 职场文书
酒店保洁主管岗位职责
2013/11/28 职场文书
犯错检讨书
2014/02/21 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
大学生毕业求职信
2014/06/12 职场文书
Java实现房屋出租系统详解
2021/10/05 Java/Android
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js