• jquery 拼图小游戏


    趁着周末写了个小游戏,拼图,原理简单,首先分格,500x500 ,就分为100x100的25格

    大概流程是,

    1 点击格子时候,先检测是否有已经点击的格子,如果不存在,则直接加上“on”的样式,标记为要切换的格子

    2 存在已经有"on"的格子,就检测是否可以切换格子位置,检测的标准时横纵相减的绝对值的和一定为1.

    3 如果是1 则切换 其他则取消之前已经标记需要切换的格子的“on”的样式,给新的点击的格子标记上“on”

    效果图

    代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>拼图游戏</title>
        <script src="js/jquery-1.8.2.min.js" type="text/javascript"></script>
        <style type="text/css">
         .mapSource{width:500px; height:500px; position:relative; border:1px solid gray; float:left; background:url(images/map1.png); margin-right:10px;}
        .map{width:510px; height:510px; position:relative; border:1px solid gray; float:left;}
        .map_div{width:100px; height:100px; float:left; display:inline; overflow:hidden; border:1px solid orange; cursor:pointer;}
        .map_0_0{ background:url(images/map1.png) 0px 0px; }
        .map_0_1{ background:url(images/map1.png) -100px 0px; }
        .map_0_2{ background:url(images/map1.png) -200px 0px; }
        .map_0_3{ background:url(images/map1.png) -300px 0px; }
        .map_0_4{ background:url(images/map1.png) -400px 0px; }
        
        .map_1_0{ background:url(images/map1.png) 0px -100px; }
        .map_1_1{ background:url(images/map1.png) -100px -100px; }
        .map_1_2{ background:url(images/map1.png) -200px -100px; }
        .map_1_3{ background:url(images/map1.png) -300px -100px; }
        .map_1_4{ background:url(images/map1.png) -400px -100px; }
        
        .map_2_0{ background:url(images/map1.png) 0px -200px; }
        .map_2_1{ background:url(images/map1.png) -100px -200px; }
        .map_2_2{ background:url(images/map1.png) -200px -200px; }
        .map_2_3{ background:url(images/map1.png) -300px -200px; }
        .map_2_4{ background:url(images/map1.png) -400px -200px; }
        
        .map_3_0{ background:url(images/map1.png) 0px -300px; }
        .map_3_1{ background:url(images/map1.png) -100px -300px; }
        .map_3_2{ background:url(images/map1.png) -200px -300px; }
        .map_3_3{ background:url(images/map1.png) -300px -300px; }
        .map_3_4{ background:url(images/map1.png) -400px -300px; }
        
        .map_4_0{ background:url(images/map1.png) 0px -400px; }
        .map_4_1{ background:url(images/map1.png) -100px -400px; }
        .map_4_2{ background:url(images/map1.png) -200px -400px; }
        .map_4_3{ background:url(images/map1.png) -300px -400px; }
        .map_4_4{ background:url(images/map1.png) -400px -400px; }
        .on{border:1px solid red;}
        </style>
    </head>
    <body>
        <div class="mapSource"></div>
        <div class="map"></div>
        
        <script type="text/javascript">
            $(function () {
                $.fn.pinTu = function (options) {
                    var o = $.extend({}, options);
                    var map = $(o.map);
                    var cells = $(o.cell);
                    var isSuccess = false;
                    var init = function () {
                        var html = "";
                        var arr1 = rand();
                        var arr2 = rand();
                        for (var i = 0; i < arr1.length; i++) {
                            for (var j = 0; j < arr2.length; j++) {
                                html = html + "<div class='map_div map_" + arr1[i] + "_" + arr2[j] + "' row='" + i + "' column='" + j + "' select='false' classN='map_" + arr1[i] + "_" + arr2[j] + "'></div>";
                            }
                        }
                        map.html(html);
                    };
                    //返回不规则排列的0到5的数组
                    var rand = function () {
                        var temp = [0, 1, 2, 3, 4];
                        var len = temp.length;
                        var newTemp = [];
                        for (var j = 0; j < 5; j++) {
                            len--;
                            var i = Math.round(Math.random() * len);
                            newTemp.push(temp.splice(i, 1));
                        }
                        return newTemp;
                    };
                    //检测是否可以切换
                    var checkNear = function (row1, column1, row2, column2) {
                        var distance = Math.abs(row1 - row2) + Math.abs(column1 - column2);
                        if (distance == 1) {
                            return true;
                        } else {
                            return false;
                        }
                    };
                    //检测选中数量
                    var checkIsSelectedNum = function () {
                        var i = 0;
                        $("div[select=true]").each(function () {
                            i++;
                        });
                        return i;
                    };
                    //检测是否拼图成功
                    var checkIsSuccess = function (obj) {
                        var result = true;
                        obj.children(".map_div").each(function () {
                            var className = $(this).attr("classN");
                            var row = $(this).attr("row");
                            var column = $(this).attr("column");
                            var tempArr = className.split('_');
                            var row1 = tempArr[1];
                            var column1 = tempArr[2];
                            if (!(row == row1 && column == column1)) {
                                result = false;
                            }
                            return result;
                        });
                    };
                    //初始化
                    init();
                    //cell点击事件
                    map.children(".map_div").click(function () {
                        var selected = $(this).attr("select");
                        if (selected == "true") {
                            $(this).removeClass("on").attr("select", "false");
                        } else {
                            var isSelectedNum = checkIsSelectedNum();
                            //还没选中,则直接加上“选中”
                            if (isSelectedNum == 0) {
                                $(this).addClass("on");
                                $(this).attr("select", "true");
                            } else if (isSelectedNum == 1) {//已经存在一个,则检测是否可以互换位置
                                var $obj = $("div[select=true]"); //拿到已经选中的元素
                                var row1 = $obj.attr("row");
                                var column1 = $obj.attr("column");
                                var row2 = $(this).attr("row");
                                var column2 = $(this).attr("column");
                                var isChange = checkNear(row1, column1, row2, column2);
                                if (isChange) {
                                    var class1 = $obj.attr("classN");
                                    var class2 = $(this).attr("classN");
                                    $obj.removeClass(class1).addClass(class2).removeClass("on").attr("select", "false").attr("classN", class2);
                                    $(this).removeClass(class2).addClass(class1).addClass("on").attr("select", "true").attr("classN", class1);
                                    isSuccess = checkIsSuccess(map);
                                } else {
                                    $obj.removeClass("on").attr("select", "false");
                                    $(this).addClass("on").attr("select", "true");
                                }
                            }
                            var row = $(this).attr("row");
                            var column = $(this).attr("column");
                        }
                    });
                };
                $(".map").pinTu({
                    map: ".map",
                    cell: ".map_div"
                });
            });
        </script>
    
    </body>
    </html>

    为了读者更好地看这个项目,代码都是全部贴上来的,可能我的思路不是最好的,如果你有更好的思路,可以给我评论。

    ps:此文为原创

  • 相关阅读:
    迈瑞医疗招聘-软件测试工程师
    软件自动化测试开发-3期开班啦
    luogu P2744 [USACO5.3]量取牛奶Milk Measuring
    luogu P2515 [HAOI2010]软件安装
    luogu P2423 双塔
    luogu P1651 塔
    luogu P1489 猫狗大战
    luogu P3092 [USACO13NOV]没有找零No Change
    luogu P3800 Power收集
    luogu P2949 [USACO09OPEN]工作调度Work Scheduling
  • 原文地址:https://www.cnblogs.com/lihaozhou/p/3590774.html
Copyright © 2020-2023  润新知