HTML+Javascript制作拼图小游戏详解(终)

上次我们已经讲解了制作的原理,并且展示了主要代码。

这次我将完整的代码给大家,仅供参考。

HTML部分如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>拼图游戏——初级</title>
    <link rel="stylesheet" href="css/button.css">
    <script src="js/jquery.js"></script>
    <script src="js/level1.js"></script>
</head>
<body>
<div class="main">
<div class="left">
<h3>目标图</h3>
<div class="pic" id="mainpic"></div>
<br><br>
<h3>所用时间</h3>
<p id="timer">0分0秒</p>
</div>
<div class="center">
    <table class="picbox" cellspacing="0" cellpadding="1">
    <tbody id="picbox">
    </tbody>
    </table>
</div>
<div class="right">
    <a href="javascript:startgame()" class="btn btn-sm animated-button victoria-one">开始</a>
    <a href="level1.html" class="btn btn-sm animated-button victoria-two">初级</a>
    <a href="level2.html" class="btn btn-sm animated-button victoria-three">中级</a> 
    <a href="level3.html" class="btn btn-sm animated-button victoria-four">高级</a> 
</div>
</div>
<div class="wingame">
<h2>恭喜你完成拼图!</h2>
<div class="pic pic2"></div>
<p>完成耗时:<b id="timer2">0分0秒</b></p>
</div>
</body>
</html>

CSS代码如下

body
{
    background-color: #E8E8E8;
}
.main
{
    margin:0 auto;
    width: 1250px;
    height: 720px;
}
.left
{
    width: 300px;
    height: 700px;
    float: left;;
}
.center
{
    width: 700px;
    height: 700px;
    float: left;
}
.right
{
    width: 250px;
    height: 700px;
    color: red;
    float: right;
    
}
.picbox
    {
        margin: 0 auto;
        border: 1px solid black;
        width: 650px;
        height: 650px;
    }
    .picbpx td
    {
        padding: 0;
    }
    .border_bg
    {
        background-image:url(../img/border_bg.jpg);
        width: 100px;
        height: 100px;
        background-repeat: repeat;
    }
    .left h3
    {
        text-align: center;;
    }
    #timer
    {
        color: #D24D57;
        text-align: center;
        font-size:23px;
        font-weight: bold;
    }
    .pic
    {
        margin: 20px auto;
        background-size: cover;
        width: 270px;
        height: 250px;
        border: 2px solid #FFF;
    }
    .wingame
    {
        display: none;
        width: 600px;
        height: 300px;
        background-color: rgba(80,100,120,0.5);
        position: fixed;
        top:25vh;
        left: 32vw;
    }
    .pic2
    {
        width: 150px;
        height: 150px;
    }
    .pic2:hover
    {
        cursor:pointer;
    }
    .wingame h2
    {
        text-align: center;
    }
    .wingame p
    {
        font-size: 20px;
        text-align: center;
    }
    .wingame p b
    {
        color: rgb(200,60,60);
    }


    /*按钮美化*/
a.animated-button:link, a.animated-button:visited {
    position: relative;
    display: block;
    margin: 30px auto 0;
    padding: 14px 15px;
    color: #fff;
    font-size:14px;
    font-weight: bold;
    text-align: center;
    text-decoration: none;
    text-transform: uppercase;
    overflow: hidden;
    letter-spacing: .08em;
    border-radius: 0;
    text-shadow: 0 0 1px rgba(0, 0, 0, 0.2), 0 1px 0 rgba(0, 0, 0, 0.2);
    -webkit-transition: all 1s ease;
    -moz-transition: all 1s ease;
    -o-transition: all 1s ease;
    transition: all 1s ease;
}
a.animated-button:link:after, a.animated-button:visited:after {
    content: "";
    position: absolute;
    height: 0%;
    left: 50%;
    top: 50%;
    width: 150%;
    z-index: -1;
    -webkit-transition: all 0.75s ease 0s;
    -moz-transition: all 0.75s ease 0s;
    -o-transition: all 0.75s ease 0s;
    transition: all 0.75s ease 0s;
}
a.animated-button:link:hover, a.animated-button:visited:hover {
    color: #FFF;
    text-shadow: none;
}
a.animated-button:link:hover:after, a.animated-button:visited:hover:after {
    height: 450%;
}
a.animated-button:link, a.animated-button:visited {
    position: relative;
    display: block;
    margin: 30px auto 0;
    padding: 14px 15px;
    color: #000;
    font-size:25px;
    border-radius: 0;
    font-weight: bold;
    text-align: center;
    text-decoration: none;
    text-transform: uppercase;
    overflow: hidden;
    letter-spacing: .08em;
    text-shadow: 0 0 1px rgba(0, 0, 0, 0.2), 0 1px 0 rgba(0, 0, 0, 0.2);
    -webkit-transition: all 1s ease;
    -moz-transition: all 1s ease;
    -o-transition: all 1s ease;
    transition: all 1s ease;
}

