纯VBScript版的Web扫雷程序

这是一个使用纯VBScript编写的Web扫雷游戏程序,可在浏览器中直接运行。游戏支持自定义雷区大小和雷数,通过单击来挖开方块并找出所有地雷。右键可标记疑似雷区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<title>Guidy的Web扫雷程序 - 纯VBScript版</title> 
<style type="text/css"> 
@charset "gb2312"; 
body,td 
{ 
Font
: 12 Px "宋体", Verdana, Arial, Helvetica, sans-serif; 
Cursor
: default; 
}
 
body
{ 
margin
: 0px; 
BackGround
: buttonface; 
}
 
A:link,A:visited,A:active 
{ 
Color
:#990000; 
Text-Decoration
:None; 
}
 
A:hover 
{ 
Color
:#FF8000; 
Text-Decoration
:UnderLine; 
}
 
input 
{ 
Border-Top-Width
: 1 Px; 
Padding-Right
: 1 Px; 
Padding-Left
: 1 Px; 
Border-Left-Width
: 1 Px; 
Border-bottom-Width
: 1 Px; 
Border-Right-Width
: 1 Px; 
Padding-bottom
: 1 Px; 
Padding-Top
: 1 Px; 
Height
: 18 Px; 
Border-Left-Color
: #C0C0C0; 
Border-bottom-Color
: #C0C0C0; 
Border-Top-Color
: #C0C0C0; 
Border-Right-Color
: #C0C0C0; 
BackGround-Color
: #FFFFFF; 
Color
: #000000; 
Font
: 9pt "宋体", Verdana, Arial, Helvetica, sans-serif; 
}
 
.TdOver
{ 
border
: 1px outset; 

Border-Left-Color
: #FFFFFF; 
Border-Top-Color
: #FFFFFF; 
Border-Right-Color
: #AAAAAA; 
Border-bottom-Color
: #AAAAAA; 

BackGround-Color
: #FFCCFF; 
}
 
.TdOut
{ 
border
: 1px outset; 

Border-Left-Color
: #E5E6E7; 
Border-Top-Color
: #E5E6E7; 
Border-Right-Color
: #E5E6E7; 
Border-bottom-Color
: #E5E6E7; 

BackGround-Color
: #E5E6E7; 
}
 
