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

js手寫(xiě)貪吃蛇游戲?qū)嵗创a

 更新時(shí)間:2023年09月05日 09:06:21   作者:下一站丶  
這篇文章主要給大家介紹了關(guān)于js手寫(xiě)貪吃蛇游戲的相關(guān)資料,貪吃蛇游戲是一款經(jīng)典的游戲,在很多平臺(tái)上都有出現(xiàn),文中給出了詳細(xì)源代碼,需要的朋友可以參考下

前端手寫(xiě)貪吃蛇游戲

貪吃蛇游戲 場(chǎng)景 使用了js 和 html /css 就可以完成 一個(gè)貪吃蛇小游戲

技術(shù)分析

主要用到的幾個(gè)技術(shù)點(diǎn):

  • clientWidth :元素的寬度,包含內(nèi)邊距
  • clientHeight :元素的高度,包含內(nèi)邊距
  • setInterval:開(kāi)啟定時(shí)器
  • clearInterval:關(guān)閉定時(shí)器
  • keydown:鍵盤(pán)事件
  • createElement : 創(chuàng)建節(jié)點(diǎn)

首先需要一個(gè)背景板 需要吧蛇和食物 在指定內(nèi)容里 不能超出接下來(lái)就是蛇的移動(dòng) 使用定時(shí)間一秒移動(dòng)一格食物就是根據(jù)計(jì)算隨機(jī)生成當(dāng)蛇和食物的位置重疊了就可以認(rèn)為蛇吃到了食物當(dāng)蛇的x,y 大于元素的寬度/高度,就認(rèn)為碰到了墻壁直接ov

以上就是關(guān)鍵技術(shù)點(diǎn) 直接源碼

源碼

HTML

<div id="game-board"></div> 

JS

<script>
  const gameBoard = document.getElementById("game-board");
  let snake = [{ x: 0, y: 0 }];
  let food = { x: 0, y: 0 };
  let direction = "right";
  function createSnake() {
    for (let segment of snake) {
      const snakeSegment = document.createElement("div");
      snakeSegment.className = "snake";
      snakeSegment.style.left = segment.x + "px";
      snakeSegment.style.top = segment.y + "px";
      gameBoard.appendChild(snakeSegment);
    }
  }
  function createFood() {
    const maxX = gameBoard.clientWidth - 20;
    const maxY = gameBoard.clientHeight - 20;
    food.x = Math.floor(Math.random() * maxX);
    food.y = Math.floor(Math.random() * maxY);
    const foodElement = document.createElement("div");
    foodElement.className = "food";
    foodElement.style.left = food.x + "px";
    foodElement.style.top = food.y + "px";
    gameBoard.appendChild(foodElement);
  }
  function updateGame() {
    const snakeHead = { x: snake[0].x, y: snake[0].y };
    // Move the snake
    if (direction === "right") snakeHead.x += 20;
    else if (direction === "left") snakeHead.x -= 20;
    else if (direction === "up") snakeHead.y -= 20;
    else if (direction === "down") snakeHead.y += 20;
    // Check for collision with food
    if (snakeHead.x === food.x && snakeHead.y === food.y) {
      snake.push({ x: snakeHead.x, y: snakeHead.y });
      const foodElement = document.querySelector(".food");
      foodElement.remove();
      createFood();
    }
    // Remove the tail segment
    snake.pop();
    // Check for collision with walls or itself
    if (
      snakeHead.x < 0 ||
      snakeHead.x >= gameBoard.clientWidth ||
      snakeHead.y < 0 ||
      snakeHead.y >= gameBoard.clientHeight
    ) {
      clearInterval(gameInterval);
      alert("Game Over!");
      return;
    }
    for (let segment of snake) {
      if (segment.x === snakeHead.x && segment.y === snakeHead.y) {
        clearInterval(gameInterval);
        alert("Game Over!");
        return;
      }
    }
    // Update the snake on the game board
    snake.unshift({ x: snakeHead.x, y: snakeHead.y });
    const snakeSegments = document.querySelectorAll(".snake");
    for (let i = 0; i < snakeSegments.length; i++) {
      snakeSegments[i].style.left = snake[i].x + "px";
      snakeSegments[i].style.top = snake[i].y + "px";
    }
  }
  createSnake();
  createFood();
  const gameInterval = setInterval(updateGame, 150);
  document.addEventListener("keydown", (event) => {
    if (event.key === "ArrowRight" && direction !== "left") direction = "right";
    else if (event.key === "ArrowLeft" && direction !== "right") direction = "left";
    else if (event.key === "ArrowUp" && direction !== "down") direction = "up";
    else if (event.key === "ArrowDown" && direction !== "up") direction = "down";
  });
</script>

CSS

<style>
  #game-board {
    width: 300px;
    height: 300px;
    border: 1px solid black;
    position: relative;
  }
  .snake {
    width: 20px;
    height: 20px;
    background-color: green;
    position: absolute;
  }
  .food {
    width: 20px;
    height: 20px;
    background-color: red;
    position: absolute;
  }
</style>

以上就實(shí)現(xiàn)了簡(jiǎn)單的貪吃蛇功能

