使用html+css+js实现弹球游戏

使用html+css+js实现弹球游戏

17969075ca2705a31a16ae54b880bb9.png

 代码如下,复制即可使用:

            .panel{            position: relative;            z-index: 0;            top:0px;            left: 400px;            width: 300px;            height: 500px;        }        .console{            position: absolute;            z-index: 1;            top:0;            left:0;            width:100%;            height: 40px;            background-color: #bbb;        }        .message{            position: absolute;            z-index: 1;            top:40px;            left:0;            width:100%;            height: 460px;            color: white;            font-size: 50px;            text-align: center;            line-height: 460px;            background-color: #999;        }        .start,.score,.pause{            position: absolute;            z-index: 2;            top: 0;            width: 100px;            height: 100%;            font-size: large;            color: white;            text-align: center;            line-height: 40px;            background: -webkit-linear-gradient(top,#4ca8ff,yellow);        }        .start{            left: 0px;        }        .score{            left:100px;            background-color: red;        }        .pause{            left:200px;        }        .start:after,.pause:before{            content: "";            position: absolute;            z-index: 2;            top: 0;            width: 3px;            height: 100%;            background: -webkit-linear-gradient(top,#666,#999);        }        .start:after{            left: 97px;        }        .pause:before{            left: 0px;        }        .start:hover,.pause:hover{            cursor: pointer;            background: -webkit-linear-gradient(top,#4ca8ff,red);        }        .panel span{            position: absolute;            z-index: 0;            top:50%;            left: 50%;            font-size: 50px;            color: blue;        }        .ball,.secondBall{            position:absolute;            z-index: 2;            border-radius:50%;            width: 20px;            height: 20px;        }        .ball{            top: 460px;            left:140px;            background-color: red;        }        .secondBall{            top: 40px;            left:140px;            background-color: red;        }        .plate{            position: absolute;            top:480px;            left: 100px;            z-index: 2;            width: 100px;            height: 20px;            background-color: #e5e5e5;        }        .promte{            margin-top: 20px;            text-align: center;        }        
开始
0
暂停
提示:键盘左右箭头控制滑板
(function(){ document.onkeydown = function(e){ var e = e || window.event; if(e.keyCode == 37){ //键盘向左键 plateMove("left"); }else if(e.keyCode == 39){ //键盘向右键 plateMove("right"); } } })(); var panel = document.getElementById("panel"), message = document.getElementById("message"), plate = document.getElementById("plate"), ball = document.getElementById("ball"), start = document.getElementById("start"), score = document.getElementById("score"), pause = document.getElementById("pause"), secondBall; var startGame, x = x2 = -1, y = y2 = -1, speed = 1, positionArr = [], pauseActive = false, //一个标志:表示难度是否还能增加 flag = true, //球的起始位置 ballX, ballY, secondBallX, secondBallY, //边界 minX = 0, maxX = panel.offsetWidth - ball.offsetWidth, minY = 40; maxY = panel.offsetHeight - ball.offsetHeight - plate.offsetHeight; window.onload = function(){ if(window.addEventListener){ start.addEventListener("click",startClick,false); pause.addEventListener("click",pauseClick,false); }else if(window.attachEvent){ start.attachEvent("onclik",startClick); pause.attachEvent("onclik",pauseClick); }else{ start.onclik = startClick; pause.onclik = pauseClick; } } function plateMove(direction){ if(direction == "left"){ if(plate.offsetLeft > 0){ plate.style.left = (plate.offsetLeft-30 < 0? 0 : plate.offsetLeft-30)+"px"; } } if(direction == "right"){ if(plate.offsetLeft 200? 200 : plate.offsetLeft+30)+"px"; } } } function startClick(){ if(!pauseActive){ resetGame(); }else{ pauseActive = !pauseActive; } startGame = setInterval(function(){ //console.log(ballX+"======"+ballY); positionArr = setPosition(ballX,ballY,true); if(positionArr == "GAMEOVER"){ return; } ballX = positionArr[0]; ballY = positionArr[1]; //设置球的位置 ball.style.left = ballX+"px"; ball.style.top = ballY+"px"; if(!flag){ positionArr = setPosition(secondBallX,secondBallY,false); secondBallX = positionArr[0]; secondBallY = positionArr[1]; secondBall.style.left = secondBallX+"px"; secondBall.style.top = secondBallY+"px"; }else{ addDifficulty(); } },30); } function pauseClick(){ pauseActive = true; clearInterval(startGame); } function resetGame(){ clearInterval(startGame); message.innerHTML=""; score.innerHTML="0"; ball.style.left = "140px"; ball.style.top = "460px"; plate.style.left = "100px"; plate.style.top = "480px"; ballX = ball.offsetLeft; ballY = ball.offsetTop; speed = 1; flag = true; //第二个球设置隐藏 if(secondBall){ secondBall.style.display="none"; secondBall.style.left = "140px"; secondBall.style.top = "40px"; } } function addDifficulty(){ if(parseInt(score.innerHTML) > 500 && parseInt(score.innerHTML) 2000 && parseInt(score.innerHTML) 5000){ if(typeof secondBall != "undefined"){ secondBall.style.display=""; }else{ secondBall = document.createElement('div'); } secondBall.className = 'secondBall'; panel.appendChild(secondBall); secondBallX = secondBall.offsetLeft; secondBallY = secondBall.offsetTop; flag = false; } } function setPosition(_x,_y,firstball){ if(_x == minX || _x == maxX){ //x*=-1; firstball? x*=-1 : x2*=-1; } if(_y == minY || _y == maxY){ //y*=-1; firstball? y*=-1 : y2*=-1; } if(_y == maxY){ //判断挡板的位置是不是在球的范围内 if(plate.offsetLeft > _x || (plate.offsetLeft + plate.offsetWidth) < _x){ clearInterval(startGame); message.innerHTML="GAMEOVER"; return "GAMEOVER"; } } if(firstball){ _x+=4*x*speed; _y+=5*y*speed; }else{ _x+=4*x2*speed; _y+=5*y2*speed; } //边界处理 _x = _x maxX? maxX : _x; _y = _y maxY? maxY : _y; //设置分数 score.innerHTML=parseInt(score.innerHTML)+10*speed; return [_x,_y]; }

如果您有更好的方法或更多的功能,可以和我们大家一起分享哦,如有错误,欢迎联系我改正,非常感谢!!!

更多编程相关内容,请关注创想鸟编程入门栏目!

立即学习“前端免费学习笔记(深入)”;

以上就是使用html+css+js实现弹球游戏的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1548322.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
html如何设置页面文本字体大小
上一篇 2025年12月21日 19:53:10
html基本语法与语义写法规则详解
下一篇 2025年12月21日 19:53:22

相关推荐

  • 行内图片如何与文本基线完美对齐?

    行内图片与基线对齐的挑战 网页设计中,图片常被用作行内元素。然而,精确控制行内图片(特别是元素)与其父元素文本基线对齐却并非易事。本文通过一个案例分析,深入探讨行内图片的基线对齐机制以及margin属性的影响。 问题:图片与文本基线对齐失效 假设一个元素包含文本和一个元素,目标是使图片下边缘与文本下…

    2026年8月30日
    200
  • VSCode怎么弄HTML_VSCode创建和编写HTML文件基础入门教程

    VSCode怎么弄HTML_VSCode创建和编写HTML文件基础入门教程VSCode怎么弄HTML_VSCode创建和编写HTML文件基础入门教程VSCode怎么弄HTML_VSCode创建和编写HTML文件基础入门教程VSCode怎么弄HTML_VSCode创建和编写HTML文件基础入门教程

    答案:VSCode通过Emmet、Live Server等扩展和智能提示功能,极大提升了HTML编写效率,其语义化标签支持与实时预览能力让开发更高效流畅。 在VSCode里处理HTML,其实比想象中要简单直观得多,它简直就是为前端开发量身定制的。对我来说,它不仅是一个编辑器,更像是一个高效的工作伙伴…

    2026年8月30日 用户投稿
    500
  • VSCode怎么打出基本代码_VSCode使用代码片段快速生成基础结构教程

    VSCode通过内置、自定义和扩展三种方式实现代码片段快速生成,提升开发效率。使用内置片段如html:5或log可一键生成常用结构;通过“Configure User Snippets”创建自定义片段,如用rfc生成React函数组件,并利用$1、$2等占位符实现光标跳转与同步编辑;安装高评分扩展如…

    2026年8月30日
    300
  • 小程序轮播图图片自适应:不用JavaScript,如何让图片充满49%宽度容器且高度自适应?

    小程序轮播图图片自适应:无需javascript,让图片充满49%宽度容器且高度自适应! 许多小程序开发者都面临着图片自适应的挑战。本文将解决一个实际案例:在宽度49%,高度200px的容器中,实现轮播图图片宽度100%填充容器,高度自适应,且不使用mode=”widthFix”属性(因Bug无法使…

    2026年8月30日
    100
  • vivo浏览器怎么找到离线网页_vivo浏览器已保存离线网页的查看路径

    可通过“我的收藏”、下载记录或文件管理器查找vivo浏览器保存的离线网页。首先打开vivo浏览器,点击底部菜单进入“我的收藏”,查找带“已离线”标签的网页;若未找到,进入“下载记录”查看类型为网页或HTML的项目;若仍无法定位,可打开文件管理器,在内部存储的Android/data/com.bbk.…

    2026年8月30日
    200
  • VSCode怎么把Markdown保存_VSCode导出和转换Markdown文件格式教程

    答案是使用自动保存、Git版本控制和插件如Markdown PDF与Pandoc可高效保存并转换Markdown;通过相对路径管理图片、自定义CSS或Pandoc模板可避免导出格式错乱。 VSCode保存Markdown文件非常直接,它有自动保存功能,手动Ctrl+S也随时可用。至于导出和转换,这通…

    2026年8月30日
    100
  • VSCode怎么保存代码C_VSCode编写和保存C语言代码的注意事项教程

    答案:在VSCode中保存C语言代码需按Ctrl+S或Cmd+S,并确保文件以.c结尾;为实现高亮、格式化与调试,需安装C/C++扩展,设置语言模式为C,配置tasks.json编译、launch.json调试,安装clang-format实现保存时自动格式化,且确保GDB就位。 在VSCode中保…

    2026年8月30日
    100
  • 如何用AI分析数据_使用ChatGPT进行数据分析与可视化

    如何用AI分析数据_使用ChatGPT进行数据分析与可视化如何用AI分析数据_使用ChatGPT进行数据分析与可视化如何用AI分析数据_使用ChatGPT进行数据分析与可视化如何用AI分析数据_使用ChatGPT进行数据分析与可视化

    答案:使用AI分析数据需将任务转化为自然语言指令,核心步骤包括数据准备、指令设计、结果解读与迭代优化。首先清洗数据并转为CSV/JSON格式,确保字段清晰;其次设计明确具体的指令,分步引导分析,如“计算各产品总销售额并排序”;然后通过人工核对或与其他工具对比验证结果准确性;ChatGPT可生成基础图…

    2026年8月30日 用户投稿
    000
  • 数智共振!三七互娱与华为构筑文娱产业新生态

    当人工智能、5g与云计算等数字技术以前所未有的方式重构文娱产业格局,沉浸式体验、个性化推荐以及全球化分发逐渐成为新常态,数字基建已成为推动文娱产业升级、连接全球用户的关键动力。 在数智文娱创新领域,总部设于广州的全球知名文娱企业三七互娱,依托“文化+科技”双轮驱动战略,在智慧办公空间建设、全球文化I…

    2026年8月29日
    100
  • 点击进入ao3网页版通道 ao3网页版经典同人永久收藏

    AO3是同人爱好者的宝藏平台,因其用户友好的标签系统、非营利性质和对创作自由的尊重而备受青睐。通过 archiveofourown.org 可直接访问,支持精准搜索、自定义界面皮肤、整本加载与多格式下载,便于顺畅浏览与永久收藏优质同人作品。 访问AO3的网页版其实非常直接,它就是那个能让你一头扎进无…

    2026年8月29日
    200
  • mPDF 中单页内容输出的挑战与策略

    在使用 mPDF 将 HTML 导出为 PDF 时,用户常希望所有内容能保持在单个页面内。然而,mPDF 对自动分页的控制能力有限,且不提供“孤行”或“孤儿行”保护机制。这意味着,若内容自然超出页面边界,mPDF 将自动分页,难以强制所有内容在单页显示。理解其分页机制的局限性是实现预期输出的关键。 …

    2026年8月29日
    200
  • 安谋科技CEO陈锋:立足全球标准与本土创新,赋能AI计算“芯”时代

    安谋科技CEO陈锋:立足全球标准与本土创新,赋能AI计算“芯”时代安谋科技CEO陈锋:立足全球标准与本土创新,赋能AI计算“芯”时代安谋科技CEO陈锋:立足全球标准与本土创新,赋能AI计算“芯”时代安谋科技CEO陈锋:立足全球标准与本土创新,赋能AI计算“芯”时代

    7月11日,2025中国集成电路设计创新大会暨ic应用生态展(icdia2025)在苏州金鸡湖国际会议中心隆重开幕。安谋科技(中国)有限公司(以下简称“安谋科技”)ceo陈锋受邀出席大会高峰论坛,并发表题为《立足全球标准与本土创新,赋能ai计算“芯”时代》的主旨演讲。围绕当前ai大模型技术的发展趋势…

    2026年8月29日 用户投稿
    000
  • 天猫店铺首页装修步骤是什么?天猫店铺首页装修教程

    提升天猫店铺形象需从首页装修入手,首先进入商家后台选择PC端首页装修,接着选用匹配类目的模板快速美化页面,有设计能力者可自定义全屏海报并嵌入热区代码,随后添加轮播图、商品推荐、店招等核心模块优化信息布局,最后切换至手机端调整排版与组件确保移动端体验流畅。 如果您希望提升天猫店铺的专业形象和用户体验,…

    2026年8月29日
    100
  • Listen1如何同步播放列表_Listen1同步播放列表的实现方法

    要实现Listen1播放列表同步,需先确保所有设备使用同一账号登录。1、点击右上角“登录”,输入邮箱密码并确认显示用户名。2、进入左下角设置,开启“自动同步播放列表”功能。3、手动点击播放列表顶部的“同步”按钮强制刷新数据。4、检查网络连通性,必要时配置代理或核对API密钥有效性。5、若无法云同步,…

    2026年8月29日
    100
  • yii2asset使用cdn

    在 Yii2 中使用 CDN 加速资源可以:注册一个 CDN 服务,并在其中设置 CDN 区域和缓存规则。在 Yii2 配置文件中配置 CDN:添加 CDN URL、启用链接资产、指定要加速的包。例如,使用 Bootstrap 资产时,可将其 CDN 配置为 ‘//cdn.example…

    2026年8月29日
    100
  • VSCode怎么弹出输出框_VSCode输出面板显示与隐藏管理教程

    输出面板是VSCode中用于集中查看任务、扩展、调试和Git等非交互式日志的核心工具,通过快捷键Ctrl+Shift+U快速打开,支持在不同输出通道间切换,可自定义自动弹出行为、位置及外观,与终端(交互式命令执行)和调试控制台(程序运行时交互)形成互补,提升开发效率。 在VSCode中,要弹出输出框…

    2026年8月29日
    300
  • 百度浏览器兼容模式切换 解决网页显示问题的实用指南

    兼容模式可解决百度浏览器访问老旧网站时的显示问题,通过切换至IE内核模拟渲染。2. 网页异常多因历史遗留技术与现代标准不兼容,兼容模式用Trident内核适配旧站,极速模式用Blink内核支持现代网页。3. 布局错乱、功能失效、资源无法加载等现象提示需切换兼容模式,点击地址栏右侧IE图标选择即可。 …

    2026年8月29日
    000
  • laravel8 的优化点

    Laravel 8 针对性能优化提供了以下选项:缓存配置:使用 Redis 缓存驱动、缓存门面、缓存视图和页面片段。数据库优化:建立索引、使用查询范围、使用 Eloquent 关系。JavaScript 和 CSS 优化:使用版本控制、合并和缩小资产、使用 CDN。代码优化:使用 Composer …

    2026年8月29日
    100
  • iaravel 如何学习

    学习 Laravel 的步骤有:具备 PHP 基础知识。安装 Laravel 框架。了解 Laravel 架构。学习基本语法:路由、控制器、视图、模型。构建小型应用练习框架使用。参阅官方文档获取详细指引。加入社区交流心得、寻求帮助。保持更新,关注新特性。 如何学习 Laravel Laravel 是…

    2026年8月29日
    000
  • VSCode盒子背景怎么居中_VSCode界面元素居中显示教程

    答案:通过Zen模式结合手动调整窗口大小,可实现VSCode代码区域的视觉居中。进入Zen模式(Ctrl+K Z)隐藏非编辑元素,再将窗口拖窄并置于屏幕中央,使代码居中显示,提升专注度;也可使用“Centered Editor”类插件强制居中,或利用系统窗口管理功能优化布局。配合主题、字体、面板位置…

    2026年8月29日
    100

发表回复

登录后才能评论
关注微信