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 相关文章推荐
js读写cookie实现一个底部广告浮层效果的两种方法
Dec 29 Javascript
JS文本获得焦点清除文本文字的示例代码
Jan 13 Javascript
javascript学习笔记(五)原型和原型链详解
Oct 08 Javascript
php利用curl获取远程图片实现方法
Oct 26 Javascript
js 动态给元素添加、移除事件的实现方法
Jul 19 Javascript
JavaScript中省略元素对数组长度的影响
Oct 26 Javascript
JavaScript数据结构之链表的实现
Mar 19 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
Nov 27 Javascript
JavaScript图片处理与合成总结
Mar 04 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
Sep 21 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
Feb 06 Javascript
vue相关配置文件详解及多环境配置详细步骤
May 19 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
PHP脚本的10个技巧(2)
2006/10/09 PHP
PHP 开发环境配置(测试开发环境)
2010/04/28 PHP
解析php中call_user_func_array的作用
2013/06/07 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
浅析php原型模式
2014/11/25 PHP
php导入模块文件分享
2015/03/17 PHP
Javascript学习笔记5 类和对象
2010/01/11 Javascript
Javscript调用iframe框架页面中函数的方法
2014/11/01 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
vue实现登录拦截
2020/06/29 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
深入理解Python中变量赋值的问题
2017/01/12 Python
Python面向对象实现方法总结
2020/08/12 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
男方父母证婚词
2014/01/12 职场文书
草船借箭教学反思
2014/02/03 职场文书
《回乡偶书》教学反思
2014/04/12 职场文书
职务说明书范文
2014/05/07 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
专升本学生毕业自我鉴定
2014/10/04 职场文书
办公用房租赁协议书
2014/11/29 职场文书
超外差式晶体管收音机的组装与统调
2021/04/22 无线电
对象析构函数__del__在Python中何时使用
2022/03/22 Python