当前位置: 首页 > 图文教程 > 网络编程 > Javascript > javascript扫雷游戏,版本二

Javascript
jQuery开发者都需要知道的5个小技巧
Extjs学习笔记之六 面版
Javascript 中的类和闭包
IE6下JS动态设置图片src地址问题
Extjs学习笔记之七 布局
Extjs学习笔记之八 继承和事件基础
Extjs TriggerField在弹出窗口显示不出问题的解决方法
JavaScript中的集合及效率
利用js获取服务器时间的两个简单方法
在html页面上拖放移动标签
了解jQuery技巧来提高你的代码
JavaScript 页面坐标相关知识整理
Javascript UrlDecode函数代码
JQuery 遮罩层实现(mask)实现代码
jQuery 页面 Mask实现代码
Javascript的构造函数和constructor属性
js或css文件后面跟参数的原因说明
将CKfinder整合进CKEditor3.0的新方法
jQuery UI-Draggable 参数集合
jQuery 行级解析读取XML文件(附源码)

Javascript 中的 javascript扫雷游戏,版本二


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-10   浏览: 110 ::
收藏到网摘: n/a

重新写了一遍
这次不使用Button元素
只用了一个table
而且加入了输赢判断,双键的试探功能,优化了打开空白区域的算法,还有关卡的设定 :)
总之,现在已经比较完善了

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Author" content="Gray·Chan(graycarl)">
<meta name="Version" content="2.0">
<meta name="Date" content="2003.4.8">
<meta name="Date" content="2003.4.9">
<meta name="Corpright" content="http://gray.ipaopao.com">
<title>扫雷游戏</title>
<style>
<!--
td          {overflow:hidden;
   font-family: Arial Black; font-size: 11px;
   text-align: center;
   border-left: 2 solid #FFFFFF;
   border-right: 2 solid #808080;
   border-top: 2 solid #FFFFFF;
   border-bottom: 2 solid #808080;
   background-color: #C0C0C0;
   cursor:default}