.Tm0
{BackGround-Color: buttonface;Color: #2E8B57; font-weight:bold;} 
.Tm1
{BackGround-Color: buttonface;Color: #0000FF; font-weight:bold;} 
.Tm2
{BackGround-Color: buttonface;Color: #2E8B57; font-weight:bold;} 
.Tm3
{BackGround-Color: buttonface;Color: #FF0000; font-weight:bold;} 
.Tm4
{BackGround-Color: buttonface;Color: #FF00FF; font-weight:bold;} 
.Tm5
{BackGround-Color: buttonface;Color: #00FFFF; font-weight:bold;} 
.Tm6
{BackGround-Color: buttonface;Color: #FF00FF; font-weight:bold;} 
.Tm7
{BackGround-Color: buttonface;Color: #FFFF00; font-weight:bold;} 
.Tm8
{BackGround-Color: buttonface;Color: #000000; font-weight:bold;} 

</style> 
</head> 

<body onselectstart="event.returnValue=false;"> 
<table align="center"><tr><td> 
<fieldset style="background-color:bottonface;"><legend>扫雷控制面板</legend><table border="0" align="center" cellpadding="0" cellspacing="1"> 
<tr> 
<td>宽度:</td> 
<td><input name="Tmx" type="text" id="Tmx" size="4" maxlength="4" style="ime-mode: disabled;"></td> 
<td><input name="S1" type="button" id="S1" onClick="CreatTable(Tmx.value,Tmy.value);LayMine(MNum.value);" value=" 开 始 "></td> 
</tr> 
<tr> 
<td>高度:</td> 
<td><input name="Tmy" type="text" id="Tmy" size="4" maxlength="4" style="ime-mode: disabled;"></td> 
<td rowspan="2" align="center" valign="middle" id="BnNum" style="font-weight:800; color:#FF0000; font-size:36px;" title="当前标记个数,为负表明超过雷数!"> </td> 
</tr> 
<tr> 
<td>雷数:</td> 
<td><input name="MNum" type="text" id="MNum" size="4" maxlength="4" style="ime-mode: disabled;"></td> 
</tr> 
</table> 
</fieldset></td></tr> 
</table> 
<hr size="1"> 
<table border="3" align="center" cellpadding="1" cellspacing="1" bordercolor="threedshadow"> 
<tr> 
<td><div align="center" id="MineView"><div align="left"><br> 
<ul> 
<li><strong><font color="#FF0000">请设定后点击『开始』按钮,即可进入游戏!</font></strong></li> 
<li><strong><font color="#FF0000">缺点是初始化的时候,特别占系统资源!!</font></strong></li> 

<li>“扫雷”游戏的目标是尽快找到雷区中的所有地雷,而不许踩到地雷。如果挖开的是地雷,您将输掉游戏。</li> 
<li>通过单击即可挖开方块。如果挖开的是地雷,则您输掉游戏。</li> 
<li>如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。</li> 
<li>要标记您认为可能有地雷的方块,请右键单击它。 </li> 
<li>要标记您认为不确定的方块,请右键单击它两次。 </li> 
</ul> 
</div></div></td> 
</tr> 
</table> 
<hr size="1"> 
<script language="vbscript"> 
Rem ========================================================= 
Rem
 文件:WebMine.asp 
Rem
 功能:Guidy的Web扫雷程序 - 纯VBScript版 
Rem
 版本:Ver1.0.0 
Rem
 全称:Guidy的Web扫雷程序 Ver1.0.0 
Rem
 时间:2004-10-15 
Rem
 作者:Guidy 
Rem
 版权:iXuEr Studio 
Rem
 ========================================================= 
Rem
 Copyright (C) 2004-2006 114XP.CN All rights reserved. 
Rem
 官方网站:http://www.114xp.cn 
Rem
 技术论坛:http://bbs.114xp.cn 
Rem
 电子信箱:Guidy@qq.com , Guidy@psysch.com 
Rem
 ========================================================= 
Option Explicit 

Public i,o 
Public x,y,z 
Public MineArr,LayStr,LayTmpStr 
Public Ri,Rn,Rm 
Public WinMsg,LoseMsg,BnedMsg 

Function CreatTable(Tx,Ty) 
''''//初始化雷区并将雷区标识符保存在数组中 
Dim TmpStr,TmpStr1 

WinMsg 
= "恭喜!你赢了!!!" 
LoseMsg 
= "踩到地雷了,哈哈!去死吧!~~" 

''''//因为编程上的不足,只有在长宽相等的时候才能正确游戏 
'
'''//希望有高手帮助我更正这个问题 
If Tx <> Ty And Tx > Ty Then 
Ty 
= Tx 
Else 
Tx 
= Ty 
End If 
''''//如果雷区参数过小就强制使用默认值 
If Tx = "" or IsNull(Tx) Then Tx = 9 : Tmx.Value = 9 
If Ty = "" or IsNull(Ty) Then Ty = 9 : Tmy.Value = 9 

''''//如果雷区参数过大就强制使用默认值 
If Tx >= 24 Then Tx = 24 : Tmx.Value = 24 
If Ty >= 24 Then Ty = 24 : Tmy.Value = 24 

''''//创建雷区表格 
TmpStr = "<table border=""0"" align=""center"" cellpadding=""0"" cellspacing=""0"" bordercolor=""threeddarkshadow"" bgcolor=""#990000"">" 
For x = 1 To Ty 
TmpStr 
= TmpStr & " <tr>" 

For y = 1 To Tx 
TmpStr 
= TmpStr & " <td onClick=""ShowTMN(this.id);"" onContextMenu=""PutBn(this.id);event.returnValue=false;"" align=""center"" class=""TdOut"" width=""24"" height=""24"" id=""T_" & x &"_"& y &""" MineNum=""0"" MBN="""" Disable=""False""> </td>" 
TmpStr1 
= TmpStr1 & " T_" & x &"_"& y 
Next 
TmpStr 
= TmpStr & " </tr>" 
Next 
TmpStr 
= TmpStr & "</table>" 

''''//显示表格 
MineView.innerHTML = TmpStr 
''''//整理雷区标识符字符串便于转换 
TmpStr1 = Trim(TmpStr1) 

''''//将雷区标识符字符串转换撑数组 
MineArr = Split(TmpStr1) 
''''//将雷区总数 
Rn = UBound(MineArr) + 1 

End Function 

Function LayMine(MNumber) 
''''//放雷 
Dim ii 
Dim Lx,Ly 

''''//如果检测到雷区未初始化,则强制执行初始化 
If IsArray(MineArr) = False Then Call CreatTable(100,100

''''//获取雷区参数 
= Int(Tmx.Value) 
= Int(Tmy.Value) 

If MNumber = "" or MNumber <= "0" Then MNumber = 10 : MNum.value = MNumber 

''''//获取雷数 
= MNum.Value 
''''//如果雷数超过了雷区总数则强制设置 
If Int(MNumber) >= Int(x * y) Then 
MNumber 
= Int(x * y) - 50 
MNum.value 
= MNumber 
= MNum.Value 
End If 

Rm 
= z 

''''//初始化雷标识字符串 
LayStr = "" 

For ii = 1 To MNumber 
''''//初始化随机数种子 
Randomize Timer() 
''''//建立随机数 
Lx = Int(Rnd * x) + 1 
Ly 
= Int(Rnd * y) + 1 
''''//对随机数整形 
If Lx <= 1 Then Lx = 1 
If Ly <= 1 Then Ly = 1 
If Lx >= x Then Lx = x 
If Ly >= y Then Ly = y 
''''//利用随机数组合雷标识 
LayTmpStr = "T_" 
LayTmpStr 
= LayTmpStr & Ly 

LayTmpStr 
= LayTmpStr &"_"& Lx 
''''//检测雷标识字符串,如果存在则跳过,不存才就放雷 
If InStr(LayStr,LayTmpStr) Then 
ii 
= ii - 1 
Else 
Execute(LayTmpStr & ".MineNum = ""地雷"""
''''//放雷后重新组合雷标识字符串 
LayStr = LayStr &" "& LayTmpStr 
End If 
Next 

''''//对雷标识字符串整形 
LayStr = Trim(LayStr) 
''''//将雷标识字符串转换成数组 
LayStr = Split(LayStr) 
''''//获取雷总数 
Ri = UBound(LayStr) + 1 

Call LayMNum() 

End Function 

Function LayMNum() 
''''//在所有方格中标识其周围的雷数 
Dim Li,Lmn 

For Li = 0 To UBound(MineArr) 
Lmn 
= Eval(MineArr(Li) & ".MineNum"
Call ChkMineNum(MineArr(Li),Lmn,0
Next 

End Function 

Function ChkMineNum(Tid,TMN,Tp) 
''''//计算雷区数字,在方格中显示其周围的雷数 
Dim Tdid,Tmp,Tmp1 
Dim n 
Dim Sx,Sy,Ox,Oy,Mx,My 

= Tmx.Value 
= Tmy.Value 
= 0 

''''//将雷区标识转换成数组便于操作 
Tdid = Split(Tid,"_"

''''//对雷标识符进行整形 初始化中央坐标 
Ox = Tdid(1
Oy 
= Tdid(2

''''//对雷标识符进行整形 初始化横坐标 幅度 1 
Sx = Ox - 1 
Mx 
= Ox + 1 
If Int(Sx) <= 1 Then Sx = 1 
If Int(Mx) >= Int(x) Then Mx = x 

''''//对雷标识符进行整形 初始化纵坐标 幅度 1 
Sy = Oy - 1 
My 
= Oy + 1 
If Int(Sy) <= 1 Then Sy = 1 
If Int(My) >= Int(y) Then My = y 

If TMN = "地雷" Then 
''''//如果时雷标识就应该跳过 
'
'''//Execute(Tid & ".innerHTML = """ & TMN & """") 
Else 
''''//循环计算周围雷总数 
For i = Sx To Mx Step 1 
Tmp1 
= Tdid(0
Tmp1 
= Tmp1 & "_" & i 

For o = Sy To My Step 1 
Tmp 
= Tmp1 & "_" & o 

If Eval(Tmp & ".MineNum = ""地雷"""Then 
= n + 1 
ElseIf TMN = 0 And Tp = 1 Then 
''''//如果雷数为0则自动循环检测其周围其他雷区,直到完毕 
Call ShowTMN(Tmp) 
End If 
Next 
Next 
''''//显示周围雷数 
ExeCute(Tid & ".MineNum = " & n) 
''''//ExeCute(Tid & ".innerHTML = " & n) 
End If 

End Function 

Function ShowTMN(Tid) 
''''//在选中的格子中显示其周围的雷数 
Dim TTn 
TTn 
= CStr(Eval(Tid & ".MineNum")) 

''''//如果所点击的不是雷标识格子,则将没有禁用的标识为禁用 
'
'''//禁用的则自动跳过执行,以减少系统执行负担 
If Eval(Tid & ".MineNum <> ""地雷"""Then 
If Eval(Tid & ".Disable = ""True"""Then 
Exit Function 
Else 
Execute(Tid & ".innerHTML = """ & TTn & """"
Execute(Tid & ".Disable = ""True"""
End If 

If Eval(Tid & ".MineNum = ""标记"""Then 
Execute(Tid & ".Disable = ""False"""
End If 
Else 
If Eval(Tid & ".Disable = ""True"""Then 
Exit Function 
End If 
End If 

''''//按照雷数的不同显示不同的样式,以便区分 
Select Case TTn 
Case "0" 
''''//如果检测到周围雷数为0,则自动循环检测其周围的格子 
ExeCute(Tid & ".MineNum = """""
Execute(Tid & ".className = ""Tm0"""
Execute(Tid & ".innerHTML = "" """
Call ChkMineNum(Tid,TTn,1
Rn 
= Rn - 1 

Case "1" Execute(Tid & ".className = ""Tm1""") : Rn = Rn - 1 
Case "2" Execute(Tid & ".className = ""Tm2""") : Rn = Rn - 1 
Case "3" Execute(Tid & ".className = ""Tm3""") : Rn = Rn - 1 
Case "4" Execute(Tid & ".className = ""Tm4""") : Rn = Rn - 1 
Case "5" Execute(Tid & ".className = ""Tm5""") : Rn = Rn - 1 
Case "6" Execute(Tid & ".className = ""Tm6""") : Rn = Rn - 1 
Case "7" Execute(Tid & ".className = ""Tm7""") : Rn = Rn - 1 
Case "8" Execute(Tid & ".className = ""Tm8""") : Rn = Rn - 1 
Case "地雷" 
WinMsg 
= LoseMsg 
Call ShowAllOb() 
Exit Function 
Case "标记" 
Execute(Tid & ".innerHTML = "" """
WinMsg 
= LoseMsg 
Call ShowAllOb() 
Exit Function 
End Select 

If z = "" & Rn & "" Then 
Call ShowAllOb() 
Alert(WinMsg) 
End If 
End Function 

Function PutBn(Tid) 
''''//用右键做自助标记 

''''//如果是已经禁用的,则自动跳过 
If Eval(Tid & ".Disable = ""True"""Then 
If Eval(Tid & ".MineNum <> ""地雷"""or Eval(Tid & ".MineNum <> ""标记"""Then 
Exit Function 
End If 
End If 

Execute(Tid & ".className = ""TdOver"""
Execute("MNum.style.color = ""#00FF00"""

''''//标记类型 
If Eval(Tid & ".MBN = """""Then 
''''//标记为有雷 
Execute(Tid & ".MBN = ""!"""
Execute(Tid & ".innerHTML = """ & Eval(Tid & ".MBN"& """"
Rm 
= Rm - 1 
ElseIf Eval(Tid & ".MBN = ""!"""Then 
''''//标记为未知 
Execute(Tid & ".MBN = ""?"""
Execute(Tid & ".innerHTML = """ & Eval(Tid & ".MBN"& """"
Rm 
= Rm + 1 
Execute("BnNum.innerHTML = """ & MNum.Value + 1 & """"
ElseIf Eval(Tid & ".MBN = ""?"""Then 
''''//标记为一般状态 
Execute(Tid & ".MBN = """""
Execute(Tid & ".innerHTML = "" """
Execute(Tid & ".className = ""TdOut"""
End If 

Execute("BnNum.innerHTML = """ & Rm & """"

''''//如果所标记的是雷标识,则计数 
If Eval(Tid & ".MineNum = ""地雷"""Then 
Ri 
= Ri - 1 
ExeCute(Tid & ".MineNum = ""标记"""
''''//下面2行代码可以用来作弊 
'
'''//Execute(Tid & ".innerHTML = " & z - Ri) 
End If 

End Function 

Function ShowAllOb() 
''''//将所有障碍物反白 
Dim Oi 
For Oi = 0 To UBound(MineArr) 
If Eval(MineArr(Oi) & ".MineNum = ""地雷"""or Eval(MineArr(Oi) & ".MineNum = ""标记"""Then 
Execute(MineArr(Oi) & ".style.color = ""#FF0000"""
Execute(MineArr(Oi) & ".bgcolor = ""#FF0000"""
Execute(MineArr(Oi) & ".Disable = ""True"""
Execute(MineArr(Oi) & ".innerHTML = ""地雷"""
Else 
Call ShowTMN(MineArr(Oi)) 
End If 
Next 
End Function 

</script> 
<table border="1" align="center" cellpadding="2" cellspacing="1" class="TdOut"> 
<tr> 
<td colspan="3" align="center"><href="http://www.114xp.cn/" target="_blank">爱雪儿工作室</a> 2004年10月15日晚<br> 
<table width="99%" style="height:1px; " border="0" cellpadding="0" cellspacing="0" bordercolor="#999999" bgcolor="#999999"> 
<tr><td></td></tr></table> 
iXuEr Studio WebMine V1.0.0
<br> 
<href="http://www.psysch.com/!guidy/" target="_blank">发现问题请通知作者修正,谢谢!</a></td> 
</tr> 
</table> 
</body> 
</html> 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值