最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript實現(xiàn)簡單的貪吃蛇游戲

 更新時間:2015年03月31日 08:56:21   投稿:hebedich  
本文很簡單,給大家分享了一段使用javascript實現(xiàn)簡單的貪吃蛇游戲的代碼,算是對自己學(xué)習(xí)javascript的一次小小的總結(jié),代碼參考了網(wǎng)友的部分內(nèi)容,推薦給大家,希望對大家能夠有所幫助。

javascript實現(xiàn)簡單的貪吃蛇游戲,功能很簡單,代碼也很實用,就不多廢話了,小伙伴們參考注釋吧。

<html>
<head>
  <meta http-equiv='content-type' content='text/html;charset=utf-8'>
<title>貪吃蛇</title>
<script type="text/javascript">
  var map;  //地圖
  var snake; //蛇
  var food;  //食物
  var timer; //定時器
  var initSpeed=200; //初始定時器時間間隔(毫秒),間接代表蛇移動速度
  var nowSpeed=initSpeed; //游戲進行時蛇移動速度
  var grade=0;  //積分
  var flag=1;   //(可間接看做)關(guān)卡
  //地圖類
  function Map(){
    this.width=800;
    this.height=400;
    this.position='absolute';
    this.color='#EEEEEE';
    this._map=null;
    //生成地圖
    this.show=function(){
      this._map=document.createElement('div');
      this._map.style.width=this.width+'px';
      this._map.style.height=this.height+'px';
      this._map.style.position=this.position;
      this._map.style.backgroundColor=this.color;
      document.getElementsByTagName('body')[0].appendChild(this._map);
    }
  }
  //食物類
  function Food(){
    this.width=20;
    this.height=20;
    this.position='absolute';
    this.color='#00FF00';
    this.x=0;
    this.y=0;
    this._food;
    //生成食物
    this.show=function(){
      this._food=document.createElement('div');
      this._food.style.width=this.width+'px';
      this._food.style.height=this.height+'px';
      this._food.style.position=this.position;
      this._food.style.backgroundColor=this.color;
      this.x=Math.floor(Math.random()*map.width/this.width);
      this.y=Math.floor(Math.random()*map.height/this.width);
      this._food.style.left=this.x*this.width;
      this._food.style.top=this.y*this.height;
 
      map._map.appendChild(this._food);
    }
  }
  //蛇類
  function Snake(){
    this.width=20;
    this.height=20;
    this.position='absolute';
    this.direct=null;//移動方向
    //初始蛇身
    this.body=new Array(
        [3,2,'red',null],//蛇頭
        [2,2,'blue',null],
        [1,2,'blue',null]
      );
    //生成蛇身
    this.show=function(){
      for(var i=0;i<this.body.length;i++){
        if(this.body[i][3]==null){
          this.body[i][3]=document.createElement('div');
          this.body[i][3].style.width=this.width;
          this.body[i][3].style.height=this.height;
          this.body[i][3].style.position=this.position;
          this.body[i][3].style.backgroundColor=this.body[i][2];
          map._map.appendChild(this.body[i][3]);
        }
        this.body[i][3].style.left=this.body[i][0]*this.width+'px';
        this.body[i][3].style.top=this.body[i][1]*this.height+'px';
      }
    }
    //控制蛇移動
    this.move=function(){
       
      var length=this.body.length-1;
      for(var i=length;i>0;i--){
        this.body[i][0]=this.body[i-1][0];
        this.body[i][1]=this.body[i-1][1];
      }
 
      switch(this.direct){
        case 'right':
          this.body[0][0]=this.body[0][0]+1;
          break;
        case 'left':
          this.body[0][0]=this.body[0][0]-1;
          break;
        case 'up':
          this.body[0][1]=this.body[0][1]-1;
          break;
        case 'down':
          this.body[0][1]=this.body[0][1]+1;
          break;
      }
       
      this.condition();
      this.show();
    }
    //定時器,開始游戲時,調(diào)用
    this.speed=function(){
      timer=setInterval('snake.move()',initSpeed);
    }
    //條件處理
    this.condition=function(){
      //吃食物
      if(this.body[0][0]==food.x&&this.body[0][1]==food.y){
        grade++;
        this.body[[this.body.length]]=[0,0,'blue',null];
        map._map.removeChild(food._food)
        food.show();
      }
      //判斷是否撞墻
      if(this.body[0][0]<0||this.body[0][0]>=map.width/this.width||this.body[0][1]<0||this.body[0][1]>=map.height/this.height){
        alert('game over');
        clearInterval(timer);
        return ;
      }
      //判斷是否撞到自身
      for(var i=1;i<this.body.length;i++){
        if(this.body[0][0]==this.body[i][0]&&this.body[0][1]==this.body[i][1]){
          alert('game over');
          clearInterval(timer);
          return ;
        }
      }
      //速度提升處理,積分每曾2分,速度提升一倍
      if(grade/2==flag){
        clearInterval(timer);
        flag++;
        nowSpeed=initSpeed/flag;
        timer=setInterval('snake.move()',nowSpeed);
      }
      document.title='貪吃蛇 積分'+grade+' 速度等級'+initSpeed/nowSpeed;
 
    }
  }
 
  document.onkeydown=function(event){
    //按下任意鍵,開始游戲
    if(snake.direct===null){
      snake.direct='right';
      snake.speed();
    }
    //控制方向,W S D A分別代表 上下右左
    switch(window.event?window.event.keyCode:event.keyCode){//瀏覽器兼容處理
      case 87 :
        snake.direct=snake.body[0][0]==snake.body[1][0]?snake.direct:'up';//避免反向移動,觸發(fā)死亡bug
        break;
      case 83 :
        snake.direct=snake.body[0][0]==snake.body[1][0]?snake.direct:'down';
        break;
      case 68 :
        snake.direct=snake.body[0][1]==snake.body[1][1]?snake.direct:'right';
        break;
      case 65 :
        snake.direct=snake.body[0][1]==snake.body[1][1]?snake.direct:'left';
        break;
    }
  }
  //自動加載游戲
  window.onload=function(){
    map=new Map();
    map.show();
    food=new Food();
    food.show();
    snake=new Snake();
    snake.show();
     
  }
