• 贪吃蛇


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    <style type="text/css" media="screen">
        * {
            margin: 0;
            padding: 0;
        }
        #container {
            margin: 50px;
            border:1px solid #ccc;
            border-bottom: none;
            border-right: none;
            position: relative;
        }
        ul {
            list-style: none;
        }
        ul li {
            border:1px solid #ccc;
            border-top: none;
            border-left: none;
            float: left;
        }
        #container > div {
            float: right;
        }
        #person > div {
            background-color: #00ff00;
            position: absolute;
            left: 0px;
            top: 0px;
        }
        .food {
            position: absolute;
            left: 0px;
            top: 0px;
            background: blue;
        }
        /*.personBody{
            opacity:0.5;
        }*/
    
    
    </style>
    </head>
    <body>
        <div id="container">
            <ul id="uls"></ul>
            <button id="btn">开始游戏</button>
            <div id="box">积分:0</div>
            <div id="person"></div>
        </div>
    
    <script  type="text/javascript" >
    var container = $id("container"),
    // 定时器
        timer = null,
        food = null,
        index=0;
        uls = $id("uls"),
        btn = $id("btn"),
        person=$id("person"),
        box=$id("box"),
        personDiv=$tagName(person,"div"),
        // 获取li节点
        lis=$tagName(uls,"li"),
        // size即是宽高,小正方形宽是10,高是10,水平有10个小正方形,竖直有10个小正方形
        // 这里数值是20,其实是21,因为边框有1像素
        // 创建对象
        datas = {size:20,x:10,y:10},
        // 速度200,键值39
        perDate = {speed:200,code:39};
    
    
    
    // 初始化游戏
    function init(){
         creatMap();
    }
    // 创建地图
    function creatMap(){
        container.style.width = (datas.size +1 ) * datas.x + "px";
    
        for (var i = 0; i < datas.x * datas.y; i++) {
            var oDiv = document.createElement("li");
            oDiv.style.width = oDiv.style.height = datas.size + "" + "px";
            uls.appendChild(oDiv);
            // 给li加索引
            oDiv.index=i;
        }
        start();
        
    }    
    // 点击开始游戏
    function start(){
        btn.onclick = function(){
            creatPerson();
            movePerson();
            bindPerson();
            creatFood();
        }
            
    }
    function movePerson() {
        timer = setInterval(function(){
    
            if(isOut() || isSelf()){
                alert("game over");
                clearInterval(timer);
            }
    
    
    
    
            if(collapse(personDiv[0],food)){
                // 用appendchild()进行剪切粘贴
                food.removeAttribute("class");
                person.appendChild(food);
                creatFood();
                number();
            }
            for (var i = personDiv.length - 1; i > 0; i--) {
                personDiv[i].style.left=personDiv[i-1].offsetLeft+"px";
                personDiv[i].style.top=personDiv[i-1].offsetTop+"px";
                personDiv[i].index=personDiv[i-1].index;
            }
    
    
            switch(perDate.code){
                case 37:
                    personDiv[0].style.left=personDiv[0].offsetLeft-(datas.size+1)+"px";
                    personDiv[0].index-=1;
                    break;
                case 38:
                    personDiv[0].style.top=personDiv[0].offsetTop-(datas.size+1)+"px";
                    personDiv[0].index-=datas.x;
                    break;
                case 39:
                    personDiv[0].style.left=personDiv[0].offsetLeft+datas.size+1+"px";
                    personDiv[0].index+=1;
                    break;
                case 40:
                    personDiv[0].style.top=personDiv[0].offsetTop+(datas.size+1)+"px";
                    personDiv[0].index+=datas.x;
                    break;
            }
    
        },perDate.speed)
    
    }
    function bindPerson(){
        document.onkeydown = function(e){
            var e = e || window.event;
            switch(e.keyCode){
                case 37:
                    perDate.code = 37;
                    break;
                case 38:
                    perDate.code = 38;
                    break;
                case 39:
                    perDate.code = 39;
                    break;
                case 40:
                    perDate.code = 40;
                    break;
                
            }
        }
    }
    function collapse(elements1,elements2){
        var l1 = elements1.offsetLeft;
        var r1 = elements1.offsetLeft+elements1.offsetWidth;
        var t1 = elements1.offsetTop;
        var b1 = elements1.offsetTop+elements1.offsetHeight;
    
        var l2 = elements2.offsetLeft;
        var r2 = elements2.offsetLeft+elements2.offsetWidth;
        var t2 = elements2.offsetTop;
        var b2 = elements2.offsetTop+elements2.offsetHeight;
        
    
        if(r1<=l2 || l1>=r2 || t1>=b2 || b1<=t2){
            return false;
        }else{
            return true;
        }
    }
    
    
    
    // 改变积分
    function number(){
        index+=10;
        box.innerHTML="积分:"+index;
    }
    // 是否出界
    function isOut(){
        for (var i = 0; i < lis.length; i++) {
            if(collapse(lis[i],personDiv[0])){
                return false;
            }
        }
        return turn;
    }
    // 是否撞到自己
    function isSelf(){
        for (var i = 1; i < personDiv.length; i++) {
            if(collapse(personDiv[i],personDiv[0])){
                return true;
            }
        }
        return false;
    }
    // 创建食物
    function creatFood(){
        var hrr=[];
        for (var i = 0; i < lis.length; i++) {
            if(isFilter(lis[i])){
                hrr.push(lis[i]);
            }
        }
        function isFilter(li){
            for (var i = 0; i < personDiv.length; i++) {
                if(li.index==personDiv[i].index){
                    return false;
                }
            }
            return true;
        }
    
        var random = Math.floor(Math.random()*(hrr.length-1));
        // food要定义为全局变量
        food = document.createElement("div");
        food.className="food";
        food.style.width=food.style.height=datas.size+1+"px";
        food.style.left=hrr[random].offsetLeft+"px";
        food.style.top=hrr[random].offsetTop+"px";
        container.appendChild(food);
    }
    
    // 创建人物,点击开始游戏,人物即出来
    function creatPerson(){
        var oPerson = document.createElement("div");
        oPerson.style.width = oPerson.style.height = datas.size +1 + "px";
        oPerson.index=0;
        person.appendChild(oPerson);
    }
    // 获取id的方法
    function $id(id){
        return document.getElementById(id)
    }
    // 获取集合元素的方法
    function $tagName(parend,child) {
        return parend.getElementsByTagName(child);
    }
    init();
    
    
    </script>
    </body>
    </html>

    最后显示界面

  • 相关阅读:
    暴力+前缀和——cf1335E
    【经典】区间dp——cf1336E
    简单几何+并查集 —— 2015NAQ K
    spring mvc 文件上传 和 异常页面处理
    ajax 入门
    Codeforces Round #558 (Div. 2)
    [SDOI2019]热闹又尴尬的聚会(图论+set+构造)
    [SDOI2019]移动金币(博弈论+阶梯Nim+按位DP)
    [ZJOI2019]浙江省选(半平面交)
    [ZJOI2019]开关(生成函数+背包DP)
  • 原文地址:https://www.cnblogs.com/tasly/p/11521049.html
Copyright © 2020-2023  润新知