年编写的一个扫雷,一直也没有完善过,先Post出来供大家参考,以后有时间再完善...

代码有两部分组成:HTML 部分

1
<html>
 2
    <head>
 3
        <title>Game</title>
 4
        <script language="javascript" src="game.js"></script>
 5
        <script language="javascript">

 6
            function StartMineGame()
 7
            
{
 8
                LoadGame();
 9
            }
10
            function KU()
11
            
{
12
                alert( event.srcElement );
13
                return false;
14
            }
15
        </script>
16
    </head>
17
    <body notallow="setTimeout( 'StartMineGame()',100 )" notallow="return false;">
18
        <div id="GamePan"></div>
19
        <div id="gameP" name="gameP"></div>
20
    </body>
21
</html>
22

Javascript 部分:


1
/**//*************************************************************
  2
  ** Game        : 扫雷
  3
  ** Author        : sicon
  4
  ** Date        : 2005.11.24
  5
  ** Email        : sicon2002@163.com
  6
  ** version    : 1.0
  7
  ** copyright    : All Earthman.
  8
  ** 1.1        : 考虑已标记为雷时的自动标记
  9
*************************************************************/
 10

 11
// 注册 一个游戏。
 12
var game = new Mine( "GamePan" );
 13
function LoadGame()
 14
{
 15
    game.InitGame();
 16
}
 17

 18
/**//**************************************************
 19
 ** 游戏代码
 20
**************************************************/
 21

 22
function Mine( Panel )
 23
{
 24
    this.PanelId    = Panel;
 25
    this.Name        = "game";
 26
    this.Version    = "1.0";
 27
    this.Colums        = 10;            // 行数
 28
    this.Rows        = 10;            // 列数
 29
    this.ColumsWidth= 40;            // 行宽
 30
    this.RowsWidth  = 40;            // 列宽 
 31
    this.Bgcolor    = "#2E8B57";        //已挖
 32
    this.ForeColor  = "BUTTONSHADOW";    //未挖
 33
    this.MineColor  = "#8B4513";        //标记为雷
 34
    this.MineCount  = 0;                //雷数
 35
    this.MineLeft    = 0;
 36
    this.FontSize    = 5;                //字体大小
 37
    this.IsEnd        = false;            //是否结束
 38
    this.MineArray  = new Array();        //雷 0:不是 1:是
 39
    this.MineAround = new Array();        //周围雷数
 40
    this.CellShow   = new Array();        //已挖标记 1:无雷 2:有雷
 41
     // this.CellBorder = new Array();
 42
    this.StartTime  = new Date();
 43
    this.EndTime    = new Date();
 44
    this.Score        = 0;
 45
    this.ShowStyle  = 1;            // 提示数字样式 0:繁体汉字 1:阿拉伯数字 2:英文 3:简体汉字 4:不提示
 46
    this.ShowMine   = false;        // 是否显示雷
 47
    
 48
    // 初始化游戏
 49
    this.InitGame        = sInitGame;
 50
    // 初始化雷区
 51
    this.InitMineArray    = sInitMineArray;
 52
    // 计算周围的雷数
 53
    this.CaluMineAround = sCaluMineAround;
 54
    // 格内显示内容。
 55
    this.GetDisplay        = sGetDisplay;
 56
    // 某一网格周围。
 57
    this.GetCellBorder    = sGetCellBorder;
 58
    // 四周是否有雷
 59
    this.IsArroundCellsHasMine = sIsArroundCellsHasMine;
 60
    // 点网格事件时
 61
    this.RefreshGame    = sRefreshGame;
 62
    // 标记雷
 63
    this.MarkMineGame    = sMarkMineGame;
 64
    // 是否结束
 65
    this.IsAllFind        = sIsAllFind;
 66
    // 游戏结束
 67
    this.GameOver       = sGameOver;
 68
    // 刷新
 69
    this.Refresh        = sRefresh;
 70
    // 标记为雷
 71
    this.MarkMine        = sMarkMine;
 72
    // 显示分数
 73
    this.ShowWhiteExp   = sShowWhiteExp;
 74
    // 数字转换
 75
    this.ChangeNum2Char = sChangeNum2Char;
 76
}
 77

 78
function sInitGame()
 79
{
 80
    this.StartTime = new Date();
 81
    // alert( this.StartTime.getTime()  );
 82
    this.MineCount  = 0;
 83
    this.InitMineArray();
 84
    this.CaluMineAround();
 85
    this.Refresh();
 86
}
 87

 88
