javascript -- (贪吃蛇游戏)

界面设置

/***body**/

<body>

  <h1>贪吃蛇游戏</h1>

  /***score记录成绩**/

  <p id="score">0</p>

  /***地图**/

  <div id="snake_map">

    /***地图的绘制通过js实现**/

  </div>

  /***三个按钮**/

  <div class = "box">

    <button type="button" name="button" id="reset">重新开始</button>

    <button type="button" name="button" id="createSpeed">升速</button>

    <button type="button" name="button" id="stop">暂停</button>

  </div>

</body>

/***body部分结束**/

/***style**/

<style>

  * {

    margin: 0;

    padding: 0;

  }

  h1 {

    text-align: center;

  }

  #score {

    text-align: center;

    font-size: 2em;

  }

  #snake_map {

    /***宽和高通过js实现**/

    margin: 0 auto;

    border: 1px solid rgb(196, 231, 232);

    background: rgb(31, 169, 156);

  }

  /***路径地图的行样式**/

  .row {

    height: 20px;

  }

  .cell {

    height: 20px;

    width: 20px;

    box-sizing: border-box;

    border: 1px solid lightgray;

    float:left;

  }

  /***蛇身的样式**/

  activeSnake {

    /***蛇身和随机出现的小方块通过js实现**/

    background: rgb(10, 75, 70);

  }

  .mask {

    background: rgb(106, 249, 184);

  }

  .box {

    width: 300px;

    margin: auto;

    margin-top: 15px;

  }

  .box button {

    border: 1px solid blue;

    width: 80px;

    height: 30px;

    background: rgb(31, 169, 156);

  }

</style>

/***style部分结束**/

/***javascript**/

