成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

js實現簡單掃雷

瀏覽:202日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美成人猛片aaaaaaa| 欧美成人aa大片| 欧美日韩精品一二三区| 一区二区三区视频在线看| 你懂的网址国产 欧美| 欧美一区二区播放| 久久丁香综合五月国产三级网站| 久久久久久亚洲精品不卡4k岛国| 亚洲人成人一区二区在线观看| 91亚洲午夜精品久久久久久| 日韩欧美第一区| 国产乱子伦视频一区二区三区| 色天天综合色天天久久| 亚洲高清视频中文字幕| 欧美日韩综合| 日本一区二区三区dvd视频在线| 99久久久久久99| 久久只精品国产| av中文字幕一区| 2024国产精品| 91在线观看高清| 久久精品亚洲乱码伦伦中文| 99精品黄色片免费大全| 久久久久99精品国产片| 94-欧美-setu| 久久蜜臀中文字幕| av电影在线观看不卡| 精品国产一区二区三区久久久蜜月| 粉嫩在线一区二区三区视频| 欧美放荡的少妇| 国产一区二区三区四| 欧美日韩一区二区三区四区五区| 欧美aaaaa成人免费观看视频| 一本一本久久a久久精品综合麻豆| 青青草成人在线观看| 欧美乱妇15p| 成人久久久精品乱码一区二区三区| 日韩精品专区在线影院重磅| 99精品国产91久久久久久| 国产三级欧美三级日产三级99 | 午夜精品久久久| 91国在线观看| 国产一区二区三区黄视频 | 亚洲在线观看免费视频| 久久蜜桃资源一区二区老牛| 久久精品国产99国产| 91精品中文字幕一区二区三区| 成人综合婷婷国产精品久久蜜臀| 精品成人一区二区三区| 色综合久久综合| 亚洲欧美日韩人成在线播放| 亚洲综合社区| 久久国产精品色| 精品奇米国产一区二区三区| 91年精品国产| 自拍偷拍国产精品| 亚洲精品中文字幕在线| 午夜成人免费视频| 在线播放91灌醉迷j高跟美女| 成人天堂资源www在线| 国产精品久久久久久一区二区三区| 国产欧美在线| 九一九一国产精品| 精品动漫一区二区三区在线观看| 欧美日韩理论| 亚洲v精品v日韩v欧美v专区| 欧美精品18+| 国产精品v欧美精品v日韩| 亚洲精品福利视频网站| 久久一区二区三区av| 国产一二精品视频| 精品成人私密视频| 99精品免费视频| 精品一区二区三区在线视频| 欧美精品一区二区三| 亚洲看片免费| 精品一区二区三区的国产在线播放| 久久久久久久久久久黄色| 国产三区二区一区久久| 六月丁香婷婷色狠狠久久| 久久蜜桃av一区二区天堂| 国产欧美精品| 国产福利不卡视频| 中文字幕欧美一| 欧美在线制服丝袜| 欧美日韩免费观看一区| 午夜免费欧美电影| ww久久中文字幕| 国产精品日韩精品欧美精品| 国产一区二区三区精品视频| 国产精品久久看| 欧美日韩一区二区在线观看| 亚洲五月婷婷| 美国十次综合导航| 亚洲国产精品99久久久久久久久| 久久综合一区二区三区| 成人美女在线观看| 亚洲高清免费一级二级三级| 久久婷婷成人综合色| 久久亚洲精选| 97久久人人超碰| 五月综合激情网| 久久综合精品国产一区二区三区 | 久久精品电影| 91在线视频网址| 日本亚洲三级在线| 国产精品三级视频| 欧美日韩国产三级| 一区二区三区免费看| 国产成+人+日韩+欧美+亚洲| 亚洲午夜精品一区二区三区他趣| 精品久久一区二区| 色欲综合视频天天天| 黄色精品网站| 国产91精品一区二区| 亚洲成av人片在线观看无码| 久久九九国产精品| 欧美图片一区二区三区| 欧美精品一区二区三区在线看午夜| 蜜臀av性久久久久蜜臀aⅴ| 欧美国产精品劲爆| 欧美精品在线观看一区二区| 亚洲深夜福利| 91亚洲永久精品| 国产自产高清不卡| 一区二区三区欧美久久| 精品国产乱码久久久久久久久| 久久久水蜜桃av免费网站| 午夜视频一区| 国产一区二区精品久久91| 一区二区三区四区亚洲| 久久免费美女视频| 69p69国产精品| 色哟哟亚洲精品| 亚洲精品在线视频观看| 99精品欧美一区| 国产成人精品一区二区三区四区| 视频一区在线播放| 亚洲欧美日韩国产综合在线| www国产成人| 4438x亚洲最大成人网| 久久九九国产| 99精品99久久久久久宅男| 欧美日韩精品伦理作品在线免费观看| 国产精品一区二区久激情瑜伽| 日韩电影在线免费观看| 亚洲综合色噜噜狠狠| 欧美极品美女视频| 日韩精品一区二区三区蜜臀| 欧美三区在线观看| 久色成人在线| 亚洲免费一区二区| 伊人久久久大香线蕉综合直播| 97久久久精品综合88久久| 丁香激情综合五月| 激情深爱一区二区| 日韩av成人高清| 亚洲一区二区视频在线观看| 亚洲桃色在线一区| 国产精品卡一卡二| 久久久久九九视频| 欧美成人一区二区三区片免费| 69堂国产成人免费视频| 欧美精品v日韩精品v韩国精品v| 欧美天堂一区二区三区| 色婷婷亚洲精品| 久久婷婷麻豆| 男女av一区三区二区色多| 国产精品免费在线| 国产欧美日韩| 欧美中文字幕| 性感少妇一区| 国产午夜久久| 久久高清免费观看| 久久久久综合| 91久久线看在观草草青青| 色婷婷激情综合| 色哟哟日韩精品| 欧美亚洲综合一区| 欧美日韩中文字幕一区二区| 欧美揉bbbbb揉bbbbb| 欧美日韩国产综合视频在线观看| 色菇凉天天综合网| 91国产成人在线| 色婷婷综合久久久中文字幕| 在线观看91视频| 欧美日韩高清在线播放| 欧美视频一区二区在线观看| 在线综合+亚洲+欧美中文字幕| 欧美日韩成人一区| 欧美一区二区三区在线观看| 日韩一区二区三区电影| 精品久久99ma| 国产亚洲婷婷免费| 国产精品久久久久影院色老大| 最新热久久免费视频| 亚洲国产日韩精品| 美女视频黄频大全不卡视频在线播放| 精品一区二区av| 国产99精品国产|