儿童节小游戏——HTML+JS实现贪吃蛇

news2024/9/23 3:33:28

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:前端案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:儿童节小游戏——HTML+JS实现贪吃蛇

文章目录

    • 一、前言
    • 二、实现步骤
    • 三、代码展示
      • 1、HTML 部分
      • 2、JavaScript 部分
    • 运行效果

一、前言

   儿童节是一个非常特殊的节日,它是为了庆祝孩子们的成长和快乐而设立的。在这一天,孩子们可以享受到各种各样的活动和礼物,比如游戏、玩具、糖果等等。同时,这也是一个让家长们更加关注孩子们的日子,让他们感受到家庭的温暖和爱。

   儿童节的意义不仅仅在于庆祝孩子们的节日,更在于提醒我们,孩子们是社会的未来,我们需要为他们创造更好的成长环境和条件,让他们健康、快乐地成长。在这个过程中,教育是非常重要的一环。我们需要为孩子们提供优质的教育资源,让他们能够接受到全面、均衡的教育,培养他们的创新精神和实践能力,让他们成为未来社会的中坚力量。

   此外,儿童节也是一个让我们关注弱势儿童的日子。在我们的社会中,仍然有很多孩子们生活在贫困、失学、失独、残疾等困境中。我们需要关注他们的生存和发展,为他们提供更多的帮助和支持,让他们能够享受到与其他孩子们一样的权利和机会。

   最后,儿童节也是一个让我们回忆童年的日子。在这一天,我们可以回忆起自己的童年时光,回忆起那些美好的瞬间和经历。同时,我们也可以通过与孩子们一起庆祝儿童节,重新感受到童年的快乐和纯真。

   让我们一起为孩子们送上最真挚的祝福,祝愿他们健康、快乐、聪明、勇敢!同时,让我们也一起行动起来,为孩子们的成长和未来贡献自己的力量。

   下面是我编写的儿童节小游戏——贪吃蛇!让我们陪伴孩子一起玩玩小游戏,感受一个不一样的节日吧!

二、实现步骤

  1. 创建HTML文件并引入CSS和JS文件。

    这一步是基础,需要创建一个HTML文件,并在其中引入CSS和JS文件,以便后续编写代码。

  2. 在HTML文件中创建一个canvas元素,用于绘制游戏画面。

    canvas元素是HTML5新增的元素,用于绘制图形。在这里,我们需要创建一个canvas元素,并设置其宽度和高度,以便后续绘制游戏画面。

  3. 在JS文件中定义游戏所需的变量,包括蛇的初始位置、方向、长度、食物的位置等。

    在JS文件中,我们需要定义一些变量,包括蛇的初始位置、方向、长度、食物的位置等。这些变量将在后续的代码中使用。

  4. 编写绘制函数,用于绘制蛇和食物。

    绘制函数是用于绘制游戏画面的函数,其中包括绘制蛇和食物。在这里,我们使用canvas的API来绘制矩形,以表示蛇和食物。

  5. 编写移动函数,用于控制蛇的移动。

    移动函数是用于控制蛇的移动的函数,其中包括根据方向移动蛇头、将蛇头添加到身体数组中、删除尾部等操作。

  6. 编写碰撞检测函数,用于检测蛇是否撞墙或吃到食物。

    碰撞检测函数是用于检测蛇是否撞墙或吃到食物的函数,其中包括检测是否撞墙、是否吃到食物、是否撞到自己等操作。

  7. 编写游戏循环函数,用于不断更新游戏状态并重新绘制画面。

    游戏循环函数是用于不断更新游戏状态并重新绘制画面的函数,其中包括移动蛇、检测碰撞、绘制画面等操作。在这里,我们使用setTimeout函数来实现游戏循环。

三、代码展示

1、HTML 部分

<!DOCTYPE html>
<html>
<head>
	<title>贪吃蛇游戏</title>
	<style>
		canvas {
			border: 1px solid #ccc;
		}
	</style>
