js写飞机大战小游戏

news/2024/11/28 4:48:20/文章来源:https://www.cnblogs.com/zzg1022/p/18570612

第一步,写一个html页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>飞机大战</title>
<style>body { margin: 0; }canvas { display: block; background-color: #000; }
</style>
</head>
<body>
<canvas id="gameCanvas" width="800" height="600"></canvas>
<script src="game.js"></script>
</body>
</html>

第二步,就是JS文件了。js文件名字   game.js 代码如下

 

const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');let player = {x: canvas.width / 2,y: canvas.height - 30,width: 50,height: 30,speed: 5,dx: 0
};let enemies = [];
let bullets = [];
let keys = {};
let gameRunning = true;function init() {document.addEventListener('keydown', keyDownHandler, false);document.addEventListener('keyup', keyUpHandler, false);setInterval(mainLoop, 1000 / 60); // 每秒60帧setInterval(spawnEnemy, 1000); // 每秒生成一个敌人
}function mainLoop() {if (!gameRunning) return;clearCanvas();movePlayer();moveBullets();moveEnemies();drawPlayer();drawBullets();drawEnemies();checkCollisions();
}function clearCanvas() {ctx.clearRect(0, 0, canvas.width, canvas.height);
}function drawPlayer() {ctx.fillStyle = "red";ctx.fillRect(player.x, player.y, player.width, player.height);
}function movePlayer() {if (keys.right) {player.dx = player.speed;} else if (keys.left) {player.dx = -player.speed;} else {player.dx = 0;}player.x += player.dx;if (player.x < 0) {player.x = 0;} else if (player.x + player.width > canvas.width) {player.x = canvas.width - player.width;}
}function spawnEnemy() {let enemy = {x: Math.random() * (canvas.width - 50),y: 0,width: 50,height: 30,speed: 2};enemies.push(enemy);
}function moveEnemies() {for (let i = 0; i < enemies.length; i++) {enemies[i].y += enemies[i].speed;if (enemies[i].y > canvas.height) {enemies.splice(i, 1);i--;}}
}function drawEnemies() {for (let enemy of enemies) {ctx.fillStyle = "blue";ctx.fillRect(enemy.x, enemy.y, enemy.width, enemy.height);}
}function fireBullet() {let bullet = {x: player.x + player.width / 2 - 2,y: player.y,width: 4,height: 10,speed: 7};bullets.push(bullet);
}function moveBullets() {for (let i = 0; i < bullets.length; i++) {bullets[i].y -= bullets[i].speed;if (bullets[i].y < 0) {bullets.splice(i, 1);i--;}}
}function drawBullets() {for (let bullet of bullets) {ctx.fillStyle = "yellow";ctx.fillRect(bullet.x, bullet.y, bullet.width, bullet.height);}
}function checkCollisions() {for (let i = 0; i < enemies.length; i++) {let enemy = enemies[i];if (player.x < enemy.x + enemy.width &&player.x + player.width > enemy.x &&player.y < enemy.y + enemy.height &&player.y + player.height > enemy.y) {gameRunning = false;alert("游戏结束!");return;}for (let j = 0; j < bullets.length; j++) {let bullet = bullets[j];if (bullet.x < enemy.x + enemy.width &&bullet.x + bullet.width > enemy.x &&bullet.y < enemy.y + enemy.height &&bullet.y + bullet.height > enemy.y) {enemies.splice(i, 1);bullets.splice(j, 1);i--;j--;break;}}}
}function keyDownHandler(e) {if (e.key === 'Right' || e.key === 'ArrowRight') {keys.right = true;} else if (e.key === 'Left' || e.key === 'ArrowLeft') {keys.left = true;} else if (e.key === ' ' || e.key === 'Space') {fireBullet();}
}function keyUpHandler(e) {if (e.key === 'Right' || e.key === 'ArrowRight') {keys.right = false;} else if (e.key === 'Left' || e.key === 'ArrowLeft') {keys.left = false;}
}init();

 

将game.js 和 html文件放到同级目录,运行html文件,就可以玩了

 

 

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

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

