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

javascript實(shí)現(xiàn)貪吃蛇小練習(xí)

 更新時(shí)間:2020年07月05日 14:34:33   作者:余依忈  
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)貪吃蛇的小練習(xí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了js實(shí)現(xiàn)貪吃蛇的具體代碼,供大家參考,具體內(nèi)容如下

游戲思路:

  • 創(chuàng)建方塊、控制按鈕(showBlock)
  • 方塊移動(dòng)(點(diǎn)擊開(kāi)始,不斷創(chuàng)建并移除前面的方塊,用到隊(duì)列先進(jìn)先出)
  • 控制移動(dòng)(doUp\doDown\doLeft\doRight,加入用鍵盤(pán)控制)
  • 產(chǎn)生食物方塊(generateFood)
  • 吃到食物變長(zhǎng)(當(dāng)方塊位置相同時(shí),吃食物)
  • 判斷撞墻、撞到自己游戲結(jié)束
  • 設(shè)置積分
<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
</head>

<body>
 <style>
 body {
  margin: 0;
  padding: 0;
 }

 .content {
  width: 800px;
  height: 400px;
  background-color: gray;
  display: absolute;

 }
 </style>

 <div id="content" class="content">
 </div>
 <button onclick="start()">開(kāi)始游戲</button>
 <button onclick="doUp()">上</button>
 <button onclick="doDown()">下</button>
 <button onclick="doLeft()">左</button>
 <button onclick="doRight()">右</button>
 <div id="score">0</div>

 <script>
 //定義參數(shù)
 var snackBlock = {};
 snackBlock.top = 20;
 snackBlock.left = 20;
 var firstDiv = showBlock(snackBlock.left, snackBlock.top, "red");
 var snackDivArray = [];//裝方塊的數(shù)組
 snackDivArray.push(firstDiv);

 var left = 1, right = 2, up = 3, down = 4;
 var direction = right;
 var food = generateFood();//生成食物
 var hasEat = false;
 var score = 0;


 function generateFood() {

  var left = getRandomNum(39);
  var top = getRandomNum(19);
  var foodBlock = showBlock(left, top, "pink");
  foodBlock.left = left;
  foodBlock.top = top;
  return foodBlock;
 }

 function getRandomNum(max) {
  return Math.round(Math.random() * max) * 20;
 }

 function start() {
  var interval = setInterval(function () {
  var newBlock = {};
  switch (direction) {
   case up:
   newBlock.top = snackBlock.top - 20;
   newBlock.left = snackBlock.left;
   break;
   case down:
   newBlock.top = snackBlock.top + 20;
   newBlock.left = snackBlock.left;
   break;
   case left:
   newBlock.top = snackBlock.top;
   newBlock.left = snackBlock.left - 20;
   break;
   case right:
   newBlock.top = snackBlock.top;
   newBlock.left = snackBlock.left + 20;
   break;

  }


  var currentLeft = newBlock.left;
  var currentTop = newBlock.top;
  var eat = false;

  //吃食物
  if (currentLeft == food.left && currentTop == food.top) {
   removeBlock(food);
   food = generateFood();
   eat = true;
   hasEat = true;
   score += 10;//吃一個(gè)加10分
   document.getElementById("score").innerHTML = score;//寫(xiě)入div
  }

  snackBlock = newBlock;
  //是否撞墻
  if (currentLeft < 0 || currentLeft >= 800 || currentTop < 0 || currentTop >= 400) {
   alert("game over!");
   clearInterval(interval);
   return;
  }
  if (eat == false) {
   //移除尾巴
   removeBlock(snackDivArray.shift(div));
  }
  //是否撞到自己
  snackDivArray.forEach(function (item, index, array) {
   if (item.top == currentTop && item.left == currentLeft) {
   alert("game over!");
   clearInterval(interval);
   return;
   }
  });

  //創(chuàng)建新的身體
  var div = showBlock(newBlock.left, newBlock.top, "red");
  div.left = newBlock.left;
  div.top = newBlock.top;
  snackDivArray.push(div);

  }, 300);

 }

 //方向控制
 function doUp() {
  if (direction == down && hasEat) {
  return;
  }
  direction = up;
 }
 function doDown() {
  if (direction == up && hasEat) {
  return;
  }
  direction = down;
 }
 function doRight() {
  if (direction == left && hasEat) {
  return;
  }
  direction = right;
 }
 function doLeft() {
  if (direction == right && hasEat) {
  return;
  }
  direction = left;
 }

 function showBlock(left, top, color) {//產(chǎn)生方塊
  var content = document.getElementById("content");
  var snackDiv = document.createElement("div");
  snackDiv.style.width = "20px";
  snackDiv.style.height = "20px";
  snackDiv.style.left = left + "px";
  snackDiv.style.top = top + "px";
  snackDiv.style.background = color;
  snackDiv.style.position = "absolute";
  content.appendChild(snackDiv);
  return snackDiv;
 }
 function removeBlock(div) {//移除方塊
  div.parentNode.removeChild(div);
 }
 //鍵盤(pán)控制方向
 document.onkeydown = function (e) {
  if (e && e.keyCode == 38) {
  doUp();
  } else if (e && e.keyCode == 40) {
  doDown();
  } else if (e && e.keyCode == 37) {
  doLeft();
  } else if (e && e.keyCode == 39) {
  doRight();
  }
 }
 </script>
</body>

</html>

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專(zhuān)題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

java經(jīng)典小游戲匯總

javascript經(jīng)典小游戲匯總

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JS call()及apply()方法使用實(shí)例匯總

    JS call()及apply()方法使用實(shí)例匯總

    這篇文章主要介紹了JS call()及apply()方法使用實(shí)例匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • javascript的this關(guān)鍵字詳解

    javascript的this關(guān)鍵字詳解

    這篇文章主要介紹了javascript的this關(guān)鍵字的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 微信小程序?qū)崿F(xiàn)下拉刷新和上拉分頁(yè)效果的方法詳解

    微信小程序?qū)崿F(xiàn)下拉刷新和上拉分頁(yè)效果的方法詳解

    這篇文章主要為大家詳細(xì)介紹了微信小程序動(dòng)畫(huà)是如何實(shí)現(xiàn)下拉刷新和上拉分頁(yè)效果的,文中示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • JavaScript中return用法示例

    JavaScript中return用法示例

    這篇文章主要介紹了JavaScript中return用法,結(jié)合實(shí)例形式簡(jiǎn)單分析了javascript中return語(yǔ)句的功能與使用技巧,需要的朋友可以參考下
    2016-11-11
  • js Calender控件使用詳解

    js Calender控件使用詳解

    這篇文章主要介紹了js Calender控件使用詳解,需要的朋友可以參考下
    2015-01-01
  • Javascript 拖拽雛形中的一些問(wèn)題(逐行分析代碼,讓你輕松了拖拽的原理)

    Javascript 拖拽雛形中的一些問(wèn)題(逐行分析代碼,讓你輕松了拖拽的原理)

    這篇文章主要介紹了Javascript 拖拽雛形中的一些問(wèn)題(逐行分析代碼,讓你輕松了拖拽的原理),需要的朋友可以參考下
    2015-01-01
  • 微信小程序中的上拉、下拉菜單功能

    微信小程序中的上拉、下拉菜單功能

    這篇文章主要介紹了微信小程序中的上拉、下拉菜單功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • js 3種歸并操作的實(shí)例代碼

    js 3種歸并操作的實(shí)例代碼

    這篇文章介紹了js 3種歸并操作的實(shí)例代碼,有需要的朋友可以參考一下
    2013-10-10
  • 讓 JavaScript 輕松支持函數(shù)重載 (Part 2 - 實(shí)現(xiàn))

    讓 JavaScript 輕松支持函數(shù)重載 (Part 2 - 實(shí)現(xiàn))

    在上一篇文章里,我們?cè)O(shè)計(jì)了一套能在JavaScript中描述函數(shù)重載的方法,這套方法依賴(lài)于一個(gè)叫做Overload的靜態(tài)類(lèi),現(xiàn)在我們就來(lái)看看如何實(shí)現(xiàn)這個(gè)靜態(tài)類(lèi)。
    2009-08-08
  • JavaScript中三種非破壞性處理數(shù)組的方法比較

    JavaScript中三種非破壞性處理數(shù)組的方法比較

    在這篇文章中,我們將會(huì)探索處理數(shù)組的三種方法:for…of循環(huán)、數(shù)組方法.reduce()和數(shù)組方法.flatMap(),文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2023-06-06

最新評(píng)論

洛宁县| 大姚县| 抚松县| 峡江县| 汕尾市| 禄劝| 鄂尔多斯市| 安国市| 班戈县| 岱山县| 丁青县| 石柱| 信丰县| 称多县| 富阳市| 南乐县| 马山县| 昌宁县| 山丹县| 渭南市| 巴马| 大宁县| 梅河口市| 广元市| 大渡口区| 理塘县| 玉环县| 咸阳市| 车险| 手机| 泾阳县| 西乌珠穆沁旗| 米林县| 桂平市| 五指山市| 哈密市| 荥经县| 康乐县| 新宁县| 柳林县| 大方县|