1. 程式人生 > >JavaScript實現打地鼠小遊戲

JavaScript實現打地鼠小遊戲

##前言:
打地鼠小遊戲相信大家都玩過,地鼠會從一個個地洞中不經意的探出一個腦袋,我們要做的就是在地鼠出來的時候拖動滑鼠去打它,當打到地鼠時,會加分,打到不是地鼠時,會減分,是一個很考驗手速和眼力的小遊戲

正文

沒有找到地鼠素材,這兒用”灰太狼”來替代地鼠,”小灰灰”替代非地鼠的物體。接下來就是一步步去實現它。首先來做分析,地鼠是如何往上鑽出來的。在這兒,有這樣一張圖片,大家看了之後就一目瞭然了~
這裡寫圖片描述 在這兒先介紹一下CSS雪碧圖的概念:CSS雪碧 即CSS Sprite,也有人叫它CSS精靈,是一種CSS影象合併技術,該方法是將小圖示和背景影象合併到一張圖片上,然後利用css的背景定位來顯示需要顯示的圖片部分。因此,我們將這張圖片當做一個div的背景圖,我們只需要通過計時器,每個一段時間來改變這個div的backgroundPosizition,這樣就能實現灰太狼的上升和下降過程。

主要過程

1 . 頁面佈局 通過posizition:absolute,絕對定位,將建立好的div一個個放到坑裡面去,頁面背景以及佈局好之後如下圖如下圖所示:之後讓這些div消失,即display:none;

頁面背景

這裡寫圖片描述

2 . 如何使地鼠從不同的洞口出來,即讓哪一個div顯示的問題。這兒,我們通過
var hit_img=document.querySelectorAll(‘.hit_img’)來獲取所有包含地鼠的div,這樣hit_img為一個數組,這樣通過不斷產生一個隨機數,來改變陣列下標,hit_img[rand],將該div的display改為’block’,這樣,地鼠就顯示出來啦。

function
random_() {
//var img_class = ['hit_img', 'hit_img1','hit_img'],存放兩個樣式,一個是灰太狼,一個是小灰灰。 rand = parseInt(Math.random() * 9)//出來的位置 rand1 = parseInt(Math.random() * 3)//出來的是灰太狼還是小灰灰 }

3 . 實現上升或下降

//從上面那張雪碧圖可以看出,當移動到第6個小塊時,灰太狼上升到最高處,所以不能再上升了
function up() {
    var h_num = 6;//限定條件,不能超過6
    //上升定時器,每次使imgNum加1,因為每一個小塊的寬度為108個畫素,因此,每次讓backgroundPositionX減108個畫素,而backgroundPosizitionY不變。在這兒
upTimer = setInterval(function() { imgNum++; if(imgNum < h_num) { hit_img[rand].style.display = 'block'; hit_img[rand].className = img_class[rand1] hit_img[rand].style.backgroundPosition = -imgNum * 108 + 'px 0'; } else { clearInterval(upTimer);//清楚上升計時器 //灰太狼或小灰灰出洞口之後,停留一段時間在下去。 upTimeout= setTimeout(function() { down(); }, 500) } }, 50) }
//下降定時器,每次使imgNum減1,原理類似於上升方法。
function down() {
    downTimer_ = setInterval(function() {
        imgNum--;
        if(imgNum > -1) {
            hit_img[rand].style.backgroundPosition = -imgNum * 108 + 'px 0';
        } else {
            hah = 0;
            hit_img[rand].style.display = 'none';
            //在地鼠消失後,隔一段時間再出來新的一個地鼠
            downTimer = setTimeout(function() {
                imgNum = 0;
                random_();//重新執行隨機數方法,產生下一個地鼠
                clearTimer();//清楚之前的所有計時器
                progressTimer();//進度條計時器
                up();
            }, 100);
        }
    }, 50)
}
//清楚所有定時器
function clearTimer() {
    var timer = setInterval(function() {}, 1);
    for(var i = 0; i < timer; i++) {
        clearInterval(i);
    }
}

4 . 實現拍打地鼠,即新增onclick事件~

//為每個div新增點選事件
function click_() {
    for(var i = 0; i < hit_img.length; i++) {
        hit_img[i].onclick = function() {
            isHit = true;
            //儲存本次點選的圖片的class名,用來判斷點選的是灰太狼還是小灰灰
            classname = this.className;
            //進入判斷
            judge();
        }
    }
}
//判斷
var hah = 0;//防止重複擊打,加兩次判斷;當地鼠下降消失後,重置為0;
function judge() {
    hah++;
    if(hah == 1) {
        if(isHit) {
            {   //當點選之後,讓圖片索引變為9,出現被打動畫
                imgNum = 9;
                //如果被打物件為灰太狼,則分數加10
                if(classname == 'hit_img') {
                    score += 10;
                }
                //如果被打物件為小灰灰,分數減10
                if(classname == 'hit_img1') {
                    score -= 10;
                }
                scoreItem.innerHTML = score + '分'
                isHit = false;
                down();//點選之後開始往下
            }
        }
    }
}

5.設定開始遊戲按鈕

//開始遊戲
function start() {
    gameStart.style.display = 'none'
    up();
    click_();
    random_();
    progressTimer();
}

通過以上步驟,遊戲基本功能可以實現啦,剩下的就是新增開始,結束介面,以及計時功能。下面附上效果圖以及原始碼下載地址

開始介面

開始介面

遊戲介面

遊戲介面

結束介面

結束介面

原始碼下載地址,檔名為hit mouse