td.down     {border-left: 3 solid #C0C0C0;
   border-right: 1 solid #808080;
   border-top: 3 solid #C0C0C0;
   border-bottom: 1 solid #808080;}
td.marked   {font-family: Wingdings; color: #ff0000}
-->
</style>
</head>
<body>
<div id=DWC0 style="BACKGROUND-COLOR: silver;font-size:12px;color:red;HEIGHT: 26px; LEFT: 201px; POSITION: absolute; TOP: 121px; WIDTH: 173px">

请稍候,正在装载……</div>
<div id=DWC1 style="HEIGHT: 150px; LEFT: -5px; POSITION: absolute; TOP: -16px; VISIBILITY: hidden; WIDTH: 157px"><font face="Webdings" color=#ffe0c1

style="FONT-SIZE: 150px">*</font></div>
<div id=DWC2 style="COLOR: red; FONT-SIZE: 12px; HEIGHT: 18px; LEFT: 31px; POSITION: absolute; TOP: 14px; VISIBILITY: hidden; WIDTH: 103px">地雷

数:<span ID=MINENUMSCREEN style="FONT-FAMILY: Arial Black; FONT-SIZE: 14px">0</span></div>
<div id=DWC3 style="HEIGHT: 299px; LEFT: 1px; POSITION: absolute; TOP: 31px; VISIBILITY: hidden; WIDTH: 419px"><!--STATUS = 0 按钮

状态--><!--STATUS = 1 固定按钮状态--><!--STATUS = 2 点开状态--><!--MINE = 0 无雷

--><!--MINE = 1 有雷-->
<SCRIPT language=javascript  version="1.1">
 var ROWS=18;
 var COLS=22;
 var MINE=0;
 var STATUS=0;
 var MINEPRAM=20; 
 var Elems=new Array(ROWS);
 var Stack=new Array(ROWS*COLS);
 var StackPoint=-1;
 var MINECOUNT=0;
 
 var LocationHash=document.location.hash;
 var idx=LocationHash.indexOf('#');
 if(idx>=0) LocationHash=LocationHash.substr(1);
 if(!isNaN(LocationHash)&&LocationHash!="")MINEPRAM=parseInt(LocationHash);
 var NextLevelLocation=document.location.href;
 idx=NextLevelLocation.indexOf('#');
 if(idx>=0) NextLevelLocation=NextLevelLocation.substr(0,idx);
 NextLevelLocation+="#"+Math.round(MINEPRAM*0.8);
 
 document.writeln("<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" bordercolor=\"#808080\"  width="+20*COLS+" height="+20*ROWS+">")

 for(var i=1;i<=ROWS;i++){
 Elems[i-1]=new Array(COLS);
 document.writeln("  <tr>");
 for(var j=1;j<=COLS;j++){
  if(Math.floor(Math.random()*MINEPRAM)==0){
   MINE=1;
   STATUS=0;
   MINECOUNT++;
  }
  else{
   MINE=0;
   STATUS=0;
  }
  document.writeln("    <td id=\"btn"+j+"_"+i+"\" I=\""+i+"\" J=\""+j+"\" STATUS=\""+STATUS+"\" MINE=\""+MINE+"\" MINENUM=\"0\"  Class=\"\"

width=15 height=15>&nbsp;</td>");
 }
 document.writeln("  </tr>");
}
document.writeln("</table>");
document.all.DWC0.innerText="请稍候,正在准备游戏信息……";
</SCRIPT>
</div>
<script language="javascript" version="1.1">
var downElem=null;
var YOrder,XOrder;
var clickStyle=0;
function GetSTATUSNum(Elem,XOrder,YOrder){
 var STATUS=0;
 if(Elem.getAttribute("STATUS")=="1") return 99;
 
 var curElem;
 try{
  curElem=Elems[XOrder-1][YOrder-1];
  if(curElem.getAttribute("STATUS")=="1") STATUS++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder-1][YOrder];
  if(curElem.getAttribute("STATUS")=="1") STATUS++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder-1][YOrder+1];
  if(curElem.getAttribute("STATUS")=="1") STATUS++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder][YOrder-1];
  if(curElem.getAttribute("STATUS")=="1") STATUS++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder][YOrder+1];
  if(curElem.getAttribute("STATUS")=="1") STATUS++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder+1][YOrder-1];
  if(curElem.getAttribute("STATUS")=="1") STATUS++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder+1][YOrder];
  if(curElem.getAttribute("STATUS")=="1") STATUS++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder+1][YOrder+1];
  if(curElem.getAttribute("STATUS")=="1") STATUS++;
 }catch(e)
 {
 }
 return STATUS; 
}


function GetMINENum(Elem,XOrder,YOrder){
 var MINE=0;
 if(Elem.getAttribute("MINE")=="1") return 99;
 
 var curElem;
 try{
  curElem=Elems[XOrder-1][YOrder-1];
  if(curElem.getAttribute("MINE")=="1") MINE++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder-1][YOrder];
  if(curElem.getAttribute("MINE")=="1") MINE++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder-1][YOrder+1];
  if(curElem.getAttribute("MINE")=="1") MINE++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder][YOrder-1];
  if(curElem.getAttribute("MINE")=="1") MINE++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder][YOrder+1];
  if(curElem.getAttribute("MINE")=="1") MINE++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder+1][YOrder-1];
  if(curElem.getAttribute("MINE")=="1") MINE++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder+1][YOrder];
  if(curElem.getAttribute("MINE")=="1") MINE++;
 }catch(e)
 {
 }
 try{
  curElem=Elems[XOrder+1][YOrder+1];
  if(curElem.getAttribute("MINE")=="1") MINE++;
 }catch(e)
 {
 }
 return MINE; 
}
function GetMINENumEx(Elem){
 return parseInt(Elem.getAttribute("MINENUM"));
}

