html+css+javascript实现贪吃蛇游戏

一、贪吃蛇游戏

这是一个简单的用HTML、CSS和JavaScript实现的贪吃蛇游戏示例。

HTML部分:

<!DOCTYPE html>
<html>
<head>
  <title>贪吃蛇游戏</title>
  <style>
    #gameBoard {
      position: relative;
      width: 400px;
      height: 400px;
      border: 1px solid black;
    }

    .snake {
      position: absolute;
      width: 20px;
      height: 20px;
      background-color: green;
    }

    .food {
      position: absolute;
      width: 20px;
      height: 20px;
      background-color: red;
    }
  </style>
</head>
<body>
  <div id="gameBoard"></div>

  <script src="snake.js"></script>
</body>
</html>

JavaScript部分(snake.js):

document.addEventListener('DOMContentLoaded', () => {
  const gameBoard = document.getElementById('gameBoard');
  let snake = [{ x: 200, y: 200 }];
  let food = {};

  function createFood() {
    food = {
      x: Math.floor(Math.random() * 20) * 20,
      y: Math.floor(Math.random() * 20) * 20
    };

    const foodElement = document.createElement('div');
    foodElement.className = 'food';
    foodElement.style.left = food.x + 'px';
    foodElement.style.top = food.y + 'px';
    gameBoard.appendChild(foodElement);
  }

  function drawSnake() {
    gameBoard.innerHTML = '';

    snake.forEach(segment => {
      const snakeElement = document.createElement('div');
      snakeElement.className = 'snake';
      snakeElement.style.left = segment.x + 'px';
      snakeElement.style.top = segment.y + 'px';
      gameBoard.appendChild(snakeElement);
    });
  }

  function moveSnake() {
    const head = { x: snake[0].x, y: snake[0].y };

    if (direction === 'up') head.y -= 20;
    if (direction === 'down') head.y += 20;
    if (direction === 'left') head.x -= 20;
    if (direction === 'right') head.x += 20;

    snake.unshift(head);

    if (head.x === food.x && head.y === food.y) {
      createFood();
    } else {
      snake.pop();
    }
  }

  function checkCollision() {
    const head = snake[0];

    if (
      head.x < 0 ||
      head.x >= gameBoard.clientWidth ||
      head.y < 0 ||
      head.y >= gameBoard.clientHeight ||
      snake.slice(1).some(segment => segment.x === head.x && segment.y === head.y)
    ) {
      clearInterval(gameLoop);
      alert('游戏结束!');
    }
  }

  let direction = 'right';
  document.addEventListener('keydown', event => {
    if (event.key === 'ArrowUp' && direction !== 'down') direction = 'up';
    if (event.key === 'ArrowDown' && direction !== 'up') direction = 'down';
    if (event.key === 'ArrowLeft' && direction !== 'right') direction = 'left';
    if (event.key === 'ArrowRight' && direction !== 'left') direction = 'right';
  });

  createFood();
  let gameLoop = setInterval(() => {
    moveSnake();
    drawSnake();
    checkCollision();
  }, 150);
});

这个示例使用了HTML来创建游戏界面,CSS来设置样式,JavaScript来处理游戏逻辑。游戏界面是一个400x400像素的方格。游戏中的蛇是由一系列20x20像素的方块组成,食物也是一个20x20像素的方块。玩家可以使用方向键来控制蛇的移动方向。当蛇吃到食物时,它会变长。游戏会在蛇撞到边界或自己的身体时结束。

你可以将这些代码保存到一个HTML文件中,并在浏览器中打开该文件来运行贪吃蛇游戏。

二、JavaScript

JavaScript是一种高级编程语言,用于在网页上实现交互和动态性。它是一种面向对象的语言,具有类似于C语言的语法和功能。

JavaScript最初是为了在网页上添加简单的交互功能而创建的,但随着时间的推移,它已经发展成为一种功能强大且广泛使用的语言。它可以用于开发前端和后端应用程序,并且可以在不同的平台和设备上运行。

