微信小程序五子棋游戏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 相关文章推荐
Redis基本知识、安装、部署、配置笔记
Mar 05 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
Jan 28 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
Feb 16 Javascript
js 判断一组日期是否是连续的简单实例
Jul 11 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
Dec 14 Javascript
Vue的Flux框架之Vuex状态管理器
Jul 30 Javascript
JavaScript 有用的代码片段和 trick
Feb 22 Javascript
Vue自定义toast组件的实例代码
Aug 15 Javascript
微信小程序如何调用新闻接口实现列表循环
Jul 02 Javascript
小程序如何定位所在城市及发起周边搜索
Feb 11 Javascript
javascript实现点击按钮切换轮播图功能
Sep 23 Javascript
vue 单页应用和多页应用的优劣
Oct 22 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伪静态之APACHE篇
2014/06/02 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
ExtJS 入门
2010/10/29 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
JavaScript中使用Object.create()创建对象介绍
2014/12/30 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
15位和18位身份证JS校验的简单实例
2016/07/18 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
js 调用百度分享功能
2017/02/27 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
简单了解django索引的相关知识
2019/07/17 Python
HTML5中的postMessage API基本使用教程
2016/05/20 HTML / CSS
个人担保书格式范文
2014/05/12 职场文书
职工擅自离岗检讨书
2014/09/23 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
早恋主题班会
2015/08/14 职场文书
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js