久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

JS實(shí)現(xiàn)掃雷項(xiàng)目總結(jié)

瀏覽:95日期:2024-03-24 14:24:00

本文實(shí)例為大家分享了JS實(shí)現(xiàn)掃雷項(xiàng)目的總結(jié),供大家參考,具體內(nèi)容如下

項(xiàng)目展示圖

JS實(shí)現(xiàn)掃雷項(xiàng)目總結(jié)

項(xiàng)目準(zhǔn)備

一樣的,我們先是準(zhǔn)備出三個(gè)文件夾,以及根目錄下的index.html 文件

JS實(shí)現(xiàn)掃雷項(xiàng)目總結(jié)

然后是兩張圖片(地雷 和 旗子)

JS實(shí)現(xiàn)掃雷項(xiàng)目總結(jié)

JS實(shí)現(xiàn)掃雷項(xiàng)目總結(jié)

之后是html結(jié)構(gòu)

html

首先是最外層的 游戲內(nèi)容區(qū)域的div 取名id為mine

<div id='mine'></div>

之后是游戲內(nèi)容區(qū)域中最上面的四個(gè)按鈕,我們用四個(gè)button標(biāo)簽來表示,并且用一個(gè)div來包裹起來

并且給初級(jí)按鈕一個(gè)最初的選中的樣式

<div class='level'> <button class='active'>初級(jí)</button> <button>中級(jí)</button> <button>高級(jí)</button> <button>重新開始</button></div>

之后是 game 的游戲進(jìn)行區(qū)域,也就是雷區(qū)

<div class='gameBox'></div>

最后一個(gè)是提示區(qū)域

<div class='info'> 剩余雷數(shù):<span class='mineNum'></span> <br> <span class='tips'>左鍵掃雷,右鍵插旗,再次點(diǎn)擊右鍵拔旗</span></div>

那么最后,我們整合一下 最后的代碼如下

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <title>JS掃雷</title> <link rel='stylesheet' href='http://www.gepszalag.com/bcjs/CSS/index.css' > <link rel='icon' href='http://www.gepszalag.com/bcjs/favicon.ico' ></head><body> <div id='mine'><div class='level'> <button class='active'>初級(jí)</button> <button>中級(jí)</button> <button>高級(jí)</button> <button>重新開始</button></div><div class='gameBox'></div><div class='info'> 剩余雷數(shù):<span class='mineNum'></span> <br> <span class='tips'>左鍵掃雷,右鍵插旗,再次點(diǎn)擊右鍵拔旗</span></div> </div> <script src='http://www.gepszalag.com/bcjs/JS/index.js'></script></body></html>CSS

首先呢我們給mine最外層的區(qū)域,讓主內(nèi)容居中

#mine { margin: 50px auto;}

之后,給level 的 div 和 里面的 button 添加樣式

并且,添加默認(rèn)的active樣式

