微信小程序五子棋游戏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 相关文章推荐
JObj预览一个JS的框架
Mar 13 Javascript
JQery jstree 大数据量问题解决方法
Mar 09 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
Oct 14 Javascript
细说javascript函数从函数的构成开始
Aug 29 Javascript
javascript列表框操作函数集合汇总
Nov 28 Javascript
AngularJS ng-controller 指令简单实例
Aug 01 Javascript
javascript闭包功能与用法实例分析
Apr 06 Javascript
vue.js中Vue-router 2.0基础实践教程
May 08 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
May 17 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
Dec 17 Javascript
Vue的路由及路由钩子函数的实现
Jul 02 Javascript
解决Layui中layer报错的问题
Sep 03 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和MySql来与ODBC数据连接
2006/10/09 PHP
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
php编写一个简单的路由类
2011/04/13 PHP
php下利用curl判断远程文件是否存在的实现代码
2011/10/08 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
php中$_POST与php://input的区别实例分析
2015/01/07 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
js获取height和width的方法说明
2013/01/06 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
vue2.0设置proxyTable使用axios进行跨域请求的方法
2017/10/19 Javascript
vue实现商城上货组件简易版
2017/11/27 Javascript
简单谈谈Python流程控制语句
2016/12/04 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
在pycharm中实现删除bookmark
2020/02/14 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
老教师工作总结的自我评价
2013/09/27 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
请假条格式范文
2014/04/10 职场文书
客户答谢会活动方案
2014/08/31 职场文书
2016新年致辞
2015/08/01 职场文书
小学班级管理心得体会
2016/01/07 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang