




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一步步教你使用JavaScript打造一個(gè)掃雷游戲目錄前言一、思路分析二、靜態(tài)頁(yè)面搭建2.1結(jié)構(gòu)層2.2樣式層三、js頁(yè)面交互3.1獲取元素及變量初始化3.210個(gè)雷的初始化設(shè)置3.3游戲開(kāi)始事件封裝3.4核心事件函數(shù)封裝3.5游戲開(kāi)始四、總結(jié)
前言
掃雷大家都玩過(guò),今天我們就是用JavaScript來(lái)打造掃雷游戲。廢話不多說(shuō),直接看下效果;
上圖是失敗后的結(jié)果。
一、思路分析
我們新建一個(gè)首頁(yè),在首頁(yè)放置一個(gè)點(diǎn)擊開(kāi)始游戲的按鈕,動(dòng)態(tài)生成100個(gè)小格,即100div;然后通過(guò)點(diǎn)擊div進(jìn)行掃雷操作,然后掃雷成功或者失敗顯示對(duì)應(yīng)的結(jié)果;
二、靜態(tài)頁(yè)面搭建
2.1結(jié)構(gòu)層
body
div
divid="btn"/div!--開(kāi)始游戲按鈕--
divid="box"/div!--存放小雷的div--
divid="flagBox"!--游戲結(jié)束才顯示的當(dāng)前雷數(shù)的div--
當(dāng)前剩余雷數(shù):
spanid="score"10/span
/div
divid="alertBox"!--Gameover彈出的框(窗口)--
divid="alertImg"
divid="close"/div
/div
/div
/div
/body
2.2樣式層
清楚默認(rèn)邊距
*{
margin:0;
padding:0;
頁(yè)面最大div
.wrapper{
width:100%;
height:1000px;
position:fixed;
top:0;
left:0;
background-image:url('img/bg.jpg');
background-size:100%100%;
效果如下:
開(kāi)始游戲按鈕
.btn{
height:140px;
width:170px;
position:absolute;
left:50px;
background-image:url('img/startGame.png');
background-size:100%100%;
cursor:pointer;
儲(chǔ)存雷的大div
.box{
height:500px;
width:500px;
transform:perspective(800px)rotateX(45deg);
margin:20pxauto;
border-top:1pxsolid#B25F27;
border-left:1pxsolid#B25F27;
box-shadow:5px5px5pxrgba(0,0,0,0.3);
display:none;/*先設(shè)置為none,開(kāi)始游戲后顯示block*/
每一個(gè)方塊的小div(一共100個(gè))
.block{
width:49px;
height:49px;
border-right:1pxsolid#B25F27;
border-bottom:1pxsolid#B25F27;
box-shadow:004px#333inset;
background-image:url('img/cao.jpg');
float:left;
當(dāng)前所剩雷數(shù)
.flagBox{
position:absolute;
top:50px;
left:50%;
width:200px;
height:50px;
margin-left:-100px;
color:#333;
font-size:20px;
font-weight:bolder;
display:none;/*先設(shè)置為none,開(kāi)始游戲后顯示block*/
GameOver
.alertBox{
display:none;/*先設(shè)置為none,開(kāi)始結(jié)束顯示block*/
position:absolute;
width:100%;
height:100%;
left:0;
top:0;
background-color:rgba(0,0,0,0.2);
}
游戲結(jié)束彈出窗口右上角的X
.close{
position:absolute;
right:0;
top:0;
height:40px;
width:40px;
background-image:url('img/closeBtn.png');
background-size:100%100%;
cursor:pointer;
???????}
三、js頁(yè)面交互
3.1獲取元素及變量初始化
varstartBtn=document.getElementById('btn');
varbox=document.getElementById('box');
varflagBox=document.getElementById('flagBox');
varalertBox=document.getElementById('alertBox');
varalertImg=document.getElementById('alertImg');
varcloseBtn=document.getElementById('close');
varscore=document.getElementById('score');
//先聲明變量,但是不初始化
varminesNum;
varmineOver;
varblock;
varmineMap=[];
varstartGameBool=true;
3.210個(gè)雷的初始化設(shè)置
functioninit(){
minesNum=10;
mineOver=10;
score.innerHTML=mineOver;
for(vari=0;ii++){//雙層循環(huán)10*10個(gè)div
for(varj=0;jj++){
varcon=document.createElement('div');
con.classList.add('block');//給創(chuàng)建出來(lái)的div添加類名block
con.setAttribute('id',i+'-'+j);
box.appendChild(con);
mineMap.push({mine:0});
block=document.getElementsByClassName('block');
while(minesNum){//創(chuàng)建一個(gè)10次的循環(huán),即設(shè)置10個(gè)雷
varmineIndex=Math.floor(Math.random()*100);
if(mineMap[mineIndex].mine===0){
mineMap[mineIndex].mine=1;
block[mineIndex].classList.add('isLei');//10個(gè)雷有小div的block類屬性,還有自己的屬性,isLei
minesNum--;
3.3游戲開(kāi)始事件封裝
functionbindEvent(){
startBtn.onclick=function(){//開(kāi)始按鈕點(diǎn)擊事件
if(startGameBool){
box.style.display='block';
flagBox.style.display='block';
init();
startGameBool=false;
box.oncontextmenu=function(){
returnfalse;
box.onmousedown=function(e){//小div鼠標(biāo)按下事件封裝
varevent=e.target;
if(e.which==1){//Netscape/Firefox/Opera中不支持window.event.keyCode,需要用event.which代替
leftClick(event);
}elseif(e.which==3){
rightClick(event);
closeBtn.onclick=function(){//游戲結(jié)束,彈出gameover窗口的關(guān)閉按鈕事件封裝
alertBox.style.display='none';
flagBox.style.display='none';
box.style.display='none';
box.innerHTML='';
startGameBool=true;
3.4核心事件函數(shù)封裝
leftClick沒(méi)有雷--顯示數(shù)字(代表以當(dāng)前小格為中心周?chē)?個(gè)格的雷數(shù))擴(kuò)散(當(dāng)前周?chē)藗€(gè)格沒(méi)有雷)有雷--gameOver
functionleftClick(dom){
if(dom.classList.contains('flag')){
return;
varisLei=document.getElementsByClassName('isLei');//獲得前面的10個(gè)雷的div
if(domdom.classList.contains('isLei')){//判斷是不是雷塊
for(vari=0;iisLei.length;i++){
isLei[i].classList.add('show');//顯示地雷背景圖
setTimeout(function(){
alertBox.style.display='block';
alertImg.style.backgroundImage='url("img/over.jpg")';//上面顯示雷,標(biāo)志游戲結(jié)束
},800)
}else{//否則繼續(xù)掃雷
varn=0;
varposArr=domdom.getAttribute('id').split('-');
varposX=posArr+posArr[0];
varposY=posArr+posArr[1];
domdom.classList.add('num');
for(vari=posX-1;i=posX+1;i++){
for(varj=posY-1;j=posY+1;j++){
vararoundBox=document.getElementById(i+'-'+j);
if(aroundBoxaroundBox.classList.contains('isLei')){
n++;
dom(dom.innerHTML=n);
if(n==0){
for(vari=posX-1;i=posX+1;i++){
for(varj=posY-1;j=posY+1;j++){
varnearBox=document.getElementById(i+'-'+j);
if(nearBoxnearBox.length!=0){
if(!nearBox.classList.contains('check')){
nearBox.classList.add('check');
leftClick(nearBox);
rightClick沒(méi)有標(biāo)記并且沒(méi)有數(shù)字--進(jìn)行標(biāo)記;
有標(biāo)記--取消標(biāo)記--標(biāo)記是否正確,10個(gè)都正確標(biāo)記,提示成功;
如果已經(jīng)出現(xiàn),則點(diǎn)擊無(wú)效果;
functionrightClick(dom){
if(dom.cla
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商業(yè)合同協(xié)議書(shū)
- 車(chē)輛貼膜合同協(xié)議書(shū)模板
- 貨物采購(gòu)簡(jiǎn)易合同協(xié)議書(shū)
- 扶梯拆除合同協(xié)議書(shū)
- 結(jié)婚協(xié)議合同協(xié)議書(shū)
- 學(xué)生禁毒教育心得體會(huì)模版
- 輔警刑法筆試題及答案
- 豬場(chǎng)出租合同協(xié)議書(shū)
- 完成合同協(xié)議書(shū)
- 合同約定協(xié)議書(shū)打印
- 居然之家合同DOC
- 大學(xué)生德育論文范文3000字
- 鋁鎂料倉(cāng)等施工方案精品
- 目前最準(zhǔn)確的通達(dá)信纏論分筆公式
- 《丑小鴨》教學(xué)設(shè)計(jì)
- 綠化種植施工合同
- 停車(chē)場(chǎng)收費(fèi)管理系統(tǒng)使用手冊(cè)
- 我的家鄉(xiāng)寧波
- 脫硫計(jì)算軟件
- 執(zhí)業(yè)醫(yī)師注冊(cè)健康體檢表
- 普通高等學(xué)校畢業(yè)生 畢業(yè)研究生就業(yè)協(xié)議書(shū)
評(píng)論
0/150
提交評(píng)論