日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

js實現簡單掃雷

瀏覽:273日期:2024-04-25 10:29:00

本文實例為大家分享了js實現簡單掃雷的具體代碼,供大家參考,具體內容如下

實現效果:

js實現簡單掃雷

總體思想:這個掃雷難點主要就兩點:第一點就是雷的隨機分布,我這里使用js動態生成了10X10的table表格,然后設定生成20個雷,然后在生成每個格子代表的數字,雷我們用9表示,因為0-8要被其他非雷格子使用,然后我們只要一格是雷區那么周圍的格子都加一,這樣我們的雷區就生成好了,然后玩法的編寫主要難點就是在當點擊數字為0時的格子時要把它周圍的0區也顯示出來,因此這里我們使用遞歸來實現

1、界面的生成

//生成界面 function init() { document.write('<table border=’1px’ rules=’all’ cellpadding=’10px ’> ') for (var i = 1; i < 11; i++) { document.write('<tr>'); for (var j = 1; j < 11; j++) { document.write('<td class=’game’>' + arr3[i][j] + '</td>'); } document.write('</tr>'); } document.write('</table>') var t = document.getElementsByTagName(’table’)[0]; var td = document.getElementsByTagName(’td’); for (var i = 0; i < td.length; i++) { td[i].style.background=’#ffffff’; td[i].style.opacity = ’0’; td[i].style.transition = ’all 4s’ } //樣式添加 t.style.margin = ’0px auto’; document.close() }

2、我們表格是10X10的,但是后面的操作要計算每個格子的值,因此當格子在邊界的話數組就會越界,所以我們這邊定義二維數組12X12來表示10X10的表格中的數值,雷我們隨機生成20個

//初始化數組 function initarr() { var arr = new Array(12); for (var i = 0; i < 12; i++) { arr[i] = new Array(12); for (var j = 0; j < 12; j++) { arr[i][j] = 0; } } return arr; } //隨機生成雷 function rangemine() { var arr = initarr(); var num = 0; for (var index = 0; index < 20; index++) { while (true) { var row = Math.floor(Math.random() * 10) + 1; var col = Math.floor(Math.random() * 10) + 1; if (arr[row][col] != 9) { arr[row][col] = 9; break; } } } return arr; }

3、生成每塊對應的數值我們實現方法為遍歷數組,如果為雷,則雷周圍的八塊的數值+1

//生成每塊所對應的數字 function num() { var arr2 = rangemine(); for (var i = 1; i < 11; i++) { for (var j = 1; j < 11; j++) { if (arr2[i][j] >= 9) { arr2[i][j + 1] += 1; arr2[i][j - 1] += 1; arr2[i - 1][j] += 1; arr2[i + 1][j] += 1; arr2[i - 1][j + 1] += 1; arr2[i - 1][j - 1] += 1; arr2[i + 1][j - 1] += 1; arr2[i + 1][j + 1] += 1; } } } for (var i = 1; i < 11; i++) { for (var j = 1; j < 11; j++) { if (arr2[i][j] > 8) { arr2[i][j] = 9; } } } return arr2; }

4、添加監聽器,我這里添加了touch事件,touch事件只用于移動端,因此pc端要運行要模擬移動端

//添加監聽器 function gostart() { var t = document.getElementsByTagName(’td’); for (var i = 0; i < t.length; i++) { { t[i].addEventListener(’touchstart’, start); t[i].addEventListener(’touchend’, end); } } } gostart(); //開始函數 function start(e) { console.log((e.touches[0])); var a = e.touches[0]; } //結尾函數 function end(e) { var a = e.touches[0]; mix(e.srcElement.parentElement.rowIndex + 1, e.srcElement.cellIndex + 1, e.srcElement.parentElement); /* startgame(e.srcElement.parentElement.rowIndex,e.srcElement.cellIndex,e.srcElement); */ }

5、遞歸實現掃雷,對周圍沒有雷的格子進行遞歸將其周圍也是0的格子展示出來

