




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第一步步教你使用JavaScript打造一個掃雷游戲目錄前言一、思路分析二、靜態(tài)頁面搭建2.1結構層2.2樣式層三、js頁面交互3.1獲取元素及變量初始化3.210個雷的初始化設置3.3游戲開始事件封裝3.4核心事件函數(shù)封裝3.5游戲開始四、總結
前言
掃雷大家都玩過,今天我們就是用JavaScript來打造掃雷游戲。廢話不多說,直接看下效果;
上圖是失敗后的結果。
一、思路分析
我們新建一個首頁,在首頁放置一個點擊開始游戲的按鈕,動態(tài)生成100個小格,即100div;然后通過點擊div進行掃雷操作,然后掃雷成功或者失敗顯示對應的結果;
二、靜態(tài)頁面搭建
2.1結構層
body
div
divid="btn"/div!--開始游戲按鈕--
divid="box"/div!--存放小雷的div--
divid="flagBox"!--游戲結束才顯示的當前雷數(shù)的div--
當前剩余雷數(shù):
spanid="score"10/span
/div
divid="alertBox"!--Gameover彈出的框(窗口)--
divid="alertImg"
divid="close"/div
/div
/div
/div
/body
2.2樣式層
清楚默認邊距
*{
margin:0;
padding:0;
頁面最大div
.wrapper{
width:100%;
height:1000px;
position:fixed;
top:0;
left:0;
background-image:url('img/bg.jpg');
background-size:100%100%;
效果如下:
開始游戲按鈕
.btn{
height:140px;
width:170px;
position:absolute;
left:50px;
background-image:url('img/startGame.png');
background-size:100%100%;
cursor:pointer;
儲存雷的大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;/*先設置為none,開始游戲后顯示block*/
每一個方塊的小div(一共100個)
.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;
當前所剩雷數(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;/*先設置為none,開始游戲后顯示block*/
GameOver
.alertBox{
display:none;/*先設置為none,開始結束顯示block*/
position:absolute;
width:100%;
height:100%;
left:0;
top:0;
background-color:rgba(0,0,0,0.2);
}
游戲結束彈出窗口右上角的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頁面交互
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個雷的初始化設置
functioninit(){
minesNum=10;
mineOver=10;
score.innerHTML=mineOver;
for(vari=0;ii++){//雙層循環(huán)10*10個div
for(varj=0;jj++){
varcon=document.createElement('div');
con.classList.add('block');//給創(chuàng)建出來的div添加類名block
con.setAttribute('id',i+'-'+j);
box.appendChild(con);
mineMap.push({mine:0});
block=document.getElementsByClassName('block');
while(minesNum){//創(chuàng)建一個10次的循環(huán),即設置10個雷
varmineIndex=Math.floor(Math.random()*100);
if(mineMap[mineIndex].mine===0){
mineMap[mineIndex].mine=1;
block[mineIndex].classList.add('isLei');//10個雷有小div的block類屬性,還有自己的屬性,isLei
minesNum--;
3.3游戲開始事件封裝
functionbindEvent(){
startBtn.onclick=function(){//開始按鈕點擊事件
if(startGameBool){
box.style.display='block';
flagBox.style.display='block';
init();
startGameBool=false;
box.oncontextmenu=function(){
returnfalse;
box.onmousedown=function(e){//小div鼠標按下事件封裝
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(){//游戲結束,彈出gameover窗口的關閉按鈕事件封裝
alertBox.style.display='none';
flagBox.style.display='none';
box.style.display='none';
box.innerHTML='';
startGameBool=true;
3.4核心事件函數(shù)封裝
leftClick沒有雷--顯示數(shù)字(代表以當前小格為中心周圍8個格的雷數(shù))擴散(當前周圍八個格沒有雷)有雷--gameOver
functionleftClick(dom){
if(dom.classList.contains('flag')){
return;
varisLei=document.getElementsByClassName('isLei');//獲得前面的10個雷的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")';//上面顯示雷,標志游戲結束
},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沒有標記并且沒有數(shù)字--進行標記;
有標記--取消標記--標記是否正確,10個都正確標記,提示成功;
如果已經出現(xiàn),則點擊無效果;
functionrightClick(dom){
if(dom.cla
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 伐木采伐勞務合同范例
- 幼兒園食品安全風險隱患排查的工作總結模版
- 個人律師顧問合同標準文本
- 鄉(xiāng)村魚塘買賣合同范例
- 新質生產力和新生產力
- 加權平均數(shù)教學設計
- 2024年醇酸磁漆項目資金申請報告代可行性研究報告
- 高一政治上教學工作總結模版
- 醫(yī)療教育的革新精準醫(yī)療與基因編輯技術的結合點
- 買房定金合同范例6
- 【高考真題】2022年新高考浙江語文高考真題試卷(Word版含答案)
- 天地學習法(1小時通讀一本書)
- 紡織企業(yè)安全風險辨識建議清單
- 居然之家合同DOC
- 鋁鎂料倉等施工方案精品
- 目前最準確的通達信纏論分筆公式
- 《丑小鴨》教學設計
- 綠化種植施工合同
- 停車場收費管理系統(tǒng)使用手冊
- 脫硫計算軟件
- 執(zhí)業(yè)醫(yī)師注冊健康體檢表
評論
0/150
提交評論