原生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 相关文章推荐
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
Feb 23 Javascript
jquery Mobile入门—多页面切换示例学习
Jan 08 Javascript
JS实现拖动示例代码
Nov 01 Javascript
javascript 表格内容排序 简单操作示例代码
Jan 03 Javascript
SWFUpload多文件上传及文件个数限制的方法
May 31 Javascript
js实现PC端和移动端刮卡效果
Mar 27 Javascript
BootStrap中的Fontawesome 图标
May 25 Javascript
在一般处理程序(ashx)中弹出js提示语
Aug 16 Javascript
微信小程序使用swiper组件实现层叠轮播图
Nov 04 Javascript
如何使用JavaScript实现栈与队列
Jun 24 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
Jul 10 jQuery
layui 实现table翻页滚动条位置保持不变的例子
Sep 05 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
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
PHP 的 __FILE__ 常量
2007/01/15 PHP
php之字符串变相相减的代码
2007/03/19 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
第一次接触神奇的Bootstrap网格系统
2016/07/27 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
杭州-DOTNET笔试题集
2013/09/25 面试题
护理专业本科生自荐信
2013/10/01 职场文书
应届大学生自荐信
2013/12/05 职场文书
高中毕业的自我鉴定
2013/12/09 职场文书
学前教育毕业生自荐信范文
2013/12/24 职场文书
办公室人员先进事迹
2014/01/27 职场文书
给老婆的婚前保证书
2014/02/01 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
《雨霖铃》听课反思
2014/02/13 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
增员口号大全
2014/06/18 职场文书
小学关爱留守儿童活动方案
2014/08/25 职场文书
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js