基于JavaScript配对游戏

基于JavaScript配对游戏

当用户点击两个相同的图案或字符后配对成功,全部配对成功后游戏获胜

界面如下:
在这里插入图片描述

代码如下:

有兴趣的朋友欢迎继续完善 ^ _ ^

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>配对游戏</title>
    <style type="text/css">
        h2{
            text-align: center;
        }
        hr{
            background: deepskyblue;
            height: 5px;
            width: 600px;
        }
        table{
            background: deepskyblue;
            color: blue;
            width: 500px;
            height: 500px;
            margin: 15px auto;
        }
        td{
            text-align: center;
            font-size: 50px;
            background: greenyellow;
            width: 100px;
            height: 125px;
        }
        footer{
            background: deepskyblue;
            width: 600px;
            padding: 10px;
            margin: 15px auto;
            text-align: center;
        }
    </style>
</head>
<body>
    <h2>配对游戏</h2><hr>

    <table>
        <script>
            // 定义行列
            var cols = 5, rows = 4;
            for(var i = 0; i < rows; i++){
                str = "<tr>";
                for(var j = 0; j < cols; j++){
                    var td_id = "img" + ((cols * i) + j);
                    str += '<td id="' + td_id + '" οnclick="showimg(' + ((cols * i) + j) +')"' + '">';
                    str += "</td>";
                }
                str += "</tr>";
                document.write(str);
            }
        </script>
    </table>
    <footer>
        用时:<span id="gameTime"></span>&nbsp;&nbsp;&nbsp;
        <input type="button" value="开始游戏" onclick="init()">
    </footer>

    <script>
        var length = cols*rows;//表格单元格数目
        var map = [];//存储单元格里的内容
        var user = [];//存储每个单元格是否可以翻开的状态
        var times=0;//存储时间
        var newStart;//表示是否为新的游戏开始
        var firstIndex = 0, secondIndex = 0;//点击第一种、第二种照片的索引
        var ctr = 0;//记录时第一次点击
        var finished = 0;//配对成功数量

        function $(x){
            return document.getElementById(x);
        }

        for(var i = 0; i < length/2; i++){
            map[i] = i;
            map[length/2 + i] = i;
        }
        // alert(map);
        
        //游戏初始化
        function init(){
            for(var i = 0; i <length; i++){
                $("img" + i).innerHTML = '';//用空表示背面
                user[i] = 0;//是否显示照片,0为背面
            }
            // alert(map);
            map.sort(function(){
                return (Math.random() - 0.5);//打乱数组
            })
            // alert(map);

            times = 0;//计时器清零

            $("gameTime").innerHTML = times + "秒";
            newStart = true;//标记为新的游戏开始

        }
        // init();

       
        //点击事件函数
        function showimg(x){
            if(newStart){
                start();
                newStart = false;
            }

            $("img" + x).innerHTML = map[x];
            if(ctr == 0){
                firstIndex = x;//记录第一种照片索引
                ctr++;
            }else{
                if(firstIndex != x){//防止两次点击相同照片
                    secondIndex = x;//记录第二张照片索引
                    ctr = 0;
                    check();//比较两者照片
                }
            }
            
        }
        //配对
        function check(){
            if(map[firstIndex] == map[secondIndex]){
                finished++;
                user[firstIndex] = 1;
                user[secondIndex] = 1;//不能在翻
                ctr = 0;
            }else if(user[firstIndex] == 0){//如果没有配对成功,此时user还是为0
                $("img"+firstIndex).innerHTML = " ";//将第一次点击的照片隐藏
                firstIndex = secondIndex;//此时第二次点击的变成下轮第一次点击
                secondIndex = 0;//下一轮还没有第二次点击,所以为0
                ctr++;//标记已经点击了一张
            }
            if(finished == length/2){
                clearTimeout(times);
                if(confirm("恭喜你,再来一局?") == "true"){
                    init();
                }
            }
        }

        
        //计时函数
        function start(){
            times += 1;
            $("gameTime").innerHTML = times + "秒";
            setTimeout('start()', 1000);
        }
        
    </script>
</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章