用HTML5制作精美战机游戏

article/2025/2/7 9:09:28

每天要被大学老师催H5作业👏🏻👏🏻👏🏻

不如看看本文,代码齐全,直接用来做参考案例👌🏻  

干货满满不看后悔👍👍👍

代码和图片压缩包完整下载链接---战机游戏下载

📝个人主页→数据挖掘博主ZTLJQ的主页

b1691e6f246947eeb06ee06469621bc2.gif

个人推荐python学习系列:

☄️爬虫JS逆向系列专栏 - 爬虫逆向教学

☄️python系列专栏 - 从零开始学python


以下是游戏画面

546f209c536845db8ed4cbe01e671189.png

 话不多说直接上代码!

<!DOCTYPE html>
<html>
<head><title>ZT战机</title><style>canvas {border: 1px solid #000;display: block;margin: 0 auto;}</style>
</head>
<body><button onclick="startGame()">开始游戏</button><button onclick="endGame()">结束游戏</button><canvas id="gameCanvas" width="800" height="800"></canvas><script>var game = {canvas: document.getElementById("gameCanvas"),context: null,player: null,bullets: [],enemies: [],score: 0,gameover: true,init: function() {this.context = this.canvas.getContext("2d");this.player = new Player(this.canvas.width / 2, this.canvas.height - 100);window.addEventListener("keydown", function(event) {game.handleKeydown(event);});window.addEventListener("keyup", function(event) {game.handleKeyup(event);});this.gameLoop();},startGame: function() {if (this.gameover) {this.score = 0;this.gameover = false;this.bullets = [];this.enemies = [];this.spawnEnemies();this.gameLoop();}},endGame: function() {this.gameover = true;},gameLoop: function() {if (!this.gameover) {this.update();this.draw();requestAnimationFrame(function() {game.gameLoop();});}},update: function() {this.player.update();for (var i = this.bullets.length - 1; i >= 0; i--) {var bullet = this.bullets[i];bullet.update();if (bullet.y < 0 || bullet.hit) {this.bullets.splice(i, 1);}}for (var i = this.enemies.length - 1; i >= 0; i--) {var enemy = this.enemies[i];enemy.update();if (enemy.checkCollision(this.player)) {this.gameover = true;}for (var j = this.bullets.length - 1; j >= 0; j--) {var bullet = this.bullets[j];if (bullet.checkCollision(enemy)) {this.bullets.splice(j, 1);this.enemies.splice(i, 1);this.score += 10;this.increaseDifficulty();break;}}}},draw: function() {this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);// 绘制游戏场景背景图var backgroundImage = new Image();backgroundImage.src = "background.jpg";this.context.drawImage(backgroundImage, 0, 0, this.canvas.width, this.canvas.height);this.player.draw(this.context);for (var i = 0; i < this.bullets.length; i++) {var bullet = this.bullets[i];bullet.draw(this.context);}for (var i = 0; i < this.enemies.length; i++) {var enemy = this.enemies[i];enemy.draw(this.context);}this.context.fillStyle = "#000";this.context.font = "20px Arial";this.context.fillText("Score: " + this.score, 10, 30);if (this.gameover) {this.context.fillStyle = "#000";this.context.font = "40px Arial";this.context.fillText("Game Over", this.canvas.width / 2 - 100, this.canvas.height / 2);}},handleKeydown: function(event) {if (event.keyCode === 37) {this.player.moveLeft();} else if (event.keyCode === 39) {this.player.moveRight();} else if (event.keyCode === 32) {if (!this.gameover) {var bullet = this.player.shoot();this.bullets.push(bullet);}}},handleKeyup: function(event) {if (event.keyCode === 37 || event.keyCode === 39) {this.player.stopMove();}},spawnEnemies: function() {if (!this.gameover) {var enemyCount = Math.floor(Math.random() * 3) + 1; // 随机生成 1 到 3 个敌人for (var i = 0; i < enemyCount; i++) {var x = Math.random() * (this.canvas.width - 50);var y = Math.random() * -200; // 从屏幕上方随机生成// 创建不同种类的敌机var enemyType = Math.random();var enemy;if (enemyType < 0.5) {enemy = new Enemy1(x, y);} else {enemy = new Enemy2(x, y);}this.enemies.push(enemy);}setTimeout(function() {game.spawnEnemies();}, 2000); // 每隔 2 秒生成一波敌人}},increaseDifficulty: function() {if (this.score % 50 === 0) {for (var i = 0; i < this.enemies.length; i++) {this.enemies[i].speed += 0.5;}}}};function Player(x, y) {this.x = x;this.y = y;this.width = 80;this.height = 60;this.speed = 8;this.isMovingLeft = false;this.isMovingRight = false;this.image = new Image();this.image.src = "player.png";}Player.prototype.update = function() {if (this.isMovingLeft) {this.moveLeft();} else if (this.isMovingRight) {this.moveRight();}};Player.prototype.draw = function(context) {context.drawImage(this.image, this.x, this.y, this.width, this.height);};Player.prototype.moveLeft = function() {if (this.x > 0) {this.x -= this.speed;}};Player.prototype.moveRight = function() {if (this.x + this.width < game.canvas.width) {this.x += this.speed;}};Player.prototype.stopMove = function() {this.isMovingLeft = false;this.isMovingRight = false;};Player.prototype.shoot = function() {var bullet = new Bullet(this.x + this.width / 2, this.y);return bullet;};function Bullet(x, y) {this.x = x;this.y = y;this.width = 10;this.height = 30;this.speed = 5;this.hit = false;this.image = new Image();this.image.src = "bullet.png";}Bullet.prototype.update = function() {this.y -= this.speed;};Bullet.prototype.draw = function(context) {context.drawImage(this.image, this.x, this.y, this.width, this.height);};Bullet.prototype.checkCollision = function(object) {if (this.x < object.x + object.width &&this.x + this.width > object.x &&this.y < object.y + object.height &&this.y + this.height > object.y) {this.hit = true;return true;}return false;};function Enemy1(x, y) {this.x = x;this.y = y;this.width = 80;this.height = 60;this.speed = Math.random() * 2 + 1;this.image = new Image();this.image.src = "enemy1.png";}Enemy1.prototype.update = function() {this.y += this.speed;};Enemy1.prototype.draw = function(context) {context.drawImage(this.image, this.x, this.y, this.width, this.height);};Enemy1.prototype.checkCollision = function(object) {if (this.x < object.x + object.width &&this.x + this.width > object.x &&this.y < object.y + object.height &&this.y + this.height > object.y) {return true;}return false;};function Enemy2(x, y) {this.x = x;this.y = y;this.width = 80;this.height = 60;this.speed = Math.random() * 2 + 1;this.image = new Image();this.image.src = "enemy2.png";}Enemy2.prototype.update = function() {this.y += this.speed;};Enemy2.prototype.draw = function(context) {context.drawImage(this.image, this.x, this.y, this.width, this.height);};Enemy2.prototype.checkCollision = function(object) {if (this.x < object.x + object.width &&this.x + this.width > object.x &&this.y < object.y + object.height &&this.y + this.height > object.y) {return true;}return false;};var startGame = function() {game.startGame();};var endGame = function() {game.endGame();};game.init();</script>
</body>
</html>

其中的background bullet这些图片你可用使用自己想要图片进行替换

 


http://chatgpt.dhexx.cn/article/qE1FkVeN.shtml

相关文章

用HTML5制作课程表

无论是上班族还是学生党&#xff0c;都需要一份类似课程表的表格来提醒我们的日程。有了它就可以不必担心自己忘记该干什么事情&#xff0c;到点了该干什么事情。它可以说是我们日常生活中经常接触的事物了&#xff0c;制作一份课程表也很简单&#xff0c;可以用纸写&#xff0…

使用HTML5制作的网页游戏-管道小鸟(附源码)

目录 1.整体项目框架 2.css样式 3. 游戏初始化 4.游戏结束提示 5.效果图​ 1.整体项目框架 2.css样式 *{padding: 0px;margin: 0px;}#game{width: 800px;height: 600px;background-image: url(img/bg.png);position: relative;overflow: hidden;/*溢出隐藏*/}#bird{width…

html做的小游戏,41个用HTML5制作完成的游戏作品

了解的人都应该知道HTML5有大量的动画和交互功能&#xff0c;完全可以用来完成一些游戏类的操作&#xff0c;今天收集分享&#xff1a;41个用HTML5制作完成的游戏作品&#xff0c;希望其中有你喜欢和需要的&#xff0c;或者可以给你带来灵感的。 1-Pirateslovedaisies 2-Torus …

John Petrucci-Wild Stringdom(1)

John Petrucci-Wild Stringdom(1) 第一章 练习导致完美 最能打击一个吉他手的事情&#xff0c;莫过于不能很快地达到自认为理所当然的水平而带来的焦虑。如果你经常在弹了数小时以后依然发现自己一无所获。那么这章就是专门为你写的。这章主要是概括了该如何练习的要点。当你开…

知识的迷宫 网络上的时间是如何度过的

作者&#xff1a;马伯庸 字数&#xff1a;1287 我在写一篇专栏文章&#xff0c;需要查阅一下关于宣武门的资料。   现在查资料比从前方便多了&#xff0c;只消在网上检索一下&#xff0c;立刻得到海量信息。于是很快我就得到了想要的资料&#xff0c;准备动笔写了。  …

蓝色默认蓝色色值_美丽的蓝色网站展示

每次您访问一个从未见过的网站时&#xff0c;第一印象是什么&#xff1f; 这是配色方案&#xff01; 颜色对任何用户而言都是最重要的。 颜色是影响个人感知的第一件事 &#xff0c;它以微妙的方式传达信息。 无论内容的质量如何&#xff0c;或网站的可用性如何&#xff0c;至…

130 余个相见恨晚的超实用网站,总有一个用得着

Python实战社群 Java实战社群 长按识别下方二维码&#xff0c;按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨Caesar 来源丨手机电脑双黑客 文章目录 130 余个相见恨晚的超实用网站搞学习找书籍冷知识 / 黑科技写代码资源搜索小工具导航页&…

设计一个简单HTML爵士音乐网页(HTML+CSS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

布鲁斯口琴进阶教程资料分享

写在前边 打算在博客园里更新点关于音乐相关的内容&#xff0c;看过我学习Spring Cloud系列博客的园友&#xff0c;可能很早就看到我碎碎念说学半音阶口琴&#xff0c;2020疫情期间&#xff0c;我又学了布鲁斯口琴 [嘿哈] 布鲁斯口琴的教程很多&#xff0c;常见的有蓝调口琴网&…

提高免疫力吃什么 多吃奶制品

免疫力对于我们每个人来说都是极其重要的&#xff0c;而我们可以通过平常的一些食物摄入来提高免疫力&#xff0c;那么提高免疫力吃什么呢?一起了解一下。 提高免疫力吃什么 奶制品 奶制品不但是提供钙元素的好食品&#xff0c;而且它含大量的蛋白质&#xff0c;维他命(包括…

荒野白牡丹都有啥功效,白牡丹茶对人体的功效与作用

荒野白牡丹是白茶的种类之一&#xff0c;功效有延缓抗衰老、抗氧化、杀菌消炎等功效。还有退热、护肝、明目、提神的作用。 白牡丹茶的功效&#xff1a; 1、延缓抗衰老 ​ 白牡丹茶能抗衰老&#xff0c;多喝白牡丹茶能美白养颜、抗衰老&#xff0c;最适合女人饮用&#xff0c;加…

鲜牛奶的功效与作用

说起牛奶想必大家都不陌生&#xff0c;也知道牛奶补钙这一说法&#xff0c;确实如此&#xff0c;喝牛奶是有很多好处的&#xff0c;其中一个就是补钙&#xff0c;但怎么喝才能最健康呢&#xff1f;其实牛奶也是有区分的&#xff0c;就拿鲜牛奶来说&#xff0c;它是牛奶脱离牛体…

买牛奶

买牛奶 时间限制&#xff1a; 1000 ms | 内存限制&#xff1a; 65535 KB 难度&#xff1a; 1 描述 LYH的朋友XY很喜欢喝牛奶&#xff0c;他几乎每天都要喝一袋牛奶。但是XY买牛奶时很讲究&#xff0c;如果不符合他的要求&#xff0c;就算不喝他也不会买的。他一共有两个要求&…

牛奶食疗可治多种疾病(图)

牛奶食疗可治多种疾病(图) http://www.sina.com.cn 2008年05月08日10:41 当代健康报 牛奶食疗方法推荐 牛奶、羊奶各125毫升&#xff0c;混合煮沸&#xff0c;每天早晨空腹服一次。适用于胃痛、胃溃疡。 牛奶250毫升&#xff0c;蜂蜜100克&#xff0c;混合煮沸&#xff0c;每天…

茶叶基本成份及功效

茶叶基本成份及功效 概述 饮茶有许多益处&#xff0c;这是众所周知的。但饮茶为什么会有许多好处呢&#xff1f;这对一般人来说&#xff0c;是 知其然而不知其所以然 。随着科学的发展&#xff0c;到了19世纪初&#xff0c; 茶叶 的成分才逐渐明确起来。经过现代科学的分离…

花生的营养价值

营养价值 一、花生的成分 花生 花生每100克含水分7.3克&#xff0c;蛋白质24.6克&#xff0c;脂肪48.7克&#xff0c;碳水化合物15.3克&#xff0c;粗纤维2.1克&#xff0c;灰分2克&#xff0c;钙36毫克&#xff0c;磷383毫克&#xff0c;铁2毫克&#xff0c;另花生仁中含有胡…

【历史上的今天】10 月 29 日:互联网的正式诞生;MariaDB 发布首个版本;“天河一号”研制成功

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2022 年 10 月 29 日&#xff0c;在 9 年前的今天&#xff0c;世界首台比特币自动提款机在加拿大温哥华启用&#xff0c;办理加拿大元与比特币的兑换&#xff0c;迅速迎…

【狂神说Mybatis29道练习题】

Mybatis Mybatis动态SQL&#xff08;狂神说学习笔记&#xff09;29道练习题 Mybatis动态SQL&#xff08;狂神说学习笔记&#xff09;29道练习题 以下代码分为工具类、几个配置文件&#xff08;mybatis-config.xml&#xff09;、实体类、持久层&#xff08;mapper映射文件&…

Android 改造——SDK从29升级至30引发的一系列问题

SDK29代表支持在安卓10上运行 SDK30代表支持在安卓11上运行 Android 11 将强制执行分区存储&#xff0c;Android 无法创建和访问自定义目录 Android 11 中的存储机制更新&#xff1a;官方文档描述 原本的缓存无法访问&#xff0c;如何迁移老数据&#xff1f; 官方推荐方法&a…

联想K29昭阳K29笔记本联想K49A在dos下刷入bios教程

联想K29昭阳K29笔记本联想K49A在dos下刷入bios教程 本人也是小白一枚&#xff0c;平时也就会装个系统啥的&#xff0c;偶然得知低版本有我要的功能&#xff0c;所以走上了一条刷bios之路&#xff0c;各种教程搜&#xff0c;刷各种包&#xff0c;没有一条说的详尽的&#xff0c;…