原生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 相关文章推荐
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
Apr 29 Javascript
javascript js cookie的存储,获取和删除
Dec 29 Javascript
js利用Array.splice实现Array的insert/remove
Jan 13 Javascript
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
Jun 02 Javascript
jQuery的animate函数实现图文切换动画效果
May 03 Javascript
jQuery中$.extend()用法实例
Jun 24 Javascript
jquery调整表格行tr上下顺序实例讲解
Jan 09 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
Feb 06 Javascript
mui js控制开关状态、修改switch开关的值方法
Sep 03 Javascript
js之切换全屏和退出全屏实现代码实例
Sep 09 Javascript
Vue.js组件使用props传递数据的方法
Oct 19 Javascript
JS实现简单控制视频播放倍速的实例代码
Apr 18 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中的函数嵌套层数限制分析
2011/06/13 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
python自定义类并使用的方法
2015/05/07 Python
深入解析Python中的集合类型操作符
2015/08/19 Python
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
Linux下python制作名片示例
2018/07/20 Python
Python Pillow Image Invert
2019/01/22 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
Pytorch中.new()的作用详解
2020/02/18 Python
python列表的逆序遍历实现
2020/04/20 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
Python读写锁实现实现代码解析
2020/11/28 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
python中scipy.stats产生随机数实例讲解
2021/02/19 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
2014年财政所工作总结
2014/11/22 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
在校生证明
2015/06/17 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技