一款JavaScript开发的扫雷小游戏

<style><!--
#FLM_main {
margin:50px auto;
padding:20px;
background:#EEE;
zoom:1;
width:650px;
}
#FLM_main table {
border-collapse:collapse;
background:#EEE;
float:left;
}
#FLM_main table td {
border:1px solid #CCC;
font-size:20px;
width:38px;
height:38px;
text-align:center;
cursor:pointer;
}
#FLM_main table td:hover {
background-color:#AAA;
}
#FLM_main #operation {
width:180px;
float:right;
text-align:center;
}
#FLM_main:after {
clear: both;
display: block;
content: "";
line-height: 0;
height: 0;
visibility:hidden;
}
#FLM_main .tip {
font-size:14px;
margin:10px;
}
#FLM_main .tip ul {
}
#FLM_main .tip ul li {
margin:5px 0;
line-height:20px;
}
#FLM_main .light{
font-size:30px;
}
#FLM_main .red {
color:red;
}
#FLM_main .f60 {
color:#F60;
}
#FLM_main input[type=button] {
padding:2px 10px;
margin:5px;
font-size:20px;
cursor:pointer;
}
#FLM_main .txtleft {
text-align:left;
}
--></style>
<script type="text/javascript">// <![CDATA[
(function () {
var FLM = function (id, minLandMineCount, maxLandMineCount) {
if (!(this instanceof FLM))
return new FLM(id, minLandMineCount, maxLandMineCount);
var table = document.getElementById(id);
this.doc = document;
this.cells = table.getElementsByTagName("td");
this.rowCount = 10;
this.colCount = 10;
this.landMineCount = 0;
this.minLandMineCount = minLandMineCount || 10;
this.maxLandMineCount = maxLandMineCount || 20;
this.arrs = [];
this.beginTime = null;
this.endTime = null;
this.currentSetpCount = 0;
};
FLM.prototype = {
initArrs: function () {
for (var i = 0; i < this.rowCount; i++) {
this.arrs[i]=[];
for (var j = 0; j < this.colCount; j++) {
this.arrs[i][j] = 0;
}
}
this.landMineCount = this.selectFrom(this.minLandMineCount, this.maxLandMineCount);
},
landMine: function () {
var allCount = this.rowCount * this.colCount - 1;
for (var i = 0; i < this.landMineCount; i++) {
var randomNum = this.selectFrom(0, allCount),
rowCol = this.getRowCol(randomNum);
this.arrs[rowCol.row][rowCol.col] = 9;
}
},
calculateNoLandMineCount: function () {
for (var i = 0; i < this.rowCount; i++) {
for (var j = 0; j < this.colCount; j++) {
if (this.arrs[i][j] == 9)
continue;
if (i > 0 && j > 0) {
if (this.arrs[i - 1][j - 1] == 9)
this.arrs[i][j]++;
}
if (i > 0) {
if (this.arrs[i - 1][j] == 9)
this.arrs[i][j]++;
}
if (i > 0 && j < this.colCount - 1) {
if (this.arrs[i - 1][j + 1] == 9)
this.arrs[i][j]++;
}
if (j > 0) {
if (this.arrs[i][j - 1] == 9)
this.arrs[i][j]++;
}
if (j < this.colCount - 1) {
if (this.arrs[i][j + 1] == 9)
this.arrs[i][j]++;
}
if (i < this.rowCount - 1 && j > 0) {
if (this.arrs[i + 1][j - 1] == 9)
this.arrs[i][j]++;
}
if (i < this.rowCount - 1) {
if (this.arrs[i + 1][j] == 9)
this.arrs[i][j]++;
}
if (i < this.rowCount - 1 && j < this.colCount - 1) {
if (this.arrs[i + 1][j + 1] == 9)
this.arrs[i][j]++;
}
}
}
},
bindCells: function () {
var self=this;
for (var i = 0; i < this.rowCount; i++) {
for (var j = 0; j < this.colCount; j++) {
this.doc.getElementById("m" + i.toString() + j).onclick = (function (row,col) {
return function () {
if (self.arrs[row][col] != 9) {
self.currentSetpCount++;
this.innerHTML = self.arrs[row][col];
this.style.backgroundColor = "green";
if (self.currentSetpCount + self.landMineCount == self.rowCount * self.colCount) {
self.success();
}
} else {
self.failed();
}
this.onclick = null;
}
})(i,j);
}
}
},
showLandMine: function () {
for (var i = 0; i < this.rowCount; i++) {
for (var j = 0; j < this.colCount; j++) {
if (this.arrs[i][j] == 9) {
this.doc.getElementById("m" + i.toString() + j).style.backgroundColor = "red";
}
}
}
},
showAll: function () {
for (var i = 0; i < this.rowCount; i++) {
for (var j = 0; j < this.colCount; j++) {
if (this.arrs[i][j] == 9) {
this.doc.getElementById("m" + i.toString() + j).style.backgroundColor = "red";
} else {
this.doc.getElementById("m" + i.toString() + j).innerHTML = this.arrs[i][j];
}
}
}
},
hideAll: function () {
for (var i = 0; i < this.rowCount; i++) {
for (var j = 0; j < this.colCount; j++) {
var tdCell=this.doc.getElementById("m" + i.toString() + j);
tdCell.style.backgroundColor = "transparent";
tdCell.innerHTML = "";
}
}
},
begin: function () {
this.currentSetpCount = 0;
this.beginTime = new Date();
this.hideAll();
this.bindCells();
},
end: function () {
this.endTime = new Date();
},
success: function () {
this.end();
alert("Congratulation!");
},
failed: function () {
this.end();
this.showAll();
alert("GAME OVER!");
},
getRowCol: function (val) {
return {
row: parseInt(val / this.colCount),
col: val % this.colCount
};
},
selectFrom: function (iFirstValue,iLastValue) {
var iChoices = iLastValue - iFirstValue + 1;
return Math.floor(Math.random() * iChoices + iFirstValue);
},
play: function () {
this.initArrs();
this.landMine();
this.calculateNoLandMineCount();
}
};
window.FLM = FLM;
})();
window.onload = function () {
var flm = FLM("landmine", 15, 40),
timeHandle = null,
doc = document,
landMineCountElement = doc.getElementById("landMineCount"),
timeShow = doc.getElementById("costTime"),
showLandMineButton = doc.getElementById("showLandMine"),
showAllButton = doc.getElementById("showAll"),
beginButton = doc.getElementById("begin");
flm.play();
landMineCountElement.innerHTML = flm.landMineCount;
showLandMineButton.onclick = function () {
flm.showLandMine();
};
showAllButton.onclick = function () {
flm.showAll();
};
beginButton.onclick = function () {
flm.play();
landMineCountElement.innerHTML = flm.landMineCount;
flm.begin();
showLandMineButton.onclick = function () {
if (confirm("显示地雷游戏将结束?"))
flm.failed();
};
showAllButton.onclick = function () {
if (confirm("显示全部游戏将结束?"))
flm.failed();
};
timeHandle = setInterval(function () {
timeShow.innerHTML = parseInt((new Date() - flm.beginTime) / 1000);
}, 1000);
};
}
// ]]></script>
<div id="FLM_main">
<table id="landmine">
<tbody>
<tr>
<td id="m00"> </td>
<td id="m01"> </td>
<td id="m02"> </td>
<td id="m03"> </td>
<td id="m04"> </td>
<td id="m05"> </td>
<td id="m06"> </td>
<td id="m07"> </td>
<td id="m08"> </td>
<td id="m09"> </td>
</tr>
<tr>
<td id="m10"> </td>
<td id="m11"> </td>
<td id="m12"> </td>
<td id="m13"> </td>
<td id="m14"> </td>
<td id="m15"> </td>
<td id="m16"> </td>
<td id="m17"> </td>
<td id="m18"> </td>
<td id="m19"> </td>
</tr>
<tr>
<td id="m20"> </td>
<td id="m21"> </td>
<td id="m22"> </td>
<td id="m23"> </td>
<td id="m24"> </td>
<td id="m25"> </td>
<td id="m26"> </td>
<td id="m27"> </td>
<td id="m28"> </td>
<td id="m29"> </td>
</tr>
<tr>
<td id="m30"> </td>
<td id="m31"> </td>
<td id="m32"> </td>
<td id="m33"> </td>
<td id="m34"> </td>
<td id="m35"> </td>
<td id="m36"> </td>
<td id="m37"> </td>
<td id="m38"> </td>
<td id="m39"> </td>
</tr>
<tr>
<td id="m40"> </td>
<td id="m41"> </td>
<td id="m42"> </td>
<td id="m43"> </td>
<td id="m44"> </td>
<td id="m45"> </td>
<td id="m46"> </td>
<td id="m47"> </td>
<td id="m48"> </td>
<td id="m49"> </td>
</tr>
<tr>
<td id="m50"> </td>
<td id="m51"> </td>
<td id="m52"> </td>
<td id="m53"> </td>
<td id="m54"> </td>
<td id="m55"> </td>
<td id="m56"> </td>
<td id="m57"> </td>
<td id="m58"> </td>
<td id="m59"> </td>
</tr>
<tr>
<td id="m60"> </td>
<td id="m61"> </td>
<td id="m62"> </td>
<td id="m63"> </td>
<td id="m64"> </td>
<td id="m65"> </td>
<td id="m66"> </td>
<td id="m67"> </td>
<td id="m68"> </td>
<td id="m69"> </td>
</tr>
<tr>
<td id="m70"> </td>
<td id="m71"> </td>
<td id="m72"> </td>
<td id="m73"> </td>
<td id="m74"> </td>
<td id="m75"> </td>
<td id="m76"> </td>
<td id="m77"> </td>
<td id="m78"> </td>
<td id="m79"> </td>
</tr>
<tr>
<td id="m80"> </td>
<td id="m81"> </td>
<td id="m82"> </td>
<td id="m83"> </td>
<td id="m84"> </td>
<td id="m85"> </td>
<td id="m86"> </td>
<td id="m87"> </td>
<td id="m88"> </td>
<td id="m89"> </td>
</tr>
<tr>
<td id="m90"> </td>
<td id="m91"> </td>
<td id="m92"> </td>
<td id="m93"> </td>
<td id="m94"> </td>
<td id="m95"> </td>
<td id="m96"> </td>
<td id="m97"> </td>
<td id="m98"> </td>
<td id="m99"> </td>
</tr>
</tbody>
</table>
<div id="operation">
<div class="tip">地雷个数:<span id="landMineCount" class="light red">0</span></div>
<div class="tip">消耗时间: <span id="costTime" class="light f60">0</span> s</div>
<input id="showLandMine" type="button" value="显示地雷" /><br />
<input id="showAll" type="button" value="显示全部" /><br />
<input id="begin" type="button" value="开始游戏" /><br />
<div class="tip txtleft">提示:
<ul>
<li>1、点击“开始游戏”游戏开始计时</li>
<li>2、游戏过程中点击“显示地雷”或“显示全部”游戏将会结束</li><div style="text-align:center;margin:30px 0 0 0;"><hr style="color:#999;height:1px;">如不能显示效果,请按Ctrl+F5刷新本页</div>