</head>
<body>
	<canvas id="canvas" width="400" height="400"></canvas>
	<script src="snake.js"></script>
</body>
</html>

2、JavaScript 部分

// 获取canvas元素和绘图上下文
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

// 定义蛇的初始位置、方向、长度
var snake = {
	x: 10,
	y: 10,
	direction: "right",
	length: 5,
	body: []
};

// 定义食物的位置
var food = {
	x: 0,
	y: 0
};

// 初始化蛇的身体
for (var i = 0; i < snake.length; i++) {
	snake.body.push({x: snake.x - i, y: snake.y});
}

// 绘制函数
function draw() {
	// 清空画布
	ctx.clearRect(0, 0, canvas.width, canvas.height);

	// 绘制蛇
	ctx.fillStyle = "green";
	for (var i = 0; i < snake.body.length; i++) {
		ctx.fillRect(snake.body[i].x * 10, snake.body[i].y * 10, 10, 10);
	}

	// 绘制食物
	ctx.fillStyle = "red";
	ctx.fillRect(food.x * 10, food.y * 10, 10, 10);
}

// 移动函数
function move() {
	// 根据方向移动蛇头
	switch (snake.direction) {
		case "up":
			snake.y--;
			break;
		case "down":
			snake.y++;
			break;
		case "left":
			snake.x--;
			break;
		case "right":
			snake.x++;
			break;
	}

	// 将蛇头添加到身体数组中
	snake.body.unshift({x: snake.x, y: snake.y});

	// 如果蛇的长度大于5,则删除尾部
	if (snake.body.length > snake.length) {
		snake.body.pop();
	}
}

// 碰撞检测函数
function checkCollision() {
	// 检测是否撞墙
	if (snake.x < 0 || snake.x >= canvas.width / 10 || snake.y < 0 || snake.y >= canvas.height / 10) {
		return true;
	}

	// 检测是否吃到食物
	if (snake.x == food.x && snake.y == food.y) {
		snake.length++;
		placeFood();
	}

	// 检测是否撞到自己
	for (var i = 1; i < snake.body.length; i++) {
		if (snake.x == snake.body[i].x && snake.y == snake.body[i].y) {
			return true;
		}
	}

	return false;
}

// 随机放置食物
function placeFood() {
	food.x = Math.floor(Math.random() * canvas.width / 10);
	food.y = Math.floor(Math.random() * canvas.height / 10);
}

// 游戏循环函数
function gameLoop() {
	// 移动蛇
	move();

	// 检测碰撞
	if (checkCollision()) {
		alert("游戏结束!");
		return;
	}

	// 绘制画面
	draw();

	// 循环调用游戏循环函数
	setTimeout(gameLoop, 100);
}

// 监听键盘事件,改变蛇的方向
document.addEventListener("keydown", function(event) {
	switch (event.keyCode) {
		case 37:
			if (snake.direction != "right") {
				snake.direction = "left";
			}
			break;
		case 38:
			if (snake.direction != "down") {
				snake.direction = "up";
			}
			break;
		case 39:
			if (snake.direction != "left") {
				snake.direction = "right";
			}
			break;
		case 40:
			if (snake.direction != "up") {
				snake.direction = "down";
			}
			break;
	}
});

// 初始化游戏
placeFood();
gameLoop();

运行效果

在这里插入图片描述


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI时代,保障安全刻不容缓!

原创 | 文 BFT机器人 01 AI诈骗层出不穷 近年来&#xff0c;深度伪造行为呈现出快速增长的趋势。据统计&#xff0c;2019年至2020年期间&#xff0c;深度伪造网络内容的数量增加了900%&#xff0c;这一令人担忧的趋势预计将在未来数年内持续发展。一些研究人员甚至预测&#xf…

Nova 和 SuperNova:无需通用电路的通用机器执行证明系统