總結(jié)

到此這篇關(guān)于js手寫(xiě)貪吃蛇游戲的文章就介紹到這了,更多相關(guān)js手寫(xiě)貪吃蛇游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS中數(shù)組實(shí)現(xiàn)代碼(倒序遍歷數(shù)組,數(shù)組連接字符串)

    JS中數(shù)組實(shí)現(xiàn)代碼(倒序遍歷數(shù)組,數(shù)組連接字符串)

    這篇文章主要介紹了JS中數(shù)組實(shí)現(xiàn)代碼(倒序遍歷數(shù)組,數(shù)組連接字符串),代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • JavaScript實(shí)現(xiàn)MIPS乘法模擬的方法

    JavaScript實(shí)現(xiàn)MIPS乘法模擬的方法

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)MIPS乘法模擬的方法,實(shí)例分析了JavaScript實(shí)現(xiàn)MIPS乘法模擬的運(yùn)算技巧,需要的朋友可以參考下
    2015-04-04
  • 在Webpack中配置別名路徑的全過(guò)程

    在Webpack中配置別名路徑的全過(guò)程

    在大型前端項(xiàng)目中,模塊路徑往往很長(zhǎng)且復(fù)雜,使用相對(duì)路徑不僅降低了代碼可讀性,還增加了維護(hù)成本,Webpack提供了配置別名路徑的功能,可以通過(guò)為常用目錄定義簡(jiǎn)短的別名,簡(jiǎn)化模塊導(dǎo)入路徑,本文將詳細(xì)介紹如何在Webpack中配置別名路徑,需要的朋友可以參考下
    2025-03-03
  • JS實(shí)現(xiàn)簡(jiǎn)單的頂部定時(shí)關(guān)閉層效果

    JS實(shí)現(xiàn)簡(jiǎn)單的頂部定時(shí)關(guān)閉層效果

    這篇文章主要介紹了通過(guò)JS實(shí)現(xiàn)的簡(jiǎn)單頂部定時(shí)關(guān)閉層效果,需要的朋友可以參考下
    2014-06-06
  • Electron 使用 Nodemon 配置自動(dòng)重啟的方法

    Electron 使用 Nodemon 配置自動(dòng)重啟的方法

    在Electron開(kāi)發(fā)過(guò)程中,每次代碼修改后需手動(dòng)重新啟動(dòng)應(yīng)用,這一過(guò)程可以通過(guò)引入Nodemon工具自動(dòng)化,Nodemon能夠監(jiān)測(cè)文件變化并自動(dòng)重啟服務(wù)器,本文給大家介紹Electron 使用 Nodemon 配置自動(dòng)重啟,感興趣的朋友一起看看吧
    2024-09-09
  • js數(shù)組常用操作方法小結(jié)(增加,刪除,合并,分割等)

    js數(shù)組常用操作方法小結(jié)(增加,刪除,合并,分割等)

    這篇文章主要介紹了js數(shù)組常用操作方法,結(jié)合實(shí)例總結(jié)了javascript數(shù)組的增加、刪除、合并、分割等操作技巧,需要的朋友可以參考下
    2016-08-08
  • JavaScript函數(shù)增強(qiáng)以及額外知識(shí)

    JavaScript函數(shù)增強(qiáng)以及額外知識(shí)

    函數(shù)就是封裝了一段可以被重復(fù)執(zhí)行調(diào)用的代碼塊,下面這篇文章主要給大家介紹了關(guān)于JavaScript函數(shù)增強(qiáng)以及額外知識(shí)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • layui加載表格,綁定新增,編輯刪除,查看按鈕事件的例子

    layui加載表格,綁定新增,編輯刪除,查看按鈕事件的例子

    今天小編就為大家分享一篇layui加載表格,綁定新增,編輯刪除,查看按鈕事件的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • javascript:;與javascript:void(0)使用介紹

    javascript:;與javascript:void(0)使用介紹

    有時(shí)候我們?cè)诰帉?xiě)js過(guò)程中,需要觸發(fā)事件而不需要返回值,那么就可能需要這樣的寫(xiě)法
    2013-06-06
  • js判斷空對(duì)象的實(shí)例(超簡(jiǎn)單)

    js判斷空對(duì)象的實(shí)例(超簡(jiǎn)單)

    下面小編就為大家?guī)?lái)一篇js判斷空對(duì)象的實(shí)例(超簡(jiǎn)單)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07

最新評(píng)論

揭西县| 老河口市| 涞水县| 紫金县| 舒兰市| 金门县| 华阴市| 本溪市| 高碑店市| 清苑县| 安国市| 麟游县| 宣城市| 达日县| 樟树市| 高平市| 射洪县| 大庆市| 黄梅县| 商河县| 和田县| 乌兰察布市| 阿合奇县| 罗山县| 新沂市| 石棉县| 玉屏| 鄄城县| 芜湖市| 龙门县| 抚松县| 连云港市| 高州市| 镇坪县| 绥滨县| 济源市| 花垣县| 潮州市| 郯城县| 托克逊县| 石狮市|