/* Victoria Buttons */
a
{
    width: 200px;
    height: 50px;
}
a.animated-button.victoria-one {
    border: 2px solid #D24D57;
}
a.animated-button.victoria-one:after {
    background: #D24D57;
    -moz-transform: translateX(-50%) translateY(-50%) rotate(-25deg);
    -ms-transform: translateX(-50%) translateY(-50%) rotate(-25deg);
    -webkit-transform: translateX(-50%) translateY(-50%) rotate(-25deg);
    transform: translateX(-50%) translateY(-50%) rotate(-25deg);
}
a.animated-button.victoria-two {
    border: 2px solid #D24D57;
}
a.animated-button.victoria-two:after {
    background: #D24D57;
    -moz-transform: translateX(-50%) translateY(-50%) rotate(25deg);
    -ms-transform: translateX(-50%) translateY(-50%) rotate(25deg);
    -webkit-transform: translateX(-50%) translateY(-50%) rotate(25deg);
    transform: translateX(-50%) translateY(-50%) rotate(25deg);
}
a.animated-button.victoria-three {
    border: 2px solid #D24D57;
}
a.animated-button.victoria-three:after {
    background: #D24D57;
    opacity: .5;
    -moz-transform: translateX(-50%) translateY(-50%);
    -ms-transform: translateX(-50%) translateY(-50%);
    -webkit-transform: translateX(-50%) translateY(-50%);
    transform: translateX(-50%) translateY(-50%);
}
a.animated-button.victoria-three:hover:after {
    height: 140%;
    opacity: 1;
}
a.animated-button.victoria-four {
    border: 2px solid #D24D57;
}
a.animated-button.victoria-four:after {
    background: #D24D57;
    opacity: .5;
    -moz-transform: translateY(-50%) translateX(-50%) rotate(90deg);
    -ms-transform: translateY(-50%) translateX(-50%) rotate(90deg);
    -webkit-transform: translateY(-50%) translateX(-50%) rotate(90deg);
    transform: translateY(-50%) translateX(-50%) rotate(90deg);
}
a.animated-button.victoria-four:hover:after {
    opacity: 1;
    height: 600% !important;
}
a.animated-button.victoria-five {
    border: 2px solid red;
}
a.animated-button.victoria-five:after {
    background: #D24D57;
    -moz-transform: translateX(-50%) translateY(-50%) rotate(-25deg);
    -ms-transform: translateX(-50%) translateY(-50%) rotate(-25deg);
    -webkit-transform: translateX(-50%) translateY(-50%) rotate(-25deg);
    transform: translateX(-50%) translateY(-50%) rotate(-25deg);
}

最后式Js代码:

var picnum=5;
var picData=[];
var a_num=[];
var level="level1";
var isstart=false;
$(document).ready(function(){
    showpicmain();//显示需要拼的目标图
    for(var i=0;i<picnum;i++)//创建拼图表格的行
    {
        $('#picbox').append("<tr></tr>");
    }
    for(var i=0;i<picnum;i++)//创建拼图表格的列
    {
        $('#picbox').children().append("<td></td>");
    }
    $('#startgame').attr("onclick","startgame()");//开始按钮监听事件
    var tds=$('#picbox').children().children();//获得td的数组
    //console.log(tds.length);
    
    for(var i=0;i<tds.length;i++)//为每个td加id和点击事件
    {
        id=i+1;
        tds[i].setAttribute("id",id);
        tds[i].setAttribute("onclick","movepic("+id+")")
    }
    init();
    saveData();
    setBorder();
    setendpic();
});
function setendpic()//加入最后一张图片
{
    temp=picnum*(picnum-1)-1;
    $('#'+temp).css("background-image","url(img/"+level+"/_0"+(picnum-2)*(picnum-2)+".jpg)")
}
function iskong(id)//判断改标签是否为空
{
    
    var bg=$('#'+id).css("background-image");
    if(bg=="none"){
        return true;
    }else
    {
        return false;
    }
}
function movepic(id)//移动图片
{
    if(iskong(id-picnum))
    {
        //alert("moveup");
        move(id,id-picnum);
    }
    else if(iskong(id+picnum))
    {
        //alert("movedown");
        move(id,id+picnum);
    }
    else if(iskong(id-1))
    {
        //alert("moveleft");
        move(id,id-1);
    }
    else if(iskong(id+1))
    {
        //alert("moveright");
        move(id,id+1);
    }
    if(isstart)
    {
        isWin();
    }
}
function setBorder()//设置边界
{
    for(var i=0;i<=picnum;i++)
    {
        $("#"+i).attr({"onclick":null,"class":"border_bg"});
        $("#"+i).css("height","1px");
    }
    for(var i=1;i<=picnum*picnum;i+=picnum)
    {
        $("#"+i).attr({"onclick":null,"class":"border_bg"});
        $("#"+i).css("width","1px");
    }
    for(var i=picnum*(picnum-1)+1;i<=picnum*picnum;i++)
    {
        $("#"+i).attr({"onclick":null,"class":"border_bg"});
        $("#"+i).css("height","1px");
    }
    for(var i=picnum;i<=picnum*picnum;i+=picnum)
    {
        $("#"+i).attr({"onclick":null,"class":"border_bg"});
        $("#"+i).css("width","1px");
    }
}

