当前位置: 首页 > news >正文

使用HTML实现贪吃蛇游戏

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>贪吃蛇游戏</title><style>canvas {display: block;margin: 20px auto;border: 1px solid #000;}</style>
</head>
<body><canvas id="gameCanvas" width="400" height="400"></canvas><script>const canvas = document.getElementById('gameCanvas');const ctx = canvas.getContext('2d');const boxSize = 20;let snake = [{x: 10, y: 10}];let food = {x: 15, y: 15};let dx = 0, dy = 0;function draw() {ctx.clearRect(0, 0, canvas.width, canvas.height);drawSnake();drawFood();}function drawSnake() {snake.forEach(segment => {ctx.fillStyle = 'green';ctx.fillRect(segment.x * boxSize, segment.y * boxSize, boxSize, boxSize);});}function drawFood() {ctx.fillStyle = 'red';ctx.fillRect(food.x * boxSize, food.y * boxSize, boxSize, boxSize);}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) {food = {x: Math.floor(Math.random() * (canvas.width / boxSize)), y: Math.floor(Math.random() * (canvas.height / boxSize))};} else {snake.pop();}}function checkCollision() {const head = snake[0];if (head.x < 0 || head.x >= canvas.width / boxSize || head.y < 0 || head.y >= canvas.height / boxSize) {return true;}for (let i = 1; i < snake.length; i++) {if (head.x === snake[i].x && head.y === snake[i].y) {return true;}}return false;}function gameLoop() {if (checkCollision()) {alert('游戏结束');document.location.reload();return;}update();draw();setTimeout(gameLoop, 100);}document.addEventListener('keydown', (e) => {switch (e.key) {case 'ArrowUp':if (dy === 0) { dx = 0; dy = -1; }break;case 'ArrowDown':if (dy === 0) { dx = 0; dy = 1; }break;case 'ArrowLeft':if (dx === 0) { dx = -1; dy = 0; }break;case 'ArrowRight':if (dx === 0) { dx = 1; dy = 0; }break;}});gameLoop();</script>
</body>
</html>

        上述代码实现了一个基本的贪吃蛇游戏,包括蛇的移动、食物的生成、碰撞检测和游戏循环。你可以通过方向键来控制蛇的移动。游戏会在蛇撞到墙壁或自身时结束,并提示“游戏结束”。


http://www.mrgr.cn/news/10342.html

相关文章:

  • 为什么制造企业智能化升级需要MES管理系统
  • 【Material-UI】Radio Group中的独立单选按钮详解
  • JavaScript 手写仿instanceof
  • Blazor开发框架Known-V2.0.9
  • 如何用Python Django构建二手房房价预测与知识图谱系统?
  • 磁场强度H和磁感应强度B,磁化强度M和磁极化强度J
  • HarmonyOS--认证服务-操作步骤
  • 2024.8.22(Docker)
  • Ubuntu 20.04安装中文输入法
  • 探索Unity3D URP后处理在UI控件Image上的应用
  • el-input按回车 界面自动刷新
  • 【ORACLE】Oracle 表空间查询
  • 导入TXT文件到MySQL数据库:Java通用方法详解
  • 【3】静态路由(Static routing)
  • ( 基于SystemView软件)AM调制与解调仿真实验
  • Springcloud从零开始---Service业务模块(三)
  • 公园的客流统计意义何在,有哪些积极作用
  • 【计算机网络】网络版本计算器
  • 贪心处理任务(华为od机考题)
  • 打卡50天------图论