一款JavaScript开发的扫雷小游戏

时间: 2024-11-03 22:28:48

一款JavaScript开发的扫雷小游戏的相关文章

带你使用h5开发移动端小游戏

带你使用h5开发移动端小游戏 在JY1.x版本中,你要做一个pc端的小游戏,会非常的简单,包括说,你要在低版本的浏览器IE8中,也不会出现明显的卡顿现象,你只需要关心游戏的逻辑就行了,比较适合逻辑较为简单的小游戏,在JY官网也写了很多的小游戏demo,但后来由于工作的缘因,一直没太去维护他,真是一转眼,已经是移动互联网的时代了,5年后的今天,有了重新构思JY框架的冲动,于是全新的JY2.0开始构建了.它将只适用于h5的移动端游戏开发,它将更多的去关注更复杂的js游戏,不在局限于红白机时代. 在使

结对博客(扫雷小游戏)

结对题目:基于一款课下娱乐的小游戏—扫雷 一.需求分析: 1.背景:在现在社会,人们的工作和学习压力不断增大,空余时间时间日益减少,一些大型的娱乐游戏又耗费大量的娱乐时间, 又不一定对身体有益,因此不耗费大量时间的小游戏,方便有趣,是大势所趋. 2.目的:编译此系统是为了在工作和学习之余得到适当的放松,既不浪费大量时间,又可以锻炼自己的思维,缓解疲劳. 3.应用人群:本游戏是基于windows下的小游戏,对人基本没有害处,因此能接触computer的人都可以玩这款游戏. 4.设计概述: 本游戏界