JavaScript有许多特性和功能,其中一些是:

  1. 语法简洁:JavaScript的语法类似于C语言,易于学习和理解。
  2. 动态类型:JavaScript是一种动态类型语言,不需要明确声明变量的类型,变量的类型可以根据赋值自动推断。
  3. 对象和原型继承:JavaScript使用原型继承,允许对象继承另一个对象的属性和方法。
  4. 弱类型:JavaScript具有松散的类型转换,变量可以自动转换为另一种类型。
  5. 事件驱动编程:JavaScript可以通过事件处理程序对用户的交互做出反应,例如点击按钮、鼠标移动等。
  6. 异步编程:JavaScript支持异步编程模型,可以实现非阻塞的操作,提高程序的响应性能。
  7. 客户端和服务器端开发:JavaScript不仅可以在浏览器中运行,还可以通过Node.js在服务器端运行。

JavaScript可以通过内联方式嵌入在HTML页面中,也可以作为外部文件引用。它可以用于处理表单验证、动态内容更新、动画效果、数据请求等各种任务。

JavaScript是一种功能强大且灵活的编程语言,用于为网页添加交互和动态性,并且已经成为Web开发的基础之一。

三、HTML

HTML(超文本标记语言)是一种用于创建网页的标记语言。它由一系列标签组成,这些标签描述了网页的结构和内容。HTML标签告诉浏览器如何显示网页的元素,例如标题、段落、图像、链接等。

以下是一些HTML的基本概念:

  1. 标签(Tags):HTML文档由标签组成,标签被尖括号包围,例如<tagname>。标签通常成对出现,由开始标签和结束标签组成,如<tagname>content</tagname>。有些标签是自封闭的,不需要结束标签。
  2. 元素(Elements):标签与其内容组成一个元素。元素由开始标签、内容和结束标签组成。
  3. 属性(Attributes):标签可以有属性,属性提供元素的附加信息。属性通常包含在开始标签中,并以键值对的形式表示,如<tagname attribute="value">
  4. 标题(Headings):HTML提供了6个级别的标题标签,从<h1><h6>,用于定义不同级别的标题。
  5. 段落(Paragraphs):使用<p>标签可以定义段落。
  6. 超链接(Links):使用<a>标签可以创建链接到其他页面、文件或特定位置的链接。
  7. 图像(Images):使用<img>标签可以插入图像,需要指定图像的URL和一些可选属性。
  8. 列表(Lists):HTML提供了有序列表(<ol>)、无序列表(<ul>)和定义列表(<dl>)等标签,用于创建不同类型的列表。
  9. 表格(Tables):使用<table><tr><th><td>等标签可以创建表格,并定义表格的行、列和标题。
  10. 表单(Forms):HTML提供了一系列用于创建表单的标签,如<form><input><textarea><select><button>等。表单用于收集用户输入的数据。

这只是HTML的一些基本概念,HTML有很多其他的标签和功能,可以根据需要进一步学习和掌握。

四、CSS

CSS(层叠样式表)是一种用于描述网页的样式和外观的语言。CSS与HTML结合使用,用于控制网页中的布局、颜色、字体、大小、边距等方面的样式。

