<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<script id="clientEventHandlersJS" language="javascript">
<!--
/*
***********************************************************
* Web 扫雷 v2.1
***********************************************************
* Copyright (C) 2004 Zhong Weixiao
*
* 本软件为免费软件
* 您可以自由转载,但是转载时必须保留作者信息
*
* Bug 报告和技术支持
* 您可以发送邮件到zhongwx@gmail.com
* 或者通过Msn Messenger帐号 xwgnohz@hotmail.com 与作者联系
***********************************************************
*/
/*
*******************************************************************
* Web MineSweeper v2.1
*******************************************************************
* Copyright (C) 2004 Zhong Weixiao
*
* This program is free software;
* you can redistribute it, but you MUST keep the author information
*
* Support can be sent to:
*******************************************************************
*/
var cells = new Array(); //all cells list
var Bombs = 10; //bomb number
var Map = 10; //map size
var MaxNumber = 1000; //a magic number to indicate bomb
// call by DclickIt
// check double click in opened cell
function isSetColor(i)
{
if((document.getElementById("Dcell"+i)).style.background=="#00ccff") {
return 1;
}
return 0;
}
// double click a cell
function DclickIt(i)
{
if((document.getElementById("Dcell"+i)).style.background=="#cccccc") {
return;
}
if (cells[i] == 0) {
return;
}
var count=0;
if (i%Map == 0) //first col
{
if (i-Map<0) { // first row
if (count + isSetColor(i+1) + isSetColor(i+Map) + isSetColor(i+Map+1) == cells[i])
{
if (isSetColor(i+1)==0)
if (clickIt(i+1)==1) return;
if (isSetColor(i+Map)==0)
if (clickIt(i+Map)==1) return;
if (isSetColor(i+Map+1)==0)
if (clickIt(i+Map+1)==1) return;
}
}
else if (i+Map>(Map*Map-1)) { //last row
if (isSetColor(i+1) + isSetColor(i-Map) + isSetColor(i-Map+1) == cells[i])
{
if (isSetColor(i+1)==0)
if (clickIt(i+1)==1) return;
if (isSetColor(i-Map)==0)
if (clickIt(i-Map)==1) return;
if (isSetColor(i-Map+1)==0)
if (clickIt(i-Map+1)==1) return;
}
}
else{
if (isSetColor(i+1) + isSetColor(i-Map) + isSetColor(i-Map+1) + isSetColor(i+Map) + isSetColor(i+Map+1) == cells[i]){
if (isSetColor(i+1)==0)
if (clickIt(i+1)==1) return;
if (isSetColor(i-Map)==0)
if (clickIt(i-Map)==1) return;
if (isSetColor(i-Map+1)==0)
if (clickIt(i-Map+1)==1) return;
if (isSetColor(i+Map)==0)
if (clickIt(i+Map)==1) return;
if (isSetColor(i+Map+1)==0)
if (clickIt(i+Map+1)==1) return;
}
}
}
else if (i%Map == Map-1) //last col
{
if (i-Map<0) { // first row
if (count + isSetColor(i-1) + isSetColor(i+Map) + isSetColor(i+Map-1) == cells[i])
{
if (isSetColor(i-1)==0)
if (clickIt(i-1)==1) return;
if (isSetColor(i+Map)==0)
if (clickIt(i+Map)==1) return;
if (isSetColor(i+Map-1)==0)
if (clickIt(i+Map-1)==1) return;
}
}
else if (i+Map>(Map*Map-1)) { //last row
if (isSetColor(i-1) + isSetColor(i-Map) + isSetColor(i-Map-1) == cells[i])
{
if (isSetColor(i-1)==0)
if (clickIt(i-1)==1) return;
if (isSetColor(i-Map)==0)
if (clickIt(i-Map)==1) return;
if (isSetColor(i-Map-1)==0)
if (clickIt(i-Map-1)==1) return;
}
}
else{
if (isSetColor(i-1) + isSetColor(i-Map) + isSetColor(i-Map-1) + isSetColor(i+Map) + isSetColor(i+Map-1) == cells[i]){
if (isSetColor(i-1)==0)
if (clickIt(i-1)==1) return;
if (isSetColor(i-Map)==0)
if (clickIt(i-Map)==1) return;
if (isSetColor(i-Map-1)==0)
if (clickIt(i-Map-1)==1) return;
if (isSetColor(i+Map)==0)
if (clickIt(i+Map)==1) return;
if (isSetColor(i+Map-1)==0)
if (clickIt(i+Map-1)==1) return;
}
}
}
else
{
if (i-Map<0) { // first row
if (isSetColor(i-1) + isSetColor(i+1) + isSetColor(i+Map) + isSetColor(i+Map-1) + isSetColor(i+Map+1) == cells[i]){
if (isSetColor(i-1)==0)
if (clickIt(i-1)==1) return;
if (isSetColor(i+1)==0)
if (clickIt(i+1)==1) return;
if (isSetColor(i+Map)==0)
if (clickIt(i+Map)==1) return;
if (isSetColor(i+Map-1)==0)
if (clickIt(i+Map-1)==1) return;
if (isSetColor(i+Map+1)==0)
if (clickIt(i+Map+1)==1) return;
}
}
else if (i+Map>(Map*Map-1)) { //last row
if (isSetColor(i-1) + isSetColor(i+1) + isSetColor(i-Map) + isSetColor(i-Map-1) + isSetColor(i-Map+1) == cells[i]){
if (isSetColor(i-1)==0)
if (clickIt(i-1)==1) return;
if (isSetColor(i+1)==0)
if (clickIt(i+1)==1) return;
if (isSetColor(i-Map)==0)
if (clickIt(i-Map)==1) return;
if (isSetColor(i-Map-1)==0)
if (clickIt(i-Map-1)==1) return;
if (isSetColor(i-Map+1)==0)
if (clickIt(i-Map+1)==1) return;
}
}
else{
if (isSetColor(i-1) + isSetColor(i+1) + isSetColor(i-Map) + isSetColor(i-Map-1) + isSetColor(i-Map+1)+ isSetColor(i+Map) + isSetColor(i+Map-1) + isSetColor(i+Map+1) == cells[i]){
if (isSetColor(i-1)==0)
if (clickIt(i-1)==1) return;
if (isSetColor(i+1)==0)
if (clickIt(i+1)==1) return;
if (isSetColor(i-Map)==0)
if (clickIt(i-Map)==1) return;
if (isSetColor(i-Map-1)==0)
if (clickIt(i-Map-1)==1) return;
if (isSetColor(i-Map+1)==0)
if (clickIt(i-Map+1)==1) return;
if (isSetColor(i+Map)==0)
if (clickIt(i+Map)==1) return;
if (isSetColor(i+Map-1)==0)
if (clickIt(i+Map-1)==1) return;
if (isSetColor(i+Map+1)==0)
if (clickIt(i+Map+1)==1) return;
}
}
}
}
function RclickIt(numb)
{
if ( (document.getElementById("Dcell"+numb)).style.background=="#ffffff" ) {
event.cancelBubble=true;
event.returnValue=false;
return false;
}
(document.getElementById("Dcell"+numb)).style.background="#00CCFF";
if (checkResult() == 1)
{
alert("You Win!");
init();
}
//alert( (document.getElementById("Dcell"+numb)).style.background );
event.cancelBubble=true;
event.returnValue=false;
return false;
}
// check the result after right click
function checkResult()
{
for(var i=0;i<Map*Map;i++)
{
if (cells[i] == MaxNumber)
{
if( (document.getElementById("Dcell"+i)).style.background != "#00ccff" )
{
return 0;
}
}
else
{
if( (document.getElementById("Dcell"+i)).style.background == "#00ccff" )
{
return 0;
}
}
}
return 1;
}
// click to open a cell
function clickIt(numb){
//
if ((document.getElementById("Dcell"+numb)).style.background=="#ffffff")
return;
//alert(numb);
if (cells[numb] == MaxNumber)
{
displayAll();
(document.getElementById("Dcell"+numb)).style.background="#FF0000";
alert("You Lost!");
Button_Start_onclick();
return 1;
}
else
{
displayOne(numb);
if (cells[numb] == 0) {
relation(numb);
}
return 0;
}
return 0;
//(document.getElementById("Dcell"+i))
}
// open a cell
function displayOne(i)
{
if(cells[i] == 0)
{
(document.getElementById("Dcell"+i)).innerHTML = " ";
(document.getElementById("Dcell"+i)).style.background="#FFFFFF";
}else{
(document.getElementById("Dcell"+i)).innerHTML = cells[i];
(document.getElementById("Dcell"+i)).style.background="#FFFFFF";
}
}
// open all cells because you lost
function displayAll()
{
//display
for(var i=0;i<Map*Map;i++)
{
if(cells[i] ==MaxNumber) {
(document.getElementById("Dcell"+i)).innerHTML = "X";
(document.getElementById("Dcell"+i)).style.background="#CC9900";
} else if (cells[i] == 0) {
(document.getElementById("Dcell"+i)).innerHTML = " ";
} else{
(document.getElementById("Dcell"+i)).innerHTML = cells[i];
}
}
}
// a function to check the a cell can be open automatically
function doAgin(i)
{
if(cells[i] == 0){
//if (( document.getElementById("Dcell"+(i)) ).innerHTML != "0"){
if (( document.getElementById("Dcell"+(i)) ).style.background!="#ffffff"){
displayOne(i);
relation(i);
}
}
else
{
displayOne(i);
}
}
// check all neighbor cell can be open automatically
function relation(i)
{
if (i%Map == 0) //first col
{
if (i-Map<0) { // first row
doAgin(i+1);
doAgin(i+Map);
doAgin(i+Map+1);
}
else if (i+Map>(Map*Map-1)) { //last row
doAgin(i+1);
doAgin(i-Map);
doAgin(i-Map+1);
}
else{
doAgin(i-Map);
doAgin(i+1);
doAgin(i+Map);
doAgin(i+Map+1);
doAgin(i-Map+1);
}
}
else if (i%Map == Map-1) //last col
{
if (i-Map<0) { // first row
doAgin(i-1);
doAgin(i+Map);
doAgin(i+Map-1);
}
else if (i+Map>(Map*Map-1)) { //last row
doAgin(i-1);
doAgin(i-Map);
doAgin(i-Map-1);
}
else{
doAgin(i-Map);
doAgin(i-1);
doAgin(i+Map);
doAgin(i+Map-1);
doAgin(i-Map-1);
}
}
else
{
if (i-Map<0) { // first row
doAgin(i-1);
doAgin(i+1);
doAgin(i+Map);
doAgin(i+Map+1);
doAgin(i+Map-1);
}
else if (i+Map>(Map*Map-1)) { //last row
doAgin(i-1);
doAgin(i+1);
doAgin(i-Map);
doAgin(i-Map+1);
doAgin(i-Map-1);
}
else{
doAgin(i+Map);
doAgin(i-1);
doAgin(i+1);
doAgin(i-Map);
doAgin(i-Map+1);
doAgin(i-Map-1);
doAgin(i+Map+1);
doAgin(i+Map-1);
}
}
}
// init map
function init()
{
var strtable = "<TABLE id='Table1' cellSpacing='0' cellPadding='0' width='" + 20*Map + "' border='1'>"
for(var m=0;m<Map;m++)
{
strtable+="<TR>"
for(var n=0;n<Map;n++)
{
strtable+="<TD align='center' width='40' id='Dcell" + (m*Map+n) + "' onclick=\"clickIt(" + (m*Map+n) + ")\" oncontextmenu=\"RclickIt(" + (m*Map+n) + ")\" ondblclick=\"DclickIt(" + (m*Map+n) + ")\"> </TD>"
}
strtable+="</TR>"
}
strtable+= "<TABLE>"
//alert(strtable);
Divcells.innerHTML = strtable;
Button_Start_onclick();
}
// init bombs and all cells
function Button_Start_onclick() {
for (var i=0; i<Map*Map; i++)
{
cells[i] = 0;
}
var j=0;
while(1)
{
var randNum = (Math.floor( Math.random()*Map*Map ));
if (cells[randNum] == 0)
{
cells[randNum] = MaxNumber;
j++;
if (j==Bombs)
{
break;
}
}
}
//alert(cells)
for(var i=0;i<Map*Map;i++) {
(document.getElementById("Dcell"+i)).innerHTML = " ";
(document.getElementById("Dcell"+i)).style.background="#CCCCCC";
}
for(var i=0;i<Map*Map;i++)
{
if (cells[i]==MaxNumber)
{
continue;
}
var count=0;
if (i % Map == 0) //first col
{
if ((i-Map) < 0) { // first row
count+=cells[i+1];
count+=cells[i+Map];
count+=cells[i+Map+1];
}
else if ((i+Map) > (Map*Map-1)) { //last row
count+=cells[i-Map];
count+=cells[i+1];
count+=cells[i+1-Map];
}
else{
count+=cells[i-Map];
count+=cells[i+1];
count+=cells[i+Map];
count+=cells[i+Map+1];
count+=cells[i+1-Map];
}
}
else if (i%Map == Map-1) //last col
{
if ((i-Map) < 0) { // first row
count+=cells[i-1];
count+=cells[i+Map];
count+=cells[i+Map-1];
}
else if ((i+Map) > (Map*Map-1)) { //last row
count+=cells[i-Map];
count+=cells[i-1];
count+=cells[i-Map-1];
}
else{
count+=cells[i-Map];
count+=cells[i-1];
count+=cells[i+Map];
count+=cells[i+Map-1];
count+=cells[i-Map-1];
}
}
else
{
if ((i-Map) < 0) { // first row
count+=cells[i-1];
count+=cells[i+1];
count+=cells[i+Map];
count+=cells[i+Map-1];
count+=cells[i+Map+1];
}
else if ((i+Map) > (Map*Map-1)) { //last row
count+=cells[i-Map];
count+=cells[i-1];
count+=cells[i+1];
count+=cells[i-Map-1];
count+=cells[i-Map+1];
}
else{
count+=cells[i-Map];
count+=cells[i-1];
count+=cells[i+1];
count+=cells[i+Map];
count+=cells[i-Map+1];
count+=cells[i-Map-1];
count+=cells[i+Map-1];
count+=cells[i+Map+1];
}
}
cells[i] = Math.floor(count/MaxNumber);
}
//displayAll(); //debug
}
// begin level
function beginLevel()
{
Bombs = 10;
Map = 10;
init();
}
// advance level
function advLevel()
{
Bombs = 40;
Map = 16;
init();
}
// custom level
function myLevel()
{
var myMap = textMapSize.value;
var myBomb = textBombNumber.value
if( (myMap)<1 || (myMap)>20 )
{
alert("地图大小应该在1-20之间");
return;
}
if( (myBomb)<1 || (myBomb)>100 )
{
alert("地雷数量应该在1-100之间");
return;
}
if (myMap*myMap < myBomb)
{
alert("天呀,你给的地图区域放不了这么多地雷呀!");
return;
}
myMap = Math.floor(myMap)
myBomb = Math.floor(myBomb)
Bombs = myBomb;
Map = myMap;
init();
}
//-->
</script>
</head>
<body onload="init()">
<table width="500" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><table width="200" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input id="Button_Start12" type="button" value="初级(10X10小格 10雷)" name="Button_Start1" language="javascript" style="width:200"
onClick="return beginLevel()"></td>
</tr>
<tr>
<td><input id="Button_Start23" type="button" value="高级(16X16小格 40雷)" name="Button_Start2" language="javascript" style="width:200"
onClick="return advLevel()"></td>
</tr>
<tr>
<td><hr></td>
</tr>
<tr>
<td><div align="center">地图大小:
<input type="text" id="textMapSize3" name="textMapSize" style="width:100" value=12>
</div></td>
</tr>
<tr>
<td><div align="center">地雷数量:
<input type="text" id="textBombNumber3" name="textBombNumber" style="width:100" value=12>
</div></td>
</tr>
<tr>
<td><input id="Button_Start43" type="button" value="生成地图" name="Button_Start4" language="javascript" style="width:200"
onClick="return myLevel()"></td>
</tr>
<tr>
<td><hr></td>
</tr>
<tr>
<td><input id="Button_Start33" type="button" value="我要作弊:)" name="Button_Start3" language="javascript" style="width:200"
onClick="return displayAll()"></td>
</tr>
</table></td>
<td><br>
<table width="300" border="0" cellspacing="4">
<tr>
<td>Web 扫雷 v2.1 (2004/11/3)<br>
开发环境:Javascript<br>
运行环境:IE<br>
操作方法:左键打开,右键标示,双击打开周围未标示区域<br>
作者:Zhong Weixiao <a href="zhongwx@gmail.com
mailto:zhongwx@gmail.com">zhongwx@gmail.com</a><br>
转载请与作者联系,并保留作者信息 </td>
</tr>
</table></td>
</tr>
</table>
<br>
<div id="Divcells" style="cursor:default"></div>
</body>
</html>