用AI写游戏1——js实现贪吃蛇

news/2025/2/9 3:55:29/

使用模型通义千问
提示词:
用js html css 做一个贪吃蛇的动画

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Snake Game</title><link rel="stylesheet" href="css/test023.css">
</head>
<body>
<div id="gameBoard"></div>
<script src="js/test023.js"></script>
</body>
</html>
body {display: flex;justify-content: center;align-items: center;height: 100vh;background-color: #f0f0f0;margin: 0;
}#gameBoard {display: grid;width: 400px;height: 400px;grid-template-columns: repeat(20, 1fr);grid-template-rows: repeat(20, 1fr);border: 5px solid #333;
}.cell {width: 100%;height: 100%;background-color: #ccc;border: 1px solid #ddd;
}.snake {background-color: #28a745;
}.food {background-color: #dc3545;
}
const board = document.getElementById('gameBoard');
const rows = 20, cols = 20;
let snake = [{ x: 10, y: 10 }];
let direction = { x: 0, y: -1 };
let food = createFood();
let gameOver = false;function createBoard() {for (let row = 0; row < rows; row++) {for (let col = 0; col < cols; col++) {const cell = document.createElement('div');cell.classList.add('cell');board.appendChild(cell);}}
}function updateBoard() {const cells = document.querySelectorAll('.cell');cells.forEach(cell => cell.className = 'cell');snake.forEach(segment => {const index = segment.y * cols + segment.x;cells[index].classList.add('snake');});const foodIndex = food.y * cols + food.x;cells[foodIndex].classList.add('food');
}function createFood() {let newFood;do {newFood = { x: Math.floor(Math.random() * cols), y: Math.floor(Math.random() * rows) };} while (snake.some(segment => segment.x === newFood.x && segment.y === newFood.y));return newFood;
}function moveSnake() {const head = { x: snake[0].x + direction.x, y: snake[0].y + direction.y };if (head.x < 0 || head.x >= cols || head.y < 0 || head.y >= rows || snake.some(segment => segment.x === head.x && segment.y === head.y)) {gameOver = true;return;}snake.unshift(head);if (head.x === food.x && head.y === food.y) {food = createFood();} else {snake.pop();}
}document.addEventListener('keydown', event => {switch (event.key) {case 'ArrowUp':if (direction.y === 0) direction = { x: 0, y: -1 };break;case 'ArrowDown':if (direction.y === 0) direction = { x: 0, y: 1 };break;case 'ArrowLeft':if (direction.x === 0) direction = { x: -1, y: 0 };break;case 'ArrowRight':if (direction.x === 0) direction = { x: 1, y: 0 };break;}
});createBoard();const gameLoop = setInterval(() => {if (gameOver) {clearInterval(gameLoop);alert('Game Over!');return;}moveSnake();updateBoard();
}, 100);

这段代码创建了一个基础的贪吃蛇游戏,包括了游戏区域的渲染、蛇的移动与增长、食物的生成及蛇吃到食物后的增长逻辑。通过监听键盘事件改变蛇的方向,并使用setInterval函数控制游戏循环。请注意,这只是一个基础示例,实际开发中可能需要添加更多功能如分数统计、游戏重置等。

实现效果

在这里插入图片描述


http://www.ppmy.cn/news/1570492.html

相关文章

小程序项目-购物-首页与准备

前言 这一节讲一个购物项目 1. 项目介绍与项目文档 我们这里可以打开一个网址 https://applet-base-api-t.itheima.net/docs-uni-shop/index.htm 就可以查看对应的文档 2. 配置uni-app的开发环境 可以先打开这个的官网 https://uniapp.dcloud.net.cn/ 使用这个就可以发布到…

React 与 Next.js

先说说 React 与 Next.js 结合的作用&#xff1a;高效构建高性能与搜索引擎优化&#xff08;SEO&#xff09;的网页 一. React 网站的“积木” React 用于构建网站中的各个组件&#xff0c;像是“积木”一样组成页面元素&#xff08;如按钮、图片、表单等&#xff09;。这些…

Repo vs Git:区别与优缺点

repo 和 git 是两个不同的工具&#xff0c;但 repo 是基于 git 之上的 多仓库管理工具&#xff0c;适用于需要管理 多个 Git 仓库的项目。 1. Repo 和 Git 的区别 特性GitRepo作用版本控制系统&#xff0c;用于管理单个代码仓库基于 Git 的多仓库管理工具&#xff0c;适用于大…

docker 安装 mindoc

文章目录 一、官网地址二、安装 一、官网地址 https://mindoc.com.cn/docs/mindochelp/mindoc-summary二、安装 docker run -it --namemindoc --restartalways -v /opt/mindoc-docker/conf:/mindoc/conf -v /opt/mindoc-docker/uploads:/mindoc/uploads -v/opt/mindoc-docker…

Nginx中替换即将到期的SSL/TLS证书

在 Nginx 中替换即将到期的 SSL/TLS 证书是一个常见的运维任务。以下是详细的步骤 1. 准备新证书 确保您已经获取了新的 SSL/TLS 证书文件和私钥文件。通常,证书颁发机构(CA)会提供以下文件: 证书文件 :通常是 .crt 或 .pem 文件(例如 example.com.crt)。私钥文件 :通…

基于微信平台的报刊订阅小程序的设计与实现ssm+论文源码调试讲解

4 系统设计 系统在设计的过程中&#xff0c;必然要遵循一定的原则才可以&#xff0c;胡乱设计是不可取的。首先用户在使用过程中&#xff0c;能够直观感受到功能操作的便利性&#xff0c;符合正常思维逻辑的操作&#xff0c;这才是系统好用的一个开端&#xff0c;给使用者第一…

SpringBoot 整合 SpringMVC:SpringMVC的注解管理

分类&#xff1a; 中央转发器(DispatcherServlet)控制器视图解析器静态资源访问消息转化器格式化静态资源管理 中央转发器&#xff1a; 中央转发器被 SpringBoot 自动接管&#xff0c;不需要我们在 web.xml 中配置&#xff1a; <servlet><servlet-name>chapter2&l…

Java进阶(ElasticSearch的安装与使用)

目录 1.ElasticSearch环境搭建 elasticSearch&#xff0c;elastic Search head &#xff0c;kibana ?二&#xff0e;使用ES 2.1 ?Ik分词器 ?2.2 restful与索引操作 2.3 文档操作 三&#xff0e;集成springboot 1.ElasticSearch环境搭建 elasticSearch&#xff0c;el…