function sRefresh()
 89
{
 90
    // 布雷 Panel.
 91
    this.IsAllFind();
 92
    var GamePan = document.getElementById( this.PanelId ); 
 93
    var htmStr;
 94
    htmStr = "<table border=\"5\"><tr><td align=\"center\" bgcolor=\"#F5F5DC\"><font size=\"7\" color=\"#2F4F4F\"><b>Sweep Mine 1.0</b></font></td></tr><tr><td><table cellspacing='1' cellpadding='1' border=\"0\">";
 95
    for( var i=0; i<this.Rows; i++ )
 96
    
{
 97
        htmStr += "<tr>";
 98
        for( var j=0; j<this.Colums; j++ )
 99
        
{
100
            var Color = this.ForeColor;
101
            if( this.CellShow[i][j] == 1 )
102
                Color = this.Bgcolor;
103
            if( this.CellShow[i][j] == 2 )
104
                Color = this.MineColor;
105
            htmStr += "<td bgcolor=\""+ Color +"\" width=\""+ this.ColumsWidth +"\" height=\""+ this.RowsWidth +"\" notallow='"+ this.Name +".MarkMineGame("+i+","+j+")' notallow='"+ this.Name +".RefreshGame("+i+","+j+")' align=\"center\" valign=\"center\">"+ this.GetDisplay( i,j ) +"</td>";
106
        }
107
        htmStr += "</tr>";
108
    }
109
    htmStr += "</table></td><td valign=\"top\">";
110
    htmStr += "<table border=\"0\">"
111
    //htmStr += "    <tr><td>难度:5<td></tr>"
112
    htmStr += "    <tr><td>高度:10   宽度:10<td></tr>"
113
    htmStr += "    <tr><td>雷数:"+ this.MineCount +" <td></tr>"
114
    htmStr += "    <tr><td>剩余雷数:"+ this.MineLeft +" <td></tr>"
115
    htmStr += "    <tr><td><td></tr>"
116
    htmStr += "    <tr><td><td></tr>"
117
    htmStr += "    <tr><td><td></tr>"
118
    htmStr += "    <tr><td><span style=\"cursor:hand\" notallow=\"LoadGame()\">[开始] <span notallow=\"javascript:alert('不准停止!')\">[暂停]<td></tr>"
119
//    htmStr += "    <tr><td>时间:\""+ (this.EndTime - this.StartTime) +"\"<td></tr>"
120
//    htmStr += "    <tr><td>分数:"+ this.Score +"<td></tr>"
121
    htmStr += "    <tr><td><td></tr>"
122
    htmStr += "    <tr><td>"+ this.ShowWhiteExp() +"<td></tr>"
123
    htmStr += "    <tr><td><td></tr>"
124
    htmStr += "</table>"
125
    htmStr += "</td></tr></table>";
126
//    htmStr += this.MineCount;
127
    GamePan.innerHTML = htmStr;
128
}
129

130
function sInitMineArray()
131
{    
132
    for( var i=0; i<this.Rows; i++ )
133
    
{
134
        this.MineArray[i] = new Array();
135
        this.CellShow[i] = new Array();
136
        for( var j=0; j<this.Colums; j++ )
137
        
{
138
            var rand = parseInt(Math.random() * 7);
139
            this.MineArray[i][j] = ( rand < 2 )?rand:0;
140
            this.CellShow[i][j] = 0;  // All Not show.
141
            if( this.MineArray[i][j] == 1 )
142
            
{
143
                this.MineCount ++;
144
            }
145
        }
146
    }
147
    this.MineLeft = this.MineCount;
148
}
149

150
function sCaluMineAround()
151
{
152
    var sValue;
153
    for( var i=0; i<this.Rows; i++ )
154
    
{
155
        this.MineAround[i] = new Array();
156
        for( var j=0; j<this.Colums; j++ )
157
        
{
158
            this.MineAround[i][j] = 0;
159
            for( var m=i-1; m<=i+1; m++ )
160
            
{
161
                sValue = 0;
162
                for( var n=j-1; n<=j+1; n++ )
163
                
{
164
                    try
165
                    
{
166
                        sValue = this.MineArray[m][n] ;
167
                    }
168
                    catch( e )
169
                    
{
170
                        sValue = 0;
171
                    }
172
                    if( m==i && n==j )
173
                        sValue = 0;
174
                    if( !isNaN(sValue) )
175
                    this.MineAround[i][j] +=  parseInt( sValue );
176
                }
177
            }
178
        }
179
    }
180
}
181

182
function sGetDisplay( i,j )
183
{
184
    var returnValue = "";
185
    if( this.ShowMine == true )
186
        returnValue += "" + this.MineArray[i][j] ;
187
    if( this.CellShow[i][j] == 1 && this.MineAround[i][j] != 0 )
188
        returnValue += "<font size="+ this.FontSize +" color=\"#FFFFFF\">" + this.ChangeNum2Char( this.MineAround[i][j] ) + "</font>";
189
    return returnValue;
190
}
191

192
function sGetCellBorder( i,j )
193
{
194
    if( this.IsArroundCellsHasMine(i,j) == true && this.CellShow[i][j] != 1)
195
    
{
196
        this.CellShow[i][j] = 1;
197
        for( var m=i-1; m<=i+1; m++ )
198
        
{
199
            for( var n=j-1; n<=j+1; n++ )
200
            
{
201
                if( m>=0 && n>=0 && m<this.Rows && n<this.Colums )
202
                    this.GetCellBorder( m,n );
203
            }
204
        }
205
    
206
    }
207
    if( this.MineArray[i][j] == 1 )
208
        this.GameOver();
209
    else
210
        this.CellShow[i][j] = 1;
211
}
212

