微信小程序五子棋游戏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 07 Javascript
JQuery拖拽元素改变大小尺寸实现代码
Dec 10 Javascript
基于jquery中children()与find()的区别介绍
Apr 26 Javascript
Extjs单独定义各组件的实例代码
Jun 25 Javascript
jQuery瀑布流插件Wookmark使用实例
Apr 02 Javascript
完美实现bootstrap分页查询
Dec 09 Javascript
jquery mobile移动端幻灯片滑动切换效果
Apr 15 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
Feb 20 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
May 30 Javascript
Angular4学习之Angular CLI的安装与使用教程
Jan 04 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
Aug 24 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
Jun 11 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
Yii2设置默认控制器的两种方法
2017/05/19 PHP
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
Django 限制用户访问频率的中间件的实现
2018/08/23 Python
python使用magic模块进行文件类型识别方法
2018/12/08 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
澳大利亚相机之家:Camera House
2017/11/30 全球购物
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
JPA的特点
2014/10/25 面试题
中间件的定义
2016/08/09 面试题
外贸业务员工作职责
2014/01/06 职场文书
新闻发布会策划方案
2014/06/12 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
会计工作能力自我评价
2015/03/05 职场文书
活着观后感
2015/06/03 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
python urllib库的使用详解
2021/04/13 Python