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

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

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

前端手寫貪吃蛇游戲

貪吃蛇游戲 場景 使用了js 和 html /css 就可以完成 一個貪吃蛇小游戲

技術分析

主要用到的幾個技術點:

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

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

以上就是關鍵技術點 直接源碼

源碼

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>

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

總結(jié)

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

相關文章

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

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

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

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

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

    在Webpack中配置別名路徑的全過程

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

    JS實現(xiàn)簡單的頂部定時關閉層效果

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

    Electron 使用 Nodemon 配置自動重啟的方法

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

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

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

    JavaScript函數(shù)增強以及額外知識

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

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

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

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

    有時候我們在編寫js過程中,需要觸發(fā)事件而不需要返回值,那么就可能需要這樣的寫法
    2013-06-06
  • js判斷空對象的實例(超簡單)

    js判斷空對象的實例(超簡單)

    下面小編就為大家?guī)硪黄猨s判斷空對象的實例(超簡單)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07

最新評論

青铜峡市| 呼图壁县| 台湾省| 霍林郭勒市| 宁国市| 广安市| 延津县| 开原市| 竹北市| 衡阳县| 方山县| 哈密市| 济宁市| 吉首市| 故城县| 奉节县| 庆元县| 锡林郭勒盟| 昌都县| 洞头县| 卢龙县| 宜昌市| 和硕县| 龙门县| 昌江| 湾仔区| 西盟| 合阳县| 宜都市| 运城市| 安丘市| 达州市| 彰化市| 永春县| 钟祥市| 定边县| 定州市| 偃师市| 中方县| 日喀则市| 宝应县|