微信小程序五子棋游戏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代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | 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设置陷阱而取得胜。
希望本文所述对大家微信小程序开发有所帮助。
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
JavaScript实现iframe自动高度调整和不同主域名跨域
这篇文章主要介绍了JavaScript实现iframe自动高度调整和不同主域名跨域,作者通过建立一个代理来同步高度调整,需要的朋友可以参考下2016-02-02Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
这篇文章主要介绍了Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案的相关资料,需要的朋友可以参考下2016-09-09
最新评论