1. 引言 前序博客有&#xff1a; Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记SuperNova&#xff1a;为多指令虚拟机执行提供递归证明基于Nova/SuperNova的zkVMSangria&#xff1a;PLONK Folding2023年 ZK Hack以及ZK Summit 亮点记Sangria&…

如何把多个pdf合并成一个pdf?常见渠道一览

PDF是一种非常常见的文件格式&#xff0c;它通常用于文档的传输和共享。在日常工作中&#xff0c;我们可能需要将多个PDF文件合并成一个文件以便于管理和浏览。这篇文章将会介绍如何使用在线工具和桌面应用程序来合并PDF文件。 PDF转换器&#xff1a;常用的PDF处理软件&#xf…

Language Models as Knowledge Embeddings:语言模型用作知识嵌入 IJCAI 2022

1.相关工作 1&#xff09;基于结构的知识嵌入 进一步分成基于翻译的模型和基于语义匹配的模型 基于翻译的模型采用基于距离的评分函数&#xff0c;TransE把实体和关系嵌入到一个维度为d的共享向量空间中&#xff1b;TransH,TransR,RotatE. 语义匹配模型采用基于相似性的评分函…

【Unity】简单的边缘高亮

【Unity】简单的边缘高亮 工程文件下载地址 全部文件 使用方法 方法功能On()打开单帧高亮显示On(Color color)打开单帧高亮显示FlashingParams(Color color1, Color color2, float freq)闪烁的参数设置FlashingOn打开闪烁FlashingOn(Color color1, Color color2)从颜色1切换到…

Python实战基础16-模块

Python中的模块 Python提供了强大的模块支持&#xff0c;主要体现为不仅在python标注库中包含了大量的模块&#xff08;称为标准模块&#xff09;&#xff0c;而且还有很多第三方模块&#xff0c;另外开发者自己也可以开发自定义模块。 说的通俗点&#xff1a;模块就好比是工具…

ATA-L系列水声功率放大器-宽频带-大功率

水声功率放大器是一种专门用于水声信号放大的电子设备。水声功率放大器在水声通信中具有重要的作用&#xff0c;它可以将微弱的水声信号放大至足够强度&#xff0c;以提高信噪比和传输距离&#xff1b;同时&#xff0c;还可以进行信号处理和优化&#xff0c;以及温度控制等功能…

计算机毕业论文内容参考|基于java的电子产品垂直电商平台的设计与实现

文章目录 导文文章重点摘要前言绪论课题背景国内外现状与趋势课题内容相关技术与方法介绍导文 计算机毕业论文内容参考|基于java的电子产品垂直电商平台的设计与实现 文章重点 摘要 本文基于Java技术,设计并实现了一个电子产品垂直电商平台。该平台主要针对电子产品市场,提…

ESP32-C2系列开发板

C2是一个芯片采用4毫米x 4毫米封装&#xff0c;与272 kB内存。它运行框架&#xff0c;例如ESP-Jumpstart和ESP造雨者&#xff0c;同时它也运行ESP-IDF。ESP-IDF是Espressif面向嵌入式物联网设备的开源实时操作系统&#xff0c;受到了全球用户的信赖。它由支持Espressif以及所有…

充电桩测试设备TK4800充电机(桩)现校仪检定装置

TK4800是一套专用于检定电动汽车非车载充电机现场校验仪和电动汽车交流充电桩现场校验仪的装置&#xff0c;针对新能源汽车充电动态特性进行设计&#xff0c;支持稳态电能计量&#xff08;针对恒定负载&#xff09;和动态电能计量&#xff08;针对波动性负载&#xff09;两种模…

【CesiumJS入门】(1)创建Viewer及相关配置项

前言 在上一篇博客中&#xff0c;我们直接在vue组件完成初始渲染并创建 DOM 节点后通过 const map new Cesium.Viewer(cesiumContainer)构建了一个地球场景。 而本篇&#xff0c;我们将会专门把地球创建的方法写在一个js文件中&#xff0c;以便后续的调用。 同时&#xff0…