javascrpit开发连连看记录-小游戏

工作之余,总想做点什么有意思的东西.但是苦于不知道做什么,也就一直没有什么动作.在一个午饭后,跟@jedmeng和@墨尘聊天过程中,发现可以写一些小东西来练练手,有以下几点好处: 1. 加强巩固前端相关知识 2. 可以用一些平时项目中想用但没用的新东西 3. 一块儿做相同的东西,可以分享各自不同的想法 先来一张效果图,也可以来这里玩玩~      接下来就介绍一下做这个小游戏,自己的一些步骤和思路: 首先就是熟悉连连看的规则,为此还专门下载了一个app感受了一下,规则简单的说就是:找到两个相同的

DirectX游戏开发——从一个小游戏开始

本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/26364129 写在前面:自己对DirectX挺感兴趣的,加上自己目前在研究3D重建方面的东西,所以利用课余时间学习一下.看了一段时间的书,感觉还是靠动手编写一些小例子来学习,进步的更快体会的更深.所以从我自己写的一个小游戏开始吧,把自己学习心得和自己的一些想法写下来.更是欢迎有兴趣的童鞋来和我交流. 首先:先把我的小例子分享

用javascript实现2048的小游戏

前段时间,看了一个视频,用javascript实现的2048小游戏,发现不难,都是一些基出的语法和简单逻辑. 整个2048游戏没有很多的数据,所有,实现起来还是很有成就感的. 先上图,简直就和原版游戏一样一样的. 下面分享一下整个2048游戏的代码逻辑: 首先,搭建游戏框架 其次,开始我们的代码编写 index.html <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type"

