打砖块小游戏html小游戏

news/2024/11/12 23:16:31/文章来源:https://www.cnblogs.com/diuta/p/18369927

这里提供一个打砖块小游戏html代码,有需要的小伙伴可以自己试试。

body内容

点击查看代码
<select id="difficulty"><option value="easy">简单</option><option value="medium">中等</option><option value="hard">困难</option>
</select>
<button onclick="startGame()">开始游戏</button>
<canvas id="brickGame" width="480" height="320"></canvas>

js代码

点击查看代码
<script>const canvas = document.getElementById('brickGame');const ctx = canvas.getContext('2d');let ballRadius = 10;let x, y, dx, dy;const paddleHeight = 10;const paddleWidth = 75;let paddleX;let rightPressed = false;let leftPressed = false;let brickRowCount, brickColumnCount, bricks = [];let score = 0;let level = 0;let timeLimit, elapsedTime = 0;function initializeGame(difficulty) {if (difficulty === 'easy') {brickRowCount = 3 + level;brickColumnCount = 5 + level;dx = 2 + level;dy = -2 - level;} else if (difficulty === 'medium') {brickRowCount = 5 + level;brickColumnCount = 7 + level;dx = 3 + level;dy = -3 - level;} else {brickRowCount = 7 + level;brickColumnCount = 9 + level;dx = 4 + level;dy = -4 - level;}x = canvas.width / 2;y = canvas.height - 30;paddleX = (canvas.width - paddleWidth) / 2;bricks = [];for (let c = 0; c < brickColumnCount; c++) {bricks[c] = [];for (let r = 0; r < brickRowCount; r++) {bricks[c][r] = { x: 0, y: 0, status: 1, type: Math.random() < 0.2 }; // 20% 概率生成特殊砖块}}score = 0;timeLimit = 30; // 每关 30 秒elapsedTime = 0;}function startGame() {const difficulty = document.getElementById('difficulty').value;initializeGame(difficulty);document.addEventListener('keydown', keyDownHandler, false);document.addEventListener('keyup', keyUpHandler, false);draw();}function keyDownHandler(e) {if (e.key === 'Right' || e.key === 'ArrowRight') {rightPressed = true;} else if (e.key === 'Left' || e.key === 'ArrowLeft') {leftPressed = true;}}function keyUpHandler(e) {if (e.key === 'Right' || e.key === 'ArrowRight') {rightPressed = false;} else if (e.key === 'Left' || e.key === 'ArrowLeft') {leftPressed = false;}}function collisionDetection() {for (let c = 0; c < brickColumnCount; c++) {for (let r = 0; r < brickRowCount; r++) {const b = bricks[c][r];if (b.status === 1) {if (x > b.x && x < b.x + 75 && y > b.y && y < b.y + 20) {dy = -dy;b.status = 0;score++;if (b.type) {score += 2; // 特殊砖块额外得分}if (score === brickRowCount * brickColumnCount) {level++;alert('恭喜!进入第 ' + (level + 1) + ' 关!');startGame();}}}}}}function drawBall() {ctx.beginPath();ctx.arc(x, y, ballRadius, 0, Math.PI * 2);ctx.fillStyle = '#4CAF50';ctx.fill();ctx.closePath();}function drawPaddle() {ctx.beginPath();ctx.rect(paddleX, canvas.height - paddleHeight, paddleWidth, paddleHeight);ctx.fillStyle = '#4CAF50';ctx.fill();ctx.closePath();}function drawBricks() {for (let c = 0; c < brickColumnCount; c++) {for (let r = 0; r < brickRowCount; r++) {if (bricks[c][r].status === 1) {const brickX = c * (75 + 10) + 30;const brickY = r * (20 + 10) + 30;bricks[c][r].x = brickX;bricks[c][r].y = brickY;ctx.beginPath();ctx.rect(brickX, brickY, 75, 20);ctx.fillStyle = bricks[c][r].type ? '#FF5733' : '#4CAF50'; // 特殊砖块颜色不同ctx.fill();ctx.closePath();}}}}function drawScore() {ctx.font = '16px Arial';ctx.fillStyle = '#4CAF50';ctx.fillText('分数: ' + score, 8, 20);ctx.fillText('关卡: ' + (level + 1), canvas.width - 100, 20);ctx.fillText('剩余时间: ' + (timeLimit - Math.floor(elapsedTime)), canvas.width / 2 - 50, 20);}function draw() {ctx.clearRect(0, 0, canvas.width, canvas.height);drawBricks();drawBall();drawPaddle();drawScore();collisionDetection();if (x + dx > canvas.width - ballRadius || x + dx < ballRadius) {dx = -dx;}if (y + dy < ballRadius) {dy = -dy;} else if (y + dy > canvas.height - ballRadius) {if (x > paddleX && x < paddleX + paddleWidth) {dy = -dy;} else {alert('游戏结束!');document.location.reload();}}if (rightPressed && paddleX < canvas.width - paddleWidth) {paddleX += 7;} else if (leftPressed && paddleX > 0) {paddleX -= 7;}x += dx;y += dy;// 更新时间elapsedTime += 1 / 60; // 假设每帧约 1/60 秒if (elapsedTime >= timeLimit) {alert('时间到!游戏结束!');document.location.reload();}requestAnimationFrame(draw);}
</script>

css代码

点击查看代码
 <style>body {display: flex;flex-direction: column;justify-content: center;align-items: center;height: 100vh;background-color: #f0e5d3;margin: 0;font-family: Arial, sans-serif;}canvas {border: 2px solid #4CAF50;background-color: #ffffff;}select {margin-bottom: 20px;padding: 5px;}</style>

实例可以参考:http://diuta.com/app/dzk.html

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

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

相关文章

LLM应用实战: 产业治理多标签分类

本期的干货就是分享关于如何基于LLM实现数量多、层级多的多标签分类的实战经验,各位读者可以参考借鉴。1. 背景 许久未见,甚是想念~ 近期本qiang~换了工作,处于新业务适应期,因此文章有一段时间未更新,理解万岁! 现在正在着手的工作是产业治理方面,主要负责其中一个功能…

使用cilium开发ebpf程序

使用go开发ebpf程序最常见的一个框架就是cilium。开发前需要了解ebpf,了解go语言的基础知识。 在本地安装go之后下载bpf2go go get github.com/cilium/ebpf/cmd/bpf2go 从最简单的开发框架开始 下载示例源码 git clone https://github.com/cilium/ebpf.git 在ebpf/examples下是…

element ui 中日期选择器disabledDate的几种用法

现实开发中,遇到截止日期,跟着接口返回来确定的。需要用函数来实现disabledDate 这块知识,在手册文档写的也不详细。 这块实现基于element-ui 2.15.14https://blog.csdn.net/hellowang02/article/details/131575982相信坚持的力量,日复一日的习惯.

Paper Reading: SAFE: Scalable Automatic Feature Engineering Framework for Industrial Tasks

本文提出了一种可扩展自动特征工程方法 SAFE,它包括特征生成阶段和特征选择阶段,具备较高的计算效率、可扩展性,能满足实际业务问题的要求。不同于使用算子枚举所有的生成特征,本文的特征生成阶段专注于挖掘原始特征对,以更高的概率生成更有效的新特征。在特征选择阶段,本…

织梦模板引擎的代码样式有如下几种形式

1、织梦模板引擎的代码样式有如下几种形式:{dede:标记名称 属性=值/} {dede:标记名称 属性=值}{/dede:标记名称}{dede:标记名称 属性=值}自定义样式模板(InnerText){/dede:标记名称} 提示: 如果使用带底层模板的标记,必须严格用{dede:标记名称 属性=值}{/dede:标记名称} 这种…

Flannel VxLAN DR 模式

Flannel VxLAN DR 模式Flannel VxLAN DR 模式 一、环境信息主机 IPubuntu 172.16.94.141软件 版本docker 26.1.4helm v3.15.0-rc.2kind 0.18.0clab 0.54.2kubernetes 1.23.4ubuntu os Ubuntu 20.04.6 LTSkernel 5.11.5 内核升级文档二、安装服务 kind 配置文件信息 $ cat insta…

从零开始学习C++(0)

这是什么? 要先学习 C++,我们要先了解 C++ 是什么这是 Wiki Pedia 的解释,我们来提炼一下:C++ 是一种高级语言。 C++ 是 C 语言的扩展升级版。 C++ 是面向对象语言。下载环境 简单了解一下后,我们来下载 C++ 编译器环境。 目前有很多种编译器,例如:Dev-C++ CodeBlocks V…

vm linux 共享文件夹

虚拟机设置共享目录挂载mkdir /mnt/hgfs mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other cd /mnt/hgfs/ ls 留待后查,同时方便他人 联系我:renhanlinbsl@163.com

win10mysql服务丢失

虚拟机中安装的mysql突然连接不上了,点击计算机-管理,发现mysql服务都不见了。 使用命令行重新安装:mysqld.exe --install 又提示:Install/Remove of the Service Denied!,这个是权限问题,用管理员运行就好 到计算机-管理中找到msyql服务,点击启动,正常了纯属记录程序…

vue3.0启动报错

vue突然重启报错:Two output files share the same path but have different contents,按照网络方法各种依赖重新清除,再安装,不太行,仔细一看,透,vue大小写写错了

SpringBoot 快速入门

SpringBoot 快速入门创建空工程在空工程下创建一个 maven工程将该maven工程变成springboot 工程,只需要在pom文件中指定parent为 springboot的基础包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/P…

达梦数据库获取SQL真实的执行计划

一、set autotrace trace disql下执行set autotrace trace开启AUTOTRACE功能,执行SQL语句,并打印实际的执行计划。 SQL> set autotrace traceSQL> select a.employee_name, b.department_name from dmtest.t_emp a join dmtest.t_dept b on a.department_id = b.depart…