css3卡片翻转游戏

测试:开始游戏
在这里插入图片描述

先建一张4*4的方格子

initGame(4);//初始化
    function initGame(num) {
        $("#wrap").children().remove();
        for(var i = 0; i < num; i ++){
            for(var j = 0; j < num; j ++){
                $("#wrap").append(`<li οnclick="turnCard($(this))"></li>`)
            }
        }
    }

一共有16个格子,也就是要有16张卡片对应,
新建卡片数组,卡片要两两相同

function  statisticalFieldNumber(arr) {//判断数组中有几个值相同
        return arr.reduce(function (prev, next) {
            prev[next] = (prev[next] + 1) || 1;
            return prev;
        }, {});
    }
var 
arr = [];
    function checkpoint(point,randomNum){//关卡
        arr = [];
        // console.log(arr)
        for(var i = 0; i < point; ){
            // console.log(arr)
            if(arr.length<point){
                var num = Math.floor(Math.random()*randomNum)+1;
                if(!statisticalFieldNumber(arr)[num] || statisticalFieldNumber(arr)[num]<2){//卡片只有一张或没有才进数组,保证卡片有两张相同
                    arr.push(num);
                    i ++;
                }
            }else{
                i = point;
            }
        }
        // console.log(arr)
    }
    checkpoint(16,8);//初始化关卡  16个格子  8张卡片  两两相同 也就是16张卡片

翻转卡片 两张卡片进行比较,如果相同 则对应成功 不相同则翻转回来

var selectedArr = [];
    var selectedNum = [];
    function turnCard(_this){

        if(selectedNum.length<2 && !_this.hasClass("open") && selectedNum[0]!==_this.index()){
            //每两个进行一次判断
            selectedArr.push(arr[_this.index()]);//当前图片
            selectedNum.push(_this.index());//当前index
        }
        if(selectedNum.length>=2 && selectedArr[0]!==selectedArr[1]){//不相同的图形则关闭图形
                $("#wrap li").eq(selectedNum[0]).removeAttr("class","open");
                $("#wrap li").eq(selectedNum[1]).removeAttr("class","open");
                markClose(selectedNum[0],selectedNum[1]);
                selectedNum = [];
                selectedArr = [];
        }else if(selectedNum.length>=2 && selectedArr[0]==selectedArr[1]){//两张相同的
            $("#wrap li").eq(selectedNum[0]).attr("class","open");
            $("#wrap li").eq(selectedNum[1]).attr("class","open");
            selectedNum = [];
            selectedArr = [];
        }

        var url = "./img/selectImg/"+arr[_this.index()]+".png";
        _this.css({"transform":"rotateY(180deg)",});
        setTimeout(function () {
            _this.css({"background-image":"url('"+url+"')",})
        },200);

    }

function markClose(num1,num2){//翻回卡片
        setTimeout(function () {
            $("#wrap li").eq(num1).css({"transform":"rotateY(0deg)",});
            $("#wrap li").eq(num2).css({"transform":"rotateY(0deg)",});

            setTimeout(function () {
                $("#wrap li").eq(num2).css({"background-color":"#becda7","background-image":"url('')"})
                $("#wrap li").eq(num1).css({"background-color":"#becda7","background-image":"url('')"})
            },200)
        },500)

    }

源码:https://gitee.com/Cool_Easy/css3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值