九宫格滑块小游戏

我自己用html加JavaScript做了一个网页小游戏,在这里和大家分享以下。

展示视频:

九宫格滑块游戏展示

代码展示

<!DOCTYPE html>
<!-- <html lang="en"> -->
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .bigDiv{
            display: flex;
            flex-wrap: wrap;
        }
    </style>
</head>
<body style="text-align: center;">
    <h1>滑块小游戏</h1>
    <div class="bigDiv" style="width: 600px;height: 600px;border: 1px solid;margin: 10px auto 0px;">
        <!-- <div onclick="clickMinDiv()" class="minDiv" style="width: 200px;height: 200px;">
            <img style="width: 200px;height: 200px;" src="./image/1-1.jpg" alt="">
        </div> -->
    </div>

    <script>
        // (1)数据准备部分
        var allimg=[
            ["image/1.png","image/2.png","image/3.png"],
            ["image/4.png","image/5.png","image/6.png"],
            ["image/7.png","image/8.png","空"]
        ]
        

        var winImg=[
            ["image/1.png","image/2.png","image/3.png"],
            ["image/4.png","image/5.png","image/6.png"],
            ["image/7.png","image/8.png","空"]
        ]
        
        var bigDiv=document.getElementsByClassName("bigDiv")[0]
        
        // 保存空的图片的在allimg中的位置
        var empty=[2,2] // 单词释义:empty--空, 空虚, 空洞, 空荡荡, 清空, 空空
        
        // (2)核心代码部分
        showAll(allimg)
        dislocate()


        // (3)函数定义

        // 将数组中的内容展示在页面上
        function showAll(allimg){
            // 先将之前的内容清除
            bigDiv.innerHTML=``
            // 再绘制新内容
            for(var i=0;i<3;i++){
                for(var j=0;j<3;j++){
                    if(allimg[i][j]=="空"){
                        bigDiv.innerHTML+=`
                        <div class="minDiv" style="width: 200px;height: 200px;">
                            </div>
                            `
                        }else{
                            bigDiv.innerHTML+=`
                            <div οnclick="clickMinDiv(${i},${j},1)" class="minDiv" style="width: 200px;height: 200px;">
                                <img style="width: 200px;height: 200px;" src="${allimg[i][j]}" alt="">
                                </div>
                                `
                            }
                        }
                    }
                }

        // 点击小div触发的事件
        // k表示是否要判断是否胜利
        function clickMinDiv(i,j,k){
            if((absolute(i,empty[0])==1 && j==empty[1]) || (absolute(j,empty[1])==1 && i==empty[0])){
                allimg[empty[0]][empty[1]]=allimg[i][j]
                allimg[i][j]="空"
                empty[0]=i
                empty[1]=j
            }
            showAll(allimg)
            if(k==1){
                isWin()
            }
        }

        // 传入两数,获取其绝对值
        function absolute(a,b){ // 单词释义:absolute-----绝对, 绝对值
            return a>b?a-b:b-a
        }
        
        // 将内容随机打乱(方法:模拟100次随机点击方块)
        function dislocate(){ // 单词释义:dislocate:中断, 打乱, 扰乱, 打断, 受阻, 搅乱
            for(var i=0;i<1000;i++){
                var x = Math.floor(Math.random()*3) //获取一个0-2的随机整数
                var y = Math.floor(Math.random()*3)
                clickMinDiv(x,y,0)
            }
        }

        // 判断是否胜利
        function isWin(){
            if(arrEqual(winImg,allimg)){
                alert("恭喜你获得胜利!点击确定,重新开局。")
                location.reload();
            }
        }

        // 判断winImg和alling是否相等
        function arrEqual(winImg,allimg){ // 单词释义:equal:平等, 相等, 等, 同等, 等于, 相同
            var number=0
            for(var i=0;i<3;i++){
                for(var j=0;j<3;j++){
                    if(winImg[i][j]==allimg[i][j]){
                        number++
                    }
                }
            }
            if(number==9){
                return true
            }else{
                return false
            }
        }
    </script>
</body>
</html>

运行说明

准备一张完好图片,将其切成九份,舍弃最后一份,共得到8份图片
将以上代码放进一个html文件,并且将allimg和winIng这两个数组中的图片路径修改成8份图片的路径即可运行,数组最后一个元素给null。
即可用浏览器将文件运行起来

或者从下面的下载链接直接下载也可以直接运行。

下载链接

链接:https://pan.baidu.com/s/1hflPCJ1E7MHm7rZasY0STA?pwd=ax8s
提取码:ax8s

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值