H5+C3+JS实现五子棋游戏(AI篇)


Posted in Javascript onMay 28, 2020

本文实例为大家分享了H5+C3+JS实现五子棋游戏的具体代码,供大家参考,具体内容如下

新增全局变量

<script>
 //所有赢法总和
 var count = 0;
 //容纳所有赢法的三维数组
 var allWin = [];
 for(var i =0; i <15; i++){
 allWin[i] = [];
 for(var j=0; j <15; j++){
  allWin[i][j] = [];
 }
 }

 //横线赢法
 for(var i =0; i <15; i++){
 for(var j =0; j <11; j++){
  for(var k =0; k <5; k++){
  allWin[j+k][i][count] = true;
  }
  count++;
 }
 }
 //竖线赢法
 for(var i =0; i <15; i++){
 for(var j =0; j <11; j++){
  for(var k =0; k <5; k++){
  allWin[i][j+k][count] = true;
  }
  count++;
 }
 }
 //斜线赢法
 for(var i =0; i <11; i++){
 for(var j =0; j <11; j++){
  for(var k =0; k <5; k++){
  allWin[i+k][j+k][count] = true;
  }
  count++;
 }
 }
 //反斜线赢法
 for(var i =14; i >3; i--){
 for(var j =0; j <11; j++){
  for(var k =0; k <5; k++){
  allWin[i-k][j+k][count] = true;
  }
  count++;
 }
 }
 /*此时可以输出一下count,如果为572种就表示上面的代码没有问题 */
 /* alert(count); */

 //记录所有赢法当前所下的棋子, 为6表示已被堵住,不可达 */
 var myWin = [];
 var compWin = [];
 for(var i =0; i <count; i++){
 myWin[i] = 0;
 compWin[i] = 0;
 }

 //判断当前是否游戏结束
 var meover = false;
 var compover = false;

</script>

chess.onclick的微调:白棋不再用户下

<script>
 chess.onclick = function(event) {
 //如果游戏结束或者该点已经被下
 if(meover || compover || curIndex[x][y] != 0)
  return;
 //获取要下的棋子的位置
 var x = Math.floor(event.offsetX /30);
 var y = Math.floor(event.offsetY /30);
 //开始绘制
 context.beginPath();
 //绘制指定圆
 context.arc(15 +x *30, 15 +y *30, 15, 0, 2 *Math.PI);
 context.fillStyle = "#636766";
 context.fill() ;
 //当前位置已经被玩家下了
 curIndex[x][y] = 1;
 <1>
 }
</script>

玩家是否赢进行判断:在上面代码<1>处加入代码

<script>
 for(var k =0; k <count; k++){
 if(allWin[x][y][k]){
  //此种赢法步数加1,如果为5表示全部走到
  //此赢法computer已不可达,设置为6
  myWin[k]++;
  compWin[k] = 6;
 }
 if(myWin[k] == 5){
  alert("你赢了");
  compover;
 }
 }
 if(compover)
 return;
 //电脑AI算法检测下一步
 AIcode();<2>
</script>

AI算法核心

<script>
 function AIcode(){
 //表示所有位置的玩家总分数和电脑总分数
 var myScore = [];
 var compScore = [];
 for(var i =0; i <15; i++){
  myScore[i] = [];
  compScore[i] = [];
  for(var j =0; j <15; j++){
  myScore[i][j] = 0;
  compScore[i][j] = 0;
  }
 }
 //对分数进行统计判断,选出分数最大的位置进行电脑下棋
 var max = 0;
 var maxX = 0;
 var maxY = 0;

 //创建加分规则
 for(var i =0; i < 15; i++){
  for(var j =0; j <15; j++){
  if(curIndex[i][j] == 0){
  for(var k=0; k <count; k++){
   if(allWin[i][j][k]){
   if(myWin[k] == 1){
    myScore[i][j] += 200;
   }
   else if(myWin[k] == 2){
    myScore[i][j] += 500;
   }
   else if(myWin[k] == 3){
    myScore[i][j] += 2000;
   }
   else if(myWin[k] == 4){
    myScore[i][j] += 50000;
   }
   if(compWin[k] == 1){
    compScore[i][j] += 300;
   }
   else if(compWin[k] == 2){
    compScore[i][j] += 800;
   }
   else if(compWin[k] == 3){
    compScore[i][j] += 20000;
   }
   else if(compWin[k] == 4){
    compScore[i][j] += 500000;
   }
   }
  }
  if(myScore[i][j] > max){
   max = myScore[i][j];
   maxX = i;
   maxY = j;
   }
  if(compScore[i][j] > max){
   max = compScore[i][j];
   maxX = i;
   maxY = j;
  }
  }
 }
 }


 //进行最终下棋
 context.beginPath();
 context.arc(15 +maxX *30, 15 +maxY *30, 15, 0, 2 *Math.PI);
 context.fillStyle = "#fefefe";
 context.fill();
 //标记当前位置已经被白棋占据
 curIndex[maxX][maxY] = 2;
 <3>
 context.closePath();
};
</script>

电脑是否赢进行判断<3>

<script>
 for(var k =0; k <count; k++){
 if(allWin[maxX][maxY][k]){
  compWin[k]++;
  myWin[k] = 6;
 }
 if(compWin[k] == 5){
  alert("你输了");
  meover = true;
 }
 }
</script>

实现效果图

H5+C3+JS实现五子棋游戏(AI篇)

更多有趣的经典小游戏实现专题,分享给大家:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
让页面上两个div中的滚动条(滑块)同步运动示例
Aug 07 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
Dec 31 Javascript
JQuery中使用.each()遍历元素学习笔记
Nov 08 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
Jun 08 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
Jan 21 Javascript
javascript中sort排序实例详解
Jul 24 Javascript
SVG描边动画
Feb 23 Javascript
jQuery 判断元素整理汇总
Feb 28 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
Jan 31 Javascript
React事件处理的机制及原理
Dec 03 Javascript
vue动画效果实现方法示例
Mar 18 Javascript
SpringBoot在yml配置文件中配置druid的操作
Nov 16 Javascript
解决微信小程序防止无法回到主页的问题
Sep 28 #Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
Sep 28 #Javascript
H5+C3+JS实现双人对战五子棋游戏(UI篇)
May 28 #Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
Sep 28 #Javascript
vue element table 表格请求后台排序的方法
Sep 28 #Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
Sep 28 #Javascript
在vue项目中正确使用iconfont的方法
Sep 28 #Javascript
You might like
收音机的保养
2021/03/01 无线电
让你的网站首页自动选择语言转跳
2006/12/06 PHP
php基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
Angularjs上传图片实例详解
2017/08/06 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
2019/05/06 Javascript
Python守护进程(daemon)代码实例
2015/03/06 Python
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
德国家具折扣店:POCO
2020/02/28 全球购物
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
SQL面试题
2013/04/30 面试题
寒假实习自荐信
2014/01/26 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
花木兰观后感
2015/06/10 职场文书
回门宴新娘答谢词
2015/09/29 职场文书
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