qq_45761937 2020-05-23 18:39 采纳率: 0%
浏览 265

不知道为啥我的html中的js代码不能运行,求大佬解答

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



拼图小游戏
</head>
<body>

    <div id="container">
        <h3>拼图小游戏</h3>
        <hr/>
        <div id="timeBox">
            共计时间:<span id="time">00:00:00</span>
        </div>
        <div>
        <canvas id="myCanvas" width="300" height="300" style="border:1px solid">
        </canvas>
        </div>
        <div>
            <button onclick="restarGame()">
               重新开始
            </button>
        </div>
    </div>

    <script type="text/javascript">
    //获取画布对象 
        var c=document.getElmentById('myCanvas');
        //获取2D的context对象
        var ctx=c.getContext('2d');
        //定义拼图小方块的边长
        var w=100;
        //定义初始方块位置
        var num=[00, 01, 02][10, 11 ,12][20, 21, 22];
        //图片来源
        var img=new Image();
        img.src="image/C:\Users\胡佳星\Pictures\QQ图片20190718132642.jpg";
        //图片加载好时
        img.onload=function() {
        //打乱拼图
        generateNum();
        //在画布上绘制拼图
        drawCanvas();
        };
        //打乱拼图方法
        function generateNum(){
            for(var i=0;i<50;i++){
            var i1=Math.round(Math.random()*2);
            var j1=Math.round(Math.random()*2);
            var i2=Math.round(Math.random()*2);
            var j2=Math.round(Math.random()*2);
            var temp=num[i1][j1];
            num[i1][j1]=num[i2][j2];
            num[i2][j2]=temp;
                }
        }

        //绘制拼图
        function drawCanvas(){
        //清空画布
        ctx.clearRect(0,0,300,300);
        //绘制拼图 
        for(var i=0;i<3;i++){
            for(var j=0;j<3;j++){
            if(num[i][j]!=22){
                var row=parseInt(num[i][j]/10);
                var col=num[i][j]%10;
                ctx.drawImage(img,col*w,row*w,w,w,j*w,i*w,w,w);

            }
            }
        }
        }
        //监听鼠标单机事件
        c.onmousedown=function(e){
        //获取画布边界
        var bound=c.getBoundingClientRect();
        //获取鼠标在画布上的位置
        var x=e.pageX-bound.left;
        var y=e.pageY-bound.top;
        //将x和y换算成几行几列
        var row=parseInt(y/100);
        var col=parseInt(x/100);
        //如果单击的不是空白区域
        if(num[row][col]!=22){
        //移动单机的方块
        detectBox(row,col);
        //重新绘制画布
        drawCanvas();
        //检查游戏是否成功
        if(isWin){
        //清除计时器
        clearImage(timer);
        //绘制完整图片
        ctx.drawImage(img,0,0);
        //设置字体
        ctx.font="bold 68px serif";
        //设置填充颜色
        ctx.fillStyle="red";
        //显示提示语句
        ctx.fillText("游戏成功!", 20, 150);
        }
        }
        };
    //移动单机的方块
    function detecBox(i,j){
    //如果单机的方块不在最上面一行
    if(i>0){
    //检测空白区域是否在当前方块的正上方
        if(num[i-1][j]==22){
        //交换位置
        num[i-1][j]=num[i][j];
        num[i][j]=22;
        return;
        }
    }
    //如果单击的方块不在最下面一行
    if(i<2){
    //检测空白区域是否在当前方块的正下方
    if(num[i+1][j]==22){
    //交换位置
    num[i+1][j]=num[i][j];
    num[i][j]=22;
    return;
    }
    }
    //如果单击的方块不在最左边一列
    if(j>0){
    //检测空白区域是否在当前方块的左边
    if(num[i][j-1]==22){
    //交换位置
    num[i][j-1]=num[i][j];
    num[i][j]=22;
    return;
    }
    }
    //如果点击的方块不在最右边一列
    if(j<2){
    //检测空白区域是否在当前方块的右边
    if(num[i][j+1]==22){
    //交换位置
    num[i][j+1]=num[i][j];
    num[i][j]=22;
    return;
    }
    }   
    }

    //胜利的判断
    function checkWin(){
    //遍历数组
    for(var i=0;i<3;i++){
        for(var j=0;j<3;j++){
        //如果有一块不对
        if(num[i][j]!=i*10+j){
        return false;
        }
        }
    }
    //返回真
    return  true;
    }

    var time=document.getElementById("time");
    //初始化计时器
    var h=0;
    m=0;
    s=0;

    function getCurrentTime(){
    s=parseInt(s);
    m=parseInt(m);
    h=parseInt(h);
    s++;
    if(s==60){
    s=0;
    m++;
    }
    if(m==60){
    m=0;
    h++;
    }
    //修改小时、分钟、秒的显示效果,使其保持两位数
    if(s<10)
    s="0"+s;
    if(m<10)
    m="0"+m;
    if(h<10)
    h="0"+h;
    //显示时间
    time.innerHTML=h+":"+m+":"+s;
    }
    //重新开始游戏
    function restartGame(){
    //清除计时器
    clearInterval(timer);
    //时间清零
    s=0;
    m=0;
    h=0;
    //重新显示时间
    getCurrentTime();
    timer=setInterval("getCurrentTime()",1000);
    //重新打乱拼图
    generateNum();
    //绘制拼图
    drawCanvas();
    }
    //每隔1秒刷新一次时间
    var timer=setInterval("getCurrentTime()",1000);
    </script>


  • 写回答

