如何在存储卡游戏中使游戏结束功能?

时间:2019-04-27 10:01:05

标签: javascript

我需要执行功能,此功能用于检查所有纸牌是否匹配,并且我是否到游戏结束。

我对匹配的牌进行隐藏类训练,并进行条件检查,如果所有牌都包​​括该类,则表示我到了最后,如果不是这样,则表示我可以继续玩。 条件无法正常运行且始终处于活动状态的问题

enter code here

var images = ["fas fa-american-sign-language-interpreting" , "fas fa-american-sign-language-interpreting" , "fas fa-cut" ,"fas fa-cut", "fas fa-bicycle" , "fas fa-bicycle" ,"fas fa-asterisk","fas fa-asterisk","fas fa-atom","fas fa-atom","fas fa-car-crash","fas fa-car-crash", "fas fa-chess", "fas fa-chess", "fas fa-drum" , "fas fa-drum"];

var image_card=images.length-3;
var image_start=0;
var oppened_card=[];
var matched_card=[];
var Showen_card=[];
var moves=0;
var unmatch_element = [];

Shuffle(images);

const game_structure = document.getElementById('game_structure');

const fragment = document.createDocumentFragment();

for (let i=0 ; i<images.length ; i++){
    var card= document.createElement("section");
    var front = document.createElement("div");
    var back = document.createElement("div");
    front.classList.add("front");
    back.classList.add("back");
    card.appendChild(front);
    card.appendChild(back);
    back.innerHTML=`<i class="${images[i]}"></i>`;
    fragment.appendChild(card);
}
game_structure.appendChild(fragment);
game_structure.addEventListener('click' , element_Listener);

function Shuffle(array){
    var i= array.length , tempValue , randomindex ;
    while (--i >0){
        randomindex = Math.floor(Math.random() * (i+1));
        tempValue = array[randomindex];
        array[randomindex] = array[i] ;
        array[i] = tempValue ;
    }
    return array;
}
function element_Listener(event){
    if (event.target.nodeName === 'SECTION') {
        startTimer();
        console.log(event.target.childNodes);
        if (oppened_card.length<2){
            flip_Card(event);
        }
    }
}

function flip_Card(event){
        event.target.childNodes[0].classList.add('front_ro');
        event.target.childNodes[1].classList.add('back_ro' , "open");
    if(oppened_card.length==0){
        oppened_card.push(event.target.childNodes[1].innerHTML);
        matched_card.push(event.target);
        console.log(matched_card[0]);  
    }
    else if(oppened_card.length==1){
        oppened_card.push(event.target.childNodes[1].innerHTML);
        matched_card.push(event.target);
        moveCounter(); 
        if (oppened_card[0]==oppened_card[1]){
            match();

**// here i invoke the function**


            var finished_game = game_over();
            console.log(finished_game);
            oppened_card=[];
            }
            else{                    
                // unmatch();
            } 
        }
    }

function moveCounter(){
    moves++;
    document.getElementById("steps").innerHTML = moves ;
}

function match(){

    var allCards = document.getElementsByClassName("flip");
        matched_card[0].classList.add('cardAnimate');
        console.log(matched_card[0].childNodes[1]);
        matched_card[1].classList.add('cardAnimate');

    setTimeout(function(){
        matched_card[0].classList.add('hidden');
        matched_card[1].classList.add('hidden');
    },1000);
    oppened_card=[];  
}
let timerRunning = false;
    var minutesLabel = document.getElementById("minutes");
    var secondsLabel = document.getElementById("seconds");
    var gameTime;
function startTimer(){
    if(!timerRunning){
        timerRunning = true;

        var totalSeconds = 0;
        gameTime=setInterval(setTime, 1000);
    }

    function setTime() {
    ++totalSeconds;
    secondsLabel.innerHTML = pad(totalSeconds % 60);
    minutesLabel.innerHTML = pad(parseInt(totalSeconds / 60));
    }

    function pad(val) {
        var valString = val + "";
        if (valString.length < 2) {
         return "0" + valString;
        } else {
        return valString;
        }
    }
}

function stopTimer(){
    if(timerRunning){
        timerRunning = false; 
        clearInterval(gameTime);
    }
}


**// here is the beginning of my function**


var checked_classes =[];
function game_over(){
    var hidden_cards = document.getElementsByTagName('section');
    for (let hidden_card of hidden_cards){

        console.log(hidden_card.classList.contains("hidden"));
       let checked_class = hidden_card.classList.contains("hidden");
       checked_classes.push(checked_class);
    }
       if (checked_classes.includes('false') == true){

            return false;
       }
        else {
            return true;
        } 
}

我希望当游戏中有不匹配的牌时会返回false,但始终会返回true。

1 个答案:

答案 0 :(得分:0)

您正在将布尔值推入checked_classes数组,但要检查它是否包含字符串。这将导致contain方法始终返回false。尝试搜索布尔值。

if (checked_classes.includes(false)){

            return false;
       }
        else {
            return true;
        } 
}