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. html学习笔记 - table表格

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. CefSharp使用入门

    首先这是很重要的,环境搭建: 我用的是VS2017 步骤            方法 1.            打开VS的安装管理器 2.             进入修改界面,使用C++的桌面开发 ...

  3. 《一起》Alpha版软件使用说明

    1.引言 1.1编写目的 本手册是软件工程概论团队项目<一起>的Alpha版使用说明,面向的对象群体为全校师生. 1.2项目背景 本项目由<软件工程概论>课程需求创建,软件由S ...

  4. CentOS上安装NodeJs

    (1)参照:http://www.cnblogs.com/zhangqingsh/archive/2013/04/15/3022583.html  安装Python2.7 (2)安装Nodejs yu ...

  5. haproxy-代码阅读-内存管理

    haproxy内存池概述 内存池按照类型分类,每个类型的内存池都有一个名字,用链表记录空闲的内存块,每个内存块大小相等,并按照16字节对齐. haporxy用pool_head 结构记录内存池 str ...

  6. 【java8】慎用java8的foreach循环

    虽然java8出来很久了,但是之前用的一直也不多,最近正好学习了java8,推荐一本书还是不错的<写给大忙人看的javase8>.因为学习了Java8,所以只要能用到的地方都会去用,尤其是 ...

  7. node使用消息队列RabbitMQ一

    基础发布和订阅 消息队列RabbitMQ使用 1 安装RabbitMQ服务器 安装erlang服务 下载地址 http://www.erlang.org/downloads 安装RabbitMQ 下载 ...

  8. source install sshpass in aix

    1.源码下载:   wget https://nchc.dl.sourceforge.net/project/sshpass/sshpass/1.06/sshpass-1.06.tar.gz 2.解压 ...

  9. Python教程(2.1)——控制台输入

    这一节,我们来学习如何写一个简单的Python程序. 我们知道,很多编程语言一开始就是学习怎么输出"Hello, world",对吧?那么,现在我们来学习怎么用Python输出&q ...

  10. NLTK学习笔记(三):NLTK的一些工具

    主要总结一下简单的工具:条件频率分布.正则表达式.词干提取器和归并器. 条件分布频率 <自然语言学习>很多地方都用到了条件分布频率,nltk提供了两种常用的接口:FreqDist 和 Co ...