生成格JS写怀旧小游戏系列(五)扫雷
2013-04-27 19:30
387 查看
在改章节中,我们主要介绍生成格的内容,自我感觉有个不错的建议和大家分享下
经典的window小游戏扫雷,支撑IE9,chrome,firefox,safari,opera等现代浏览器!~IE8以下没测试~
<
script type
=
"text/javascript"
>
var
$
=
function
(
id
)
{
return
document.
getElementById
(
id
)
}
;
var
minesweeper
=
{
}
;
//雷区对象
var
mineArray
=
[
]
;
//地雷组
var
_differendNumber
=
null
;
//生成不同置位的随机地雷
var
overcomeMineLenth
=
{
overcome
:
0
,
minelength
:
10
}
;
function
CreateBox
(
y
,
x
,
mine
)
{
//造构雷格对象
this
.
position
=
1
;
//1在雷区面里,0不在
this
.
y
=
y
;
this
.
x
=
x
;
this
.
mine
=
mine
;
//1有雷,0无
this
.
on
=
0
;
//0未扫,1已扫,2已记标
this
.
t_l
=
{
y
:
y
-
1
,
x
:
x
-
1
}
;
//左上格子坐标
this
.
t_c
=
{
y
:
y
-
1
,
x
:
x
}
;
//上
this
.
t_r
=
{
y
:
y
-
1
,
x
:
x
+
1
}
;
//右上
this
.
b_l
=
{
y
:
y
+
1
,
x
:
x
-
1
}
;
//左下
this
.
b_c
=
{
y
:
y
+
1
,
x
:
x
}
;
//下
this
.
b_r
=
{
y
:
y
+
1
,
x
:
x
+
1
}
;
//右下
this
.
l
=
{
y
:
y
,
x
:
x
-
1
}
;
//左
this
.
r
=
{
y
:
y
,
x
:
x
+
1
}
;
//右
}
function
getMineSweeper
(
)
{
var
oCount
=
parseInt
(
$
(
'oCount'
)
.
innerHTML
)
;
var
y
,
x
,
max
,
boxslist
=
[
]
,
has
=
[
]
;
switch
(
oCount
)
{
//获得雷区长宽
case
10
:
y
=
9
;
x
=
9
;
break
;
case
40
:
y
=
16
;
x
=
16
;
break
;
case
99
:
y
=
16
;
x
=
30
;
break
;
}
max
=
y
*
x
;
$
(
'oMain'
)
.
style
.
width
=
24
*
x
+
2
+
'px'
;
for
(
var
i
=
0
;
i
<
y
;
i
++
)
{
//生成格子
boxslist
[
i
]
=
[
]
;
for
(
var
j
=
0
;
j
<
x
;
j
++
)
{
boxslist
[
i
]
.
push
(
new
CreateBox
(
i
,
j
,
0
)
)
;
}
}
for
(
var
k
=
0
;
k
<
oCount
;
k
++
)
{
//生成随机雷格组数序号
var
new_num
=
Math
.
floor
(
Math
.
random
(
)
*
max
+
1
)
;
getDifferentNumber
(
new_num
,
has
,
max
)
;
new_num
=
_differendNumber
;
has.
push
(
new_num
)
;
}
function
setMine
(
arr
)
{
for
(
var
i
=
0
;
i
<
has.
length
;
i
++
)
{
var
mineX
=
arr
[
i
]
%
x
==
0
?
x
:
arr
[
i
]
%
x
;
var
mineY
=
Math
.
ceil
(
arr
[
i
]
/
x
)
;
boxslist
[
mineY
-
1
]
[
mineX
-
1
]
.
mine
=
1
;
}
}
mineArray
=
has
;
overcomeMineLenth.
minelength
=
mineArray.
length
;
setMine
(
has
)
;
function
getDifferentNumber
(
n
,
has
,
max
)
{
//生成不重复的随机数
var
_has
=
has
;
var
_max
=
max
;
var
_n
=
n
;
var
isin
=
0
;
for
(
var
i
=
0
;
i
<
_has.
length
;
i
++
)
{
if
(
_n
==
has
[
i
]
)
{
isin
=
1
;
}
}
if
(
isin
==
1
)
{
//如果雷同,递归行执
var
_num
=
Math
.
floor
(
Math
.
random
(
)
*
_max
+
1
)
;
arguments.
callee
(
_num
,
_has
,
_max
)
;
}
else
{
_differendNumber
=
_n
;
}
}
minesweeper.
len
=
max
;
minesweeper.
x
=
x
;
minesweeper.
y
=
y
;
minesweeper.
boxslist
=
boxslist
;
//雷格组数
}
function
mineSweeperToHTML
(
obj
)
{
//布雷到面页HTML
var
x_len
=
obj.
x
;
var
y_len
=
obj.
y
;
var
arr
=
obj.
boxslist
;
var
str
=
''
;
for
(
var
i
=
0
;
i
<
arr.
length
;
i
++
)
{
var
_tr
=
'<tr>'
;
for
(
var
j
=
0
;
j
<
arr
[
i
]
.
length
;
j
++
)
{
var
id
=
'box-'
+
i
+
'-'
+
j
;
var
_mineclass
=
'hidden'
;
//arr[i][j].mine==0?'':'mine'
_tr
+=
'<td id="'
+
id
+
'" class="'
+
_mineclass
+
'"> </td>'
;
}
_tr
+=
'</tr>'
;
str
+=
_tr
;
}
$
(
'mineField'
)
.
innerHTML
=
'<table>'
+
str
+
'</table>'
;
//添加事件
var
boxs
=
$
(
'mineField'
)
.
getElementsByTagName
(
'td'
)
;
var
len
=
boxs.
length
;
for
(
var
k
=
0
;
k
<
len
;
k
++
)
{
boxs
[
k
]
.
onclick
=
function
(
)
{
mineBoxClick
(
this
)
;
}
boxs
[
k
]
.
onmousedown
=
function
(
event
)
{
addFlag
(
this
,
event
)
;
}
}
}
function
mineBoxClick
(
ele
)
{
//格子点击
var
ele_id
=
ele.
getAttribute
(
'id'
)
;
var
ele_id_arr
=
ele_id.
split
(
'-'
)
;
var
y
=
parseInt
(
ele_id_arr
[
1
]
)
;
var
x
=
parseInt
(
ele_id_arr
[
2
]
)
;
var
box
=
minesweeper.
boxslist
[
y
]
[
x
]
;
var
eleclass
=
ele.
getAttribute
(
'class'
)
;
if
(
eleclass
!=
'hidden'
)
{
return
false
;
}
//如果已点击,返回false
// var ele = $('box-'+y+'-'+x);
box.
on
=
1
;
if
(
box.
mine
==
0
)
{
//不是雷
overcomeMineLenth.
overcome
+=
1
;
var
tl
,
tc
,
tr
,
bl
,
bc
,
br
,
l
,
r
;
//取获四周的格子对象
var
out
=
{
position
:
0
,
mine
:
0
}
;
var
maxY
=
minesweeper.
y
-
1
;
var
maxX
=
minesweeper.
x
-
1
;
if
(
box.
t_l
.
y
<
0
||
box.
t_l
.
y
>
maxY
||
box.
t_l
.
x
<
0
||
box.
t_l
.
x
>
maxX
)
{
tl
=
out
;
}
else
{
tl
=
minesweeper.
boxslist
[
box.
t_l
.
y
]
[
box.
t_l
.
x
]
;
}
if
(
box.
t_c
.
y
<
0
||
box.
t_c
.
y
>
maxY
||
box.
t_c
.
x
<
0
||
box.
t_c
.
x
>
maxX
)
{
tc
=
out
;
}
else
{
tc
=
minesweeper.
boxslist
[
box.
t_c
.
y
]
[
box.
t_c
.
x
]
;
}
if
(
box.
t_r
.
y
<
0
||
box.
t_r
.
y
>
maxY
||
box.
t_r
.
x
<
0
||
box.
t_r
.
x
>
maxX
)
{
tr
=
out
;
}
else
{
tr
=
minesweeper.
boxslist
[
box.
t_r
.
y
]
[
box.
t_r
.
x
]
;
}
if
(
box.
b_l
.
y
<
0
||
box.
b_l
.
y
>
maxY
||
box.
b_l
.
x
<
0
||
box.
b_l
.
x
>
maxX
)
{
bl
=
out
;
}
else
{
bl
=
minesweeper.
boxslist
[
box.
b_l
.
y
]
[
box.
b_l
.
x
]
;
}
if
(
box.
b_c
.
y
<
0
||
box.
b_c
.
y
>
maxY
||
box.
b_c
.
x
<
0
||
box.
b_c
.
x
>
maxX
)
{
bc
=
out
;
}
else
{
bc
=
minesweeper.
boxslist
[
box.
b_c
.
y
]
[
box.
b_c
.
x
]
;
}
if
(
box.
b_r
.
y
<
0
||
box.
b_r
.
y
>
maxY
||
box.
b_r
.
x
<
0
||
box.
b_r
.
x
>
maxX
)
{
br
=
out
;
}
else
{
br
=
minesweeper.
boxslist
[
box.
b_r
.
y
]
[
box.
b_r
.
x
]
;
}
if
(
box.
l
.
y
<
0
||
box.
l
.
y
>
maxY
||
box.
l
.
x
<
0
||
box.
l
.
x
>
maxX
)
{
l
=
out
;
}
else
{
l
=
minesweeper.
boxslist
[
box.
l
.
y
]
[
box.
l
.
x
]
;
}
if
(
box.
r
.
y
<
0
||
box.
r
.
y
>
maxY
||
box.
r
.
x
<
0
||
box.
r
.
x
>
maxX
)
{
r
=
out
;
}
else
{
r
=
minesweeper.
boxslist
[
box.
r
.
y
]
[
box.
r
.
x
]
;
}
var
round
=
tl.
mine
+
tc.
mine
+
tr.
mine
+
bl.
mine
+
bc.
mine
+
br.
mine
+
l.
mine
+
r.
mine
;
switch
(
round
)
{
//四周格子元素式样设置
case
8
:
ele.
setAttribute
(
'class'
,
'on8'
)
;
ele.
innerHTML
=
8
;
break
;
case
7
:
ele.
setAttribute
(
'class'
,
'on7'
)
;
ele.
innerHTML
=
7
;
break
;
case
6
:
ele.
setAttribute
(
'class'
,
'on6'
)
;
ele.
innerHTML
=
6
;
break
;
case
5
:
ele.
setAttribute
(
'class'
,
'on5'
)
;
ele.
innerHTML
=
5
;
break
;
case
4
:
ele.
setAttribute
(
'class'
,
'on4'
)
;
ele.
innerHTML
=
4
;
break
;
case
3
:
ele.
setAttribute
(
'class'
,
'on3'
)
;
ele.
innerHTML
=
3
;
break
;
case
2
:
ele.
setAttribute
(
'class'
,
'on2'
)
;
ele.
innerHTML
=
2
;
break
;
case
1
:
ele.
setAttribute
(
'class'
,
'on1'
)
;
ele.
innerHTML
=
1
;
break
;
default
:
ele.
setAttribute
(
'class'
,
'on'
)
;
//如果有格空,继承搜索
if
(
tl.
position
!=
0
&&
tl.
on
==
0
)
{
$
(
'box-'
+
tl.
y
+
'-'
+
tl.
x
)
.
click
(
)
}
if
(
tc.
position
!=
0
&&
tc.
on
==
0
)
{
$
(
'box-'
+
tc.
y
+
'-'
+
tc.
x
)
.
click
(
)
}
if
(
tr.
position
!=
0
&&
tr.
on
==
0
)
{
$
(
'box-'
+
tr.
y
+
'-'
+
tr.
x
)
.
click
(
)
}
if
(
bl.
position
!=
0
&&
bl.
on
==
0
)
{
$
(
'box-'
+
bl.
y
+
'-'
+
bl.
x
)
.
click
(
)
}
if
(
bc.
position
!=
0
&&
bc.
on
==
0
)
{
$
(
'box-'
+
bc.
y
+
'-'
+
bc.
x
)
.
click
(
)
}
if
(
br.
position
!=
0
&&
br.
on
==
0
)
{
$
(
'box-'
+
br.
y
+
'-'
+
br.
x
)
.
click
(
)
}
if
(
l.
position
!=
0
&&
l.
on
==
0
)
{
$
(
'box-'
+
l.
y
+
'-'
+
l.
x
)
.
click
(
)
}
if
(
r.
position
!=
0
&&
r.
on
==
0
)
{
$
(
'box-'
+
r.
y
+
'-'
+
r.
x
)
.
click
(
)
}
}
if
(
overcomeMineLenth.
overcome
+
overcomeMineLenth.
minelength
==
minesweeper.
len
)
{
alert
(
'喜恭,你赢了!'
)
;
$
(
'start'
)
.
onclick
(
)
;
}
}
else
{
//是雷
for
(
var
i
=
0
;
i
<
mineArray.
length
;
i
++
)
{
var
mineElement
=
$
(
'mineField'
)
.
每日一道理
记不清有多少个夜晚,在我翻阅纸张的指间滑落;记不清有多少支蜡烛,在我的凝视中化为灰烬。逝者如斯,我时时刻刻会听见自己对生命承诺的余音,感到岁月的流转在渐渐稀释我的年少无知,我愿自己是一只上足了发条的时钟,在昼夜不停的流转中留下自己充实的每一刻。
getElementsByTagName
(
'td'
)
;
mineElement
[
mineArray
[
i
]
-
1
]
.
setAttribute
(
'class'
,
'mine'
)
;
}
ele.
setAttribute
(
'class'
,
'boom'
)
;
$
(
'start'
)
.
setAttribute
(
'src'
,
'http://www.cssha.com/wp-content/uploads/2012/09/sad.gif'
)
;
//移除添加事件
var
boxs2
=
$
(
'mineField'
)
.
getElementsByTagName
(
'td'
)
;
var
len
=
boxs2.
length
;
for
(
var
k
=
0
;
k
<
len
;
k
++
)
{
boxs2
[
k
]
.
onclick
=
function
(
)
{
return
false
;
//mineBoxClick(this);
}
boxs2
[
k
]
.
onmousedown
=
function
(
event
)
{
return
false
;
//addFlag(this,event);
}
}
}
}
function
addFlag
(
ele
,
event
)
{
//记标红旗
var
e
=
event
||
window.
event
;
if
(
e.
button
==
'2'
)
{
var
_c
=
ele.
getAttribute
(
'class'
)
;
if
(
_c
==
'hidden'
)
{
ele.
setAttribute
(
'class'
,
'flag'
)
;
$
(
'oCount'
)
.
innerHTML
=
parseInt
(
$
(
'oCount'
)
.
innerHTML
)
-
1
;
}
else
if
(
_c
==
'flag'
)
{
ele.
setAttribute
(
'class'
,
'hidden'
)
;
$
(
'oCount'
)
.
innerHTML
=
parseInt
(
$
(
'oCount'
)
.
innerHTML
)
+
1
;
}
else
{
return
false
;
}
}
}
function
startGame
(
)
{
//开始游戏
getMineSweeper
(
)
;
mineSweeperToHTML
(
minesweeper
)
;
overcomeMineLenth.
overcome
=
0
;
}
function
chooseDifficulty
(
)
{
//难度选择
var
arr
=
document.
getElementsByName
(
'radio'
)
;
var
len
=
arr.
length
;
for
(
var
i
=
0
;
i
<
len
;
i
++
)
{
arr
[
i
]
.
onclick
=
function
(
)
{
$
(
'oCount'
)
.
innerHTML
=
this
.
value
;
$
(
'start'
)
.
setAttribute
(
'src'
,
'http://www.cssha.com/wp-content/uploads/2012/09/happy.gif'
)
;
startGame
(
)
;
}
}
}
function
getDifficulty
(
)
{
//取获已选难度
var
arr
=
document.
getElementsByName
(
'radio'
)
;
var
len
=
arr.
length
;
for
(
var
i
=
0
;
i
<
len
;
i
++
)
{
if
(
arr
[
i
]
.
checked
)
{
$
(
'oCount'
)
.
innerHTML
=
arr
[
i
]
.
value
;
}
}
}
window.
onload
=
function
(
)
{
chooseDifficulty
(
)
startGame
(
)
;
$
(
'start'
)
.
onclick
=
function
(
)
{
this
.
setAttribute
(
'src'
,
'http://www.cssha.com/wp-content/uploads/2012/09/happy.gif'
)
;
getDifficulty
(
)
;
startGame
(
)
;
}
$
(
'oMain'
)
.
style
.
display
=
'block'
;
$
(
'loading'
)
.
style
.
display
=
'none'
;
document.
oncontextmenu
=
function
(
)
{
return
false
;
}
}
</
script
>
<style type="text/css">
*{ padding: 0; margin: 0; }
table { /*border-collapse: collapse; */border-spacing: 0; }
fieldset,img { border: 0; }
strong{ font-weight:bold;}
body{
background:url("http://www.cssha.com/wp-content/uploads/2012/05/bg1.png");
text-align:center; font-size:12px;
}
.solid-border-up{
border:2px solid #fff;
border-right:2px solid #848484;
border-bottom:2px solid #848484;
}
.solid-border-down{
border:2px solid #848484;
border-right:2px solid #fff;
border-bottom:2px solid #fff;
}
.main{
width:200px;
height:auto;
background:#CECFCE;
margin:20px auto;
padding:4px;
}
.top { padding:5px;}
.top table{width:100%;}
.top table td{text-align: left;}
.count {
width: 26px;
height: 20px;
line-height:20px;
background:#000;
color:red;
text-align:center;
}
#start { margin-top:2px; }
.mine-field { margin:8px 0 0 0; font-weight:bold}
.mine-field td {
width:20px;
height:21px;
border:2px solid #fff;
border-right:2px solid #848484;
border-bottom:2px solid #848484;
cursor:default;
overflow:hidden;
}
.mine-field td.on {
border:1px solid #B4B4B4;
border-right:1px solid #B4B4B4;
border-bottom:1px solid #B4B4B4;
}
.mine-field td.on1 {color:#00CD00;}
.mine-field td.on2 {color:#00BFFF;}
.mine-field td.on3 {color:#CD0000;}
.mine-field td.on4 {color:#BF3EFF;}
.mine-field td.on5 {color:#8B0000;}
.mine-field td.on6 {color:#C71585;}
.mine-field td.on7 {color:#CDCD00;}
.mine-field td.on8 {color:#000000;}
.mine-field td.flag {
background:url("http://cssha.com/wp-content/uploads/2012/09/flag.gif") no-repeat center center;
}
.mine-field td.mine, .mine-field td.boom {
background:url("http://cssha.com/wp-content/uploads/2012/09/mine.gif") no-repeat center center;
}
.mine-field td.boom {background-color:red;}
#hananTOP h3{
color:#000;
border-bottom:1px solid #ccc;
margin-bottom:10px;
padding:10px;
text-align:center;
}
#hananTOP h3 img{ }
#hananBottom {
border-top:1px solid #ccc;
margin-top:10px;
padding:10px;
text-align:center;
}
</style>
</head>
<body>
<div id="hananTOP">
<h3>
<a href="http://www.cssha.com/">
<img src="http://www.cssha.com/wp-content/uploads/2012/04/logo1.gif" alt="前端手记">
</a>
<p>JS版扫雷游戏</p>
</h3>
</div>
<div class="main solid-border-up" id="oMain" style="width: 213px; display:none">
<div class="solid-border-down top">
<table>
<tr>
<td style="width: 42px;">
<div class="solid-border-down count" id="oCount">10</div>
</td>
<td>
<input title="点击开始游戏" type="image" src="/wp-content/uploads/2012/09/happy.gif" id="start" />
</td>
<td style="text-align: right;">
<label><input type="radio" name="radio" checked="checked" value="10" />低级</label>
<label><input type="radio" name="radio" value="40" />中级</label>
<label><input type="radio" name="radio" value="99"/>级高</label>
</td>
</tr>
</table>
</div>
<div class="mine-field solid-border-down" id="mineField"></div>
</div>
<img src="http://www.cssha.com/wp-content/uploads/2012/09/loading.gif" id="loading">
<div id="hananBottom">
by <a href="http://www.cssha.com/">阿安</a>
</div>
<span style="display:none">
<script src="http://s95.cnzz.com/stat.php?id=3377831&web_id=3377831" language="JavaScript"></script>
</span>
</body>
</html>
文章结束给大家分享下程序员的一些笑话语录: 有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。
“如果你亲我一下,我会变成一个美丽的公主哦。”男人一言不发,把青蛙捡起来,放入口袋。
“如果你亲我一下,我会变成一个美丽的公主哦。而且,我会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”再一次,男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”男人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”
经典的window小游戏扫雷,支撑IE9,chrome,firefox,safari,opera等现代浏览器!~IE8以下没测试~
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>JS扫雷</title>
<
script type
=
"text/javascript"
>
var
$
=
function
(
id
)
{
return
document.
getElementById
(
id
)
}
;
var
minesweeper
=
{
}
;
//雷区对象
var
mineArray
=
[
]
;
//地雷组
var
_differendNumber
=
null
;
//生成不同置位的随机地雷
var
overcomeMineLenth
=
{
overcome
:
0
,
minelength
:
10
}
;
function
CreateBox
(
y
,
x
,
mine
)
{
//造构雷格对象
this
.
position
=
1
;
//1在雷区面里,0不在
this
.
y
=
y
;
this
.
x
=
x
;
this
.
mine
=
mine
;
//1有雷,0无
this
.
on
=
0
;
//0未扫,1已扫,2已记标
this
.
t_l
=
{
y
:
y
-
1
,
x
:
x
-
1
}
;
//左上格子坐标
this
.
t_c
=
{
y
:
y
-
1
,
x
:
x
}
;
//上
this
.
t_r
=
{
y
:
y
-
1
,
x
:
x
+
1
}
;
//右上
this
.
b_l
=
{
y
:
y
+
1
,
x
:
x
-
1
}
;
//左下
this
.
b_c
=
{
y
:
y
+
1
,
x
:
x
}
;
//下
this
.
b_r
=
{
y
:
y
+
1
,
x
:
x
+
1
}
;
//右下
this
.
l
=
{
y
:
y
,
x
:
x
-
1
}
;
//左
this
.
r
=
{
y
:
y
,
x
:
x
+
1
}
;
//右
}
function
getMineSweeper
(
)
{
var
oCount
=
parseInt
(
$
(
'oCount'
)
.
innerHTML
)
;
var
y
,
x
,
max
,
boxslist
=
[
]
,
has
=
[
]
;
switch
(
oCount
)
{
//获得雷区长宽
case
10
:
y
=
9
;
x
=
9
;
break
;
case
40
:
y
=
16
;
x
=
16
;
break
;
case
99
:
y
=
16
;
x
=
30
;
break
;
}
max
=
y
*
x
;
$
(
'oMain'
)
.
style
.
width
=
24
*
x
+
2
+
'px'
;
for
(
var
i
=
0
;
i
<
y
;
i
++
)
{
//生成格子
boxslist
[
i
]
=
[
]
;
for
(
var
j
=
0
;
j
<
x
;
j
++
)
{
boxslist
[
i
]
.
push
(
new
CreateBox
(
i
,
j
,
0
)
)
;
}
}
for
(
var
k
=
0
;
k
<
oCount
;
k
++
)
{
//生成随机雷格组数序号
var
new_num
=
Math
.
floor
(
Math
.
random
(
)
*
max
+
1
)
;
getDifferentNumber
(
new_num
,
has
,
max
)
;
new_num
=
_differendNumber
;
has.
push
(
new_num
)
;
}
function
setMine
(
arr
)
{
for
(
var
i
=
0
;
i
<
has.
length
;
i
++
)
{
var
mineX
=
arr
[
i
]
%
x
==
0
?
x
:
arr
[
i
]
%
x
;
var
mineY
=
Math
.
ceil
(
arr
[
i
]
/
x
)
;
boxslist
[
mineY
-
1
]
[
mineX
-
1
]
.
mine
=
1
;
}
}
mineArray
=
has
;
overcomeMineLenth.
minelength
=
mineArray.
length
;
setMine
(
has
)
;
function
getDifferentNumber
(
n
,
has
,
max
)
{
//生成不重复的随机数
var
_has
=
has
;
var
_max
=
max
;
var
_n
=
n
;
var
isin
=
0
;
for
(
var
i
=
0
;
i
<
_has.
length
;
i
++
)
{
if
(
_n
==
has
[
i
]
)
{
isin
=
1
;
}
}
if
(
isin
==
1
)
{
//如果雷同,递归行执
var
_num
=
Math
.
floor
(
Math
.
random
(
)
*
_max
+
1
)
;
arguments.
callee
(
_num
,
_has
,
_max
)
;
}
else
{
_differendNumber
=
_n
;
}
}
minesweeper.
len
=
max
;
minesweeper.
x
=
x
;
minesweeper.
y
=
y
;
minesweeper.
boxslist
=
boxslist
;
//雷格组数
}
function
mineSweeperToHTML
(
obj
)
{
//布雷到面页HTML
var
x_len
=
obj.
x
;
var
y_len
=
obj.
y
;
var
arr
=
obj.
boxslist
;
var
str
=
''
;
for
(
var
i
=
0
;
i
<
arr.
length
;
i
++
)
{
var
_tr
=
'<tr>'
;
for
(
var
j
=
0
;
j
<
arr
[
i
]
.
length
;
j
++
)
{
var
id
=
'box-'
+
i
+
'-'
+
j
;
var
_mineclass
=
'hidden'
;
//arr[i][j].mine==0?'':'mine'
_tr
+=
'<td id="'
+
id
+
'" class="'
+
_mineclass
+
'"> </td>'
;
}
_tr
+=
'</tr>'
;
str
+=
_tr
;
}
$
(
'mineField'
)
.
innerHTML
=
'<table>'
+
str
+
'</table>'
;
//添加事件
var
boxs
=
$
(
'mineField'
)
.
getElementsByTagName
(
'td'
)
;
var
len
=
boxs.
length
;
for
(
var
k
=
0
;
k
<
len
;
k
++
)
{
boxs
[
k
]
.
onclick
=
function
(
)
{
mineBoxClick
(
this
)
;
}
boxs
[
k
]
.
onmousedown
=
function
(
event
)
{
addFlag
(
this
,
event
)
;
}
}
}
function
mineBoxClick
(
ele
)
{
//格子点击
var
ele_id
=
ele.
getAttribute
(
'id'
)
;
var
ele_id_arr
=
ele_id.
split
(
'-'
)
;
var
y
=
parseInt
(
ele_id_arr
[
1
]
)
;
var
x
=
parseInt
(
ele_id_arr
[
2
]
)
;
var
box
=
minesweeper.
boxslist
[
y
]
[
x
]
;
var
eleclass
=
ele.
getAttribute
(
'class'
)
;
if
(
eleclass
!=
'hidden'
)
{
return
false
;
}
//如果已点击,返回false
// var ele = $('box-'+y+'-'+x);
box.
on
=
1
;
if
(
box.
mine
==
0
)
{
//不是雷
overcomeMineLenth.
overcome
+=
1
;
var
tl
,
tc
,
tr
,
bl
,
bc
,
br
,
l
,
r
;
//取获四周的格子对象
var
out
=
{
position
:
0
,
mine
:
0
}
;
var
maxY
=
minesweeper.
y
-
1
;
var
maxX
=
minesweeper.
x
-
1
;
if
(
box.
t_l
.
y
<
0
||
box.
t_l
.
y
>
maxY
||
box.
t_l
.
x
<
0
||
box.
t_l
.
x
>
maxX
)
{
tl
=
out
;
}
else
{
tl
=
minesweeper.
boxslist
[
box.
t_l
.
y
]
[
box.
t_l
.
x
]
;
}
if
(
box.
t_c
.
y
<
0
||
box.
t_c
.
y
>
maxY
||
box.
t_c
.
x
<
0
||
box.
t_c
.
x
>
maxX
)
{
tc
=
out
;
}
else
{
tc
=
minesweeper.
boxslist
[
box.
t_c
.
y
]
[
box.
t_c
.
x
]
;
}
if
(
box.
t_r
.
y
<
0
||
box.
t_r
.
y
>
maxY
||
box.
t_r
.
x
<
0
||
box.
t_r
.
x
>
maxX
)
{
tr
=
out
;
}
else
{
tr
=
minesweeper.
boxslist
[
box.
t_r
.
y
]
[
box.
t_r
.
x
]
;
}
if
(
box.
b_l
.
y
<
0
||
box.
b_l
.
y
>
maxY
||
box.
b_l
.
x
<
0
||
box.
b_l
.
x
>
maxX
)
{
bl
=
out
;
}
else
{
bl
=
minesweeper.
boxslist
[
box.
b_l
.
y
]
[
box.
b_l
.
x
]
;
}
if
(
box.
b_c
.
y
<
0
||
box.
b_c
.
y
>
maxY
||
box.
b_c
.
x
<
0
||
box.
b_c
.
x
>
maxX
)
{
bc
=
out
;
}
else
{
bc
=
minesweeper.
boxslist
[
box.
b_c
.
y
]
[
box.
b_c
.
x
]
;
}
if
(
box.
b_r
.
y
<
0
||
box.
b_r
.
y
>
maxY
||
box.
b_r
.
x
<
0
||
box.
b_r
.
x
>
maxX
)
{
br
=
out
;
}
else
{
br
=
minesweeper.
boxslist
[
box.
b_r
.
y
]
[
box.
b_r
.
x
]
;
}
if
(
box.
l
.
y
<
0
||
box.
l
.
y
>
maxY
||
box.
l
.
x
<
0
||
box.
l
.
x
>
maxX
)
{
l
=
out
;
}
else
{
l
=
minesweeper.
boxslist
[
box.
l
.
y
]
[
box.
l
.
x
]
;
}
if
(
box.
r
.
y
<
0
||
box.
r
.
y
>
maxY
||
box.
r
.
x
<
0
||
box.
r
.
x
>
maxX
)
{
r
=
out
;
}
else
{
r
=
minesweeper.
boxslist
[
box.
r
.
y
]
[
box.
r
.
x
]
;
}
var
round
=
tl.
mine
+
tc.
mine
+
tr.
mine
+
bl.
mine
+
bc.
mine
+
br.
mine
+
l.
mine
+
r.
mine
;
switch
(
round
)
{
//四周格子元素式样设置
case
8
:
ele.
setAttribute
(
'class'
,
'on8'
)
;
ele.
innerHTML
=
8
;
break
;
case
7
:
ele.
setAttribute
(
'class'
,
'on7'
)
;
ele.
innerHTML
=
7
;
break
;
case
6
:
ele.
setAttribute
(
'class'
,
'on6'
)
;
ele.
innerHTML
=
6
;
break
;
case
5
:
ele.
setAttribute
(
'class'
,
'on5'
)
;
ele.
innerHTML
=
5
;
break
;
case
4
:
ele.
setAttribute
(
'class'
,
'on4'
)
;
ele.
innerHTML
=
4
;
break
;
case
3
:
ele.
setAttribute
(
'class'
,
'on3'
)
;
ele.
innerHTML
=
3
;
break
;
case
2
:
ele.
setAttribute
(
'class'
,
'on2'
)
;
ele.
innerHTML
=
2
;
break
;
case
1
:
ele.
setAttribute
(
'class'
,
'on1'
)
;
ele.
innerHTML
=
1
;
break
;
default
:
ele.
setAttribute
(
'class'
,
'on'
)
;
//如果有格空,继承搜索
if
(
tl.
position
!=
0
&&
tl.
on
==
0
)
{
$
(
'box-'
+
tl.
y
+
'-'
+
tl.
x
)
.
click
(
)
}
if
(
tc.
position
!=
0
&&
tc.
on
==
0
)
{
$
(
'box-'
+
tc.
y
+
'-'
+
tc.
x
)
.
click
(
)
}
if
(
tr.
position
!=
0
&&
tr.
on
==
0
)
{
$
(
'box-'
+
tr.
y
+
'-'
+
tr.
x
)
.
click
(
)
}
if
(
bl.
position
!=
0
&&
bl.
on
==
0
)
{
$
(
'box-'
+
bl.
y
+
'-'
+
bl.
x
)
.
click
(
)
}
if
(
bc.
position
!=
0
&&
bc.
on
==
0
)
{
$
(
'box-'
+
bc.
y
+
'-'
+
bc.
x
)
.
click
(
)
}
if
(
br.
position
!=
0
&&
br.
on
==
0
)
{
$
(
'box-'
+
br.
y
+
'-'
+
br.
x
)
.
click
(
)
}
if
(
l.
position
!=
0
&&
l.
on
==
0
)
{
$
(
'box-'
+
l.
y
+
'-'
+
l.
x
)
.
click
(
)
}
if
(
r.
position
!=
0
&&
r.
on
==
0
)
{
$
(
'box-'
+
r.
y
+
'-'
+
r.
x
)
.
click
(
)
}
}
if
(
overcomeMineLenth.
overcome
+
overcomeMineLenth.
minelength
==
minesweeper.
len
)
{
alert
(
'喜恭,你赢了!'
)
;
$
(
'start'
)
.
onclick
(
)
;
}
}
else
{
//是雷
for
(
var
i
=
0
;
i
<
mineArray.
length
;
i
++
)
{
var
mineElement
=
$
(
'mineField'
)
.
每日一道理
记不清有多少个夜晚,在我翻阅纸张的指间滑落;记不清有多少支蜡烛,在我的凝视中化为灰烬。逝者如斯,我时时刻刻会听见自己对生命承诺的余音,感到岁月的流转在渐渐稀释我的年少无知,我愿自己是一只上足了发条的时钟,在昼夜不停的流转中留下自己充实的每一刻。
getElementsByTagName
(
'td'
)
;
mineElement
[
mineArray
[
i
]
-
1
]
.
setAttribute
(
'class'
,
'mine'
)
;
}
ele.
setAttribute
(
'class'
,
'boom'
)
;
$
(
'start'
)
.
setAttribute
(
'src'
,
'http://www.cssha.com/wp-content/uploads/2012/09/sad.gif'
)
;
//移除添加事件
var
boxs2
=
$
(
'mineField'
)
.
getElementsByTagName
(
'td'
)
;
var
len
=
boxs2.
length
;
for
(
var
k
=
0
;
k
<
len
;
k
++
)
{
boxs2
[
k
]
.
onclick
=
function
(
)
{
return
false
;
//mineBoxClick(this);
}
boxs2
[
k
]
.
onmousedown
=
function
(
event
)
{
return
false
;
//addFlag(this,event);
}
}
}
}
function
addFlag
(
ele
,
event
)
{
//记标红旗
var
e
=
event
||
window.
event
;
if
(
e.
button
==
'2'
)
{
var
_c
=
ele.
getAttribute
(
'class'
)
;
if
(
_c
==
'hidden'
)
{
ele.
setAttribute
(
'class'
,
'flag'
)
;
$
(
'oCount'
)
.
innerHTML
=
parseInt
(
$
(
'oCount'
)
.
innerHTML
)
-
1
;
}
else
if
(
_c
==
'flag'
)
{
ele.
setAttribute
(
'class'
,
'hidden'
)
;
$
(
'oCount'
)
.
innerHTML
=
parseInt
(
$
(
'oCount'
)
.
innerHTML
)
+
1
;
}
else
{
return
false
;
}
}
}
function
startGame
(
)
{
//开始游戏
getMineSweeper
(
)
;
mineSweeperToHTML
(
minesweeper
)
;
overcomeMineLenth.
overcome
=
0
;
}
function
chooseDifficulty
(
)
{
//难度选择
var
arr
=
document.
getElementsByName
(
'radio'
)
;
var
len
=
arr.
length
;
for
(
var
i
=
0
;
i
<
len
;
i
++
)
{
arr
[
i
]
.
onclick
=
function
(
)
{
$
(
'oCount'
)
.
innerHTML
=
this
.
value
;
$
(
'start'
)
.
setAttribute
(
'src'
,
'http://www.cssha.com/wp-content/uploads/2012/09/happy.gif'
)
;
startGame
(
)
;
}
}
}
function
getDifficulty
(
)
{
//取获已选难度
var
arr
=
document.
getElementsByName
(
'radio'
)
;
var
len
=
arr.
length
;
for
(
var
i
=
0
;
i
<
len
;
i
++
)
{
if
(
arr
[
i
]
.
checked
)
{
$
(
'oCount'
)
.
innerHTML
=
arr
[
i
]
.
value
;
}
}
}
window.
onload
=
function
(
)
{
chooseDifficulty
(
)
startGame
(
)
;
$
(
'start'
)
.
onclick
=
function
(
)
{
this
.
setAttribute
(
'src'
,
'http://www.cssha.com/wp-content/uploads/2012/09/happy.gif'
)
;
getDifficulty
(
)
;
startGame
(
)
;
}
$
(
'oMain'
)
.
style
.
display
=
'block'
;
$
(
'loading'
)
.
style
.
display
=
'none'
;
document.
oncontextmenu
=
function
(
)
{
return
false
;
}
}
</
script
>
<style type="text/css">
*{ padding: 0; margin: 0; }
table { /*border-collapse: collapse; */border-spacing: 0; }
fieldset,img { border: 0; }
strong{ font-weight:bold;}
body{
background:url("http://www.cssha.com/wp-content/uploads/2012/05/bg1.png");
text-align:center; font-size:12px;
}
.solid-border-up{
border:2px solid #fff;
border-right:2px solid #848484;
border-bottom:2px solid #848484;
}
.solid-border-down{
border:2px solid #848484;
border-right:2px solid #fff;
border-bottom:2px solid #fff;
}
.main{
width:200px;
height:auto;
background:#CECFCE;
margin:20px auto;
padding:4px;
}
.top { padding:5px;}
.top table{width:100%;}
.top table td{text-align: left;}
.count {
width: 26px;
height: 20px;
line-height:20px;
background:#000;
color:red;
text-align:center;
}
#start { margin-top:2px; }
.mine-field { margin:8px 0 0 0; font-weight:bold}
.mine-field td {
width:20px;
height:21px;
border:2px solid #fff;
border-right:2px solid #848484;
border-bottom:2px solid #848484;
cursor:default;
overflow:hidden;
}
.mine-field td.on {
border:1px solid #B4B4B4;
border-right:1px solid #B4B4B4;
border-bottom:1px solid #B4B4B4;
}
.mine-field td.on1 {color:#00CD00;}
.mine-field td.on2 {color:#00BFFF;}
.mine-field td.on3 {color:#CD0000;}
.mine-field td.on4 {color:#BF3EFF;}
.mine-field td.on5 {color:#8B0000;}
.mine-field td.on6 {color:#C71585;}
.mine-field td.on7 {color:#CDCD00;}
.mine-field td.on8 {color:#000000;}
.mine-field td.flag {
background:url("http://cssha.com/wp-content/uploads/2012/09/flag.gif") no-repeat center center;
}
.mine-field td.mine, .mine-field td.boom {
background:url("http://cssha.com/wp-content/uploads/2012/09/mine.gif") no-repeat center center;
}
.mine-field td.boom {background-color:red;}
#hananTOP h3{
color:#000;
border-bottom:1px solid #ccc;
margin-bottom:10px;
padding:10px;
text-align:center;
}
#hananTOP h3 img{ }
#hananBottom {
border-top:1px solid #ccc;
margin-top:10px;
padding:10px;
text-align:center;
}
</style>
</head>
<body>
<div id="hananTOP">
<h3>
<a href="http://www.cssha.com/">
<img src="http://www.cssha.com/wp-content/uploads/2012/04/logo1.gif" alt="前端手记">
</a>
<p>JS版扫雷游戏</p>
</h3>
</div>
<div class="main solid-border-up" id="oMain" style="width: 213px; display:none">
<div class="solid-border-down top">
<table>
<tr>
<td style="width: 42px;">
<div class="solid-border-down count" id="oCount">10</div>
</td>
<td>
<input title="点击开始游戏" type="image" src="/wp-content/uploads/2012/09/happy.gif" id="start" />
</td>
<td style="text-align: right;">
<label><input type="radio" name="radio" checked="checked" value="10" />低级</label>
<label><input type="radio" name="radio" value="40" />中级</label>
<label><input type="radio" name="radio" value="99"/>级高</label>
</td>
</tr>
</table>
</div>
<div class="mine-field solid-border-down" id="mineField"></div>
</div>
<img src="http://www.cssha.com/wp-content/uploads/2012/09/loading.gif" id="loading">
<div id="hananBottom">
by <a href="http://www.cssha.com/">阿安</a>
</div>
<span style="display:none">
<script src="http://s95.cnzz.com/stat.php?id=3377831&web_id=3377831" language="JavaScript"></script>
</span>
</body>
</html>
文章结束给大家分享下程序员的一些笑话语录: 有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。
“如果你亲我一下,我会变成一个美丽的公主哦。”男人一言不发,把青蛙捡起来,放入口袋。
“如果你亲我一下,我会变成一个美丽的公主哦。而且,我会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”再一次,男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”男人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”
相关文章推荐
- JS写怀旧小游戏系列(五)扫雷
- JS写怀旧小游戏系列(七)吃方块
- 判断类型JS写怀旧小游戏系列(七)吃方块
- JS写怀旧小游戏系列(八)九宫格数独
- JS写怀旧小游戏系列(一)俄罗斯方块
- JS写怀旧小游戏系列(九)中国象棋
- 评论拷贝JS写怀旧小游戏系列(六)躲人游戏
- JS写怀旧小游戏系列(二)连连看
- 随机网格JS写怀旧小游戏系列(四)贪吃蛇
- JS写怀旧小游戏系列(三)五子棋
- JS写怀旧小游戏系列(十)打砖块
- JS写怀旧小游戏系列(四)贪吃蛇
- JS写怀旧小游戏系列(六)躲人游戏
- 来看看HGE引擎开发的小游戏1 - 幻想系列
- thinkphp整合系列之tcpdf类生成pdf文件
- Entity Framework 5.0系列之自动生成Code First代码
- Windows8升级后自带小游戏纸牌、扫雷等消失的解决方法
- 数据库分库分表(sharding)系列(二) 全局主键生成策略
- [算法系列之二十一]最短摘要的生成
- 贪吃蛇系列开篇----设计智能贪吃蛇小游戏