DeepSeek飞机大战小游戏HTML5(附源码)

用DeepSeek帮忙生成的飞机大战小游戏网页版,基于HTML5。
提示词prompt
帮我做一个网页版的飞机大战游戏 html5的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

游戏功能说明

玩家控制:
使用键盘方向键或WASD移动飞机
空格键发射子弹
移动设备支持触摸控制
游戏机制:
敌机会从屏幕顶部随机位置出现
击中敌机获得10分
随着分数增加,敌机出现频率会提高
碰到敌机游戏结束
界面:
开始界面
游戏界面(显示当前分数)
结束界面(显示最终分数)
如有需要,可进一步改进游戏。
将上述代码保存为HTML文件,用浏览器打开即可开始游戏。
飞机大战小游戏源码如下:

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>飞机大战</title><style>body {margin: 0;padding: 0;display: flex;justify-content: center;align-items: center;height: 100vh;background-color: #222;overflow: hidden;font-family: Arial, sans-serif;}#gameContainer {position: relative;width: 400px;height: 600px;background-color: #000;overflow: hidden;}#gameCanvas {background-color: #000;}#startScreen, #gameOverScreen {position: absolute;top: 0;left: 0;width: 100%;height: 100%;display: flex;flex-direction: column;justify-content: center;align-items: center;color: white;background-color: rgba(0, 0, 0, 0.7);}#gameOverScreen {display: none;}h1 {color: #ffcc00;margin-bottom: 30px;text-shadow: 0 0 10px #ff6600;}button {padding: 10px 20px;font-size: 18px;background-color: #ff6600;color: white;border: none;border-radius: 5px;cursor: pointer;transition: all 0.3s;}button:hover {background-color: #ff9900;transform: scale(1.05);}#scoreDisplay {position: absolute;top: 10px;left: 10px;color: white;font-size: 20px;z-index: 100;}</style>
</head>
<body><div id="gameContainer"><canvas id="gameCanvas" width="400" height="600"></canvas><div id="scoreDisplay">分数: 0</div><div id="startScreen"><h1>飞机大战</h1><button id="startButton">开始游戏</button></div><div id="gameOverScreen"><h1>游戏结束</h1><p id="finalScore">最终分数: 0</p><button id="restartButton">重新开始</button></div></div><script>// 游戏变量const canvas = document.getElementById('gameCanvas');const ctx = canvas.getContext('2d');const startScreen = document.getElementById('startScreen');const gameOverScreen = document.getElementById('gameOverScreen');const startButton = document.getElementById('startButton');const restartButton = document.getElementById('restartButton');const scoreDisplay = document.getElementById('scoreDisplay');const finalScoreDisplay = document.getElementById('finalScore');let gameRunning = false;let score = 0;// 玩家飞机const player = {x: canvas.width / 2 - 25,y: canvas.height - 80,width: 50,height: 50,speed: 5,color: '#3498db',isMovingLeft: false,isMovingRight: false,isMovingUp: false,isMovingDown: false};// 子弹数组let bullets = [];const bulletSpeed = 7;const bulletSize = 5;// 敌机数组let enemies = [];const enemySpeed = 2;let enemySpawnRate = 60; // 帧数// 游戏循环变量let animationId;let frameCount = 0;// 初始化游戏function initGame() {score = 0;scoreDisplay.textContent = `分数: ${score}`;bullets = [];enemies = [];frameCount = 0;player.x = canvas.width / 2 - 25;player.y = canvas.height - 80;gameRunning = true;startScreen.style.display = 'none';gameOverScreen.style.display = 'none';gameLoop();}// 游戏主循环function gameLoop() {if (!gameRunning) return;update();render();animationId = requestAnimationFrame(gameLoop);}// 更新游戏状态function update() {// 移动玩家if (player.isMovingLeft && player.x > 0) {player.x -= player.speed;}if (player.isMovingRight && player.x < canvas.width - player.width) {player.x += player.speed;}if (player.isMovingUp && player.y > 0) {player.y -= player.speed;}if (player.isMovingDown && player.y < canvas.height - player.height) {player.y += player.speed;}// 移动子弹for (let i = bullets.length - 1; i >= 0; i--) {bullets[i].y -= bulletSpeed;// 移除超出屏幕的子弹if (bullets[i].y < 0) {bullets.splice(i, 1);}}// 生成敌机frameCount++;if (frameCount % enemySpawnRate === 0) {spawnEnemy();// 随着分数增加,敌机生成速度加快if (enemySpawnRate > 20) {enemySpawnRate = Math.max(20, 60 - Math.floor(score / 10));}}// 移动敌机for (let i = enemies.length - 1; i >= 0; i--) {enemies[i].y += enemies[i].speed;// 移除超出屏幕的敌机if (enemies[i].y > canvas.height) {enemies.splice(i, 1);}}// 检测碰撞:子弹和敌机for (let i = bullets.length - 1; i >= 0; i--) {for (let j = enemies.length - 1; j >= 0; j--) {if (checkCollision(bullets[i], enemies[j])) {// 移除子弹和敌机bullets.splice(i, 1);enemies.splice(j, 1);// 增加分数score += 10;scoreDisplay.textContent = `分数: ${score}`;break;}}}// 检测碰撞:玩家和敌机for (let i = enemies.length - 1; i >= 0; i--) {if (checkCollision(player, enemies[i])) {gameOver();break;}}}// 渲染游戏function render() {// 清空画布ctx.clearRect(0, 0, canvas.width, canvas.height);// 绘制背景ctx.fillStyle = '#000033';ctx.fillRect(0, 0, canvas.width, canvas.height);// 绘制星星背景drawStars();// 绘制玩家drawPlayer();// 绘制子弹drawBullets();// 绘制敌机drawEnemies();}// 绘制玩家飞机function drawPlayer() {ctx.fillStyle = player.color;// 机身ctx.beginPath();ctx.moveTo(player.x + player.width / 2, player.y);ctx.lineTo(player.x + player.width, player.y + player.height);ctx.lineTo(player.x, player.y + player.height);ctx.closePath();ctx.fill();// 机翼装饰ctx.fillStyle = '#2980b9';ctx.beginPath();ctx.moveTo(player.x + player.width / 2, player.y + 10);ctx.lineTo(player.x + player.width - 10, player.y + player.height - 10);ctx.lineTo(player.x + 10, player.y + player.height - 10);ctx.closePath();ctx.fill();}// 绘制子弹function drawBullets() {ctx.fillStyle = '#ffcc00';bullets.forEach(bullet => {ctx.beginPath();ctx.arc(bullet.x, bullet.y, bullet.size, 0, Math.PI * 2);ctx.fill();});}// 绘制敌机function drawEnemies() {enemies.forEach(enemy => {ctx.fillStyle = enemy.color;// 机身ctx.beginPath();ctx.moveTo(enemy.x, enemy.y);ctx.lineTo(enemy.x + enemy.width, enemy.y);ctx.lineTo(enemy.x + enemy.width / 2, enemy.y + enemy.height);ctx.closePath();ctx.fill();// 机翼装饰ctx.fillStyle = '#c0392b';ctx.beginPath();ctx.moveTo(enemy.x + 5, enemy.y + 5);ctx.lineTo(enemy.x + enemy.width - 5, enemy.y + 5);ctx.lineTo(enemy.x + enemy.width / 2, enemy.y + enemy.height - 5);ctx.closePath();ctx.fill();});}// 绘制星星背景function drawStars() {ctx.fillStyle = 'white';for (let i = 0; i < 100; i++) {const x = Math.random() * canvas.width;const y = (frameCount + i * 100) % canvas.height;const size = Math.random() * 2;ctx.beginPath();ctx.arc(x, y, size, 0, Math.PI * 2);ctx.fill();}}// 生成敌机function spawnEnemy() {const size = 30 + Math.random() * 20;const enemy = {x: Math.random() * (canvas.width - size),y: -size,width: size,height: size,speed: enemySpeed + Math.random() * 2,color: '#e74c3c'};enemies.push(enemy);}// 发射子弹function fireBullet() {if (!gameRunning) return;const bullet = {x: player.x + player.width / 2,y: player.y,size: bulletSize};bullets.push(bullet);}// 碰撞检测function checkCollision(obj1, obj2) {return obj1.x < obj2.x + obj2.width &&obj1.x + (obj1.width || obj1.size) > obj2.x &&obj1.y < obj2.y + obj2.height &&obj1.y + (obj1.height || obj1.size) > obj2.y;}// 游戏结束function gameOver() {gameRunning = false;cancelAnimationFrame(animationId);finalScoreDisplay.textContent = `最终分数: ${score}`;gameOverScreen.style.display = 'flex';}// 事件监听startButton.addEventListener('click', initGame);restartButton.addEventListener('click', initGame);// 键盘控制document.addEventListener('keydown', (e) => {if (!gameRunning) return;switch (e.key) {case 'ArrowLeft':case 'a':player.isMovingLeft = true;break;case 'ArrowRight':case 'd':player.isMovingRight = true;break;case 'ArrowUp':case 'w':player.isMovingUp = true;break;case 'ArrowDown':case 's':player.isMovingDown = true;break;case ' ':fireBullet();break;}});document.addEventListener('keyup', (e) => {switch (e.key) {case 'ArrowLeft':case 'a':player.isMovingLeft = false;break;case 'ArrowRight':case 'd':player.isMovingRight = false;break;case 'ArrowUp':case 'w':player.isMovingUp = false;break;case 'ArrowDown':case 's':player.isMovingDown = false;break;}});// 触摸控制(移动设备)let touchX = 0;canvas.addEventListener('touchstart', (e) => {if (!gameRunning) return;e.preventDefault();touchX = e.touches[0].clientX;// 触摸屏幕上半部分发射子弹if (e.touches[0].clientY < canvas.height / 2) {fireBullet();}});canvas.addEventListener('touchmove', (e) => {if (!gameRunning) return;e.preventDefault();const newTouchX = e.touches[0].clientX;const deltaX = newTouchX - touchX;player.x += deltaX;// 限制玩家不超出屏幕if (player.x < 0) player.x = 0;if (player.x > canvas.width - player.width) {player.x = canvas.width - player.width;}touchX = newTouchX;});// 点击屏幕发射子弹(移动设备)canvas.addEventListener('click', (e) => {if (!gameRunning) return;// 点击屏幕上半部分发射子弹if (e.clientY < canvas.height / 2) {fireBullet();}});</script>
</body>
</html>

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

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

相关文章

全素山药开发指南:从防痒处理到高可用食谱架构

摘要&#xff1a;本文系统性解析山药的化学特性&#xff08;黏液蛋白/皂苷致痒机制&#xff09;及全素场景下的烹饪解决方案&#xff0c;提供6种高内聚低耦合的食谱实现&#xff0c;附完整防氧化与黏液控制技术方案。一、核心问题分析&#xff1a;山药处理中的“痛点”致痒物质…

OpenLayers 入门指南:序言

本专栏旨在帮助零GIS基础的开发人员系统掌握OpenLayers这一强大的开源Web地图库&#xff0c;通过 “理论实战” 结合的方式&#xff0c;逐步实现从创建地图到构建一个基础地图应用模版。无论你是前端开发者、GIS爱好者&#xff0c;都可以通过此专栏零基础开始用OpenLayers开发一…

WebRTC轻量学习 libdatachannel

最近想了解一些在浏览器中推送音视频流&#xff0c;寻找很多版本的代码&#xff0c;C、Go、Python等语言实现的webRTC协议。 按照搭建难度和快速实现首选Python版本的WebRTC&#xff0c;这种是最适合原型开发的。 选型&#xff1a;C的开源库libdatachannel Python的开源库Ai…

Vue2中的keep-alive:组件状态缓存与性能优化实战指南

目录 一、什么是keep-alive&#xff1f; 与普通组件切换的对比 二、核心用法详解 1. 基础用法&#xff1a;动态组件缓存 2. 路由视图缓存 3. 生命周期钩子 三、进阶配置与优化 1. 精准控制缓存组件 &#xff08;1&#xff09;include/exclude属性 &#xff08;2&…

FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护?

url: /posts/f96ba438de34dc197fd2598f91ae133d/ title: FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护? date: 2025-07-02T22:05:04+08:00 lastmod: 2025-07-02T22:05:04+08:00 author: cmdragon summary: FastAPI框架安全加固方案包括密钥轮换自动化、请…

NeighborGeo:基于邻居的IP地理定位(五)

NeighborGeo:基于neighbors的IP地理定位 X. Wang, D. Zhao, X. Liu, Z. Zhang, T. Zhao, NeighborGeo: IP geolocation based on neighbors, Comput. Netw. 257 (2025) 110896, 5. Case analysis 为了说明NeighborGeo在优化图结构和利用邻居信息进行预测方面的优势,将目标I…

Ethernet IP与Profinet共舞:网关驱动绿色工业的智慧脉动

Ethernet IP与Profinet共舞&#xff1a;驱动绿色工业的智慧脉动 光伏建筑一体化&#xff0c;建筑碳中和&#xff0c;在全球气候变化、国家碳达峰碳中和战略大背景下&#xff0c;敬畏生活、生产与自然和谐共处&#xff0c;确立自身资源循环高效利用的倒计时和路线图。 在全球气…

衡石科技破解指标管理技术难题:语义层建模如何实现业务与技术语言对齐?

在数字化转型的深水区&#xff0c;企业指标管理体系普遍面临一个核心矛盾&#xff1a;业务部门需要敏捷的数据洞察支撑决策&#xff0c;而IT部门却受困于复杂的数据架构和冗长的需求响应周期。这种矛盾的本质&#xff0c;是传统指标管理体系中“技术语言”与“业务语言”的割裂…

正品库拍照PWA应用的实现与性能优化|得物技术

一、 背景与难点 背景 目前得物ERP主要鉴别流程&#xff0c;是通过鉴别师鉴别提需到仓库&#xff0c;仓库库工去进行商品补图拍照&#xff0c;现有正品库59%的人力投入在线下商品借取/归还业务的操作端&#xff0c;目前&#xff0c;线下借取的方式会占用商品资源&#xff0c…

如何使用python识别出文件夹中全是图片合成的的PDF,并将其移动到指定文件夹

引言 在现代数字化工作流程中&#xff0c;无论是为机器学习模型处理数据&#xff0c;还是进行数字归档&#xff0c;区分原生文本 PDF&#xff08;例如&#xff0c;由文字处理器生成的报告&#xff09;和基于图像的 PDF&#xff08;例如&#xff0c;扫描的发票、档案文件&#…

淘系怎么做?

首先&#xff0c;要明确一点就是&#xff0c;补单不是“刷/单”&#xff0c;补单是为了给买家营造一个良好的购物氛围&#xff0c;毕竟再好的产品没有排名、没有权重&#xff0c;买家根本都没有机会看到你的产品&#xff0c;而且只有让淘宝感觉的产品有扶持必要它才会给你对应的…

网安系列【6】之[特殊字符] SQL注入揭秘:从入门到防御实战指南

文章目录一 真实案例二 SQL注入三 为什么危害堪比核弹&#xff1f;四 深入解剖攻击原理&#x1f3af; 4.1&#xff1a;探测SQL漏洞的存在&#x1f3af; 4.2&#xff1a;数据库信息探测&#x1f3af; 4.3&#xff1a;数据库信息探测&#x1f3af; 4.4&#xff1a;数据库信息进一…

Windows内核并发优化

Windows内核并发优化通过多层次技术手段提升多核环境下的系统性能&#xff0c;以下是关键技术实现方案&#xff1a; 一、内核锁机制优化‌ 精细化锁策略‌ 采用自旋锁&#xff08;Spinlock&#xff09;替代信号量处理短临界区&#xff0c;减少线程切换开销 对共享资源实施读…

【数据结构】 排序算法

【数据结构】 排序算法 一、排序1.1 排序是什么&#xff1f;1.2 排序的应用1.3 常见排序算法二、常见排序算法的实现2.1 插入排序2.1.1 直接插入排序2.1.2 希尔排序2.2 选择排序2.2.1 直接选择排序2.2.1.1 方法12.2.1.1 方法22.2.2 堆排序&#xff08;数组形式&#xff09;2.3 …

NumPy-核心函数np.matmul()深入解析

NumPy-核心函数np.matmul深入解析 一、矩阵乘法的本质与np.matmul()的设计目标1. 数学定义&#xff1a;从二维到多维的扩展2. 设计目标 二、np.matmul()核心语法与参数解析函数签名核心特性 三、多维场景下的核心运算逻辑1. 二维矩阵乘法&#xff1a;基础用法2. 一维向量与二维…

突破政务文档理解瓶颈:基于多模态大模型的智能解析系统详解

重磅推荐专栏&#xff1a; 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域&#xff0c;包括但不限于ChatGPT、DeepSeek、Stable Diffusion等。我们将深入研究大型模型的开发和应用&#xff0c;以及与之相关的人工智能生成内容…

深入探讨支持向量机(SVM)在乳腺癌X光片分类中的应用及实现

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…

九、K8s污点和容忍

九、K8s污点和容忍 文章目录九、K8s污点和容忍1、污点&#xff08;Taint&#xff09;和容忍&#xff08;Toleration&#xff09;1.1 什么是污点&#xff08;Taint&#xff09;&#xff1f;1.2 什么是容忍&#xff08;Toleration&#xff09;&#xff1f;1.3 污点的影响效果&…

基于开源AI智能名片链动2+1模式S2B2C商城小程序的超级文化符号构建路径研究

摘要&#xff1a;在数字技术重构文化传播生态的背景下&#xff0c;超级文化符号的塑造已突破传统IP运营框架。本文以开源AI智能名片链动21模式与S2B2C商城小程序的融合创新为切入点&#xff0c;结合"屿光生活"体验馆、快手烧烤摊主等典型案例&#xff0c;提出"技…

QT 日志 - qInstallMessageHandler将qDebug()打印内容输出到文件

在编程开发中&#xff0c;日志功能至关重要&#xff0c;对于在开发期间或者是程序上线后&#xff0c;都有助于排查问题&#xff1b; 对于C/C和QT方向&#xff0c;日志库有log4cpp、plog、log4qt等&#xff0c;本篇文章将使用qt自带的日志方式去实现。 定义日志函数&#xff1a…