Filebeat技术栈总结

filebeat 是一个轻量型日志采集器&#xff0c;本质上是一个 agent 。不依赖于任何应用&#xff0c;可以安装在任何节点上&#xff0c;可单独使用 Filebeat 并根据配置读取对应位置的日志进行上报和搜集。 filebeat 内置了常用的 output 组件&#xff0c;例如 kafka、ElasticSe…

电脑硬盘空间大量被占用怎么办?

通常情况下&#xff0c;电脑硬盘空间会被系统文件、已安装的应用程序或个人文件、备份、病毒或其他恶意软件或其他未知文件占用。那我们应该怎样解决硬盘空间大量被占用的问题呢&#xff1f; 方法1&#xff1a;通过存储功能查看内容并释放空间 您可以通过Windows 11/10中的存储…

华为外包待了一年,我离职了...

这次来聊一个大家可能也比较关心的问题&#xff0c;那就是就业城市选择的问题。而谈到这个问题&#xff0c;就不可避免地会谈到一些关于&#xff1a;机会&#xff1f;技术氛围&#xff1f;跳槽&#xff1f;薪资水平&#xff1f;等等一系列问题。 正好&#xff0c;这也是大家所…

滑动窗口思想(数组)-python

文章目录 前言一、思想二、相关题目讲解1.长度最小的子数组(leetcode 209.)2.水果成篮(leetcode 904.)3.最小覆盖子串(leetcode 76.) 三、 模拟行为螺旋矩阵II(leetcode.59)leetcode 54.螺旋矩阵剑指Offer 29. 顺时针打印矩阵 总结 前言 滑动窗口的精妙之处在于根据当前子序列…

物业管理系统对小区物业的作用太重要了,零代码平台改变原有认知

小区物业处作为业主与小区的沟通场所&#xff0c;经常会遇到缺乏专业人才&#xff0c;导致管理不善、服务不到位&#xff0c;难以为业主提供良好的服务体验&#xff0c;那么拥有一款成熟稳定的物业管理系统就成了物业管理处的重要选择&#xff0c;不仅能为业主带来更好的服务体…

悦灵犀-全新的智能AI工具

最近一段时间&#xff0c;人工智能再次成为人类创新的焦点&#xff0c;不得不说&#xff0c;人工智能正在以一种全新的方式改变人们的生活&#xff0c;这是一个以大模型为核心的人工智能新时代&#xff0c;大模型的出现让千行百业将迎来新的机遇。 悦享星光作为国内高新技术企…

Zinx框架学习 - 构建最基础的Server

Zinx - V0.1 构建最基础的Server Zinx的框架结构&#xff1a; 整体思路&#xff1a; 客户端发送请求到服务器端&#xff0c;服务端会有一个Goroutine专门处理listenner和监听这个过程&#xff0c;然后有客户端连接过来之后会启动一个客户端处理Goroutine&#xff0c;这个Goro…

深度学习 - 52.推荐场景的多样性与 MMR [Maximal Marginal Relevance] 简介与 Python 实现

目录 一.引言 二.多样性 三.MMR 流程 1.标准 MMR 2.窗口 MMR 四.基于向量内积相似度的 MMR Python 实现 1.模拟用户 rank 结果 2.向量内积计算 MRi 2.1 获取向量计算 max sim 2.2 argmax 获取最优 MRi item 3.MMR 测试 4.MMR 完整代码 五.总结 一.引言 MMR - Ma…

记一次k8s节点上出现node.kubernetes.io/disk-pressure污点的问题

目录 问题描述 原因分析&#xff1a; 解决方案&#xff1a; 其他问题 问题描述 k8s部署时pod一直属于Pending状态&#xff0c;也就是说pod未调度到k8s节点上 原因分析&#xff1a; 通过以下命令查看下pod kubectl get pod 以上命令可以看到各个pod的状态&#xff0c…