function move(id,target)//移动
{
    //var temp=$('#'+id).css("background-image");
    //temp=$('#'+id).css("background-image","");
    $('#'+target).css("background-size","cover");
    $('#'+target).css("background-image",$('#'+id).css("background-image"));
    $('#'+id).css("background-image","none");
}
var pic=1;
function init()//初始化图片
{
    for(var i=1;i<picnum-1;i++)
      {
        for(var id=1;id<picnum*picnum;id++)
        {
            if(id>picnum*i+1&&id<picnum*(i+1))
        {
            $('#'+id).css("background-size","cover");
            $('#'+id).css("background-image","url(img/"+level+"/_0"+pic+".jpg)");
            if(id==((picnum-1)*picnum)-1)
            {
                $('#'+id).css("background-image","none");
            }
            pic++;
            //console.log(pic);
        }
        }
      }
}
function saveData()//保存初始数据
{
    for(var i=1;i<picnum-1;i++)
      {
        for(var id=1;id<picnum*picnum;id++)
        {
            if(id>picnum*i+1&&id<picnum*(i+1))
        {
            var temp=$('#'+id).css("background-image");
            picData.push(temp);
        }
        }
      }
}
function startgame()//开始游戏,打乱图片顺序
{
    clearTimeout(timer);
    times=0;timem=0;
    isstart=true;
    var k=0;times=0;timem=0;
    var temp=[];
    for(var i=1;i<(picnum-2)*(picnum-2);i++)
    {
        temp[i-1]=i;
    }
    a_num=getnum(temp);
    for(var i=1;i<picnum-1;i++)
      {
        for(var id=1;id<picnum*picnum;id++)
        {
            if(id>picnum*i+1&&id<picnum*(i+1))
        {
            var temp=$('#'+id).css("background-image","url(img/"+level+"/_0"+a_num[k]+".jpg)");
            k++;
        }
        }
      }
      var temp=picnum*(picnum-1)-1;
      $('#'+temp).css("background-image","none");

      gotime();

}

function getnum(array) //打乱顺序函数
{
    var tmp, current, top =array.length;
    if(top) while(--top){
    current =Math.floor(Math.random() * (top + 1));
    tmp =array[current];
    array[current] =array[top];
    array[top] = tmp;
    }
    return array;
}
function isWin()//判断是否胜利
{
    k=0;
    for(var i=1;i<picnum-1;i++)
      {
        for(var id=1;id<picnum*picnum;id++)
        {
            if(id>picnum*i+1&&id<picnum*(i+1))
        {
            var temp=$('#'+id).css("background-image");
            if(temp==picData[k])
            {
                k++;
            }
        }
        }
      }
      if(k==(picnum-2)*(picnum-2))
      {
          clearTimeout(timer);
          windo();
      }
}

var timem=0;
var times=0;
var timer=null;
function gotime()//开始计时
{
    timer=setTimeout(function(){
        times++;
        if(times>59)
        {
            timem++;
            times=0;
        }
        $('#timer').text(timem+"分"+times+"秒");
        gotime();
},1000);
}
function showpicmain()//显示样本图
{
    $('.pic').css("background-image","url(img/"+level+"/main.jpg)");
}

function windo()
{
    $('.wingame').css("display","block");
    $('.pic2').click(function(){
        $('.wingame').css("display","none");
        startgame();
    });
    $('#timer2').text($('#timer').text());
}

OK,就这样吧,不懂得小伙伴看前面两篇文章。

欢迎学习交流。

by 本该如此

猜你喜欢

转载自www.cnblogs.com/tcxq/p/9968649.html