js手写贪吃蛇游戏实例源码
前端手写贪吃蛇游戏
贪吃蛇游戏 场景 使用了js 和 html /css 就可以完成 一个贪吃蛇小游戏

技术分析
主要用到的几个技术点:
- clientWidth :元素的宽度,包含内边距
- clientHeight :元素的高度,包含内边距
- setInterval:开启定时器
- clearInterval:关闭定时器
- keydown:键盘事件
- createElement : 创建节点
首先需要一个背景板 需要吧蛇和食物 在指定内容里 不能超出接下来就是蛇的移动 使用定时间一秒移动一格食物就是根据计算随机生成当蛇和食物的位置重叠了就可以认为蛇吃到了食物当蛇的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>以上就实现了简单的贪吃蛇功能
总结
到此这篇关于js手写贪吃蛇游戏的文章就介绍到这了,更多相关js手写贪吃蛇游戏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Javascript中关于Array.filter()的妙用详解
大家应该都知道filter是Javascript中Array常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。下面这篇文章就给大家介绍了关于Javascript中Array.filter()的妙用,有需要的朋友们可以参考借鉴,下面来一起看看吧。2016-12-12
innerHTML,outerHTML,innerText,outerText的用法及区别解析
本篇主要是对innerHTML,outerHTML,innerText,outerText的用法及区别进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助2013-12-12
深入理解JavaScript系列(26):设计模式之构造函数模式详解
这篇文章主要介绍了深入理解JavaScript系列(26):设计模式之构造函数模式详解,本文讲解了基本用法、构造函数与原型、只能用new吗?、强制使用new、原始包装函数等内容,需要的朋友可以参考下2015-03-03
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
这篇文章主要介绍了JS+CSS实现鼠标经过弹出一个DIV框的实现方法,带缓冲渐变动画效果,涉及鼠标事件的响应及结合时间函数定时触发形成动画渐变效果的相关技巧,需要的朋友可以参考下2016-03-03


最新评论