以下是一些CSS的基本概念:

  1. 选择器(Selectors):CSS使用选择器来选择要应用样式的HTML元素。常见的选择器包括标签选择器、类选择器、ID选择器、属性选择器和伪类选择器。例如,标签选择器 p 选择所有的 <p> 元素。
  2. 属性(Properties):CSS属性用于设置元素的样式。例如,color属性用于设置文本的颜色,font-size属性用于设置字体的大小。每个属性都有相应的值。
  3. 值(Values):CSS属性的值指定了要应用的样式。例如,color属性可以设置为具体颜色的名称(例如red)或使用十六进制值(例如#ff0000)。
  4. 盒模型(Box Model):CSS中的元素被视为一个矩形盒子,由内容区域、内边距、边框和外边距组成。可以使用CSS的属性(如widthheightpaddingbordermargin)来控制盒子的大小和间距。
  5. 显示和定位(Display and Positioning):CSS提供了不同的显示和定位属性,用于控制元素如何显示和相对于其他元素的位置。常见的属性包括display(用于控制元素的显示类型)和position(用于控制元素的定位方式)。
  6. 媒体查询(Media Queries):CSS的媒体查询允许根据设备的特性(如屏幕尺寸、分辨率等)来应用不同的样式。媒体查询可以用于创建响应式设计,使网页能够适应不同的设备和屏幕尺寸。
  7. 动画和过渡(Animations and Transitions):CSS提供了动画和过渡效果,可以通过转换、渐变、旋转等方式为元素添加动态效果。使用CSS的关键帧动画或过渡属性可以实现平滑的动画效果。

这些只是CSS的一些基本概念,CSS还有更多的属性和功能,可以根据需要进一步学习和掌握。

五、热门文章

【温故而知新】JavaScript数字精度丢失问题
【温故而知新】JavaScript的继承方式有那些
【温故而知新】JavaScript中内存泄露有那几种
【温故而知新】JavaScript函数式编程
【温故而知新】JavaScript的防抖与节流
【温故而知新】JavaScript事件循环

好的,我可以为您提供一个基于 HTMLCSSJavaScript贪吃蛇游戏的代码示例。以下是代码: HTML: ``` <!DOCTYPE html> <html> <head> <title>贪吃蛇游戏</title> <style> #game-board { width: 400px; height: 400px; border: 1px solid black; position: relative; } .snake { width: 10px; height: 10px; background-color: green; position: absolute; } .food { width: 10px; height: 10px; background-color: red; position: absolute; } </style> </head> <body> <div id="game-board"></div> <script src="snake.js"></script> </body> </html> ``` JavaScript: ``` var gameBoard = document.getElementById("game-board"); var snake = [{x: 10, y: 10}]; var direction = "right"; var food = {x: 0, y: 0}; function drawSnake() { for (var i = 0; i < snake.length; i++) { var snakeElement = document.createElement("div"); snakeElement.className = "snake"; snakeElement.style.left = snake[i].x + "px"; snakeElement.style.top = snake[i].y + "px"; gameBoard.appendChild(snakeElement); } } function drawFood() { var foodElement = document.createElement("div"); foodElement.className = "food"; foodElement.style.left = food.x + "px"; foodElement.style.top = food.y + "px"; gameBoard.appendChild(foodElement); } function moveSnake() { var head = snake[0]; var newHead = {x: head.x, y: head.y}; if (direction === "right") { newHead.x += 10; } else if (direction === "left") { newHead.x -= 10; } else if (direction === "up") { newHead.y -= 10; } else if (direction === "down") { newHead.y += 10; } snake.unshift(newHead); snake.pop(); } function checkCollision() { var head = snake[0]; if (head.x < 0 || head.x >= 400 || head.y < 0 || head.y >= 400) { return true; } for (var i = 1; i < snake.length; i++) { if (head.x === snake[i].x && head.y === snake[i].y) { return true; } } return false; } function checkFood() { var head = snake[0]; if (head.x === food.x && head.y === food.y) { snake.push(snake[snake.length - 1]); food.x = Math.floor(Math.random() * 40) * 10; food.y = Math.floor(Math.random() * 40) * 10; } } function update() { moveSnake(); if (checkCollision()) { clearInterval(intervalId); alert("游戏结束!"); return; } checkFood(); gameBoard.innerHTML = ""; drawSnake(); drawFood(); } function handleKeyDown(event) { if (event.keyCode === 37 && direction !== "right") { direction = "left"; } else if (event.keyCode === 38 && direction !== "down") { direction = "up"; } else if (event.keyCode === 39 && direction !== "left") { direction = "right"; } else if (event.keyCode === 40 && direction !== "up") { direction = "down"; } } document.addEventListener("keydown", handleKeyDown); food.x = Math.floor(Math.random() * 40) * 10; food.y = Math.floor(Math.random() * 40) * 10; drawSnake(); drawFood(); var intervalId = setInterval(update, 100); ``` 请注意,此代码仅供参考,可能存在错误或不完整之处。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

·零落·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值