文档章节

棋盘js代码

w
 wangwenya
发布于 2014/06/08 14:26
字数 773
阅读 453
收藏 6

 this.board=function(name,width,height,rowBak,colBak){ /* 画棋盘 */
 nameBak=name;
 if("turnover"==name){row=8;col=8;}else if("gogame"==name){row=18;col=18;}
 var aW=Math.floor(width/(col+2)),aH=Math.floor(height/(row+2));
 minL=(aW>aH?aH:aW)-4;// 这个减法很重要,否则填空时会把表格撑大
 var array=new Array("<div style=\"margin:"+minL+"px;\"> "+
 "<table border=1 cellspacing=0 width=\""+(aW*col)+"\"
 height=\""+(aH*row)+"\">");
 for(var i=0;i<row;i++){
       array.push("<tr>");
       for(var j=0;j<col;j++){array.push("<td align=center>"+
 evt(i,j,minL,minL,aW*j+minL/2+8,aH*i+minL/2)+"</td>");}
       if(nameBak!="four"&&nameBak!="turnover")/* 将事件添加到表格中 */
             array.push(evt(i,col,minL,minL,aW*col+minL/2+8,aH*i+minL/2));
             array.push("</tr>");
   }
    if(nameBak!="four"&&nameBak!="turnover"){
           for(var j=0;j<=col;j++){
               array.push(evt(row,j,minL,minL,aW*j+minL/2+8,aH*row+minL/2));
               }
           }
 document.write(array.join("")+"</table></div>");
 setClick(row,col,minL,minL);/* 初始化事件 */
 start();/* 初始化棋子 */
}
function man(width,height,id,colorBak){ /* 画棋子 */
  var color=colorBak==null?(order++%2==0?"000":"CCC"):colorBak;
  var r="border-radius:"+width/2+"px;";
  var obj=id==null?event.srcElement:_$(id);
  obj.innerHTML="<div id=\"man_"+color+"_"+order+"\" style=\"display:block;-webkit-"
  +r+"-moz-"+r+""+r+"-moz-box-shadow:inset 0 -10px 40px rgba(0,0,0,1);"+
  "box-shadow:inset 0 -10px 40px rgba(0,0,0,1);"+
  "background:-webkit-gradient(radial, 50 40, 30, center center, 80, from(#"+color+"),
     to(rgba(255,255,255,1)));"+
  "width:"+width+"px;height:"+height+"px;\"></div>";
 }
function moreMan(array){for(var i=0;i<array.length;i++)
man(minL,minL,nameBak+"_"+array[i]);}
/* 绘制多个棋子 */
function evt(i,j,width,height,left,top){ /* 单一单元格事件 */
  return "<div id=\""+nameBak+"_"+i+"_"+j+"\" style=\"position:"+
 (nameBak=="four"||nameBak=="turnover"?"block":"absolute")+
 ";border:0px solid #000;width:"+
 width+"px;height:"+height+"px;top:"+top+"px;left:"+left+"px;\"></div>";
  }
function setClick(row,col,width,height){
     for(var i=0;i<=row;i++){
            for(var j=0;j<=col;j++){
                var els=_$(nameBak+"_"+i+"_"+j);
                if(els!=null)els.onclick=function(){if(rule())man(width,height);};
    }
     }
  }
function isMan(row,col){var obj=_$(nameBak+"_"+row+"_"+col,1);
if(obj==null||obj.indexOf("man_")==-1)return null;
else if(obj.indexOf("000")!=-1)
  return 0;
else if(obj.indexOf("CCC")!=-1)return 1;}
function rule(){/* 走棋规则 */
var id=event.srcElement.id;
if(id.indexOf("man_")==0){alert("不能在有子的地方落子");return false;}else{
    var p=id.indexOf("_"),p1=id.lastIndexOf("_");
    var row=id.substr(p+1,p1-p-1)*1,col=id.substr(p1+1)*1;
    if("gobang"==nameBak)return gobang(row,col);
       else if("four"==nameBak){
    if(isMan(row,col+1)==null&&isMan(row,col-1)==null&&
    isMan(row+1,col)==null&&
    isMan(row-1,col)==null){
    alert("四子棋不能在四周空白的地方落子!");
    return false;
}
return gobang(row,col,3);
}else if("turnover"==nameBak){
if(isMan(row,col+1)==null&&isMan(row,col-1)==null&&
isMan(row+1,col)==null&&isMan(row-1,col)==null&&
isMan(row-1,col-1)==null&&
isMan(row+1,col+1)==null){
alert("翻转棋不能在四周空白的地方落子!");
return false;
}
 turnover();
}else if("gogame"==nameBak){
    }
    }
 return true;
}
function gobang(row,col,num){
num=num==null?4:num;
var rs=[[],[],[],[]],b=[],w=[];/* 这里采用四维数组来存储棋子位置 */
for(var i=0,j=0;i<num*2+1;i++,j++){
rs[0].push(isMan(row-num+i,col));
rs[1].push(isMan(row,col-num+j));
rs[2].push(isMan(row-num+i,col-num+j));
rs[3].push(isMan(row-num+i,col-num+j));
if(i<num){b.push(0);w.push(1);}
  }
if(rs.join("#").indexOf(b.join(","))!=-1){alert("黑棋胜");return false;
}else if(rs.join("#").indexOf(w.join(","))!=-1){alert("白棋胜");return false;}
    return true;
 }
function turnover(){
   if(order<64)return;
   var num=0;var total=row*col;for(var i=0;i<row;i++){
       for(var j=0;j<col;j++){num+=isMan(i+"_"+j);}
   }
if(num<total/2)alert("黑棋胜"+(total-num*2)+"子");
else if(num>row*col/2)alert("白棋胜"+(num*2-total)+"子");
else alert("平局");
 }
function start(){
  if("turnover"==nameBak){moreMan([3+"_"+3,4+"_"+3,4+"_"+4,3+"_"+4]);
  }else if("four"==nameBak){man(minL,minL,nameBak+"_"+row/2+"_"+0);
  }else if("gogame"==nameBak){moreMan([3+"_"+3,15+"_"+3,15+"_"+15,3+"_"+15]);
  }
 }

© 著作权归作者所有

共有 人打赏支持
w
粉丝 3
博文 94
码字总数 33768
作品 0
广州
WebView与JavaScript交互

在WebView中使用JavaScript   如果你想要载入的页面中用了JavaScript,你必须为你的WebView使能JavaScript。   一旦使能之后,你也可以自己创建接口在你的应用和JavaScript代码间进行交互...

ljrapple
2014/07/29
0
0
从零开始学 Web 之 JavaScript(一)JavaScript概述

大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程。此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注。在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间...

fengdaoting
06/03
0
0
iOS与JS交互之WKWebView-协议拦截

级别:★★☆☆☆ 标签:「iOS与JS交互」「WKWebView与JS交互」「WKWebView拦截协议」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),J...

QiShare
09/01
0
0
iOS与JS交互之UIWebView-协议拦截

级别:★★☆☆☆ 标签:「iOS与JS交互」「UIWebView与JS交互」「UIWebView拦截协议」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),J...

QiShare
08/28
0
0
[swift]-使用JavaScript解决WKWebView无法发送POST参数问题

基本实现思路: 1. 将一个包含JavaScript的POST请求的HTML代码放到工程目录中2. 加载这个包含JavaScript的POST请求的代码到WKWebView3. 加载完成之后,用Native调用JavaScript的POST方法并传入...

xiaoLoo
07/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
43分钟前
0
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
5
2
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
1
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
1
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部