</script>
</head>
<body>
</body>
</html>

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • npm install 、npm install --save 和 npm install --save-dev的區(qū)別介紹

    npm install 、npm install --save 和&n

    這篇文章主要介紹了npm install 、npm install --save 和 npm install --save-dev的區(qū)別介紹,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • JavaScript面試之如何實現(xiàn)數(shù)組拍平(扁平化)方法

    JavaScript面試之如何實現(xiàn)數(shù)組拍平(扁平化)方法

    數(shù)組扁平化是指將一個多維數(shù)組變?yōu)橐痪S數(shù)組,下面這篇文章主要給大家介紹了關(guān)于JavaScript面試之如何實現(xiàn)數(shù)組拍平(扁平化)方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-11-11
  • ionic2.0雙擊返回鍵退出應(yīng)用

    ionic2.0雙擊返回鍵退出應(yīng)用

    這篇文章主要為大家詳細介紹了ionic2.0雙擊返回鍵退出應(yīng)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 基于JavaScript實現(xiàn)驚艷的打字機效果

    基于JavaScript實現(xiàn)驚艷的打字機效果

    這篇文章主要為大家詳細介紹了如何使用JavaScript打造驚艷打字機效果,讓你的文字生動躍動,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 一個JavaScript防止表單重復(fù)提交的實例

    一個JavaScript防止表單重復(fù)提交的實例

    防止重復(fù)表單提交的方法有很多,本文使用JavaScript來實現(xiàn)防止表單重復(fù)提交,很簡單,但很實用,新手朋友們不要錯過
    2014-10-10
  • uniapp中刷新本頁面的三種方法

    uniapp中刷新本頁面的三種方法

    這篇文章主要給大家介紹了關(guān)于uniapp中刷新本頁面的三種方法,刷新頁面的具體邏輯可以根據(jù)實際需求進行編寫,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • JS正則表達式獲取分組內(nèi)容的方法詳解

    JS正則表達式獲取分組內(nèi)容的方法詳解

    這篇文章主要介紹了JS正則表達式獲取分組內(nèi)容的方法,有需要的朋友可以參考一下
    2013-11-11
  • 微信小程序用戶后臺定位及錄音授權(quán)及請求示例

    微信小程序用戶后臺定位及錄音授權(quán)及請求示例

    這篇文章主要為大家介紹了微信小程序用戶后臺定位及錄音授權(quán)及請求示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • 跟我學(xué)習(xí)javascript的循環(huán)

    跟我學(xué)習(xí)javascript的循環(huán)

    跟我學(xué)習(xí)javascript的循環(huán),本文不僅針對javascript循環(huán)進行講解,還對prototype補充了幾點小tips,歡迎大家閱讀。
    2015-11-11
  • 詳解如何愉快的在微信小程序中使用SVG圖標(biāo)

    詳解如何愉快的在微信小程序中使用SVG圖標(biāo)

    這篇文章主要介紹了詳解如何愉快的在微信小程序中使用SVG圖標(biāo),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評論

苍南县| 阳谷县| 金阳县| 和平县| 伽师县| 阿尔山市| 临桂县| 沈阳市| 淮安市| 义乌市| 连云港市| 南康市| 溧水县| 邢台县| 景泰县| 二手房| 双鸭山市| 拉孜县| 聂拉木县| 泸水县| 城口县| 南乐县| 肇源县| 阿克陶县| 南郑县| 桂东县| 永济市| 日土县| 阳朔县| 邮箱| 花莲市| 普安县| 伊川县| 皮山县| 齐齐哈尔市| 视频| 高要市| 新竹县| 睢宁县| 汕尾市| 吉隆县|