微信小程序五子棋游戏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 相关文章推荐
用Juery网页选项卡实现代码
Jun 13 Javascript
日历查询的算法 如何计算某一天是星期几
Dec 12 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
Dec 27 Javascript
小结Node.js中非阻塞IO和事件循环
Sep 18 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
Mar 19 Javascript
微信WeixinJSBridge API使用实例
May 25 Javascript
jQuery多级手风琴菜单实例讲解
Oct 22 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
Jan 26 Javascript
javascript中eval解析JSON字符串
Feb 27 Javascript
vue初始化动画加载的实例
Sep 01 Javascript
微信小程序入口场景的问题集合与相关解决方法
Jun 26 Javascript
JavaScript实现更换背景图片
Oct 18 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程序的php代码
2008/04/07 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
微信支付的开发流程详解
2016/09/13 PHP
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
JavaScript中检测变量是否存在遇到的一些问题
2013/11/11 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
全面总结Javascript对数组对象的各种操作
2017/01/22 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
vue.js使用watch监听路由变化的方法
2018/07/08 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
python开发入门——set的使用
2020/09/03 Python
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
经典促销广告词大全
2014/03/19 职场文书
太太口服液广告词
2014/03/20 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
法学自荐信
2014/06/20 职场文书
会议室使用管理制度
2015/08/06 职场文书
Html分层的box-shadow效果的示例代码
2021/03/30 HTML / CSS
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
java设计模式--建造者模式详解
2021/07/21 Java/Android