213
function sIsArroundCellsHasMine( i,j )
214
{
215
    var sValue;
216

217
    for( var m=i-1; m<=i+1; m++ )
218
    
{
219
        sValue = 0;
220
        for( var n=j-1; n<=j+1; n++ )
221
        
{
222
            try
223
            
{
224
                sValue = this.MineArray[m][n] ;
225
            }
226
            catch( e )
227
            
{
228
                sValue = 0;
229
            }
230
    //        if( !isNaN(sValue) && sValue == 1 && this.CellShow[i][j] )
231
    //            sValue = 0;
232
            if( !isNaN(sValue) && sValue==1 )
233
                return false;
234
        }
235
    }
236

237
    return true;
238
}
239

240
function sGameOver()
241
{
242
    alert( 'Game Over.' );
243
    this.InitGame();
244
}
245

246
function sMarkMine( i,j )
247
{
248
    if( this.CellShow[i][j] == 1 )
249
        return;
250
    if( this.CellShow[i][j] != 2 )
251
    
{
252
        this.CellShow[i][j] = 2;
253
        this.MineLeft--;
254
    }
255
    else
256
    
{
257
        this.CellShow[i][j] = 0;
258
        this.MineLeft++;
259
    }
260
}
261

262
function sIsAllFind()
263
{
264
    var c = 0;
265
    var d = 0;
266
    for( var i=0; i<this.Rows; i++ )
267
    
{
268
        for( var j=0; j<this.Colums; j++ )
269
        
{
270
            if( this.CellShow[i][j] == 2 )
271
            
{
272
                c++;
273
            }
274
            if( this.CellShow[i][j] == 1 )
275
            
{
276
                d++;
277
            }
278
        }
279
    }
280

281
    if( c > this.MineCount )
282
        alert( '小白,俺没有那么多雷!' );
283
    if( c == this.MineCount && c+d == this.Colums * this.Rows )
284
    
{
285
        this.EndTime = new Date();
286
        this.IsEnd = true;
287
    }
288
}
289

290
function sRefreshGame( i,j )
291
{
292
    this.GetCellBorder( i,j );
293
    this.Refresh();
294
}
295

296
function sMarkMineGame( i,j )
297
{
298
    this.MarkMine( i,j );
299
    this.Refresh();
300
}
301

302
function sShowWhiteExp()
303
{
304
    var timeSpan;
305
    timeSpan = this.EndTime - this.StartTime;
306
    this.Score = Math.ceil( 100000000/(timeSpan * this.MineCount ));
307

308
    if( this.IsEnd == true )
309
    
{
310
        return "<font size=\"8\">You Win!</font><br><font color=\"#FF00ff\">你的分数为:</font><br><font color=\"#FF0000\" size=\"30\">" + this.Score + "</font>";
311
        this.IsEnd = false;
312
    }
313
    else
314
        return "";
315
}
316

317
function sChangeNum2Char( j )
318
{
319
    var arrNum;
320

321
    if( this.ShowStyle == 4 )
322
        return "";
323
    arrNum = new Array();
324
    arrNum[0] = new Array();
325
    arrNum[1] = new Array();
326
    arrNum[2] = new Array();
327
    arrNum[3] = new Array();
328

329
    arrNum[0][0] = "零";
330
    arrNum[0][1] = "壹";
331
    arrNum[0][2] = "貮";
332
    arrNum[0][3] = "叁";
333
    arrNum[0][4] = "肆";
334
    arrNum[0][5] = "伍";
335
    arrNum[0][6] = "陆";
336
    arrNum[0][7] = "柒";
337
    arrNum[0][8] = "捌";
338
    arrNum[0][9] = "玖";
339

340
    arrNum[1][0] = "0";
341
    arrNum[1][1] = "1";
342
    arrNum[1][2] = "2";
343
    arrNum[1][3] = "3";
344
    arrNum[1][4] = "4";
345
    arrNum[1][5] = "5";
346
    arrNum[1][6] = "6";
347
    arrNum[1][7] = "7";
348
    arrNum[1][8] = "8";
349
    arrNum[1][9] = "9";
350

351
    arrNum[2][0] = "ONE";
352
    arrNum[2][1] = "TWO";
353
    arrNum[2][2] = "THREE";
354
    arrNum[2][3] = "FOUR";
355
    arrNum[2][4] = "FIVE";
356
    arrNum[2][5] = "SIX";
357
    arrNum[2][6] = "SEVEN";
358
    arrNum[2][7] = "EIGHT";
359
    arrNum[2][8] = "NINE";
360
    arrNum[2][9] = "TEN";
361

362
    arrNum[3][0] = "O";
363
    arrNum[3][1] = "一";
364
    arrNum[3][2] = "二";
365
    arrNum[3][3] = "三";
366
    arrNum[3][4] = "四";
367
    arrNum[3][5] = "五";
368
    arrNum[3][6] = "六";
369
    arrNum[3][7] = "七";
370
    arrNum[3][8] = "八";
371
    arrNum[3][9] = "九";
372

373
    return arrNum[ this.ShowStyle ][j];
374
}
375


下载文件