function markBtn(Elem){
 if(Elem==null) return;
 if(Elem.getAttribute("STATUS")=="2") return;
 if(Elem.getAttribute("STATUS")=="1") {
  Elem.setAttribute("STATUS","0");
  document.all.MINENUMSCREEN.innerText = (++MINECOUNT);
  Elem.innerText=" ";
  Elem.className="";
  return;
 }
 if(Elem.getAttribute("STATUS")=="0") {
  Elem.setAttribute("STATUS","1");
  document.all.MINENUMSCREEN.innerText = (--MINECOUNT);
  Elem.innerText="P";
  Elem.className="marked";
  return;
 }
}

function autoOpenBtns(Elem){
 var curElem;
 var XOrder,YOrder;
 if(Elem.getAttribute("STATUS")!="2") return;
 YOrder=parseInt(Elem.getAttribute("I"))-1;
 XOrder=parseInt(Elem.getAttribute("J"))-1;
 if(GetSTATUSNum(Elem,YOrder,XOrder)!=GetMINENumEx(Elem)) return;
 try{
  curElem=Elems[YOrder-1][XOrder-1];
  openBtns(curElem);
 }catch(e)
 {
 }
 try{
  curElem=Elems[YOrder-1][XOrder];
  openBtns(curElem);
 }catch(e)
 {
 }
 try{
  curElem=Elems[YOrder-1][XOrder+1];
  openBtns(curElem);
 }catch(e)
 {
 }
 try{
  curElem=Elems[YOrder][XOrder-1];
  openBtns(curElem);
 }catch(e)
 {
 }
 try{
  curElem=Elems[YOrder][XOrder+1];
  openBtns(curElem);
 }catch(e)
 {
 }
 try{
  curElem=Elems[YOrder+1][XOrder-1];
  openBtns(curElem);
 }catch(e)
 {
 }
 try{
  curElem=Elems[YOrder+1][XOrder];
  openBtns(curElem);
 }catch(e)
 {
 }
 try{
  curElem=Elems[YOrder+1][XOrder+1];
  openBtns(curElem);
 }catch(e)
 {
 }
}

function push(Elem){
if(Elem==null) return;
Stack[++StackPoint]=Elem;
return;
}
function pop(){
try{
return Stack[StackPoint--];
}
catch(e){
return null;
}
}

function openBtns(Elem){
 var curElem=Elem;
 while(curElem!=null){
  if(curElem.getAttribute("STATUS")=="0") openBtnsEx(curElem);
  curElem=pop();
 }
 
}

function openBtnsEx(Elem){
 var XOrder,YOrder;
 YOrder=parseInt(Elem.getAttribute("I"))-1;
 XOrder=parseInt(Elem.getAttribute("J"))-1;
 var MineNum=GetMINENumEx(Elem);
 if(MineNum==99) return FailAndOpenAllMine();
 Elem.className="down";
 Elem.setAttribute("STATUS","2");
 if(MineNum>0){
  Elem.innerText=MineNum;
  Elem.style.color="0000ff";
  if(MineNum>1){
   Elem.style.color="00ff00";
   if(MineNum>2){
    Elem.style.color="ff0000";
    if(MineNum>3){
     Elem.style.color="000099";
     if(MineNum>4){
      Elem.style.color="009900";
      if(MineNum>5){
       Elem.style.color="990000";
       if(MineNum>6){
        Elem.style.color="000033";
        if(MineNum>7){
         Elem.style.color="003300";
        }
       }
      }
     }
    }
   }
  }
 }
 else{
  var curElem;
  try{
   curElem=Elems[YOrder-1][XOrder-1];
   if(curElem.getAttribute("STATUS")=="0")push(curElem);
  }catch(e)
  {
  }
  try{
   curElem=Elems[YOrder-1][XOrder];
   if(curElem.getAttribute("STATUS")=="0")push(curElem);
  }catch(e)
  {
  }
  try{
   curElem=Elems[YOrder-1][XOrder+1];
   if(curElem.getAttribute("STATUS")=="0")push(curElem);
  }catch(e)
  {
  }
  try{
   curElem=Elems[YOrder][XOrder-1];
   if(curElem.getAttribute("STATUS")=="0")push(curElem);
  }catch(e)
  {
  }
  try{
   curElem=Elems[YOrder][XOrder+1];
   if(curElem.getAttribute("STATUS")=="0")push(curElem);
  }catch(e)
  {
  }
  try{
   curElem=Elems[YOrder+1][XOrder-1];
   if(curElem.getAttribute("STATUS")=="0")push(curElem);
  }catch(e)
  {
  }
  try{
   curElem=Elems[YOrder+1][XOrder];
   if(curElem.getAttribute("STATUS")=="0")push(curElem);
  }catch(e)
  {
  }
  try{
   curElem=Elems[YOrder+1][XOrder+1];
   if(curElem.getAttribute("STATUS")=="0")push(curElem);
  }catch(e)
  {
  }
 }
}