相关文章

面试课程__性能测试讲解(5.1)

一、你做过性能测试吗? 方法1:做过 方法2:在公司性能是专门性能小组做的,但是我也会做 二、性能测试有哪些类型? (1)压力测试(破坏性测试) 压力测试是系统在一定饱和状态下,例如:cpu、内存、磁盘io在饱和使用情况下,不断给系统施加压力,看系统处理能力,以及系统是…

活动报名!《国产开源数据库PolarDBPG专家训练营》北京站

2024年11月29日, 由PolarDB社区联合PostgreSQL社区发起的《国产开源数据库PolarDB+PostgreSQL专家训练营》在北京站正式开课。 PostgreSQL中文社区理事长及多位核心成员汇聚上地国际人才会客厅会议室,为大家带来为期一天的技术盛宴,和大家一起分享PolarDB和PostgreSQL数据库知…

RPA处理京东商智系统日期控件

需求:在 京东商智系统-流量概况 页面批量抓取指定商品在指定日期范围内每一天的搜索关键词TOP5数据 京东商智系统,搜索关键词TOP5、时间控件展示如下(该时间控件不支持手工输入日期,也不支持选择指定月份\年份,只能通过左右按钮切换年月和点击日历上的日期来选择指定日期)…

有了这套车间生产看板,生产进度一目了然

一般来说,生产安排搞定之后,接下来盯着生产计划执行的情况就成了生产管理的关键。要是生产进度跟不上,产品没法按时交货,那对企业的盈利和品牌形象可都是影响不小,可能会出现下面这些问题:实时数据问题:企业很难获实时生产进度数据,使管理层无法及时掌握生产状况,难以…

罐笼乘坐人员超限识别智慧矿山一体机非煤矿山算法安全监管的智能化升级

在矿山行业中,安全始终是最为关键的议题。智慧矿山一体机专为矿山安全监控和管理设计,集成了多种智能化功能,以提升矿山的安全监管能力和生产效率。本文将详细介绍识别智慧矿山一体机在非煤矿山中的应用,特别是其罐笼乘坐人员超限识别算法的工作原理、技术实现以及实际应用…

pikachu平台XXE漏洞通关教程详解

声明! 如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人无关,切勿触碰法律底线,否则后果自负!!!!工具在网盘,自取 通过网盘分享的文件:phpstudy 链接: https://pan.baidu.com/s/1l0jpNGQvYMwRSq3BhD…

An Empirical Model of Large-Batch Training

目录概Gradient Noise ScaleMcCandlish S., Kaplan J., Amodei D. and OpenAI Dota Team. An empirical model of large-batch training. 2018.概 本文讨论了随着 batch size 改变, sgd-style 的优化器的学习应该怎么调整. Gradient Noise Scale考虑如下的优化问题: \[\tag{1} …

算法网关视频分析网关拍照检测高空抛物检测算法:守护城市安全的“天眼”

高空抛物,一个看似微不足道的行为,实则隐藏着巨大的安全隐患。随着城市化进程的加快,高层建筑如雨后春笋般拔地而起,高空抛物现象也随之增多,给人们的生活带来了严重的威胁。从烟头、饮料瓶到花盆、垃圾,这些被随意抛掷的物品,一旦从高空落下,其破坏力不容小觑。 为了有…

jquery仿PPT幻灯片特效插件ppt.js

ppt.js是一款jquery仿PPT幻灯片特效插件。该jquery插件基于jquery来显示图片翻页效果,可全屏显示,以及自定义图片的宽度和高度。演示 下载使用方法 在页面中引入jquery和ppt.js文件,以及字体图标文件iconic和插件样式文件ppt.css。<link rel="stylesheet" hr…

性能指标详解

一、监听器中的插件 @gc - Active Threads Over Timeip 活动线程时间 @gc - AutoStop Listener 自动停止侦听器 @gc - Bytes Throughput Over Timejp 字节吞吐量随时间变化 @gc -Composite Graph 综合图 @gc - Connect Times Over Timejp 连接时间 @gc -Console Status Loggerj…