首页 > 其他分享 >贪吃蛇制作js

贪吃蛇制作js

时间:2023-06-30 12:57:08浏览次数:34  
标签:head gridSize const food js 贪吃蛇 snake dx 制作

<!DOCTYPE html>
<html>
<head>
<title>贪吃蛇游戏</title>
<style>
#game-board {
width: 400px;
height: 400px;
border: 1px solid #000;
position: relative;
}
.snake {
width: 20px;
height: 20px;
background-color: green;
position: absolute;
}
.food {
width: 20px;
height: 20px;
background-color: red;
position: absolute;
}
</style>
</head>
<body>
<h1>贪吃蛇游戏</h1>
<div id="game-board"></div>

<script>
// 获取游戏区域元素和设置相关变量
const gameBoard = document.getElementById("game-board");
const gridSize = 20;
const gameSize = 400;
const snakeSpeed = 150;

// 初始化蛇和食物的位置和初始移动方向
let snake = [{ x: 0, y: 0 }];
let food = { x: 0, y: 0 };
let dx = gridSize;
let dy = 0;

// 生成食物的随机位置
function generateFood() {
food.x = Math.floor(Math.random() * gridSize) * gridSize;
food.y = Math.floor(Math.random() * gridSize) * gridSize;

// 确保食物不会与蛇重叠
for (let i = 0; i < snake.length; i++) {
if (food.x === snake[i].x && food.y === snake[i].y) {
generateFood();
break;
}
}
}

// 更新蛇的位置和游戏状态
function update() {
const head = { x: snake[0].x + dx, y: snake[0].y + dy };
snake.unshift(head);

// 检查是否吃到了食物
if (head.x === food.x && head.y === food.y) {
generateFood();
} else {
snake.pop();
}

// 检查是否碰到边界或自身
if (
head.x < 0 ||
head.x >= gameSize ||
head.y < 0 ||
head.y >= gameSize ||
checkCollision(head)
) {
clearInterval(gameInterval);
alert("游戏结束!");
return;
}

// 清空游戏区域
gameBoard.innerHTML = "";

// 绘制蛇
snake.forEach(segment => {
const snakeElement = document.createElement("div");
snakeElement.style.left = segment.x + "px";
snakeElement.style.top = segment.y + "px";
snakeElement.classList.add("snake");
gameBoard.appendChild(snakeElement);
});

// 绘制食物
const foodElement = document.createElement("div");
foodElement.style.left = food.x + "px";
foodElement.style.top = food.y + "px";
foodElement.classList.add("food");
gameBoard.appendChild(foodElement);
}

// 检查蛇头是否碰撞到蛇身
function checkCollision(head) {
for (let i = 1; i < snake.length; i++) {
if (head.x === snake[i].x && head.y === snake[i].y) {
return true;
}
}
return false;
}

// 处理按键事件,改变蛇的移动方向
function handleKeydown(event) {
if (event.key === "ArrowUp" && dy !== gridSize) {
dx = 0;
dy = -gridSize;
} else if (event.key === "ArrowDown" && dy !== -gridSize) {
dx = 0;
dy = gridSize;
} else if (event.key === "ArrowLeft" && dx !== gridSize) {
dx = -gridSize;
dy = 0;
} else if (event.key === "ArrowRight" && dx !== -gridSize) {
dx = gridSize;
dy = 0;
}
}

// 监听按键事件
document.addEventListener("keydown", handleKeydown);

// 生成初始食物
generateFood();

// 更新游戏状态的定时器
const gameInterval = setInterval(update, snakeSpeed);
</script>
</body>
</html>

标签:head,gridSize,const,food,js,贪吃蛇,snake,dx,制作
From: https://www.cnblogs.com/959886jjc/p/17516398.html

相关文章

  • 我制作的一个简单的跳棋小游戏
    我用虚幻5制作的简单的3D跳棋小游戏,可以本地多人对战以及和AI对战,已经上传到了itch.io。目前跳棋功能已经完善,其他棋类游戏留待以后加入。支持中英文。支持两种棋盘,支持经典玻璃弹珠和其他不透明弹珠。游戏网页链接......
  • Vue3 vite:is a JavaScript file. Did you mean to enable the 'allowJs' option?
    描述今天在vue3+vite下进行打包时,突然vscode报了一个error。 大概的意识是询问是否启用“allowJS”选项,因为该文件在程序内是指定用于编译的根文件。提示信息已经很明确了,下面从网上摘抄了下什么是allowJS选项。allowJs是1.8中新提供的选项。TypeScrip......
  • 使用Rufus制作PROXMOX VE 安装优盘的步骤
    Rufus是一个可以帮助格式化和创建可引导USB闪存盘的工具,比如USB随身碟,记忆棒等等。Rufus具有体积小,速度快,功能全面等优势,是非常理想的安装盘制作工具。Rufus当前版本为3.13,下载地址为https://rufus.ie/,推荐使用便携版。ProxmoxVE是一款套开源的虚拟化管理软件,用户可通过网页的......
  • js 本地录音,保存文件
    <div><spanonclick="start()">开始录音</span><spanonclick="stop()">结束录音</span></div><script>constconstraints={audio:true};varmediaRecorder=null;functionstar......
  • js中的解构赋值
    JavaScript的解构赋值语句是一种方便的语法,用于从数组或对象中提取值,并将它们赋给变量。它可以让你以一种简洁的方式从复杂的数据结构中提取数据。数组的解构赋值例如,假设有一个数组[1,2,3],你可以使用解构赋值语句将数组中的值分别赋给变量:const[a,b,c]=[1,2,3];......
  • JS解密为何会受到广大站长的欢迎
    要了解JS解密为何会受到广大站长的欢迎,首先我们得从JS加密这块说起,为了保护自己的代码不被复制,所以大部分程序员都会对自己的代码进行各种加密,这个时候JS解密就成为了必不可少的工具了。在了解JS解密之前一定要熟悉JS加密的原理,这样解密起来也就事半功倍了。常用的js加密有哪些Java......
  • uniapp 引入非模块化js
    uniapp开发的H5,引入第三方的非模块化.js文件,如self.js,就是纯js文件,没有module.exports暴露出来成为一个对象,这种放在common文件夹下,引入会提示找不到,这时候应该把该self.js放在static文件夹下,uniapp发行H5时static文件下的内容不编译,在并在入口.html文件中引入全局js,在.vue页......
  • jquery是什么?有什么用,跟js的关系
    #jquery是什么?有什么用,跟js的关系jQuery就是一个快速、简介的js库,把一些常用的方法写到一个单独的js文件,使用的时候直接引用这个js文件,其设计宗旨是倡导写更少的代码,做更多的事情j就是js,Query就是查询;意思就是查询js,把js的DOM做了封装,我们就可以快速的查询使用里面的功能jQue......
  • Handlebars.js 模板引擎
    介绍Handlebars 是JavaScript一个语义模板库,通过对view和data的分离来快速构建Web模板。它采用"Logic-lesstemplate"(无逻辑模版)的思路,在加载时被预编译,而不是到了客户端执行到代码时再去编译,这样可以保证模板加载和运行的速度。Handlebars兼容Mustache,你可以在Handlebars中导......
  • 便携版jdk制作
    便携版即相当于绿色版,制作好后复制到对应位数的任意Windows环境下即可使用,无需继续执行标准的安装过程。以下制作过程同时适用于32位和64位的Windows系统。1.从Oracle官网下载JDK-8最新Windows版下载地址:https://www.oracle.com/technetwork/java/javase/downloa......