function FailAndOpenAllMine(){
 for(var i=0;i<ROWS;i++){
  for(var j=0;j<COLS;j++){
   var curElem=
   Elems[i][j];if(curElem.getAttribute("STATUS")=="1"&&curElem.getAttribute("MINE")=="0"){
    curElem.innerHTML="<font face=\"Webdings\" color=red>r</font>";
    curElem.className=
   
   "down";}if(curElem.getAttribute("STATUS")=="0"&&curElem.getAttribute("MINE")=="1"){
    curElem.innerHTML="<font face=\"Wingdings\">M</font>";
    curElem.className="down";
   }

  }
 }
 alert("你失败了! 按[确定]重新开始。");
 setTimeout("document.location.reload()",100);
 return true;
}

function elemClick(Elem){
 if(clickStyle==1)  openBtns(Elem);
 if(clickStyle==2) markBtn(Elem);
 if(clickStyle==3) autoOpenBtns(Elem);
 CheckIfVictory();
}

function setElemDown(Elem){
 var curElem=null;
 YOrder=parseInt(Elem.getAttribute("I"));
 XOrder=parseInt(Elem.getAttribute("J"));
 if(clickStyle==1){ 
  if(Elem.getAttribute("STATUS")=="0") Elem.className="down";
 }
  
 if(clickStyle==2){ 
  
 }

 if(clickStyle==3){ 
  if(Elem.getAttribute("STATUS")=="0") Elem.className="down";

  curElem=
  eval("document.all.btn"+(XOrder-1)+"_"+(YOrder-1));if(curElem!=null&&curElem.getAttribute("STATUS")=="0")

curElem.className="down";
  curElem=
  eval("document.all.btn"+(XOrder-1)+"_"+(YOrder));if(curElem!=null&&curElem.getAttribute("STATUS")=="0") curElem.className="down";
  curElem=
  eval("document.all.btn"+(XOrder-1)+"_"+(YOrder+1));if(curElem!=null&&curElem.getAttribute("STATUS")=="0")

curElem.className="down";
  curElem=
  eval("document.all.btn"+(XOrder)+"_"+(YOrder-1));if(curElem!=null&&curElem.getAttribute("STATUS")=="0") curElem.className="down";
  curElem=
  eval("document.all.btn"+(XOrder)+"_"+(YOrder+1));if(curElem!=null&&curElem.getAttribute("STATUS")=="0") curElem.className="down";
  curElem=
  eval("document.all.btn"+(XOrder+1)+"_"+(YOrder-1));if(curElem!=null&&curElem.getAttribute("STATUS")=="0")

curElem.className="down";
  curElem=
  eval("document.all.btn"+(XOrder+1)+"_"+(YOrder));if(curElem!=null&&curElem.getAttribute("STATUS")=="0") curElem.className="down";
  curElem=
  eval("document.all.btn"+(XOrder+1)+"_"+(YOrder+1));if(curElem!=null&&curElem.getAttribute("STATUS")=="0")

curElem.className="down";
 }
}

