原生javascript制作贪吃蛇小游戏的方法分析


Posted in Javascript onFebruary 26, 2020

本文实例讲述了原生javascript制作贪吃蛇小游戏的方法。分享给大家供大家参考,具体如下:

<!--1、 创建场景 -->
<!-- 2、定义初始数据  以及随机食物 -->
<!-- 3、控制贪吃蛇方向 -->
<!-- 4、判断位置以及和随机食物的位置 增加贪吃蛇长度 -->

HTML部分

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
  <style>
    html,body{
      width: 100%;
      height: 100%;
      overflow: hidden;
    }
    * {
      margin: 0;
      padding: 0;
    }
    li{
      width: 20px;
      height: 20px;
      border-radius: 50%;
      background: chocolate;
      position: absolute;
      left: 240px;
      top: 60px;
      z-index: 1;
      list-style: none;
    }
    #box{
      position: absolute;
      left:240px;
      top: 50px;
      width:800px;
      height:600px;
    }
  </style>
</head>
<body>
  <span>
    游戏玩法:上下左右控制小蛇的方向。
    撞到边缘游戏结束。
    长按方向键即可加速。
  </span>
  <ul id="box">
    <li></li>
    <li></li>
    <li></li>
  </ul>
</body>

js开始

function $(id){
    return document.getElementById(id);
  }
  window.onload = function () {
    // 创建背景
    js_background();
    // 随机食物
    js_food();
    // 创建贪吃蛇
    create_snake();
    document.onkeydown = function(event){
      let evt = event || window.event;
      switch (evt.keyCode) {
        case 37:direction="left";break;
        case 38:direction="up";break;
        case 39:direction="right";break;
        case 40:direction="down";break;
        default:;
        // console.log(evt.keyCode);
      }
      start_snake()
    }
  }

//贪吃蛇方向// 创建背景

// 贪吃蛇方向// 创建背景
  var direction = "right";
  // 创建背景
  function js_background(){
    let bg = document.createElement("div");
    bg.id = "js_bg";
    bg.style.cssText = "position:relative;margin :50px auto; background:skyblue; width:800px; height:600px;";
    document.body.appendChild(bg);
  }

//随机食物

var food_left = 0;
  var food_top = 0;
  function js_food(){
    food_left = parseInt(Math.random()*800/20)*20;
    food_top = parseInt(Math.random()*600/20)*20;
    let foodDiv = document.createElement("div");
    foodDiv.style.cssText = "position:absolute;width:20px; height: 20px; border-radius:50%; background:yellow;";
    foodDiv.style.left = food_left+"px";
    foodDiv.style.top = food_top+"px";
    foodDiv.id = "foodDiv";
    $("js_bg").appendChild(foodDiv);
  }

//创建贪吃蛇

function create_snake(){
    let lis = document.getElementsByTagName("li");
    lis[0].style.backgroundColor = "black";
    lis[0].style.zIndex = 1;
    for(let i = 0; i < lis.length; i++){
      lis[i].style.left = 280-(i*20)+"px";
      lis[i].style.top = 60+"px";
    }
  }

//定时器

// 定时器
  let timre = setInterval(start_snake,200);
  let lis = document.getElementsByTagName("li");
  function start_snake(){
    let left=parseFloat(lis[0].style.left);
    let top= parseFloat(lis[0].style.top);
    // console.log(top)
    switch (direction) {
      case "left":left = (left-20);break;
      case "up":top = (top-20);break;
      case "right":left = (left+20);break;
      case "down":top = (top+20);break;
      default:;
    }
    if(left<0 || left>800-20 || top<0 || top>600-20){
        window.clearInterval(timre);
        alert("亲,您Game Over");
        return;
    }
    // for(let i = 1; i <= lis.length-1; i++){
    //   lis[i].style.left = lis[i-1].style.left;
    //   lis[i].style.top = lis[i-1].style.top;
    // }
    for(var i=lis.length-1;i>0;i--){
      lis[i].style.left = lis[i-1].style.left;
      lis[i].style.top = lis[i-1].style.top;
    }
    // 改变第一节
    lis[0].style.left = left+"px";
    lis[0].style.top = top+"px";
    // console.log(food_top+"----------");
    // console.log(top);
    if(left == food_left && top == food_top){
      eat();
    }
  }
  function eat() {
    $("js_bg").removeChild($("foodDiv"));
    js_food();
    // alert("ll");
    let li = document.createElement("li");
    $("js_bg").appendChild(li);
    // create_snake();
  }

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Javascript 检测、添加、移除样式(className)函数代码
Sep 08 Javascript
关于Javascript作用域链的八点总结
Dec 06 Javascript
node.js中的querystring.stringify方法使用说明
Dec 10 Javascript
Three.js学习之网格
Aug 10 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
Aug 24 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
Dec 24 Javascript
详解Angular 4.x 动态创建组件
Apr 25 Javascript
AngularJs 常用的过滤器
May 15 Javascript
vue.js中父组件调用子组件的内部方法示例
Oct 22 Javascript
JavaScript实现的开关灯泡点击切换特效示例
Jul 08 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
Aug 01 Javascript
node-red File读取好保存实例讲解
Sep 11 Javascript
javascript 数组精简技巧小结
Feb 26 #Javascript
vue父子模板传值问题解决方法案例分析
Feb 26 #Javascript
jquery实现直播视频弹幕效果
Feb 25 #jQuery
JavaScript实现打砖块游戏
Feb 25 #Javascript
深入理解Antd-Select组件的用法
Feb 25 #Javascript
京东优选小程序的实现代码示例
Feb 25 #Javascript
手把手带你入门微信小程序新框架Kbone的使用
Feb 25 #Javascript
You might like
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
php rsa加密解密使用详解
2015/01/14 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
JavaScript 高级语法介绍
2009/06/15 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
python继承和抽象类的实现方法
2015/01/14 Python
python3操作mysql数据库的方法
2017/06/23 Python
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
python xpath获取页面注释的方法
2019/01/14 Python
python如何调用字典的key
2020/05/25 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
Java servlet面试题
2012/03/04 面试题
庆中秋节主题活动方案
2014/02/03 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
期终自我鉴定
2014/02/17 职场文书
“学雷锋活动月”总结
2014/03/09 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
鲁迅故居导游词
2015/02/05 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang
微信小程序结合ThinkPHP5授权登陆后获取手机号
2021/11/23 PHP