1. 程式人生 > >JS練習小遊戲

JS練習小遊戲

JS練習小遊戲

對於剛入門JS的小白我來說,沒有系統的學習過JS,以前只是使用過Jquery,對原生的JS並不是特別的理解,最近,看了這方面的一些簡單的書籍,就做了這個小程式,來加深對JS的理解。小遊戲如下:

遊戲開始時,顯示12個影象的背面,用滑鼠點選其中任意一張,即可顯示影象的正面,如果點選了兩張,則顯示出兩張影象的正面。如果點選過的兩張影象是相同的影象,則將影象從介面中移除,如果不同,則將兩張影象重新顯示其背面。直到所有的影象都消除掉。

思路如下:

在一個div內部用12個img標籤來顯示12個影象,開始時,12個img都顯示相同的影象,而真實的影象則儲存在一個數組中。點選時,img標籤的id對應陣列的下標,即得到其正面的影象。如果打開了兩張影象時,則判斷兩個img標籤的id對應的陣列中的值是否相同,如果相同,則表示是兩張相同的影象。

一、HTML程式碼

<div id="bg">
  <div id="wrap">
  </div>
</div>

最外層的div,用於顯示整個介面的背景,內部id為wrap的div用於包裹12個img標籤,這裡並沒有寫12個img標籤,使用js程式碼來建立12個img標籤,然後將其新增到容器中。

二、CSS程式碼

<style>
        * {
            margin: 0;
            padding: 0;
        }
        #bg {
            background-image: url("images/bg.jpg");
            width: 100vw;
            height: 100vh;
        }

        #wrap {
            margin: 0 auto;
            width: 800px;
            height: 300px;
            text-align: center;
            padding: 20px;
        }
        #wrap>img {
            width: 124px;
            height: 140px;
            margin: 2px;
        }
    </style>

##三、JS程式碼

<script>
        var clickCount = 0;//記錄點選的次數
        var firstCard = 0;//記錄點選的第一張影象
        var secondCard = 0;//記錄點選的第二張影象
        var imgs = ["images/h1.png", "images/h2.png", "images/h3.png", "images/h4.png", "images/h5.png", "images/h6.png",
            "images/h1.png", "images/h2.png", "images/h3.png", "images/h4.png", "images/h5.png", "images/h6.png"];
        var cardBg = "images/h0.png";
        var img = new Array();//儲存12img節點
        // 取得最外層容器
        var box = document.getElementById("wrap");
        //打亂陣列中的順序
        function shuffle(arr) {
            for (var i = 0; i < imgs.length; i++) {
                var index = parseInt(Math.random() * 12);
                var tempImg = imgs[i];
                imgs[i] = imgs[index];
                imgs[index] = tempImg;
            }
            return arr;
        }
        //判斷遊戲是否結束
        function checkResult() {
            var boxChild = box.childElementCount;
            return boxChild;
        }
        //實現翻牌
        function changeCard(e) {
            var id = e.getAttribute("id");
            if (clickCount === 0) {
                firstCard = id;
                img[firstCard].setAttribute("src", imgs[firstCard]);
            }
            if (clickCount === 1) {
                secondCard = id;
                img[secondCard].setAttribute("src", imgs[secondCard]);
                setTimeout(function () {
                    if (imgs[firstCard] === imgs[secondCard]) {
                        img[firstCard].onclick = "";//移除單擊事件
                        img[secondCard].onclick = "";//移除單擊事件
                        //移除影象
                        box.removeChild(img[firstCard]);
                        box.removeChild(img[secondCard]);
                        if (checkResult() <= 0) {
                            alert("遊戲結束");
                        }
                    } else {
                        img[firstCard].setAttribute("src", cardBg);
                        img[secondCard].setAttribute("src", cardBg);
                    }
                    firstCard = 0;
                    secondCard = 0;
                    clickCount = 0;
                }, 500);
            }
            clickCount++;
        }
        // 建立12個影象元素
        for (var i = 0; i < imgs.length; i++) {
            img[i] = document.createElement("img");
            img[i].src = cardBg;
            img[i].setAttribute("id", i);
            img[i].onclick = function () {
                changeCard(this);
            }
            box.appendChild(img[i]);
        }
        shuffle(imgs);//打亂影象
    </script>

在寫的過程中,由於對JS不熟悉,因此,可能會有很多不規範的地