使用JavaScript实现剪刀石头布的小游戏(由浅到深)

使用JavaScript实现剪刀石头布的小游戏 简单的解析: 剪刀石头布的原理类似于一个数组中数字大小的比较,当然我们也可以将其分别使用对应的数字来代表剪刀石头布,在这里我们将 0 - 剪刀, 1 – 石头 , 2 – 布 我们要得到自己胜利的方式有一下几种可能 ① 我们胜利 ② 和电脑平局 ③ 电脑胜利 思路一: 将剪刀石头布分别使用数字代替,将数字作为实参,传入一个进行比较的方法,由于数字的不同,也使得出现的组合就不同.(这里我能使用随机数来让电脑随机生成0,1,2三个数的任意一个) 假设我

练手WPF(三)——扫雷小游戏的简易实现(中)

原文:练手WPF(三)--扫雷小游戏的简易实现(中) 八.随机布雷 /// <summary> /// 随机布地雷 /// </summary> /// <param name="mineNum">地雷数</param> private void SetRndMine(int mineNum) { for (int k = 0; k < mineNum; k++) { int nullnum = 0; for (int j = 0;

Python开发接水果小游戏

我研发的Python游戏引擎Pylash已经更新到1.4了.现在我们就来使用它完成一个极其简单的小游戏:接水果.以下是游戏截图: 游戏操作说明:点击屏幕左右两边或者使用键盘方向键控制人物移动,使人物与水果接触得分,碰到非水果的物品,如碎玻璃,就会game over. 接下来是详尽的开发过程,篇幅较长,请看官耐心阅读. Pylash项目地址 由于本次开发用到了pylash,大家可以先去Github上对引擎进行了解. https://github.com/yuehaowang/pylash_engi

一款扫雷小游戏

扫雷 简单 一般 困难 地雷总数:   剩余方块: Coded by HerveyHall|查看源码 颇有不足,望大家指点