javascript实现数字拼图

运行结果

将下面代码全部拷到txt文件中,然后保存关闭,再把文件的后缀名改为(.htm),就ok了。

<!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>
    <style type="text/css">
        .input1
        {
            width:40px; height:40px; background-color:Blue; border:0 outset; font-size:large; color:White; text-align:center;
        }
        .input2
        {
            width:40px; height:40px; background-color:Gray; border:0 outset; font-size:large; color:White; text-align:center;
        }
    </style>
    <script type="text/javascript">
        var times = 0;
        var movesteps = 0;
        var interval = "";
        var start = false;
        var numbers = new Array();

        function move(num) {
            if (start == false) {
                alert('您还没有开始!');
                return;
            }
            if (stoped.value == "继续") {
                alert('请点击继续!');
                return;
            }
            var element = document.getElementsByName(num);
            if (element[0].value != "") {
                var clickinput_top = parseInt(element[0].style.top);
                var clickinput_left = parseInt(element[0].style.left);
                var fixed_top = parseInt(document.getElementById(selected.value*selected.value).style.top);
                var fixed_left = parseInt(document.getElementById(selected.value*selected.value).style.left);
                if (-45 <= clickinput_left - fixed_left && clickinput_left - fixed_left <= 45 && -45 <= clickinput_top - fixed_top && clickinput_top - fixed_top<=45) {
                    if (Math.abs( clickinput_left - fixed_left) != Math.abs( clickinput_top - fixed_top)) {
                        document.getElementById(selected.value*selected.value).style.backgroundColor = "Blue";
                        document.getElementById(selected.value*selected.value).value = element[0].value;
                        document.getElementById(selected.value*selected.value).id = element[0].id;
                        document.getElementsByName(num)[0].style.backgroundColor = "Gray";
                        document.getElementsByName(num)[0].value = "";
                        document.getElementsByName(num)[0].id = selected.value*selected.value;
                        movesteps = movesteps + 1;
                        movestep.innerText = movesteps;
                        if (iswin()) {
                            clearInterval(interval);
                            alert("YOU WIN!!");
                            start = false;
                            ischanged(selected.value);
                        }
                    }
                }
            }
        }

        function begin() {
            stoped.value = "暂停";
            start = true;
            times = 0;
            time.innerText = 0;
            movesteps = 0;
            movestep.innerText = 0;
            clearInterval(interval);
            
            for (var i = 0; i < selected.value * selected.value; i++) {
                numbers[i] = parseInt(i) + 1;
            }
            do {
                for (var i = 0; i < selected.value * selected.value; i++) {
                    var num = parseInt(Math.random() * (selected.value * selected.value - i));
                    var emp = numbers[selected.value * selected.value -1 - i];
                    numbers[selected.value * selected.value -1 - i] = numbers[num];
                    numbers[num] = emp;
                }
            } while (judge(numbers));
            for (var i =0 ; i < selected.value * selected.value; i++) {
                if (numbers[i] == selected.value * selected.value) {
                    document.getElementsByName(parseInt(i)+1)[0].value = "";
                    document.getElementsByName(parseInt(i) + 1)[0].id = selected.value * selected.value;
                    document.getElementsByName(parseInt(i) + 1)[0].style.backgroundColor = "Gray";
                }
                else {
                    document.getElementsByName(parseInt(i) + 1)[0].value = numbers[i];
                    document.getElementsByName(parseInt(i) + 1)[0].id = numbers[i];
                    document.getElementsByName(parseInt(i) + 1)[0].style.backgroundColor = "Blue";
                }
            }
            interval=( setInterval("settime()", 1000));
        }

        function judge(array) {
            var count = 0;
            for (var i = 0; i < selected.value * selected.value-1; i++) {
                for (var j = i+1; j < selected.value * selected.value; j++) {
                    if (parseInt(array[i]) > parseInt(array[j])) {
                        count = count + 1;
                    }
                }
            }
            for (var i = 0; i < selected.value * selected.value; i++) {
                if (array[i] == selected.value * selected.value) {
                    count = count + parseInt(i / 3) + 1 + i % 3 + 1;
                }
            }
            if (count % 2 == 0) {
                return false;
            }
            else {
                return true;
            }
        }

        function iswin() {
            for (var i = 1; i <= selected.value * selected.value; i++) { 
                var node=document.getElementById(i);
                if (node.id != node.name) {
                    return false;
                }
            }
            return true;
        }

        function ischanged() {
            var s = "";
            for (var i = 1; i < selected.value * selected.value; i++) {
                s = s + "<input id=" + i + " value=" + i + " name=" + i + " readonly='readonly' οnclick='move(" + i + ")' class='input1' style='position:absolute; top:" + ((parseInt((i - 1) / selected.value) + 1) * 5 + parseInt((i - 1) / selected.value) * 40) + "px; left:" + (((i - 1) % selected.value + 1) * 5 + (i - 1) % selected.value * 40) + "px;' />";
            }
            s = s + "<input id='" + selected.value * selected.value + "' value='' name='" + selected.value * selected.value + "' readonly='readonly' οnclick='move(" + selected.value * selected.value + ")' class='input2' style='position:absolute; top:" + (selected.value * 5 + (selected.value - 1) * 40) + "px; left:" + (selected.value * 5 + (selected.value - 1) * 40) + "px;' />";
            div2.innerHTML = s;
            div2.style.width = selected.value * 5 + (selected.value - 1) * 40 + 45 + 'px';
            div2.style.height = selected.value * 5 + (selected.value - 1) * 40 + 45 + 'px';
            div1.style.width = selected.value * 5 + (selected.value - 1) * 40 + 85 + 'px';
            div1.style.height = selected.value * 5 + (selected.value - 1) * 40 + 170 + 'px';
            times = 0;
            time.innerText = 0;
            movesteps = 0;
            movestep.innerText = 0;
            clearInterval(interval);
        }

        function settime() {
            times=times+1;
            time.innerText = times;
        }

        function stop() {
            if (start == false) {
                return;
            }
            if (stoped.value == "暂停") {
                stoped.value = "继续";
                clearInterval(interval);
            }
            else {
                stoped.value = "暂停";
                interval= setInterval("settime()", 1000);
            }

        }
    </script>