1条回答 默认 最新

  • 崽崽的谷雨 2020-05-25 11:27
    关注

    建议你打断点或者一个函数一个函数加,看看是哪的问题

    <html>
    <body>
    
        <div id="container">
            <h3>拼图小游戏</h3>
            <hr/>
            <div id="timeBox">
                共计时间:<span id="time">00:00:00</span>
            </div>
            <div>
            <canvas id="myCanvas" width="300" height="300" style="border:1px solid">
            </canvas>
            </div>
            <div>
                <button onclick="restarGame()">
                   重新开始
                </button>
            </div>
        </div>
    
        <script type="text/javascript">
        //获取画布对象 
            var c=document.getElementById('myCanvas');
            //获取2D的context对象
            var ctx=c.getContext('2d');
            //定义拼图小方块的边长
            var w=100;
            //定义初始方块位置
            var num=[[00, 01, 02],[10, 11 ,12],[20, 21, 22]];
            console.log(num)
            //图片来源
            var img=new Image();
            img.src="https://bkimg.cdn.bcebos.com/pic/77094b36acaf2edd930c46fb801001e939019326?x-bce-process=image/resize,m_lfit,w_268,limit_1/format,f_jpg";
            //图片加载好时
            img.onload=function() {
            //打乱拼图
            generateNum();
            //在画布上绘制拼图
            drawCanvas();
            };
            //打乱拼图方法
            function generateNum(){
                for(var i=0;i<50;i++){
                var i1=Math.round(Math.random()*2);
                var j1=Math.round(Math.random()*2);
                var i2=Math.round(Math.random()*2);
                var j2=Math.round(Math.random()*2);
                console.log(i1,j1,i2,j2)
                var temp=num[i1][j1];
                num[i1][j1]=num[i2][j2];
                num[i2][j2]=temp;
                    }
            }
    
            //绘制拼图
            function drawCanvas(){
            //清空画布
            ctx.clearRect(0,0,300,300);
            //绘制拼图 
            for(var i=0;i<3;i++){
                for(var j=0;j<3;j++){
                if(num[i][j]!=22){
                    var row=parseInt(num[i][j]/10);
                    var col=num[i][j]%10;
                    ctx.drawImage(img,col*w,row*w,w,w,j*w,i*w,w,w);
    
                }
                }
            }
            }
            //监听鼠标单机事件
            c.onmousedown=function(e){
            //获取画布边界
            var bound=c.getBoundingClientRect();
            //获取鼠标在画布上的位置
            var x=e.pageX-bound.left;
            var y=e.pageY-bound.top;
            //将x和y换算成几行几列
            var row=parseInt(y/100);
            var col=parseInt(x/100);
            //如果单击的不是空白区域
            if(num[row][col]!=22){
            //移动单机的方块
            detectBox(row,col);
            //重新绘制画布
            drawCanvas();
            //检查游戏是否成功
            if(isWin){
            //清除计时器
            clearImage(timer);
            //绘制完整图片
            ctx.drawImage(img,0,0);
            //设置字体
            ctx.font="bold 68px serif";
            //设置填充颜色
            ctx.fillStyle="red";
            //显示提示语句
            ctx.fillText("游戏成功!", 20, 150);
            }
            }
            };
        //移动单机的方块
        function detecBox(i,j){
        //如果单机的方块不在最上面一行
        if(i>0){
        //检测空白区域是否在当前方块的正上方
            if(num[i-1][j]==22){
            //交换位置
            num[i-1][j]=num[i][j];
            num[i][j]=22;
            return;
            }
        }
        //如果单击的方块不在最下面一行
        if(i<2){
        //检测空白区域是否在当前方块的正下方
        if(num[i+1][j]==22){
        //交换位置
        num[i+1][j]=num[i][j];
        num[i][j]=22;
        return;
        }
        }
        //如果单击的方块不在最左边一列
        if(j>0){
        //检测空白区域是否在当前方块的左边
        if(num[i][j-1]==22){
        //交换位置
        num[i][j-1]=num[i][j];
        num[i][j]=22;
        return;
        }
        }
        //如果点击的方块不在最右边一列
        if(j<2){
        //检测空白区域是否在当前方块的右边
        if(num[i][j+1]==22){
        //交换位置
        num[i][j+1]=num[i][j];
        num[i][j]=22;
        return;
        }
        }   
        }
    
        //胜利的判断
        function checkWin(){
        //遍历数组
        for(var i=0;i<3;i++){
            for(var j=0;j<3;j++){
            //如果有一块不对
            if(num[i][j]!=i*10+j){
            return false;
            }
            }
        }
        //返回真
        return  true;
        }
    
        var time=document.getElementById("time");
        //初始化计时器
        var h=0;
        m=0;
        s=0;
    
        function getCurrentTime(){
        s=parseInt(s);
        m=parseInt(m);
        h=parseInt(h);
        s++;
        if(s==60){
        s=0;
        m++;
        }
        if(m==60){
        m=0;
        h++;
        }
        //修改小时、分钟、秒的显示效果,使其保持两位数
        if(s<10)
        s="0"+s;
        if(m<10)
        m="0"+m;
        if(h<10)
        h="0"+h;
        //显示时间
        time.innerHTML=h+":"+m+":"+s;
        }
        //重新开始游戏
        function restartGame(){
        //清除计时器
        clearInterval(timer);
        //时间清零
        s=0;
        m=0;
        h=0;
        //重新显示时间
        getCurrentTime();
        timer=setInterval("getCurrentTime()",1000);
        //重新打乱拼图
        generateNum();
        //绘制拼图
        drawCanvas();
        }
        //每隔1秒刷新一次时间
        var timer=setInterval("getCurrentTime()",1000);
        </script>
    </html>
    

    目前我这个能运行之前你有两个报错
    1.getelementById写错了
    2.num报错
    3.你少一个函数restarGame没定义
    前两个我给改了第三个你自己加

    评论

报告相同问题?

悬赏问题

  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问