<script type="text/javascript" >   //或者外部导入

  /***获取标签元素**/

  var score = document.getElementById(‘score‘);

  var map = document.getElementById(‘snake_map‘);

  /***为了动态改变地图的大小,以下设置两个变量,用于存储行数和列数(即方格的个数)**/

  var rowNumber = 30;//行数

  var cellNumber = 20;//列数

  /***设置地图的宽和高**/

  var mapWidth = cellNumber * 20;

  var mapHeight = rowNumber * 20;

  map.style.width = mapWidth + ‘px‘;

  map.style.height = mapHeight + ‘px‘;

  /***speed为定时器中的时间参数**/

  var speed = 300;

  /***创建一个二维数组,用来记录地图上的所有div的位置**/

  var snakeDivPosition = [];

  /***通过双层for循环来创建地图元素**/

  for(var i = 0; i < rowNumber; i++) {

    /***创建行div**/

    var rowDiv = document.createElement(‘div‘);

    /***css样式设置**/

    rowDiv.className = ‘row‘;

    /***将行div添加到路径地图中**/

    map.appendChild(rowDiv);

    /***创建一个行级数组,用来存储当前行中的每个div方块**/

    var rowArray = [];

    for(var j = 0; j < cellNumber; j++) {

      /***创建每一行中的列元素**/

      var cellDiv = document.createElement(‘div‘);

      /***css样式设置**/

      cellDiv.className = ‘cell‘;

      /***将列元素添加到当前行中**/

      rowDiv.appendChild(cellDiv);

      /***同时将方块添加到行数组中**/

      rowArray.push(cellDiv);

    }

    /***当前内层循环结束,将行数组添加到二维数组中**/

    snakeDivPosition.push(rowArray);

  }

  /***创建蛇身模型**/

  /***创建一个一维数组,用来存储蛇身的长度**/

  var snake = [];

  /***固定蛇身的起始长度**/

  for(var i = 0; i < 3; i++) {

    /***为蛇身设置颜色样式**/

    snakeDivPosition[0][i].className = ‘cell activeSnake‘;

    /***存储在蛇身数组中**/

    snake[i] = snakeDivPosition[0][i];

  }

  /***定义变量来控制蛇身**/

  /***蛇头的起始位置偏移量**/

  var x = 2;

  var y = 0;

  /***分数计时器**/

  var scoreCount = ‘0‘

  /***记录随机出现的小方块所在的位置**/

  var maskX = 0;

  var maskY = 0;

  /***记录蛇身移动的方向,初始为向右**/

  var direction = ‘right‘;

  /***用来判断是否需要改变蛇的移动方向**/

  var changeDir = true;

  /***延迟定时器**/

  var delayTimer = null;

  /***添加键盘事件监听方向键来改变蛇的移动方向**/

  document.onkeydown = function(event){

    /***判断是否需要改变方向true(需要)false(不需要)**/

    if(!changeDir) {

      return;//return空表示直接结束函数,后续代码不执行

    }

    /***获取事件**/

    event = event||window.event;

    /***为了合理处理蛇的移动,需要判断蛇头和蛇身*

    *假设蛇向右移动,则左键、右键无效*/

    if(direction == ‘right‘ && event.keyCode == 37) {

      return;

    }

    if(direction == ‘left‘ && event.keyCode == 39) {

      return;

    }

    if(direction == ‘up‘ && event.keyCode == 40) {

      return;

    }

    if(direction == ‘down‘ && event.keyCode == 38) {

      return;

    }

    /***通过keyCode确定蛇的移动方向**/

    switch(event.keyCode) {

      case 37:

        direction = ‘left‘;

        break;

      case 38:

        direction = ‘up‘;

        break;

      case 39:

        direction = ‘right‘;

        break;

      case 40:

        direction = ‘down‘;

        break;

    }

    changeDir = false;

    delayTimer = setTimeout(function() {

      /***设置是否需要改变方向**/

      changeDir = true;

    },speed);

  }

  /***moveTimer获取定时器**/

  var moveTimer;

  /***游戏开始运行**/

  function change() {

    moveTimer = setInterval(function() {

      /***关闭延迟定时器*

      *根据direction设置的方向来设置蛇头的位置**/

      switch(direction) {

        case ‘left‘:

          x--;

          break;

        case ‘right‘:

          x++;

          break;

        case ‘up‘:

          y--;

          break;

        case ‘down‘:

          y++;

          break;

      }

      /***判断是否游戏结束**/

      if(x < 0|| x >= cellNumber || y < 0|| y >= rowNumber) {

        alert(‘game over‘);

        /***结束蛇移动的定时器**/

        clearInterval(moveTimer);

        return;/***终止键盘事件**/

      }  

      /***判断是否触碰到自身**/

      for(var i = 0; i < snake.length; i++) {

        /***将此时蛇头移动的位置与之前所有的组成蛇的div的位置进行比较,如果相同,游戏结束**/

        if(snake[i] == snakeDivPosition[y][x]) {

          alert(‘game over‘);

          clearInterval(moveTimer);

          return;

        }

      }

      /***判断蛇头移动的位置是否有mask**/

      if(maskX == x && maskY == y) {

        snakeDivPosition[maskY][maskX].className = ‘cell activeSnake‘;

        /***蛇头添加div**/

        snake.push(snakeDivPosition[maskY][maskX]);

        /***记录分数**/

        scoreCount++;

        /***更新当前分数**/

        score.innerHtML = scoreCount;

        /***随机生成新的mask**/

        createMask();

      } else {

        /***让蛇移动,蛇尾去掉自身的颜色,变成格子的颜色**/

        snake[0].className = ‘cell‘;

        /***将蛇尾div从数组中移出**/

        snake.shift();

        /***定位到的新的蛇头加入到蛇数组中**/

        snakeDivPosition[y][x].className = ‘cell activeSnake‘;

        snake.push(snakeDivPosition[y][x]);

      }

    },speed);

  }

  /***定义随机函数**/

  function random(min,max) {

    return Math.floor(Math.random()*(max-min+1) + min);

  }

  function createMask() {

    /***随机产生新的mask的x值和y值**/

    maskX = random(0,cellNumber - 1);

    maskY = random(0,rowNumber - 1);

    /***如果随机产生的mask的坐标在蛇身上**/

    if(snakeDivPosition[maskY][maskX].className == ‘cell activeSnake‘) {

      /***重新生成**/

      createMask();

    } else {

      snakeDivPosition[maskY][maskX].className = ‘cell mask‘;

    }

  }

  change();

  createMask();