</head>
<body onload="ischanged()">
    <div id="div1" style="margin-left: auto;margin-right: auto;background-color:Aqua; border-style:solid; border-width:5px; border-color:Black;">
        <center>
        <div style=" border-bottom-style:solid; border-width:5px; border-bottom-color:Black;">
        <table>
            <tr>
                <td>难度:</td>
                <td>
                    <select id="selected" onchange="ischanged()" style="width:60px">
                        <option value="3" selected="selected">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>
                   <input type="button" onclick="begin()" value="开始游戏" />
                </td>
                <td>
                   <input type="button" id="stoped" onclick="stop()" value="暂停" style="width:60px"/>
                </td>
            </tr>
            <tr>
                <td>用时:</td>
                <td><label id="time">0</label></td>
            </tr>
            <tr>
                <td>移动次数:</td>
                <td><label id="movestep">0</label></td>
            </tr>
        </table>
        </div>
        
        <div id="div2" style=" position:relative;background-color:Gray; border-top-width:10px; border-top-style:solid; border-top-color:Aqua">
        </div>
        </center>
    </div>
</body>
</html>

 

转载于:https://www.cnblogs.com/zhangqibao/p/3148448.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现拼图游戏的基本思路是将一张完整的图片分割成若干个小块,然后打乱这些小块的顺序,让玩家通过交换小块的位置来还原原始图片。以下是一个简单的实现示例: HTML: ```html <div id="puzzle"></div> ``` CSS: ```css #puzzle { width: 300px; height: 300px; border: 1px solid #ccc; display: flex; flex-wrap: wrap; } #puzzle div { width: 100px; height: 100px; background-size: 300px 300px; background-repeat: no-repeat; cursor: pointer; } ``` JavaScript: ```javascript const ROWS = 3; // 行数 const COLS = 3; // 列数 const IMG_URL = 'https://picsum.photos/300'; // 图片地址 const puzzle = document.getElementById('puzzle'); let emptyRow = ROWS - 1; // 空白块所在行 let emptyCol = COLS - 1; // 空白块所在列 // 初始化拼图 function initPuzzle() { for (let i = 0; i < ROWS; i++) { for (let j = 0; j < COLS; j++) { const piece = document.createElement('div'); piece.style.backgroundImage = `url(${IMG_URL})`; piece.style.backgroundPosition = `-${j * 100}px -${i * 100}px`; piece.dataset.row = i; piece.dataset.col = j; piece.addEventListener('click', movePiece); puzzle.appendChild(piece); } } } // 移动小块 function movePiece() { const row = parseInt(this.dataset.row); const col = parseInt(this.dataset.col); if (row === emptyRow && Math.abs(col - emptyCol) === 1 || col === emptyCol && Math.abs(row - emptyRow) === 1) { this.style.transform = `translate(${emptyCol - col}00%, ${emptyRow - row}00%)`; this.dataset.row = emptyRow; this.dataset.col = emptyCol; emptyRow = row; emptyCol = col; } } initPuzzle(); ``` 该示例使用了 flex 布局和 transform 属性来实现小块的布局和移动。具体实现过程中,我们可以根据需要添加更多的交互效果和游戏逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值