function docmdown(){
 if(event.srcElement.tagName=="TD"){
  clickStyle=event.button;
  setElemDown(event.srcElement)
  downElem=event.srcElement;
 }
}
function docmup(){
 if(downElem==null) return;
 clearbtnState();
 if(event.srcElement == downElem){
  elemClick(downElem);
 }
 downElem=null;
}
function clearbtnState(){
 if(downElem==null) return;
 if(downElem.getAttribute("STATUS")=="0") downElem.className="";
 if(clickStyle==3){
  var curElem;
  curElem=
  eval("document.all.btn"+(XOrder-1)+"_"+(YOrder-1));if(curElem!=null&&curElem.getAttribute("STATUS")=="0") curElem.className="";
  curElem=
  eval("document.all.btn"+(XOrder-1)+"_"+(YOrder));if(curElem!=null&&curElem.getAttribute("STATUS")=="0") curElem.className="";
  curElem=
  eval("document.all.btn"+(XOrder-1)+"_"+(YOrder+1));if(curElem!=null&&curElem.getAttribute("STATUS")=="0") curElem.className="";
  curElem=
  eval("document.all.btn"+(XOrder)+"_"+(YOrder-1));if(curElem!=null&&curElem.getAttribute("STATUS")=="0") curElem.className="";
  curElem=
  eval("document.all.btn"+(XOrder)+"_"+(YOrder+1));if(curElem!=null&&curElem.getAttribute("STATUS")=="0") curElem.className="";
  curElem=
  eval("document.all.btn"+(XOrder+1)+"_"+(YOrder-1));if(curElem!=null&&curElem.getAttribute("STATUS")=="0") curElem.className="";
  curElem=
  eval("document.all.btn"+(XOrder+1)+"_"+(YOrder));if(curElem!=null&&curElem.getAttribute("STATUS")=="0") curElem.className="";
  curElem=
  eval("document.all.btn"+(XOrder+1)+"_"+(YOrder+1));if(curElem!=null&&curElem.getAttribute("STATUS")=="0") curElem.className="";
 }
}
function docmout(){
 clearbtnState();
 downElem=null;
}
function DisabledEvent(){
return false;
}
function CheckIfVictory(){
 for(var i=0;i<ROWS;i++){
  for(var j=0;j<COLS;j++){
   var curElem=
   Elems[i][j];if(curElem.getAttribute("MINE")=="0"&&curElem.getAttribute("STATUS")!="2"){
    return false;
   }
  }
 }
 for(var i=0;i<ROWS;i++){
  for(var j=0;j<COLS;j++){
   var curElem=
   Elems[i][j];if(curElem.getAttribute("STATUS")=="0"&&curElem.getAttribute("MINE")=="1"){
    markBtn(curElem);
   }
  }
 }
 alert("完成任务! 按[确定]开始新的任务"); 
 setTimeout("window.document.close();window.document.open();document.location.replace(\""+NextLevelLocation+"\")",100);
 return true;
}
for(var i=0;i<ROWS;i++){
 for(var j=0;j<COLS;j++){
  Elems[i][j]=eval("document.all.btn"+(j+1)+"_"+(i+1));
 }
}
for(var i=0;i<ROWS;i++){
 for(var j=0;j<COLS;j++){
  var curElem=Elems[i][j];
  curElem.setAttribute("MINENUM",GetMINENum(curElem,i,j));
 }
}
alert("前方"+MINECOUNT+"个地雷出现!");
document.all.DWC0.style.visibility="hidden";
document.all.DWC1.style.visibility="visible";
document.all.DWC2.style.visibility="visible";
document.all.DWC3.style.visibility="visible";
document.all.MINENUMSCREEN.innerText = MINECOUNT;
document.onmousedown=docmdown;
document.onmouseup=docmup;
document.onmouseout=docmout;
document.oncontextmenu=DisabledEvent;
document.onselectstart=DisabledEvent;
</script>


</body>

</html>