</script>

时间: 2024-08-24 04:33:29

javascript -- (贪吃蛇游戏)的相关文章

使用javascript实现贪吃蛇游戏

当自己用代码实贪吃蛇游戏时,是很有成就感的一件事情.同时在写的过程中也是自己对javascript基本语法的复习与体会. 以下就是代码以及一些代码注释:(bug是有的,浏览器的兼容性,本人的能力无法解决) <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content=&quo

WebGL实现HTML5的3D贪吃蛇游戏

js1k.com收集了小于1k的javascript小例子,里面有很多很炫很酷的游戏和特效,今年规则又增加了新花样,传统的classic类型基础上又增加了WebGL类型,以及允许增加到2K的++类型,多次想尝试提交个小游戏但总无法写出让自己满意还能控制在这么小的字节范围. 自己写不出来,站在巨人肩膀总是有机会吧,想起<基于HTML5的电信网管3D机房监控应用>这篇提到的threejs,babylonjs和Hightopo的几种基于WebGL的3D引擎,突然想挑战下自己实现个100行JS的3D小

《结对-网页贪吃蛇游戏-需求分析》

一. 介绍:贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本.既简单又耐玩,深受人们喜爱. 二. 用户需求:1.可在浏览器上进行游戏. 2.可以调节难度. 3.可查看历史战绩. 4.可以更改背景,游戏的开始暂停以及分辨率的调节. 5.可显示游戏的实时分数. 三. 实施做法:应用html,css,javascript,语言进行代码编写,运用sublime,DW进行代码编写调试运行. 四. 游戏特点:无需下载,用户可以随时打开浏览器进行游戏. 五. 游戏规定:游戏者通过键盘的上下左右控制蛇头

可选择关卡的贪吃蛇游戏

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>可选择关卡的贪吃蛇游戏石家庄拓展公司<

JS贪吃蛇游戏

<!DOCTYPE html><html> <head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <title>JS贪吃蛇游戏</title>    <style>    * {        margin: 0;    

用Java开发贪吃蛇游戏

贪吃蛇游戏的设计步骤: Part 1: 设计游戏图纸 画出900*700的白色窗口 在窗口上添加画布 在画布上添加标题 在画布上添加黑色游戏区 Part 2: 放置静态的蛇:一个头.两个身体 加上开始提示:按空格键开始游戏 让蛇动起来:监听Timer事件,平移数据 实现游戏暂停 实现转向功能 Part 3: 添加食物 吃掉食物 添加死亡条件 实现“重新开始”功能 添加分数和长度 游戏图纸如下: 蛇及游戏框的素材如下:                              Snake主类: 1

Qt版贪吃蛇游戏

Qt版贪吃蛇游戏 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 最近在学习Qt,用了一个多月的时间掌握了Qt中最基本的知识,也完成了<Qt版音乐播放器>.<Qt版贪吃蛇游戏>.<Qt版双人俄罗斯方块>以及<Qt版科学计算器>等,之前在VC下写过这些程序,所以在Qt下只是改变了显示等语句,我写过<C++版贪吃蛇游戏>.<VC版贪吃蛇游戏>,当时将与显示等无关的东西封装起来,在Qt下直接用,只

【141030】VC++贪吃蛇游戏源码(Win32+API)

不错的贪吃蛇游戏,运用了Win32的API.完整源代码,在VS2005下编译通过.内附有编程要点,很好的学习范例. 游戏源码下载地址:点击下载

结对-开发贪吃蛇游戏-开发环境搭建过程

项目:贪吃蛇游戏开发 环境搭建: Mac下: 1)官网下载jkd1.8版本. 2)下载IDE--eclipse或Myeclipse win下: 1)官网下载JDK,找到符合自己电脑的版本,下载的本地 2)下载IDE--eclipse或Myeclipse 3)配置环境变量: i.计算机->属性->高级系统设置 ii.单击高级系统设置->环境变量在系统变量里面分别设置JAVA_HOME.CLASSPATH和Path iii.在系统变量里找变量名JAVA_HOME,如果没有就点击新建.输入变量