0

我正在制作一个使用十六张卡片的游戏(八对每张两张匹配的卡片,因此有八个相应的 CSS 类)。我认为如果我可以整合我的代码,它会更容易维护和更清洁。我想我可以使用数组来做到这一点,但我不太确定我会如何做到这一点。我从顶部开始做(我做了一个数组变量 cardArray 并开始做一个 for 循环,但把它注释掉了)。这是我的所有代码:

        $(document).ready(function(){

        var counter = 0;
        var cardArray = ['yinyang', 'heart', 'star', 'smiley', 'peace', 'crescent', 'target', 'swirl'];

        /*for(var i = 0; i < cardArray.length; i++){
        }*/

        $('.click').click( function() {
            $(this).toggleClass('flip');
            counter++;
            console.log(counter);

            // if two cards have been flipped:
            if (counter == 2) {

            // the following code checks to see if any matching pairs have been selected:

                if($("#yinyang-01").hasClass("flip") && $("#yinyang-02").hasClass("flip") && $("#yinyang-02").hasClass("click") && $("#yinyang-01").hasClass("click")){
                    console.log("you got both yin yangs!");
                    $("#yinyang-01").removeClass('click');
                    $("#yinyang-02").removeClass('click');

                    counter = 0;
                    console.log(counter);
                }

                else if($("#heart-01").hasClass("flip") && $("#heart-02").hasClass("flip") && $("#heart-01").hasClass("click") && $("#heart-02").hasClass("click")){
                    console.log("you got both hearts!");
                    $("#heart-01").removeClass('click');
                    $("#heart-02").removeClass('click');
                    counter = 0;
                    console.log(counter);
                }

                else if($("#star-01").hasClass("flip") && $("#star-02").hasClass("flip") && $("#star-01").hasClass("click") && $("#star-02").hasClass("click")){
                    console.log("you got both stars!");
                    $("#star-01").removeClass('click');
                    $("#star-02").removeClass('click');
                    counter = 0;
                    console.log(counter);
                }

                else if($("#smiley-01").hasClass("flip") && $("#smiley-02").hasClass("flip") && $("#smiley-01").hasClass("click") && $("#smiley-02").hasClass("click")){
                    console.log("you got both smileys!");
                    $("#smiley-01").removeClass('click');
                    $("#smiley-02").removeClass('click');
                    counter = 0;
                    console.log(counter);
                }

                else if($("#peace-01").hasClass("flip") && $("#peace-02").hasClass("flip") && $("#peace-01").hasClass("click") && $("#peace-02").hasClass("click")){
                    console.log("you got both peace signs!");
                    $("#peace-01").removeClass('click');
                    $("#peace-02").removeClass('click');
                    counter = 0;
                    console.log(counter);
                }

                else if($("#crescent-01").hasClass("flip") && $("#crescent-02").hasClass("flip") && $("#crescent-01").hasClass("click") && $("#crescent-02").hasClass("click")){
                    console.log("you got both crescents!");
                    $("#crescent-01").removeClass('click');
                    $("#crescent-02").removeClass('click');
                    counter = 0;
                    console.log(counter);
                }

                else if($("#target-01").hasClass("flip") && $("#target-02").hasClass("flip") && $("#target-01").hasClass("click") && $("#target-02").hasClass("click")){
                    console.log("you got both targets!");
                    $("#target-01").removeClass('click');
                    $("#target-02").removeClass('click');
                    counter = 0;
                    console.log(counter);
                }

                else if($("#swirl-01").hasClass("flip") && $("#swirl-02").hasClass("flip") && $("#swirl-01").hasClass("click") && $("#swirl-02").hasClass("click")){
                    console.log("you got both swirls!");
                    $("#swirl-01").removeClass('click');
                    $("#swirl-02").removeClass('click');
                    counter = 0;
                    console.log(counter);
                }

                // if none of the matching pairs have been selected, flip all the cards back:
                else {
                    console.log("try again!");

                    if($("#yinyang-02").hasClass("click") && $("#yinyang-01").hasClass("click")){
                        setTimeout(function() {
                            $("#yinyang-01").removeClass('flip');
                        }, 600);
                        setTimeout(function() {
                            $("#yinyang-02").removeClass('flip');
                        }, 600);
                    }

                    if($("#heart-01").hasClass("click") && $("#heart-02").hasClass("click")){
                        setTimeout(function() {
                            $("#heart-01").removeClass('flip');
                        }, 600);
                        setTimeout(function() {
                            $("#heart-02").removeClass('flip');
                        }, 600);
                    }

                    if($("#star-01").hasClass("click") && $("#star-02").hasClass("click")){
                        setTimeout(function() {
                            $("#star-01").removeClass('flip');
                        }, 600);
                        setTimeout(function() {
                            $("#star-02").removeClass('flip');
                        }, 600);
                    }

                    if($("#smiley-01").hasClass("click") && $("#smiley-02").hasClass("click")){
                        setTimeout(function() {
                            $("#smiley-01").removeClass('flip');
                        }, 600);
                        setTimeout(function() {
                            $("#smiley-02").removeClass('flip');
                        }, 600);
                    }

                    if($("#peace-01").hasClass("click") && $("#peace-02").hasClass("click")){
                        setTimeout(function() {
                            $("#peace-01").removeClass('flip');
                        }, 600);
                        setTimeout(function() {
                            $("#peace-02").removeClass('flip');
                        }, 600);
                    }

                    if($("#crescent-01").hasClass("click") && $("#crescent-02").hasClass("click")){
                        setTimeout(function() {
                            $("#crescent-01").removeClass('flip');
                        }, 600);
                        setTimeout(function() {
                            $("#crescent-02").removeClass('flip');
                        }, 600);
                    }

                    if($("#target-01").hasClass("click") && $("#target-02").hasClass("click")){
                        setTimeout(function() {
                            $("#target-01").removeClass('flip');
                        }, 600);
                        setTimeout(function() {
                            $("#target-02").removeClass('flip');
                        }, 600);
                    }

                    if($("#swirl-01").hasClass("click") && $("#swirl-02").hasClass("click")){
                        setTimeout(function() {
                            $("#swirl-01").removeClass('flip');
                        }, 600);
                        setTimeout(function() {
                            $("#swirl-02").removeClass('flip');
                        }, 600);
                    }

                    counter = 0;
                }

            }
        });

    });
4

1 回答 1

0

循环的想法是正确的.. 它相当简单,因为您可以连接选择器。

if (counter == 2) {
    cardArray.forEach(function (card) {
        if ($("#" + card + "-01").hasClass("flip")
            && $("#" + card + "-02").hasClass("flip")
            && $("#" + card + "-02").hasClass("click")
            && $("#" + card + "-01").hasClass("click")
        ) {
            /* snip */
        }
    });
}

这将是您整合的大部分内容,但您可能可以通过更改选择器来进一步整合:

$("[id^='" + card + "'].flip.click").length === 2
于 2013-04-30T04:08:03.843 回答