贪吃蛇

作者: 升龙无涯 | 来源:发表于2021-09-01 11:57 被阅读0次

贪吃蛇效果:


贪吃蛇

键盘的w、s、a、d分别来控制蛇移动方向:上、下、左、右
js代码:

// 创建地图
var map = document.createElement('div')
// 设置样式
setStyle(map,{
    width:"800px",
    height:"500px",
    border:"3px solid #000",
    position:"relative",
    backgroundColor:"#eee"   
})
// 将地图放入body中
document.body.appendChild(map)
// 创建食物
var food = createFood()
function createFood(){
    var div = document.createElement('div')
    // 设置样式
    setStyle(div,{
        width:"10px",
        height:"10px",
        backgroundColor:"#0f0",
        position:"absolute",
        // 因为蛇是一次移动10px,所以left和top是随机的,但是必须保证是10的倍数
        left:parseInt(getRandom(map.clientWidth - 10)/10)*10 + 'px',
        top:parseInt(getRandom(map.clientHeight - 10)/10)*10 + 'px',
    })
    // 将食物放在地图中
    map.appendChild(div)
    return div
}
// 定义蛇的身体的坐标
var body = [
    {
        x:0,
        y:0
    },
    {
        x:10,
        y:0
    },
    {
        x:20,
        y:0
    },
]
// 根据蛇的身体坐标显示蛇的身体
show()
function show(){
    for(var i=0;i<body.length;i++){
        var div = document.createElement('div')
        setStyle(div,{
            width:"10px",
            height:"10px",
            backgroundColor:"blue",
            position:"absolute",
            left:body[i].x + 'px',
            top:body[i].y + 'px'
        })
        // 给蛇身体div设置类名
        div.className = 'snake';
        // 蛇头的特殊样式
        if(i === body.length-1){
            div.style.borderRadius = '50%';
            div.style.backgroundColor = 'red';
        }
        // 将蛇的身体放进地图中
        map.appendChild(div)
    }
}
// 定义蛇的默认移动方向
var direction = 'right';
// 设置键盘事件更改移动方向
document.onkeydown = function(){
    var e = window.event;
    // 通过键盘码获取到当前按下的键的字符
    var keycode = e.keyCode || e.which;
    var word = String.fromCharCode(keycode).toLowerCase()
    switch(word){
        case 'a':
            direction = 'left';
        break;
        case 'w':
            direction = 'up';
        break;
        case 'd':
            direction = 'right';
        break;
        case 's':
            direction = 'down';
        break;
    }
}
// 让蛇根据方向移动身体
var timerId = setInterval(function(){
    // 将之前的身体删除 - 创建新的身体
    var snakes = document.querySelectorAll('.snake');
    if(snakes.length){
        for(var i=0;i<snakes.length;i++){
            map.removeChild(snakes[i])
        }
    }
    // 修改身体坐标 - 除了蛇头的坐标外,其他身体的坐标是前一节身体的坐标
    for(var i=0;i<body.length-1;i++){
        body[i].x = body[i+1].x;
        body[i].y = body[i+1].y;
    }   
    // 根据移动方向修改蛇头的坐标
    switch(direction){
        case 'up':
            body[body.length-1].y -= 10
        break;
        case 'down':
            body[body.length-1].y += 10
        break;
        case 'left':
            body[body.length-1].x -= 10
        break;
        case 'right':
            body[body.length-1].x += 10
        break;
    }
    // 根据新的坐标重新显示身体
    show()
    // 移动过程判断是否吃到食物
    eat()
    // 移动过程判断是否死亡
    die()
},500)
// 蛇死亡
function die(){
    // 蛇头撞墙
    if(body[body.length-1].x<0 || body[body.length-1].x>map.clientWidth-10 || body[body.length-1].y<0 || body[body.length-1].y>map.clientHeight-10){
        alert('GAME OVER')
        // 清除定时器
        clearInterval(timerId)
    }
    // 蛇头撞自己身体
    for(var i=0;i<body.length-1;i++){
        if(body[i].x===body[body.length-1].x && body[i].y===body[body.length-1].y){    
            alert('GAME OVER')
            // 清除定时器
            clearInterval(timerId)
        }
    }
}
// 蛇吃到食物
function eat(){
    // 如果蛇头的坐标跟食物的坐标完全重叠就表示吃到了食物
    if(body[body.length-1].x === food.offsetLeft && body[body.length-1].y === food.offsetTop){
        // 删除食物
        map.removeChild(food)
        // 蛇的身体增加一节
        body.unshift({
            x:body[0].x,
            y:body[0].y
        })
        // 重新创建食物
        food = createFood()
    }
}
// 获取随机数的函数
function getRandom(a,b=0){
    var max = a;
    var min = b;
    if(a<b){
        max = b;
        min = a;
    }
    return Math.floor(Math.random() * (max - min)) + min;
}
// 设置样式的函数
function setStyle(ele, styleObj){
    for(var attr in styleObj){
        ele.style[attr] = styleObj[attr];
    }
}

相关文章

  • 贪吃蛇巴士 for Mac(休闲街机游戏) v0.1

    贪吃蛇巴士(snakeybust)是将经典街机游戏“贪吃蛇”用现代图形来展现的休闲街机游戏。贪吃蛇巴士Mac版游戏...

  • 贪吃蛇背后的故事

    贪吃蛇介绍 贪吃蛇最先出现于1976年,是Gremlin平台推出的一款经典街机游戏Blockade。贪吃蛇(也叫做...

  • 贪吃蛇大结局

    童年的回忆,贪吃蛇大结局,看一下贪吃蛇最后变成了什么?

  • JS-进阶-Day2

    贪吃蛇案例:

  • 贪吃蛇

    js 贪吃蛇代码

  • 我的贪吃蛇

    最近一直在玩一个游戏――贪吃蛇大作战,为此,耗费我不少时间。 我给我的贪吃蛇命名:我的贪吃蛇wr,后面wr是我名字...

  • 萌萌小蛇蛇

    这绝对是一个会令你振奋的贪吃蛇游戏,支持多人在线的贪吃蛇游戏。好好想想,你是否已经腻歪了单纯的吃食物变长的贪吃蛇游...

  • 一只贪吃蛇的自白

    我是一只贪吃蛇,想必大家都玩儿过贪吃蛇的游戏,那里面的贪吃蛇吃的东西越多,身体就越长,最后把自己给弄死了。我跟他们...

  • 2017-06-03

    贪吃蛇啊, 贪吃蛇, 你贪吃的是你的食物, 我贪吃的是对世间的留恋, 美女, 金钱, 路上的风景……

  • Web前端------JS高级贪吃蛇游戏案例(主要内容:原型)

    贪吃蛇案例思想总结 贪吃蛇游戏主要包括:地图对象、蛇对象、食物对象、游戏对象(控制游戏执行、操控小蛇和食物对象),...

网友评论

      本文标题:贪吃蛇

      本文链接:https://www.haomeiwen.com/subject/gdyxwltx.html