//遞歸消除點到0塊時顯露出其他的塊 function mix(x, y, e) { var flag=0; if (x > 0 && x < 11 && y > 0 && y < 11 && arr3[x][y] == 0) { //防止無限遞歸 e.parentElement.rows[x - 1].cells[y - 1].style.opacity = 1; e.parentElement.rows[x - 1].cells[y - 1].innerHTML=''; e.parentElement.rows[x - 1].cells[y - 1].style.background = ’#a4eaff’; arr3[x][y] = 10; mix(x, y + 1, e); mix(x, y - 1, e); mix(x + 1, y, e); mix(x - 1, y, e); mix(x + 1, y + 1, e); mix(x - 1, y + 1, e); mix(x + 1, y - 1, e); mix(x - 1, y - 1, e); } else if (x > 0 && x < 11 && y > 0 && y < 11 && arr3[x][y] > 0 && arr3[x][y] < 9) { //顏色變紅且透明度變為1 arr3[x][y]=-1; e.parentElement.rows[x - 1].cells[y - 1].style.opacity = 1; e.parentElement.rows[x - 1].cells[y - 1].style.backgroundColor = ’#a4eaff’; //判斷是否結束 for(var i=1;i<arr3.length-1;i++){ for(var j=1;j<arr3[i].length-1;j++){ if(arr3[i][j]!=-1||arr3[i][j]!=9){ flag=1; break; } } } if(flag==0){ alert(’成功’); } return; } else if (x > 0 && x < 11 && y > 0 && y < 11 && arr3[x][y] == 9) { alert(’你踩到地雷啦!!!’); arr3 = num(); //移除原來的表格 var s = document.getElementsByTagName(’table’)[0]; s.parentNode.removeChild(s); init(); gostart(); } }

6、全部js代碼:

function initarr() { var arr = new Array(12); for (var i = 0; i < 12; i++) { arr[i] = new Array(12); for (var j = 0; j < 12; j++) { arr[i][j] = 0; } } return arr; } //隨機生成雷 function rangemine() { var arr = initarr(); var num = 0; for (var index = 0; index < 20; index++) { while (true) { var row = Math.floor(Math.random() * 10) + 1; var col = Math.floor(Math.random() * 10) + 1; if (arr[row][col] != 9) { arr[row][col] = 9; break; } } } return arr; } //生成每塊所對應的數字 function num() { var arr2 = rangemine(); for (var i = 1; i < 11; i++) { for (var j = 1; j < 11; j++) { if (arr2[i][j] >= 9) { arr2[i][j + 1] += 1; arr2[i][j - 1] += 1; arr2[i - 1][j] += 1; arr2[i + 1][j] += 1; arr2[i - 1][j + 1] += 1; arr2[i - 1][j - 1] += 1; arr2[i + 1][j - 1] += 1; arr2[i + 1][j + 1] += 1; } } } for (var i = 1; i < 11; i++) { for (var j = 1; j < 11; j++) { if (arr2[i][j] > 8) { arr2[i][j] = 9; } } } return arr2; } var arr3 = num() //生成界面 function init() { document.write('<table border=’1px’ rules=’all’ cellpadding=’10px ’> ') for (var i = 1; i < 11; i++) { document.write('<tr>'); for (var j = 1; j < 11; j++) { document.write('<td class=’game’>' + arr3[i][j] + '</td>'); } document.write('</tr>'); } document.write('</table>') var t = document.getElementsByTagName(’table’)[0]; var td = document.getElementsByTagName(’td’); for (var i = 0; i < td.length; i++) { td[i].style.background=’#ffffff’; td[i].style.opacity = ’0’; td[i].style.transition = ’all 4s’ } //樣式添加 t.style.margin = ’0px auto’; document.close() } init(); //添加監聽器 function gostart() { var t = document.getElementsByTagName(’td’); for (var i = 0; i < t.length; i++) { { t[i].addEventListener(’touchstart’, start); t[i].addEventListener(’touchend’, end); } } } gostart(); //開始函數 function start(e) { console.log((e.touches[0])); var a = e.touches[0]; } //結尾函數 function end(e) { var a = e.touches[0]; mix(e.srcElement.parentElement.rowIndex + 1, e.srcElement.cellIndex + 1, e.srcElement.parentElement); /* startgame(e.srcElement.parentElement.rowIndex,e.srcElement.cellIndex,e.srcElement); */ } //遞歸消除點到0塊時顯露出其他的塊 function mix(x, y, e) { var flag=0; if (x > 0 && x < 11 && y > 0 && y < 11 && arr3[x][y] == 0) { //防止無限遞歸 e.parentElement.rows[x - 1].cells[y - 1].style.opacity = 1; e.parentElement.rows[x - 1].cells[y - 1].innerHTML=''; e.parentElement.rows[x - 1].cells[y - 1].style.background = ’#a4eaff’; arr3[x][y] = 10; mix(x, y + 1, e); mix(x, y - 1, e); mix(x + 1, y, e); mix(x - 1, y, e); mix(x + 1, y + 1, e); mix(x - 1, y + 1, e); mix(x + 1, y - 1, e); mix(x - 1, y - 1, e); } else if (x > 0 && x < 11 && y > 0 && y < 11 && arr3[x][y] > 0 && arr3[x][y] < 9) { //顏色變紅且透明度變為1 arr3[x][y]=-1; e.parentElement.rows[x - 1].cells[y - 1].style.opacity = 1; e.parentElement.rows[x - 1].cells[y - 1].style.backgroundColor = ’#a4eaff’; //判斷是否結束 for(var i=1;i<arr3.length-1;i++){ for(var j=1;j<arr3[i].length-1;j++){ if(arr3[i][j]!=-1||arr3[i][j]!=9){ flag=1; break; } } } if(flag==0){ alert(’成功’); } return; } else if (x > 0 && x < 11 && y > 0 && y < 11 && arr3[x][y] == 9) { alert(’你踩到地雷啦!!!’); arr3 = num(); //移除原來的表格 var s = document.getElementsByTagName(’table’)[0]; s.parentNode.removeChild(s); init(); gostart(); } }

