Welcome to use MarkDown

	<style type="text/css">
.box{
width: 600px;
height: 600px;
background: url(img/bak.jpg) no-repeat;
background-size: cover;
margin: 30px auto;
border: 1px solid #000000;
}
</style>
		<div class="box">
<canvas id="can" width="600" height="600px"></canvas>
</div>
		<script type="text/javascript">
var maps = [];
for(var i=0;i<15;i++){
maps[i] = [];
for(var j=0;j<15;j++){
maps[i][j] = 0;
}
}
//制作棋盘
var can = document.getElementById("can"); var ctx = can.getContext('2d'); var isblack = true; ctx.strokeStyle ="#000"; for(var i=0;i<15;i++){
for(var j=0;j<15;j++){
ctx.strokeRect(j*40,i*40,40,40)
}
} //制作棋子
var black = new Image();
var white = new Image();
black.src = "img/black.png"
white.src = "img/white.png" can.addEventListener('click',function(ev){
var dx = ev.clientX - can.offsetLeft;
var dy = ev.clientY - can.offsetTop; // console.log(dx,dy) var row =0;
var col =0; if(dx%40<20){
row = Math.floor(dx/40) }else{
row = Math.ceil(dx/40)
} if(dy%40<20){
col = Math.floor(dy/40) }else{
col = Math.ceil(dy/40)
} // console.log(row,col) if(isblack){ ctx.drawImage(black,row*40-20,col*40-20)
isblack = false; maps[row][col] = 2 //黑 iswin(2,row,col)
}else{
ctx.drawImage(white,row*40-20,col*40-20)
isblack = true; maps[row][col] = 1 //白 iswin(1,row,col)
} //判断输赢
function iswin(t,row,col){
var orgrow = row ; //将目标点存起来
var orgcol = col ;
var total =1; //垂直方向
while(col-1>0&&maps[row][col-1] == t){
total++;
col--;
} row = orgrow ;
col = orgcol; while(col+1<15&&maps[row][col+1] == t){ col++;
total++;
}
console.log(total)
if(total>=5){
if(t==1){
setTimeout(function(){alert('白子赢了')},500)
}else{ setTimeout(function(){alert('黑子赢了')},500);
}
} //水平方向
row=orgrow;
col=orgcol;
total=1;
while(row-1>0&&maps[row-1][col]==t)
{
row--;
total++;
}
row=orgrow;
col=orgcol;
while(row+1<15&&maps[row+1][col]==t)
{
row++;
total++;
}
if(total>=5)
{
if(t==1)
alert("白子赢");
else
alert("黑子赢");
} //左下和右上
row = orgrow ;
col = orgcol;
total =1;
while(row+1<15&&col-1>0&&maps[row+1][col-1]==t){
row++;
col--;
total++;
}
row = orgrow ;
col = orgcol;
while(row-1>0&&col+1<15&&maps[row-1][col+1] == t){
row--;
col++;
total++;
}
if(total>=5){
if(t==1){
setTimeout(function(){alert('白子赢了')},500)
}else{ setTimeout(function(){alert('黑子赢了')},500);
}
} //右下和左上
row = orgrow ;
col = orgcol;
total=1;
while(row+1<15&&col+1<15&&maps[row+1][col+1]==t){
row++;
col++;
total++;
}
row = orgrow ;
col = orgcol; while(row-1>0&&col-1>0&&maps[row-1][col-1] == t){
row--;
col--;
total++;
}
if(total>=5){
if(t==1){
setTimeout(function(){alert('白子赢了')},500)
}else{ setTimeout(function(){alert('黑子赢了')},500);
}
}
//至此所有方向游戏都结束呢 } }) </script>

原声js 五子棋 源码的更多相关文章

  1. 从vue.js的源码分析,input和textarea上的v-model指令到底做了什么

    v-model是 vue.js 中用于在表单表单元素上创建双向数据绑定,它的本质只是一个语法糖,在单向数据绑定的基础上,增加了监听用户输入事件并更新数据的功能:对,它本质上只是一个语法糖,但到底是一个 ...

  2. [百度地图] 用于类似 DWZ UI 框架的 百度地图 功能封装类 [MultiZMap.js] 实例源码

    MultiZMap 功能说明 MultiZMap.js 本类方法功能大多使用 prototype 原型 实现,它是 ZMap 的多加载版本,主要用于类似 DWZ 这个 多标签的 UI 的框架: 包含的 ...

  3. (原、整)Unreal源码 CoreUbject- Uobject

    (原.整) Unreal源码 CoreUbject- Uobject 类别                    [随笔分类]Unreal源码搬山 @author:白袍小道 随缘那啥 这里还是属于UE ...

  4. 深入Vue.js从源码开始(二)

    从入口开始 我们之前提到过 Vue.js 构建过程,在 web 应用下,我们来分析 Runtime + Compiler 构建出来的 Vue.js,它的入口是 src/platforms/web/en ...

  5. 百度地图整合功能分享修正版[ZMap.js] 实例源码!

    ZMap 功能说明 ZMap 是学习百度地图 api 接口,开发基本功能后整的一个脚本类,本类方法功能大多使用 prototype 原型 实现: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐标是 ...

  6. 【 js 模块加载 】深入学习模块化加载(node.js 模块源码)

    一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须按照一定的格式编写.AMD,CMD,CommonJS 是目前最常用的三种模块化书写规范.  1.AMD(Asy ...

  7. 深入理解 path-to-regexp.js 及源码分析

    阅读目录 一:path-to-regexp.js 源码分析如下: 二:pathToRegexp 的方法使用 回到顶部 一:path-to-regexp.js 源码分析如下: 我们在vue-router ...

  8. JS StartMove源码-简单运动框架

    这几天学习js运动应用课程时,开始接触一个小例子:“仿Flash的图片轮换播放器”,其中使用的StartMove简单运动框架我觉得挺好用的.这个源码也简单,理解其原理,自己敲即便也就熟悉了. 用的时候 ...

  9. 在centos7上安装gcc、node.js(源码下载)

    一.在centos7中安装node.js https://www.cnblogs.com/lpbottle/p/7733397.html 1.从源码下载Nodejs cd /usr/local/src ...

随机推荐

  1. The dplyr package has been updated with new data manipulation commands for filters, joins and set operations.(转)

    dplyr 0.4.0 January 9, 2015 in Uncategorized I’m very pleased to announce that dplyr 0.4.0 is now av ...

  2. springboot redis 缓存对象

    只要加入spring-boot-starter-data-redis , springboot 会自动识别并使用redis作为缓存容器,使用方式如下 gradle加入依赖 compile(" ...

  3. 从Thread,ThreadPool,Task, 到async await 的基本使用方法解读

    记得很久以前的一个面试场景: 面试官:说说你对JavaScript闭包的理解吧? 我:嗯,平时都是前端工程师在写JS,我们一般只管写后端代码. 面试官:你是后端程序员啊,好吧,那问问你多线程编程的问题 ...

  4. Web开发安全小贴士

    想要开发出一个安全的.健壮的Web应用其实是非常困难的, 如果你想要快速开发出一款集使用价值.用户体验度.以及安全性为一身的产品,以下安全步骤很必要!!!     数据库 1.对类似访问令牌.电子邮箱 ...

  5. 移动端使用rem同时适应安卓ios手机原理解析,移动端响应式开发

    rem单位大家可能已经很熟悉,rem是随着html的字体大小来显示代表宽度的方法,我们怎样进行移动端响应式开发呢 浏览器默认的字体大小为16px 及1rem 等于 16px 如果我们想要使1rem等于 ...

  6. vue2入坑随记(二) -- 自定义动态组件

    学习了Vue全家桶和一些UI基本够用了,但是用元素的方式使用组件还是不够灵活,比如我们需要通过js代码直接调用组件,而不是每次在页面上通过属性去控制组件的表现.下面讲一下如何定义动态组件. Vue.e ...

  7. 腾讯AlloyTeam发布AlloyLever - 开发调试发布错误监控上报用户问题定位尽在1kb代码

    AlloyLever [官网][Giuhub] 1kb(gzip)代码搞定开发调试发布,错误监控上报,用户问题定位. 支持错误监控和上报 支持 vConsole错误展示 支持开发阶段使用 vConso ...

  8. Mac 多个JDK的版本 脚本切换

    这里配置jdk7和jdk8版本的切换 1.官网下载jdk7和jdk8 地址:http://www.oracle.com/technetwork/java/javase/downloads 2.安装两个 ...

  9. 9个常用iptables配置实例

    iptables命令可用于配置Linux的包过滤规则,常用于实现防火墙.NAT.咋一看iptables的配置很复杂,掌握规律后,其实用iptables完成指定任务并不难,下面我们通过具体实例,学习ip ...

  10. 在ROS中使用花生壳的域名服务

    ROS功能强大,也比较复杂,各个版本的脚本可能也大同小异,我现在使用的是6.37.3的版本. 添加Script 进入菜单System->Scripts. 点击加号,像图中这样,添加代码,我给这段 ...