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

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

javascript實現掃雷簡易版

瀏覽:27日期:2023-06-18 09:33:32

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

使用截圖

javascript實現掃雷簡易版

說明

這個完成的建議版本,所以沒有插旗子,沒有計時,就是最基本的原理實現,熟練的大佬30min就能完成

代碼講解

初始數據

var MAPSIZE = 10; var BOMBNUM = 1; var BOMBPOSITION = {}; var SQUAERPOSITION = {}; var SQUARECHECK = {}; var end = false;

初始化地圖(CreateMap())

用BOMBPOSITION這個hash表記錄雷的位置,然后生成地圖長*地圖寬數量的div塊然后完成定位,然后用SQUAERPOSITION記錄這些div塊并且用SQUARECHECK記錄當前這些塊有沒有被點擊(記錄是否是未開啟塊)

function CreateMap() { //生成初始的地圖 //根據雷的數目生成一個隨機雷數目 Create_BOMB(); for (let i = 0; i < MAPSIZE; i++) { for (let j = 0; j < MAPSIZE; j++) { var divEle = document.createElement('div'); divEle.className = 'lattice'; divEle.style.top = 20 * i + 'px'; divEle.style.left = 20 * j + 'px'; divEle.onclick = function () { //這里點擊后進行判斷 if (end == false) { if (BOMBPOSITION[i + '_' + j] == 1) { //展示所有炸彈的位置 GAMEOVER(); } else { //進行一個遞歸的更改 Remove(i, j); } } } document.getElementById('container').appendChild(divEle); SQUAERPOSITION[i + '_' + j] = divEle; SQUARECHECK[i + '_' + j] = false; } } }

生成雷(Create_BOMB())

這里的生成就是完善BOMBPOSITION這個hash表

function Create_BOMB() { let bombnum = 0; while (bombnum < BOMBNUM) { let x = _.random(0, MAPSIZE - 1); let y = _.random(0, MAPSIZE - 1); if (BOMBPOSITION[x + '_' + y] == undefined) { BOMBPOSITION[x + '_' + y] = 1; bombnum++; } } }

每個div塊的點擊事件

游戲結束GAMEOVER()

如果點到了雷就展示所有雷的位置然后游戲結束

function GAMEOVER() { for (let index in BOMBPOSITION) { SQUAERPOSITION[index].innerText = '@' } end = true; }

處理點擊的塊(Remove())

這個處理是個遞歸過程,一個div會引起其他div的處理所有要先檢查下游戲是不是結束了,如果沒結束就遍歷周邊一圈的塊,也就是x - 1 -> x + 1 y - 1 -> y + 1,但是自身就不需要遍歷了,這里要注意,然后這些塊如果已經被處理過了也不用進行處理,遍歷完后如果有雷則在這個塊上記錄雷數目,如果沒有雷那么就將周邊塊中未遍歷的進行Remove()處理,這個過程是一個遞歸,也可以理解成深度優先級處理。

function Remove(x, y) { if (ISGAMEOVER()) { if (end == false) { alert('游戲結束'); GAMEOVER(); } return; } let Result_Detection = Bomb_Detection(x, y); if (Result_Detection[0].length == 1) { if (Result_Detection[0][0] == 0) { //單純變顏色 Change(x, y); } else { //更改里面的文字是雷的數目 Change(x, y); SQUAERPOSITION[x + '_' + y].innerText = Result_Detection[0][0]; } } else { //如果沒有雷自己先變化然后遍歷剩下的 Change(x, y); for (let i = 0; i < Result_Detection.length; i++) { //遍歷八個方向剩下的 Remove(Result_Detection[i][0], Result_Detection[i][1]); } //console.log(x + ' ' + y); //console.log(Result_Detection); } }

檢測游戲是否結束(ISGAMEOVER())

就是看一下還有多少塊沒被處理,如果正好是雷的數目那就游戲結束了

function ISGAMEOVER() { let UsedNum = 0; for (let index in SQUARECHECK) { if (SQUARECHECK[index] == true) { UsedNum++; } } console.log(UsedNum); if (UsedNum == MAPSIZE * MAPSIZE - BOMBNUM) return true; else return false; }

周邊遍歷(Bomb_Detection())

如果有雷就返回[[Bomb_num]],如果沒有雷但是周邊的都被遍歷過了就返回[[0]],如果沒有雷然后有未被遍歷過的元素則返回未遍歷數組queue[]

function Bomb_Detection(x, y) { let queue = []; let bombnum = 0; for (let i = x - 1; i <= x + 1; i++) { for (let j = y - 1; j <= y + 1; j++) { if ((i != x || j != y)&&Edge_Detection(i,j) == true) { if (BOMBPOSITION[i + '_' + j] == 1) { bombnum++; } else if (SQUARECHECK[i + '_' + j] == false) { queue.push([i, j]); } } } } if (bombnum > 0) { //如果周邊有雷 return [ [bombnum] ]; } else if (bombnum == 0 && queue.length == 0) { //如果周邊沒雷但是所有的都被遍歷過了 return [ [0] ]; } else { return queue; } }

邊界檢測(Edge_Detection())

在遍歷周邊塊的時候要注意,這個周邊塊需要是合理的

function Edge_Detection(x, y) { //只要在0,0 -> MAPSIZE,MAPSIZE就行 if (x >= 0 && y >= 0 && x < MAPSIZE && y < MAPSIZE) { return true } else { return false } }

處理被處理的塊(Change())

如果是周邊沒有雷那就是變成空白,如果有就寫上數字,如果是雷就里面加上@

function Change(x, y) { SQUAERPOSITION[x + '_' + y].className = 'lattice2'; SQUARECHECK[x + '_' + y] = true; SQUAERPOSITION[x + '_' + y].style.top = 20 * x + 'px'; SQUAERPOSITION[x + '_' + y].style.left = 20 * y + 'px'; }

整體代碼

<!DOCTYPE html><html><head> <title>掃雷</title> <meta charset='utf-8'> <style> .container { left: 200px; height: 200px; width: 200px; position: relative; } .lattice { height: 20px; width: 20px; top: 0px; left: 0px; border-style: solid; border-width: 1px; border-color: #ffffff; background-color: #5E5E5E; position: absolute; color: crimson; } .lattice2 { height: 20px; width: 20px; top: 0px; left: 0px; border-style: solid; border-width: 1px; border-color: #5E5E5E; background-color: #ffffff; position: absolute; color: black; } </style> <script type='text/javascript' src='http://cdn.bootcss.com/lodash.js/4.16.6/lodash.min.js'></script> <script> var MAPSIZE = 10; var BOMBNUM = 1; var BOMBPOSITION = {}; var SQUAERPOSITION = {}; var SQUARECHECK = {}; var end = false; function Init() { CreateMap(); } function CreateMap() { //生成初始的地圖 //根據雷的數目生成一個隨機雷數目 Create_BOMB(); for (let i = 0; i < MAPSIZE; i++) { for (let j = 0; j < MAPSIZE; j++) { var divEle = document.createElement('div'); divEle.className = 'lattice'; divEle.style.top = 20 * i + 'px'; divEle.style.left = 20 * j + 'px'; divEle.onclick = function () { //這里點擊后進行判斷 if (end == false) { if (BOMBPOSITION[i + '_' + j] == 1) { //展示所有炸彈的位置 GAMEOVER(); } else { //進行一個遞歸的更改 Remove(i, j); } } } document.getElementById('container').appendChild(divEle); SQUAERPOSITION[i + '_' + j] = divEle; SQUARECHECK[i + '_' + j] = false; } } } function Create_BOMB() { let bombnum = 0; while (bombnum < BOMBNUM) { let x = _.random(0, MAPSIZE - 1); let y = _.random(0, MAPSIZE - 1); if (BOMBPOSITION[x + '_' + y] == undefined) { BOMBPOSITION[x + '_' + y] = 1; bombnum++; } } } function Remove(x, y) { if (ISGAMEOVER()) { if (end == false) { alert('游戲結束'); GAMEOVER(); } return; } let Result_Detection = Bomb_Detection(x, y); if (Result_Detection[0].length == 1) { if (Result_Detection[0][0] == 0) { //單純變顏色 Change(x, y); } else { //更改里面的文字是雷的數目 Change(x, y); SQUAERPOSITION[x + '_' + y].innerText = Result_Detection[0][0]; } } else { //如果沒有雷自己先變化然后遍歷剩下的 Change(x, y); for (let i = 0; i < Result_Detection.length; i++) { //遍歷八個方向剩下的 Remove(Result_Detection[i][0], Result_Detection[i][1]); } //console.log(x + ' ' + y); //console.log(Result_Detection); } } function Change(x, y) { SQUAERPOSITION[x + '_' + y].className = 'lattice2'; SQUARECHECK[x + '_' + y] = true; SQUAERPOSITION[x + '_' + y].style.top = 20 * x + 'px'; SQUAERPOSITION[x + '_' + y].style.left = 20 * y + 'px'; } function GAMEOVER() { for (let index in BOMBPOSITION) { SQUAERPOSITION[index].innerText = '@' } end = true; } function ISGAMEOVER() { let UsedNum = 0; for (let index in SQUARECHECK) { if (SQUARECHECK[index] == true) { UsedNum++; } } console.log(UsedNum); if (UsedNum == MAPSIZE * MAPSIZE - BOMBNUM) return true; else return false; } function Bomb_Detection(x, y) { let queue = []; let bombnum = 0; for (let i = x - 1; i <= x + 1; i++) { for (let j = y - 1; j <= y + 1; j++) { if ((i != x || j != y)&&Edge_Detection(i,j) == true) { if (BOMBPOSITION[i + '_' + j] == 1) { bombnum++; } else if (SQUARECHECK[i + '_' + j] == false) { queue.push([i, j]); } } } } if (bombnum > 0) { //如果周邊有雷 return [ [bombnum] ]; } else if (bombnum == 0 && queue.length == 0) { //如果周邊沒雷但是所有的都被遍歷過了 return [ [0] ]; } else { return queue; } } function Edge_Detection(x, y) { //只要在0,0 -> MAPSIZE,MAPSIZE就行 if (x >= 0 && y >= 0 && x < MAPSIZE && y < MAPSIZE) { return true } else { return false } } </script></head><body onload='Init()'> <div id='container'> </div></body></html>

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

C++經典小游戲匯總

python經典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經典游戲 玩不停

java經典小游戲匯總

javascript經典小游戲匯總

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

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久九九精品| 久久精品免费一区二区三区 | 国产精品一级在线观看| 日韩午夜免费| 国产亚洲亚洲| 亚洲18在线| 国产精品sss在线观看av| 六月丁香综合在线视频| 日韩欧美午夜| 视频一区欧美精品| 91亚洲精品在看在线观看高清| 高潮久久久久久久久久久久久久| 亚洲午夜电影| 国产精品日韩久久久| 亚洲18在线| 激情视频网站在线播放色| 福利一区和二区| 亚洲一区网站| 精品欧美日韩精品| 另类激情亚洲| 亚洲欧洲美洲av| 亚洲精品系列| 99精品在线| 国产伦精品一区二区三区视频| 亚洲欧美日韩一区在线观看| 久久福利影视| 久久久人人人| 国产精品久久久久毛片大屁完整版| 中文字幕av亚洲精品一部二部| 国产精品99视频| 欧美日韩尤物久久| 日韩高清一级| 91精品国产成人观看| 国产九一精品| 日本欧洲一区二区| 亚洲深夜视频| 麻豆久久久久久| 亚洲图片久久| 国产亚洲亚洲| 亚洲一级高清| 亚洲天堂一区二区| 国产96在线亚洲| 国产精品蜜月aⅴ在线| 蜜臀av国产精品久久久久 | 免费在线观看一区二区三区| 97精品在线| 久久影院一区二区三区| 日本a口亚洲| 视频一区欧美精品| 亚洲一区不卡| 午夜日韩在线| 五月婷婷六月综合| 极品日韩av| 日本不卡视频一二三区| 日韩三区四区| 视频在线观看一区二区三区| 国产模特精品视频久久久久| 伊人久久婷婷| 亚洲视频综合| 婷婷亚洲五月| 亚洲中午字幕| 午夜性色一区二区三区免费视频| 麻豆极品一区二区三区| 国产女人18毛片水真多18精品| 欧美韩日一区| 天堂√中文最新版在线| 亚洲成人一区在线观看| 国产99亚洲| 免费欧美在线视频| 欧美日韩视频免费看| 国产精品xxx| 激情综合网址| 日韩精品一区二区三区中文| 日韩精品乱码av一区二区| 国产精品videosex极品| 国产精品原创| 国产精品嫩草99av在线| 欧美另类中文字幕| 99riav国产精品| 亚洲精品激情| 在线人成日本视频| 老色鬼久久亚洲一区二区| 97久久亚洲| 国产一区二区三区四区二区| jiujiure精品视频播放| 青草av.久久免费一区| 在线观看精品| 日韩一区二区三区高清在线观看| av中文字幕在线观看第一页| 亚洲18在线| 98精品视频| 欧美日韩中出| 亚洲欧美日韩国产一区二区| 精品一区二区三区免费看| 怡红院精品视频在线观看极品| а√在线中文在线新版| 亚洲综合小说| 香蕉成人av| 国产麻豆久久| 国产精品三p一区二区| 欧洲激情综合| 久久精品动漫| 欧美激情五月| 亚洲人成网77777色在线播放| 另类亚洲自拍| 精品国模一区二区三区| 日韩av三区| 西西人体一区二区| 亚洲婷婷免费| 1000部精品久久久久久久久| 日韩在线欧美| 国产中文字幕一区二区三区| 国产成人1区| 日韩高清二区| 在线精品一区| 丝袜美腿成人在线| 亚洲综合精品| 夜久久久久久| 日韩视频在线一区二区三区 | 日韩午夜精品| 蜜臀91精品国产高清在线观看| 丝袜脚交一区二区| 国产一区观看| 欧美日韩国产综合网| 欧美精品羞羞答答| 91久久久精品国产| 免费视频久久| 丝袜美腿一区二区三区| 亚洲字幕久久| 国产精品一区二区三区av| 久久精品av麻豆的观看方式| 国产一精品一av一免费爽爽| 国产亚洲久久| 精品色999| 不卡一区2区| 亚州精品视频| 国产一区二区三区不卡av| 亚洲国产日韩欧美在线| 偷拍欧美精品| 国产精品v亚洲精品v日韩精品| 国产v综合v| 国产精品女主播一区二区三区| 国产精品久久久久久av公交车| 国产精品字幕| 日本大胆欧美人术艺术动态| 欧美亚洲一区二区三区| 欧美二三四区| 综合一区二区三区| 欧美久久一区二区三区| 色在线视频观看| 中文字幕一区二区av| 国产精品久久久久av蜜臀| 亚洲精品福利| 国产成人精品福利| 视频一区二区不卡| 精品国产aⅴ| 亚洲免费成人av在线| 国产精品日本一区二区三区在线| 久久高清一区| 国产成人精品一区二区三区免费| 久久精品99久久久| 激情丁香综合| 精品美女视频 | 欧美精品自拍| 欧美国产先锋| 蜜臀av在线播放一区二区三区| 日韩一区二区免费看| 999精品色在线播放| 日韩中文字幕一区二区高清99| 樱桃成人精品视频在线播放| 国产毛片精品久久| 蜜桃视频一区二区| 欧美日韩在线观看视频小说| 久久丁香四色| 人人爱人人干婷婷丁香亚洲| 欧美日韩激情| 欧美13videosex性极品| 久久国产精品色av免费看| 国产精品密蕾丝视频下载| 国产亚洲一区| 久久夜色精品| 午夜久久影院| 激情综合网五月| 欧美亚洲国产精品久久| 国产精品www994| 中文字幕av一区二区三区四区| 欧美欧美黄在线二区| 麻豆成人在线观看| 国产麻豆一区二区三区精品视频| 福利一区和二区| 欧美激情综合| 欧美极品中文字幕| 久久的色偷偷| www.51av欧美视频| 精品成人免费一区二区在线播放| 蜜桃tv一区二区三区| 亚洲1区在线| 日韩和欧美的一区| 国产欧美日韩精品高清二区综合区 | 激情视频网站在线播放色 |