7、總結

這次的掃雷最大的缺點就是不能保證第一次不點到雷,還有就是是否還沒有進行測試。。因為我也沒有玩過一整局可能會有些許小bug

更多有趣的經典小游戲實現專題,分享給大家:

C++經典小游戲匯總

python經典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經典游戲 玩不停

java經典小游戲匯總

javascript經典小游戲匯總

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品美女在线观看直播| 蘑菇福利视频一区播放| 精品1区2区3区4区| 欧美va天堂| 欧美福利在线| 亚洲一区亚洲| 亚洲免费资源| 国产精品香蕉| 国产成人精品一区二区免费看京 | 欧美a级一区二区| 亚洲精品韩国| 国产精品亚洲欧美日韩一区在线| 久久久9色精品国产一区二区三区| 久久三级毛片| 国产日韩在线观看视频| 国产极品嫩模在线观看91精品| 精品国产一区二区三区性色av| 欧美日韩1区| 欧美一区二区三区高清视频| 国产在视频一区二区三区吞精| 麻豆91精品91久久久的内涵| 日韩欧美一区二区三区在线观看 | 久久午夜精品一区二区| 激情欧美亚洲| 欧美日韩亚洲一区三区| 99免费精品| 欧美自拍一区| 精品三级久久| 日韩黄色av| 久久久久99| 久久国产生活片100| 欧美+日本+国产+在线a∨观看| 国产欧美日韩在线一区二区 | 丝瓜av网站精品一区二区| 日韩欧美美女在线观看| 欧美1区二区| 亚洲一区二区免费看| 水蜜桃久久夜色精品一区| 九一成人免费视频| 国产成人a视频高清在线观看| 91精品国产调教在线观看| 人人爱人人干婷婷丁香亚洲| 欧美日一区二区| 另类小说一区二区三区| 亚洲精选av| 91久久久久| 精品捆绑调教一区二区三区| 国产精品免费大片| 日韩欧美久久| 91久久午夜| 久久激情婷婷| 精品久久久亚洲| 国产精品地址| 国产日韩一区二区三免费高清| 免费人成精品欧美精品| 亚洲成人免费| 欧美成人综合| 国产一区二区三区自拍| 日韩中文字幕高清在线观看| 欧美a级一区二区| 久久wwww| 国产精品久久久久久av公交车 | 久久国产麻豆精品| 免费日韩一区二区| 2023国产精品久久久精品双| 欧美高清不卡| 国产精品日韩欧美一区| 亚洲韩日在线| 欧美特黄视频| 免费精品视频| 日韩国产在线观看一区| 奇米亚洲欧美| 国产精品网站在线看| 国产精品久久| 精品视频亚洲| 在线视频观看日韩| 婷婷综合在线| 久久国产亚洲| 亚洲综合电影一区二区三区| 免费美女久久99| 国产欧美久久一区二区三区| 欧美精品aa| 五月激情久久| 婷婷五月色综合香五月| 国产精品观看| 免费av一区二区三区四区| 日韩精品一二三| 久久亚洲道色| 在线亚洲免费| 国产精品日本一区二区三区在线| 岛国av免费在线观看| 精品91久久久久| 色综合视频一区二区三区日韩 | 狂野欧美性猛交xxxx| 在线手机中文字幕| 视频一区在线播放| 国产精品观看| 免费日韩视频| 欧美男人天堂| 91精品日本| 丝瓜av网站精品一区二区| 免播放器亚洲| 亚洲精品福利| 激情欧美亚洲| 日韩av在线播放网址| 亚洲精品在线a| 电影天堂国产精品| 日韩激情av在线| 欧美日韩国产综合网| 欧美精品91| 日韩一区二区三区在线看| 婷婷激情一区| 国产一区一一区高清不卡| 日韩精品久久理论片| 婷婷综合五月| 91精品亚洲| 国产一区二区精品久| 久久av免费| 欧美另类中文字幕| 免费人成网站在线观看欧美高清| 播放一区二区| 精品日韩在线| 欧美精品91| 国产精品a久久久久| 亚洲精品在线国产| 亚洲一区二区免费在线观看| 91超碰国产精品| 不卡在线一区| 亚洲中字黄色| 综合色一区二区| 日韩综合小视频| 亚洲另类av| 88久久精品| 国产精品久久乐| 精品一区二区三区在线观看视频| 欧美日一区二区三区在线观看国产免| 久久亚洲不卡| 亚洲免费影院| 婷婷综合成人| 国产精品久久久久9999高清| 国产欧美日韩视频在线 | 成人台湾亚洲精品一区二区| 国产91欧美| 久久国产影院| 亚洲日本在线观看视频| 国产福利一区二区三区在线播放| 你懂的亚洲视频| 日韩欧美自拍| 丝袜美腿一区二区三区| 欧美日韩亚洲一区三区| 国产精品极品在线观看| 亚洲精品88| 亚洲综合中文| 国产999精品在线观看| 9色国产精品| 精品国产aⅴ| 91精品国产成人观看| 亚洲黄页一区| 日本午夜精品久久久久| 日本99精品| 欧美成人基地| 国产午夜久久av| 欧美91视频| 欧美激情视频一区二区三区在线播放| 亚洲三级欧美| 男人的天堂久久精品| 免费一级欧美片在线观看网站| 宅男在线一区| 水蜜桃精品av一区二区| 婷婷亚洲成人| 亚洲精品小说| 国产高潮在线| 国产香蕉精品| 亚洲日本欧美| 99视频精品免费观看| 91av亚洲| 欧美精品不卡| 国产亚洲精品美女久久久久久久久久| 欧美精品羞羞答答| 丁香六月综合| 国产精品久久久久9999高清| 免费在线欧美视频| 亚洲网站视频| 精品中文在线| 国产精品一区免费在线| 蜜桃传媒麻豆第一区在线观看| av资源亚洲| 日韩在线精品| 日韩一区电影| 久久久精品久久久久久96| 国产成人黄色| 伊人久久视频| 国产盗摄——sm在线视频| 久久精品国产99国产| 国产午夜久久av| 婷婷成人av| 日韩成人午夜精品| 日韩av一级片| 久久国产精品免费精品3p | 日产欧产美韩系列久久99|