.level { text-align: center; margin-bottom: 10px;}.level button { padding: 5px 15px; background-color: #02a4ad; border: none; color: #fff; border-radius: 3px; outline: none; cursor: pointer;}.level button.active { background-color: #00abff;}

之后,我們先重定義了下 table標(biāo)簽 和 td 標(biāo)簽,我們的掃雷主要的游戲區(qū)域就是通過table標(biāo)簽來實(shí)現(xiàn)

table { border-spacing: 1px; background-color: #929196; margin: 0 auto;}td { padding: 0; width: 20px; height: 20px; background-color: #ccc; border: 2px solid; border-color: #fff #a1a1a1 #a1a1a1 #fff; text-align: center; line-height: 20px; font-weight: bold;}

之后是提示區(qū)域的樣式

.info { margin-top: 10px; text-align: center;}.tips { color: red; font-size: 16px;}

最后,我們預(yù)定義一些樣式

比如,我們的地雷的樣式,以及我們的棋子的樣式

.mine { background: #d9d9d9 url(../images/mine.png) no-repeat center; background-size: cover;}.flag { background: #ccc url(../images/flag.png) no-repeat center; background-size: cover;}

最后還有一個(gè)就是游戲內(nèi),一些方塊會(huì)現(xiàn)實(shí)數(shù)字,這些數(shù)字代表了改方塊周圍的雷的數(shù)量

td.zero { background-color: #d9d9d9; border-color: #d9d9d9;}td.one { background-color: #d9d9d9; border-color: #d9d9d9; color: #0332fe;}td.two { background-color: #d9d9d9; border-color: #d9d9d9; color: #019f02;}td.three { background-color: #d9d9d9; border-color: #d9d9d9; color: #ff2600;}td.four { background-color: #d9d9d9; border-color: #d9d9d9; color: #93208f;}td.five { background-color: #d9d9d9; border-color: #d9d9d9; color: #ff7f29;}td.six { background-color: #d9d9d9; border-color: #d9d9d9; color: #ff3fff;}td.seven { background-color: #d9d9d9; border-color: #d9d9d9; color: #3fffbf;}td.eight { background-color: #d9d9d9; border-color: #d9d9d9; color: #22ee0f;}

所以綜上所述,整合了下css代碼,我們的css完整的代碼如下

#mine { margin: 50px auto;}.level { text-align: center; margin-bottom: 10px;}.level button { padding: 5px 15px; background-color: #02a4ad; border: none; color: #fff; border-radius: 3px; outline: none; cursor: pointer;}.level button.active { background-color: #00abff;}table { border-spacing: 1px; background-color: #929196; margin: 0 auto;}td { padding: 0; width: 20px; height: 20px; background-color: #ccc; border: 2px solid; border-color: #fff #a1a1a1 #a1a1a1 #fff; text-align: center; line-height: 20px; font-weight: bold;}.tips { color: red; font-size: 16px;}.mine { background: #d9d9d9 url(../images/mine.png) no-repeat center; background-size: cover;}.flag { background: #ccc url(../images/flag.png) no-repeat center; background-size: cover;}.info { margin-top: 10px; text-align: center;}td.zero { background-color: #d9d9d9; border-color: #d9d9d9;}td.one { background-color: #d9d9d9; border-color: #d9d9d9; color: #0332fe;}td.two { background-color: #d9d9d9; border-color: #d9d9d9; color: #019f02;}td.three { background-color: #d9d9d9; border-color: #d9d9d9; color: #ff2600;}td.four { background-color: #d9d9d9; border-color: #d9d9d9; color: #93208f;}td.five { background-color: #d9d9d9; border-color: #d9d9d9; color: #ff7f29;}td.six { background-color: #d9d9d9; border-color: #d9d9d9; color: #ff3fff;}td.seven { background-color: #d9d9d9; border-color: #d9d9d9; color: #3fffbf;}td.eight { background-color: #d9d9d9; border-color: #d9d9d9; color: #22ee0f;}JavaScript

思路

這次我們打算在原型鏈上編程

首先,我們先寫出mine 的構(gòu)造函數(shù)

Mine 構(gòu)造函數(shù)

function Mine(tr, td, mineNum) { this.tr = tr; // tr表示行數(shù) this.td = td; // td表示列數(shù) this.mineNum = mineNum; // mineNum表示雷的數(shù)量 this.squares = [];// 存儲(chǔ)所有方塊的信息,是一個(gè)二維數(shù)組,按照行與列的順序排放,存取都按照行列方式 this.tds = []; // 存儲(chǔ)所有單元格的DOM this.surplusMine = mineNum; // 剩余雷的數(shù)量 this.allRight = false; // 右擊標(biāo)注的小紅旗是否全部是雷,用來判斷用戶是否游戲成功 this.parent = document.querySelector(’.gameBox’);}

生成隨機(jī)的雷的排布

我們構(gòu)造函數(shù)中傳進(jìn)去了三個(gè)參數(shù),行數(shù),列數(shù),以及需要的雷數(shù),我們的思路是這樣的,我們游戲是在table里面進(jìn)行,table一共有 tr * td 個(gè)格子,那么我們可以創(chuàng)建一個(gè) 長(zhǎng)度為 tr * td 的 數(shù)組,然后,給數(shù)組賦值,每個(gè)值對(duì)應(yīng)一個(gè)方格,最后再給數(shù)組亂序,取出前 mineNum(需要的雷數(shù)) 個(gè), 這mineNum個(gè)方格所對(duì)應(yīng)的就是我們的地雷的方格

那么我們寫出 我們的js代碼

Mine.prototype.randomNum = function () { var square = new Array(this.tr * this.td); // 生成一個(gè)空數(shù)組 長(zhǎng)度為格子總數(shù) for (var i = 0; i < square.length; i++) {square[i] = i; } // 數(shù)組亂序 square.sort(function () {return 0.5 - Math.random() }); return square.slice(0, this.mineNum);};

創(chuàng)建表格

我們雖然上述把雷的位置取出了,但是,我們?cè)賱?chuàng)建游戲區(qū)域的時(shí)候,并沒必要,在創(chuàng)建的時(shí)候就將邏輯寫入,我們可以在點(diǎn)擊小方格的時(shí)候,來判斷其位置是否是雷還是空即可

因此,我們先寫出創(chuàng)建表格的 js 代碼

Mine.prototype.createDom = function () { var This = this; var table = document.createElement(’table’); for (var i = 0; i < this.tr; i++) { // 行var domTr = document.createElement(’tr’);this.tds[i] = [];for (var j = 0; j < this.td; j++) { // 列 var domTd = document.createElement(’td’); this.tds[i][j] = domTd; // 把所有創(chuàng)建的td添加到數(shù)組當(dāng)中 domTd.pos = [i, j]; // 把格子對(duì)應(yīng)的行和列村到格子身上,為了下面通過這個(gè)值去數(shù)組里面取到對(duì)應(yīng)的數(shù)據(jù) domTd.onmousedown = function () {This.play(event, this); // 大的This 指的是實(shí)例對(duì)象 小的this指的是點(diǎn)擊的domTd }; // if (this.squares[i][j].type == ’mine’) { // domTd.className = ’mine’; // } // if (this.squares[i][j].type == ’number’) { // domTd.innerHTML = this.squares[i][j].value; // } domTr.appendChild(domTd);}table.appendChild(domTr); } this.parent.innerHTML = ’’; // 避免多次點(diǎn)擊創(chuàng)建多個(gè) this.parent.appendChild(table);};

其中的 This.play 是我們點(diǎn)擊方塊之后的判斷,判斷是 雷 還是 空

再寫play函數(shù)之前,我們還有一些其他的邏輯需要編寫

初始化函數(shù)

Mine.prototype.init = function () { // this.randomNum(); var rn = this.randomNum(); // 雷在格子里的位置 var n = -1; // 用來找到對(duì)應(yīng)的索引格子 for (var i = 0; i < this.tr; i++) {this.squares[i] = [];for (var j = 0; j < this.td; j++) { // 取一個(gè)方塊在數(shù)組里的數(shù)據(jù),要使用行與列的形式存取 // 找方塊周圍的方塊的時(shí)候,要用坐標(biāo)的形式去取 // 行與列的形式,和坐標(biāo)的形式,x,y是剛好相反的 n++; if (rn.indexOf(n) != -1) {// 如果這個(gè)條件成立,說明現(xiàn)在循環(huán)到的索引在雷的數(shù)組里面找到了,那就表明這個(gè)索引對(duì)應(yīng)的是個(gè)雷this.squares[i][j] = { type: ’mine’, x: j, y: i}; } else {this.squares[i][j] = { type: ’number’, x: j, y: i, value: 0}; }} } this.updateNum(); this.createDom(); this.parent.oncontextmenu = function () {return false;// 阻止右鍵出菜單事件 } // 剩余雷數(shù) this.mineNumDom = document.querySelector(’.mineNum’); this.mineNumDom.innerHTML = this.surplusMine;};

getAround() 函數(shù)

// 找某個(gè)方格周圍的八個(gè)格子Mine.prototype.getAround = function (square) { var x = square.x,y = square.y; var result = []; // 把找到的格子的坐標(biāo)返回出去(二維數(shù)組) for (var i = x - 1; i <= x + 1; i++) {for (var j = y - 1; j <= y + 1; j++) { if (i < 0 ||j < 0 ||i > this.td - 1 ||j > this.tr - 1 ||// 上述表示出邊界(i == x && j == y) ||// 表示循環(huán)到自己this.squares[j][i].type == ’mine’// 表示循環(huán)到(周圍的格子)雷 (注意i和j表示的是坐標(biāo),而squares存儲(chǔ)的是行和列) ) {continue; } // 要以行與列的形式返回出去,因?yàn)榈綍r(shí)候需要它去取數(shù)組里的數(shù)據(jù) result.push([j, i]);} } return result;}

updateNum() 函數(shù)

// 更新所有的數(shù)字Mine.prototype.updateNum = function () { for (var i = 0; i < this.tr; i++) {for (var j = 0; j < this.td; j++) { // 要更新的是雷周圍的數(shù)字 if (this.squares[i][j].type == ’number’) {continue; } var num = this.getAround(this.squares[i][j]); // 獲取到每一個(gè)雷周圍的數(shù)字 for (var k = 0; k < num.length; k++) {this.squares[num[k][0]][num[k][1]].value += 1; }} }};

play函數(shù)

Mine.prototype.play = function (ev, obj) { var This = this; if (ev.which == 1 && obj.className != ’flag’) { // 后面的條件是為了用戶右鍵之后不能點(diǎn)擊// 點(diǎn)擊的是左鍵var curSquare = this.squares[obj.pos[0]][obj.pos[1]];var cl = [’zero’, ’one’, ’two’, ’three’, ’four’, ’five’, ’six’, ’seven’, ’eight’];// cl 存儲(chǔ)classNameif (curSquare.type == ’number’) { // 用戶點(diǎn)擊的是數(shù)字 obj.innerHTML = curSquare.value; obj.className = cl[curSquare.value]; // 點(diǎn)到了數(shù)字零 if (curSquare.value == 0) {/* 遞歸思路: 1.顯示自己 2.查找四周1) 顯示四周(如果四周的值不為零,那就顯示到這,不需要再找了)2)如果值為零了 a.顯示自己 b.找四周(如果四周的值不為零,那就顯示到這,不需要再找了)I.顯示自己II.找四周(如果四周的值不為零,那就顯示到這,不需要再找了) 。。。。。。 */obj.innerHTML = ’’; // 顯示為空function getAllZero(square) { var around = This.getAround(square);// 找到了周圍N個(gè)格子 for (var i = 0; i < around.length; i++) {var x = around[i][0]; // 行var y = around[i][1]; // 列This.tds[x][y].className = cl[This.squares[x][y].value];if (This.squares[x][y].value == 0) { // 如果以某個(gè)格子為中心,找到的某個(gè)格子為零,那就接著調(diào)用(遞歸) if (!This.tds[x][y].check) {// 給對(duì)應(yīng)的td 添加一條屬性,如果找過的話,這個(gè)值就為true,下一次就不會(huì)再找了,防止函數(shù)調(diào)用棧出問題This.tds[x][y].check = true;getAllZero(This.squares[x][y]); }} else { // 如果以某個(gè)格子為中心找到的四周的值不為零,就把數(shù)字顯示出來 This.tds[x][y].innerHTML = This.squares[x][y].value;} }}getAllZero(curSquare); }} else { // 用戶點(diǎn)擊的是雷 this.gameOver(obj);} } if (ev.which == 3) {// 用戶點(diǎn)擊的是右鍵// 如果右擊的是一個(gè)數(shù)字,就不能點(diǎn)擊if (obj.className && obj.className != ’flag’) { return;}obj.className = obj.className == ’flag’ ? ’’ : ’flag’; // 切換calss 有無if (this.squares[obj.pos[0]][obj.pos[1]].type == ’mine’) { this.allRight = true;} else { this.allRight = false;}if (obj.className == ’flag’) { this.mineNumDom.innerHTML = --this.surplusMine;} else { this.mineNumDom.innerHTML = ++this.surplusMine;}if (this.surplusMine == 0) { // 剩余的雷的數(shù)量為0,表示用戶已經(jīng)標(biāo)完小紅旗了,這時(shí)候要判斷游戲是成功還是結(jié)束 if (this.allRight == true) {// 這個(gè)條件成立,說明用戶全部標(biāo)對(duì)了alert(’恭喜你,游戲通過’);for (i = 0; i < this.tr; i++) { for (j = 0; j < this.td; j++) {this.tds[i][j].onmousedown = null; }} } else {alert(’游戲失敗’);this.gameOver(); }} }}

gameOver函數(shù)

Mine.prototype.gameOver = function (clickTd) { /* 1.顯示所有的雷2.取消所有格子的點(diǎn)擊事件3.給點(diǎn)中的格子標(biāo)紅 */ for (i = 0; i < this.tr; i++) {for (j = 0; j < this.td; j++) { if (this.squares[i][j].type == ’mine’) {this.tds[i][j].className = ’mine’; } this.tds[i][j].onmousedown = null;} } if (clickTd) {clickTd.style.backgroundColor = ’#f00’; }}

最后,補(bǔ)充些其他的功能

其他

// 添加 button 的功能var btns = document.getElementsByTagName(’button’);var mine = null; // 用來存儲(chǔ)生成的實(shí)例var ln = 0; // 用來處理當(dāng)前選中的狀態(tài)var arr = [ [9, 9, 10], [16, 16, 40], [28, 28, 99]]; //不同級(jí)別的行數(shù),列數(shù),雷數(shù)for (let i = 0; i < btns.length - 1; i++) { btns[i].onclick = function () {btns[ln].className = ’’;this.className = ’active’;mine = new Mine(arr[i][0], arr[i][1], arr[i][2]);mine.init();ln = i; }}btns[0].onclick(); // 初始化btns[3].onclick = function () { for (var i = 0; i < btns.length - 1; i++) {if (btns[i].className == ’active’) { btns[i].onclick();} }}

js 整合代碼

function Mine(tr, td, mineNum) { this.tr = tr; // tr表示行數(shù) this.td = td; // td表示列數(shù) this.mineNum = mineNum; // mineNum表示雷的數(shù)量 this.squares = []; // 存儲(chǔ)所有方塊的信息,是一個(gè)二維數(shù)組,按照行與列的順序排放,存取都按照行列方式 this.tds = []; // 存儲(chǔ)所有單元格的DOM this.surplusMine = mineNum; // 剩余雷的數(shù)量 this.allRight = false; // 右擊標(biāo)注的小紅旗是否全部是雷,用來判斷用戶是否游戲成功 this.parent = document.querySelector(’.gameBox’);}// 生成n個(gè)不重復(fù)的數(shù)字Mine.prototype.randomNum = function () { var square = new Array(this.tr * this.td); // 生成一個(gè)空數(shù)組 長(zhǎng)度為格子總數(shù) for (var i = 0; i < square.length; i++) {square[i] = i; } // 數(shù)組亂序 square.sort(function () {return 0.5 - Math.random() }); return square.slice(0, this.mineNum);};// 創(chuàng)建表格Mine.prototype.createDom = function () { var This = this; var table = document.createElement(’table’); for (var i = 0; i < this.tr; i++) { // 行var domTr = document.createElement(’tr’);this.tds[i] = [];for (var j = 0; j < this.td; j++) { // 列 var domTd = document.createElement(’td’); this.tds[i][j] = domTd; // 把所有創(chuàng)建的td添加到數(shù)組當(dāng)中 domTd.pos = [i, j]; // 把格子對(duì)應(yīng)的行和列村到格子身上,為了下面通過這個(gè)值去數(shù)組里面取到對(duì)應(yīng)的數(shù)據(jù) domTd.onmousedown = function () {This.play(event, this); // 大的This 指的是實(shí)例對(duì)象 小的this指的是點(diǎn)擊的domTd }; // if (this.squares[i][j].type == ’mine’) { // domTd.className = ’mine’; // } // if (this.squares[i][j].type == ’number’) { // domTd.innerHTML = this.squares[i][j].value; // } domTr.appendChild(domTd);}table.appendChild(domTr); } this.parent.innerHTML = ’’; // 避免多次點(diǎn)擊創(chuàng)建多個(gè) this.parent.appendChild(table);};Mine.prototype.init = function () { // this.randomNum(); var rn = this.randomNum(); // 雷在格子里的位置 var n = -1; // 用來找到對(duì)應(yīng)的索引格子 for (var i = 0; i < this.tr; i++) {this.squares[i] = [];for (var j = 0; j < this.td; j++) { // 取一個(gè)方塊在數(shù)組里的數(shù)據(jù),要使用行與列的形式存取 // 找方塊周圍的方塊的時(shí)候,要用坐標(biāo)的形式去取 // 行與列的形式,和坐標(biāo)的形式,x,y是剛好相反的 n++; if (rn.indexOf(n) != -1) {// 如果這個(gè)條件成立,說明現(xiàn)在循環(huán)到的索引在雷的數(shù)組里面找到了,那就表明這個(gè)索引對(duì)應(yīng)的是個(gè)雷this.squares[i][j] = { type: ’mine’, x: j, y: i}; } else {this.squares[i][j] = { type: ’number’, x: j, y: i, value: 0}; }} } this.updateNum(); this.createDom(); this.parent.oncontextmenu = function () {return false;// 阻止右鍵出菜單事件 } // 剩余雷數(shù) this.mineNumDom = document.querySelector(’.mineNum’); this.mineNumDom.innerHTML = this.surplusMine;};// 找某個(gè)方格周圍的八個(gè)格子Mine.prototype.getAround = function (square) { var x = square.x,y = square.y; var result = []; // 把找到的格子的坐標(biāo)返回出去(二維數(shù)組) for (var i = x - 1; i <= x + 1; i++) {for (var j = y - 1; j <= y + 1; j++) { if (i < 0 ||j < 0 ||i > this.td - 1 ||j > this.tr - 1 ||// 上述表示出邊界(i == x && j == y) ||// 表示循環(huán)到自己this.squares[j][i].type == ’mine’// 表示循環(huán)到(周圍的格子)雷 (注意i和j表示的是坐標(biāo),而squares存儲(chǔ)的是行和列) ) {continue; } // 要以行與列的形式返回出去,因?yàn)榈綍r(shí)候需要它去取數(shù)組里的數(shù)據(jù) result.push([j, i]);} } return result;}// 更新所有的數(shù)字Mine.prototype.updateNum = function () { for (var i = 0; i < this.tr; i++) {for (var j = 0; j < this.td; j++) { // 要更新的是雷周圍的數(shù)字 if (this.squares[i][j].type == ’number’) {continue; } var num = this.getAround(this.squares[i][j]); // 獲取到每一個(gè)雷周圍的數(shù)字 for (var k = 0; k < num.length; k++) {this.squares[num[k][0]][num[k][1]].value += 1; }} }};Mine.prototype.play = function (ev, obj) { var This = this; if (ev.which == 1 && obj.className != ’flag’) { // 后面的條件是為了用戶右鍵之后不能點(diǎn)擊// 點(diǎn)擊的是左鍵var curSquare = this.squares[obj.pos[0]][obj.pos[1]];var cl = [’zero’, ’one’, ’two’, ’three’, ’four’, ’five’, ’six’, ’seven’, ’eight’];// cl 存儲(chǔ)classNameif (curSquare.type == ’number’) { // 用戶點(diǎn)擊的是數(shù)字 obj.innerHTML = curSquare.value; obj.className = cl[curSquare.value]; // 點(diǎn)到了數(shù)字零 if (curSquare.value == 0) {/* 遞歸思路: 1.顯示自己 2.查找四周1) 顯示四周(如果四周的值不為零,那就顯示到這,不需要再找了)2)如果值為零了 a.顯示自己 b.找四周(如果四周的值不為零,那就顯示到這,不需要再找了)I.顯示自己II.找四周(如果四周的值不為零,那就顯示到這,不需要再找了) 。。。。。。 */obj.innerHTML = ’’; // 顯示為空function getAllZero(square) { var around = This.getAround(square);// 找到了周圍N個(gè)格子 for (var i = 0; i < around.length; i++) {var x = around[i][0]; // 行var y = around[i][1]; // 列This.tds[x][y].className = cl[This.squares[x][y].value];if (This.squares[x][y].value == 0) { // 如果以某個(gè)格子為中心,找到的某個(gè)格子為零,那就接著調(diào)用(遞歸) if (!This.tds[x][y].check) {// 給對(duì)應(yīng)的td 添加一條屬性,如果找過的話,這個(gè)值就為true,下一次就不會(huì)再找了,防止函數(shù)調(diào)用棧出問題This.tds[x][y].check = true;getAllZero(This.squares[x][y]); }} else { // 如果以某個(gè)格子為中心找到的四周的值不為零,就把數(shù)字顯示出來 This.tds[x][y].innerHTML = This.squares[x][y].value;} }}getAllZero(curSquare); }} else { // 用戶點(diǎn)擊的是雷 this.gameOver(obj);} } if (ev.which == 3) {// 用戶點(diǎn)擊的是右鍵// 如果右擊的是一個(gè)數(shù)字,就不能點(diǎn)擊if (obj.className && obj.className != ’flag’) { return;}obj.className = obj.className == ’flag’ ? ’’ : ’flag’; // 切換calss 有無if (this.squares[obj.pos[0]][obj.pos[1]].type == ’mine’) { this.allRight = true;} else { this.allRight = false;}if (obj.className == ’flag’) { this.mineNumDom.innerHTML = --this.surplusMine;} else { this.mineNumDom.innerHTML = ++this.surplusMine;}if (this.surplusMine == 0) { // 剩余的雷的數(shù)量為0,表示用戶已經(jīng)標(biāo)完小紅旗了,這時(shí)候要判斷游戲是成功還是結(jié)束 if (this.allRight == true) {// 這個(gè)條件成立,說明用戶全部標(biāo)對(duì)了alert(’恭喜你,游戲通過’);for (i = 0; i < this.tr; i++) { for (j = 0; j < this.td; j++) {this.tds[i][j].onmousedown = null; }} } else {alert(’游戲失敗’);this.gameOver(); }} }}// 游戲失敗函數(shù)Mine.prototype.gameOver = function (clickTd) { /* 1.顯示所有的雷2.取消所有格子的點(diǎn)擊事件3.給點(diǎn)中的格子標(biāo)紅 */ for (i = 0; i < this.tr; i++) {for (j = 0; j < this.td; j++) { if (this.squares[i][j].type == ’mine’) {this.tds[i][j].className = ’mine’; } this.tds[i][j].onmousedown = null;} } if (clickTd) {clickTd.style.backgroundColor = ’#f00’; }}// var mine = new Mine(28, 28, 99);// mine.init();// 添加 button 的功能var btns = document.getElementsByTagName(’button’);var mine = null; // 用來存儲(chǔ)生成的實(shí)例var ln = 0; // 用來處理當(dāng)前選中的狀態(tài)var arr = [ [9, 9, 10], [16, 16, 40], [28, 28, 99]]; //不同級(jí)別的行數(shù),列數(shù),雷數(shù)for (let i = 0; i < btns.length - 1; i++) { btns[i].onclick = function () {btns[ln].className = ’’;this.className = ’active’;mine = new Mine(arr[i][0], arr[i][1], arr[i][2]);mine.init();ln = i; }}btns[0].onclick(); // 初始化btns[3].onclick = function () { for (var i = 0; i < btns.length - 1; i++) {if (btns[i].className == ’active’) { btns[i].onclick();} }}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 成人小视频在线播放 | 国产在线第一页 | 日本亚洲一区 | 久免费视频 | 一级高清视频 | 中文字幕一区二区三区免费视频 | 国产一区二区三区免费 | 国产日韩一区二区三区 | www国产亚洲精品 | 成人精品一区二区三区中文字幕 | 日韩中文字幕在线观看 | 国产一区二区三区久久久久久 | 久久中文字幕一区 | 精品成人佐山爱一区二区 | 在线播放三级 | 综合久久亚洲 | 中文字幕精品一区二区三区精品 | 日韩中文字幕av | 中文字幕av第一页 | 日韩欧美国产一区二区 | 91精品国产欧美一区二区成人 | 亚洲一区二区三区免费观看 | 国产精品一区二区av | 欧美三级在线 | 成人在线免费观看 | 精品久久影院 | 精品一区在线 | 亚洲国产精品va在线看黑人 | 欧美一区二区三区在线观看 | 欧美一级免费 | 风间由美一区二区三区在线观看 | 欧美日韩一区二区三区在线电影 | 国内成人免费视频 | 鲁一鲁综合 | 日韩特级 | 成人在线一区二区三区 | 午夜精品久久久久久久星辰影院 | 成人精品免费视频 | 欧美精品一区二区在线观看 | 日韩在线中文字幕 | 亚洲精品久久久久久一区二区 | 色综久久 | 一级黄片毛片 | 欧美日韩视频在线观看一区 | 久久一级 | 91精品国产91久久久久久吃药 | 日本黄色毛片 | 红色av社区| 欧美日韩一区二区在线观看 | 黄色毛片在线看 | 国内自拍视频在线观看 | 中文字幕免费在线观看视频 | 天天av天天操 | 黄色一级毛片 | 国产精品视频一区二区三区 | 精品久久中文字幕 | 国产精品一区二区久久久 | 中文av一区 | 精品国产一区二区三区四 | 亚洲www永久成人夜色 | 久久精品99国产精品日本 | 99免费在线观看视频 | 久久综合九色综合欧美狠狠 | 久久最新| 久久伊人一区二区 | 久草免费在线视频 | 亚洲精品国偷拍自产在线观看 | 亚洲三级视频 | 伊人亚洲 | www.夜夜骑 | 视频二区| 午夜久久乐| 日本免费电影一区 | 精品国产一区二区三区av片 | 91精品国产综合久久久久久丝袜 | 91亚洲国产精品 | 色婷婷综合久久久久中文一区二区 | 欧美成人专区 | 欧美一区二区三区免费在线观看 | 欧美伦理一区二区三区 | 欧美不卡 | 精品国产一区二区三区性色av | 久久久久久久一区 | 国产精品久久一区二区三区 | 国产一区二区资源 | 欧美二区三区 | 久久伊人国产 | 日本黄色大片免费看 | 国产www视频| 日本一区二区三区四区 | 91中文字幕网 | 国产精品日产欧美久久久久 | 精品一区二区久久久久久久网站 | 一区福利视频 | 在线看国产 | 国产欧美综合一区二区三区 | 农村妇女毛片精品久久久 | 久久久久久国产一级毛片高清版 | 亚洲最大成人 | 久久成人一区二区 | 国产精品一区一区三区 | 欧美a级在线观看 | 日韩欧美国产精品 | 国产成人一区二区 | 欧美日韩在线视频一区二区 | www嫩草| 国产精久久久久久久妇剪断 | 成人av在线播放 | 狠狠视频 | 99re热精品视频 | 美国成人在线 | 成年人免费在线视频 | 国产高清不卡 | 亚洲成人福利 | 小情侣高清国产在线播放 | 欧美午夜精品久久久久久人妖 | 欧美成人高清视频 | 99成人| 亚洲视频中文字幕 | 日韩一区二区成人 | 不卡久久 | 999久久久国产999久久久 | 精品无人乱码一区二区三区的优势 | 四虎免费紧急入口观看 | 久久久网 | 国产精品日韩欧美一区二区三区 | 特级淫片日本高清视频免费 | 午夜成年人 | 欧美精品成人一区二区三区四区 | 国产日韩精品视频 | 久久久久久亚洲精品 | 国产999精品久久久久久麻豆 | 日本在线免费看 | 国产精品美女久久久久久久久久久 | 黄色一级视屏 | 日本aaaa| 国产高清av在线一区二区三区 | 国内精品久久久久久影视8 91一区二区在线观看 | 精产国产伦理一二三区 | 青青草精品 | 一区二区三区视频在线 | 精品久久久久久久久久久久久久久久久久久 | 亚洲电影一区二区三区 | 欧美精品在线不卡 | 91成人黄色 | 亚洲久久| 天天操操| 亚洲免费网 | 四虎影院入口 | 久久久久一区二区 | 欧美在线播放一区 | 一级毛片在线免费看 | 亚洲国产日韩在线 | 精品国产一区二区三区高潮视 | 国内精品一区二区三区视频 | 日韩久久精品 | 国产国拍亚洲精品av | 在线色网 | 成人夜晚看av| www.成人.com| 操视频网站| 夜夜爽99久久国产综合精品女不卡 | 久久91精品久久久久久9鸭 | 国产中文一区二区三区 | 一区视频在线 | 亚洲a在线播放 | 亚洲国产精品一区二区三区 | 欧美在线播放 | 91久久综合亚洲鲁鲁五月天 | 毛片免费观看视频 | 免费的一级视频 | 亚洲综合色视频在线观看 | 久久久亚洲精品视频 | 中文在线亚洲 | 日韩二区三区 | 国产精品99久久久久久动医院 | 91福利视频导航 | www.夜夜骑 | 久久久久亚洲一区二区三区 | 日韩天堂| 日韩成人短视频 | 影视在线观看 | 日本久久精品 | 国产成人精品一区二区三区视频 | 欧美日韩午夜精品 | 日本黄色大片免费 | 免费成人一级片 | 久热伊人 | 精品国产乱码久久久久久蜜臀 | 欧美精品一区自拍a毛片在线视频 | 亚洲欧美在线观看 | 天天摸天天干 | 91精品国产高清自在线观看 | 国产三级在线免费观看 | 久久99精品久久久久久园产越南 | 九九资源站 | 日韩一区二区在线播放 | 国产精品日产欧美久久久久 | 国产午夜精品福利 | 国产精品久久久久久久久久 | 亚洲欧美在线播放 | 嫩草研究院在线观看入口 | 羞羞视频网站在线免费观看 | 日韩中文一区二区三区 | 久久伊人免费视频 | 日日做夜夜爱 | 一级黄色大片免费 | 久久成人久久爱 | 国产午夜精品视频 | 成人福利在线 | www.99精品| 欧美在线网站 | 精品三级三级三级三级三级 | 午夜社区| 后进极品白嫩翘臀在线视频 | www国产亚洲精品久久网站 | 亚洲一区二区免费在线观看 | 精品国产髙清在线看国产毛片 | 综合久久国产九一剧情麻豆 | 日韩一区二区三区视频 | 日韩中文字幕av | 久久精品免费视频播放 | 91视频在线看 | 99re在线观看 | 美女天堂网 | 午夜精品久久久久久久久久久久久 | h片在线看 | 日韩精品一区二区三区 | 成人午夜在线观看 | 国产人久久人人人人爽 | 久久国产精品一区二区 | 午夜激情电影在线 | 国产精品国产三级国产aⅴ无密码 | 羞羞视频网站在线看 | 欧美一区二区三区在线 | 亚洲视频自拍 | 91视频日韩 | 黄色资源在线观看 | 日本一区二区三区四区不卡视频 | 国产中文一区 | 91精品国产综合久久国产大片 | 久久人人爽人人爽人人片av软件 | 最新日韩av | 亚洲黄色在线视频 | 日韩福利一区二区 | 国产91综合一区在线观看 | 久久久精品欧美一区二区免费 | 激情久久久久 | 一级片在线观看 | 91电影在线看 | 成人av观看| 亚洲一区二区在线 | 国产午夜精品一区二区三区嫩草 | 国产精品九九久久99视频 | 男人的天堂久久 | 精品日韩欧美一区二区三区在线播放 | 黄色在线免费观看 | 日本精品视频在线观看 | 久久精品日产高清版的功能介绍 | 国产午夜久久久久 | 婷婷狠狠| 亚洲视频中文字幕 | 蜜桃官网| 亚洲精品www久久久久久广东 | 亚洲h视频在线观看 | 国产精品入口久久 | 亚洲精品第一区在线观看 | 欧美在线观看一区 | 伊人久久国产 | a在线看 | 国产精品久久久久久久免费大片 | 伊人最新网址 | 天天干天天操 | 日韩在线视频一区 | 久久精品国产77777蜜臀 | av网站免费 | 黄色精品网站 | 国产成人a亚洲精品 | 亚洲精品视频免费看 | 欧美亚洲一区 | 欧美一区二区在线观看 | 日韩在线永久免费播放 | 色综久久 | 久久国产精彩视频 | 午夜影院在线观看视频 | av中文字幕网 | 吴梦梦到粉丝家实战华中在线观看 | 91中文字幕在线观看 | 国产精品亚洲一区 | 三级黄色片在线 | 欧美一区2区三区4区公司二百 | 欧洲成人午夜免费大片 | 精品久久久久香蕉网 | av先锋资源 | 欧美free性丝袜xxxxhd | 91色在线| 国产精品综合 | 日本在线观看一区二区 | 久久噜噜噜精品国产亚洲综合 | 亚洲精品不卡 | www.久久久| 亚洲一区日韩 | 久久久久久久国产 | 欧美一级一区 | 五月激情婷婷六月 | 在线观看成人高清 | 西西做爰免费视频 | 日韩毛片 | 亚洲最大成人 | 亚洲第一视频 | 亚洲精品综合 | 国内精品视频 | 欧美午夜视频在线观看 | 国产精品久久久久久久免费大片 | 91电影在线看 | 狠狠的日 | 亚洲毛片在线 | 国产精品毛片久久久久久 | 麻豆久久 | 国产精品久久久久久久久久 | 日韩av免费在线观看 | 亚洲国产成人精品女人久久久 | 国产精品久久免费视频在线 | 欧美精品91 | 亚欧毛片 | 日本一区二区电影 | 亚洲精品在线播放 | 色婷婷久久久久swag精品 | 久久av资源 | 国产精品视频一二 | 国外成人在线视频 | 久久久精品日韩 | 最新国产中文字幕 | 久久久精品影院 | 91麻豆精品国产91久久久资源速度 | 国产精品一区三区 | 欧美在线综合 | 国产视频中文字幕 | 亚洲一级黄色 | 国产成人午夜 | 久草视 | 成人情趣视频 | 久久久精品日韩 | 成年人免费看 | 国产精品久久久麻豆 | 91高清视频 | 国产精品福利午夜在线观看 | 欧美一级二级视频 | 在线观看成人小视频 | 亚洲中午字幕 | 精品伦精品一区二区三区视频 | 精品少妇一区二区三区日产乱码 | 91视视频在线观看入口直接观看 | 国产 日韩 一区 | 国产精品久久久久一区二区三区 | 国产一区不卡视频 | 国产欧美在线观看 | 国产精品久久久久影院色老大 | 国产精品美女久久久久久久久久久 | 伊人网站| 99国产精品久久久 | 精品久久久久av | 日本不卡一区二区三区在线观看 | 四虎成人在线播放 | 日本aa级毛片免费观看 | 亚洲精品久久久久久久久 | 综合久久久久久久 | 国产精品国产三级国产aⅴ原创 | 午夜大片网| 日韩美香港a一级毛片免费 国产综合av | 欧美一区二区免费 | 999久久久国产精品 免费视频一区 | 亚洲中国精品精华液 | 日韩中文在线视频 | 久久精品国产99国产 | 国产成人精品久久 | 国产在线第一页 | 在线视频91 | 久久久精品免费看 | 午夜私人影院在线观看 | 一区二区三区在线 | 五月激情综合婷婷 | 日韩激情免费 | 韩国三级午夜理伦三级三 | 狠狠爱www人成狠狠爱综合网 | 在线免费观看毛片 | 亚洲一区| www.国产视频 | 成年人在线观看视频 | 免费一区二区三区 | 国产日韩精品久久 | 日本三级在线网站 | 淫片一级国产 | av在线免费观看网站 | 国产精品久久一区 | 国产午夜精品久久久久久久 | 国产精品美女久久久久久久网站 | 亚洲成人高清在线 | 日韩第一页 | 69日影院| 青青草久 | 精品国产31久久久久久 | 成人观看免费视频 | 国产成人久久精品一区二区三区 | 日日天天 | 男女国产视频 | 夜夜久久 | www.五月婷 | 亚洲人成人一区二区在线观看 | 午夜视频 | 伊人yinren22综合开心 | 四虎视频 | 一级毛片免费在线 | 在线激情网 | 日韩成人短视频 | 日日摸日日碰夜夜爽不卡dvd | www国产网站 | 精品亚洲成人 | 四虎成人免费电影 | 日韩成人不卡 | 国产高清美女一级a毛片久久 | 亚洲欧美在线一区二区 | 午夜av电影 | 精品视频一区二区 | 三级特黄特色视频 | 久久久久久网站 | 亚洲视频在线观看 | 国产偷国产偷精品高清尤物 | 日本精品久久久一区二区三区 | 国产免费一区二区三区 | 精品国产91亚洲一区二区三区www | 日本免费三片免费观看 | 天天视频成人 | 日韩成人不卡 | 精品乱码久久久 | 91电影在线| 成年人网站免费在线观看 | 91精品一区二区 | 亚洲综合区 | 欧美视频免费看 | 伊人网91 | 欧美一级精品片在线看 | 99re在线观看 | 91av官网| 久久综合社区 | 91麻豆产精品久久久久久 | 亚洲精品电影在线观看 | 久久久久91 | 国产精品91网站 | 精品久久久久久国产 | 国产一区视频在线 | 天天插天天操 | 国产精品爱久久久久久久 | 国产成人精品亚洲777人妖 | 青青草亚洲 | 9999久久久久 | 成人激情视频 | 91精品一区二区三区久久久久 | 久久久精品国产 | 亚洲最色视频 | 岛国a视频 | 国产精品亚洲成在人线 | 97久久精品人人做人人爽50路 | 国产精品成人国产乱一区 | 精品视频网 | 日韩一区精品视频 | 国产超碰人人爽人人做人人爱 | 国产精品揄拍一区二区久久国内亚洲精 | 国产一级二级毛片 | 亚洲精品在 | 精品国产91久久久久久久 | 久久久午夜爽爽一区二区三区三州 | 无码少妇一区二区三区 | 国产精品久久久久久亚洲调教 | 三级视频在线观看 | 91免费影视 | 色综久久 | 91原创视频在线观看 | 国产免费一区二区三区网站免费 | 精品国产区 | 可以在线观看的黄色 | 国产精品一区二区三区四区五区 | 99色在线视频 | 天堂资源网 | 在线播放亚洲 | 久草免费福利 | www久久久久久久 | 亚洲高清视频在线观看 | 国产成在线观看免费视频 | 久久伊人精品网 | 日韩成人在线一区 | 欧美福利在线 | 亚洲一区精品视频 | 日韩欧美成人影院 | 精品久久久久久久人人人人传媒 | 国产中文在线 | 国产精品亚洲一区二区三区在线 | 97国产资源 | 欧美白人做受xxxx视频 | 国产中文字幕在线 | 欧美日韩激情四射 | 日韩高清国产一区在线 | 国产在线观看免费 | 色玖玖综合 | 欧美一级做a爰片免费视频 亚洲精品一区在线观看 | 精品国产不卡一区二区三区 | 五月天婷婷激情视频 | 九九热在线视频免费观看 | 免费国产黄色大片 | 国产精品久久久久久久久 | 日韩视频在线免费观看 | 天堂久久久久 | 国产精品视频免费看 | 亚洲一区日韩 | 精品久久久久久久久久久院品网 | 精品欧美乱码久久久久久1区2区 | 刺激网 | 日韩有码电影 | 国产精品久久久久久久久 | 欧美日韩精品一区二区三区 | 亚洲天堂一区二区 | 精品无码久久久久久国产 | 日韩在线免费电影 | 国产精品久久久久永久免费观看 | 日韩欧美国产精品综合嫩v 国产高清av在线一区二区三区 | 日韩免费av网站 | 青青操天天干 | 久久久高清 | 一区二区免费在线观看 | 中文字幕在线视频观看 | 久久av一区二区三区亚洲 | 中文字幕在线看片 | 精品在线播放 | 国产一级片儿 | 麻豆产精国品免费入口 | 亚洲天堂中文字幕 | 成年人免费看 | 亚洲中午字幕在线观看 | 亚洲高清视频在线观看 | 中文字幕一区二区三区乱码在线 | 久久久久成人精品 | 午夜色播 | 国产美女黄色片 | av天天干 | 欧美午夜一区二区三区免费大片 | 日韩欧美~中文字幕 | 欧美肉体xxxx肉交高潮 | 久久se精品一区精品二区 | 日韩欧美在线观看视频 | 免费在线一区二区 | 成人午夜免费视频 | 草樱av| 中文字幕一区二区三区不卡 | 亚洲精品一区久久久久久 | 国产成人精品一区二区视频免费 | 日本中文字幕在线观看 | 日韩视频一 | www.色.com | 精品亚洲一区二区三区 | 夜夜av| 久久亚洲国产精品日日av夜夜 | 国产精品亚洲第一 | 成人免费视频观看视频 | 1区2区3区视频 | 成人国产一区 | 日韩中字在线观看 | 麻豆高清免费国产一区 | 在线免费中文字幕 | 国产在线精品一区二区三区 | 欧美日韩在线看 | 午夜精品一区二区三区免费视频 | 欧美久久精品 | 午夜性电影 | 黄视频在线播放 | 久久久91精品国产一区二区三区 | 99亚洲精品| 亚洲精品乱码久久久久久 | 国产99久久 | 精品久 | 亚洲国产成人av好男人在线观看 | 久久免费视频网 | 精品国产91乱码一区二区三区 | 日韩精品一区在线 | 日韩中文一区二区三区 | 国产一级免费视频 | 级毛片| 国产91对白叫床清晰播放 | 国产精品久久片 | 91视频日韩 | 国产做a爱片久久毛片 | 国产成人精品一区二区在线 | 国产三级精品在线 | 亚洲日本乱码在线观看 | 日韩一区免费在线观看 | 亚洲欧美自拍视频 | 国产精品一区一区 | 日韩电影中文字幕 | 欧美99 | 日本免费在线 | 99久久精品国产毛片 | 成人欧美一区二区三区白人 | 国产在线观看av | 国产精品美女久久久久久免费 | 久久伊99综合婷婷久久伊 | 最新国产精品 | 国产欧美精品一区二区 | 91丁香婷婷综合久久欧美 | 精品国产鲁一鲁一区二区在线观看 | 免费观看一级淫片 | 欧美一级全黄 | 久久99精品国产99久久6尤 | 精品一区二区三区四区五区 | 国产精品手机在线 | 国产探花在线精品一区二区 | 国产精品一区在线 |