位置: IT常识 - 正文

HTML小游戏25 —— HTML5拉杆子过关小游戏(附完整源码)(html在线小游戏)

编辑:rootadmin
HTML小游戏25 —— HTML5拉杆子过关小游戏(附完整源码)

推荐整理分享HTML小游戏25 —— HTML5拉杆子过关小游戏(附完整源码)(html在线小游戏),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:html小游戏源码,html5简单小游戏代码,简单的html小游戏100行代码,html简单游戏,html简单游戏,html小游戏源码,简单的html小游戏100行代码,html在线小游戏,内容如对您有帮助,希望把文章链接给更多的朋友!

本节教程我会带大家使用 HTML 、CSS和 JS 来制作一个HTML5拉杆子过关小游戏

✨ 前言

🕹️ 本文已收录于🎖️100个HTML小游戏专栏:100个H5游戏专栏https://blog.csdn.net/qq_53544522/category_12064846.html🎮 目前已有100+小游戏,源码在持续更新中,前100位订阅限时优惠,先到先得。 🐬 订阅专栏后可阅读100个HTML小游戏文章;还可私聊进前端/游戏制作学习交流群;领取一百个小游戏源码。

在线演示地址:https://code.haiyong.site/964/ 源码也可在文末进行获取

✨ 项目基本结构

大致目录结构如下(共3个子文件):

├── js│   └──script.js 13KB├── css│   └── style.css 1KB└── index.html 2KB场景展示

HTML源码<div class="container"> <div id="score"></div> <canvas id="game" width="375" height="375"></canvas> <div id="introduction">按住鼠标伸出一根棍子</div> <div id="perfect">双倍积分</div> <button id="restart">重新开始</button></div>CSS 源码

html,body

html,body { height: 100%; margin: 0;}body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; cursor: pointer;}

container

.container { display: flex; justify-content: center; align-items: center; height: 100%;}

score

#score { position: absolute; top: 30px; right: 30px; font-size: 2em; font-weight: 900;}

introduction

#introduction { width: 200px; height: 150px; position: absolute; font-weight: 600; font-size: 0.8em; font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; text-align: center; transition: opacity 2s;}

restart

#restart { width: 120px; height: 120px; position: absolute; border-radius: 50%; color: white; background-color: red; border: none; font-weight: 700; font-size: 1.2em; font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; display: none; cursor: pointer;}

perfect

#perfect { position: absolute; opacity: 0; transition: opacity 2s;}JS 源码HTML小游戏25 —— HTML5拉杆子过关小游戏(附完整源码)(html在线小游戏)

js 代码较多,这里提供部分,完整源码可以在文末下载

配置

const canvasWidth = 375;const canvasHeight = 375;const platformHeight = 100;const heroDistanceFromEdge = 10; // 等待时const paddingX = 100; // 从原始画布尺寸开始,英雄的等待位置const perfectAreaSize = 10;

重置游戏变量和布局,但不启动游戏(游戏在按键时开始)

function resetGame() { // 重置游戏进度 phase = "waiting"; lastTimestamp = undefined; sceneOffset = 0; score = 0; introductionElement.style.opacity = 1; perfectElement.style.opacity = 0; restartButton.style.display = "none"; scoreElement.innerText = score; // 第一个平台总是相同的x+w必须匹配paddingX platforms = [{ x: 50, w: 50 }]; generatePlatform(); generatePlatform(); generatePlatform(); generatePlatform(); sticks = [{ x: platforms[0].x + platforms[0].w, length: 0, rotation: 0 }]; trees = []; generateTree(); generateTree(); generateTree(); generateTree(); generateTree(); generateTree(); generateTree(); generateTree(); generateTree(); generateTree(); heroX = platforms[0].x + platforms[0].w - heroDistanceFromEdge; heroY = 0; draw();}

最远树右边缘的X坐标

const lastTree = trees[trees.length - 1]; let furthestX = lastTree ? lastTree.x : 0;

如果按下空格键,则重新启动游戏

window.addEventListener("keydown", function (event) { if (event.key == " ") { event.preventDefault(); resetGame(); return; }});

返回棍子击中的平台(如果没有击中任何棍子,则返回未定义)

function thePlatformTheStickHits() { if (sticks.last().rotation != 90) throw Error(`Stick is ${sticks.last().rotation}°`); const stickFarX = sticks.last().x + sticks.last().length; const platformTheStickHits = platforms.find( (platform) => platform.x < stickFarX && stickFarX < platform.x + platform.w ); // 如果棍子击中完美区域 if ( platformTheStickHits && platformTheStickHits.x + platformTheStickHits.w / 2 - perfectAreaSize / 2 < stickFarX && stickFarX < platformTheStickHits.x + platformTheStickHits.w / 2 + perfectAreaSize / 2 ) return [platformTheStickHits, true]; return [platformTheStickHits, false];}

将主画布区域居中到屏幕中间

ctx.translate( (window.innerWidth - canvasWidth) / 2 - sceneOffset, (window.innerHeight - canvasHeight) / 2 );

绘制场景

drawPlatforms(); drawHero(); drawSticks();

山丘是伸展的正弦波下的形状

function drawHill(baseHeight, amplitude, stretch, color) { ctx.beginPath(); ctx.moveTo(0, window.innerHeight); ctx.lineTo(0, getHillY(0, baseHeight, amplitude, stretch)); for (let i = 0; i < window.innerWidth; i++) { ctx.lineTo(i, getHillY(i, baseHeight, amplitude, stretch)); } ctx.lineTo(window.innerWidth, window.innerHeight); ctx.fillStyle = color; ctx.fill();} ⭐️ 好书推荐

《电脑入门基础教程(Windows 11+Office 2021)》

内容介绍

全书共 15 章,系统并全面地讲解了电脑基础知识、电脑入门操作、Windows 11 系统的操作与应用、电脑打字的方法、电脑文件的管理、电脑软件的安装与管理、电脑连网和上网操作、网络通信与聊天交流、网上日常生活与娱乐、电脑系统维护与安全防范,以及使用Word 2021、Excel 2021 和PowerPoint 2021 高效办公等知识技能。

源码下载

1.CSDN资源下载:https://download.csdn.net/download/qq_44273429/87778335

2.也可通过下方卡片添加好友回复拉杆子获取

本文链接地址:https://www.jiuchutong.com/zhishi/299006.html 转载请保留说明!

上一篇:聊聊关于图像分割的损失函数 - BCEWithLogitsLoss(图像可以分成哪些类别?)

下一篇:数字图像处理实验(直方图均衡化&规定化)(数字图像处理实验一实验报告)

  • 小米watchs1pro怎么下载软件(小米watchs1pro怎么连接WIFI)

    小米watchs1pro怎么下载软件(小米watchs1pro怎么连接WIFI)

  • 115怎么用磁力下载(115磁力怎么添加)

    115怎么用磁力下载(115磁力怎么添加)

  • xs处理器是什么的(iphonexs处理器是什么)

    xs处理器是什么的(iphonexs处理器是什么)

  • qq怎么建群聊(qq怎么建群聊二维码)

    qq怎么建群聊(qq怎么建群聊二维码)

  • 删除还原数据并进入系统启动菜单是什么意思(删除还原数据并进入系统启动菜单会怎么样)

    删除还原数据并进入系统启动菜单是什么意思(删除还原数据并进入系统启动菜单会怎么样)

  • 抖音号养了7天怎么0播放量(抖音养号7天后一定要发作品吗)

    抖音号养了7天怎么0播放量(抖音养号7天后一定要发作品吗)

  • 抖音疑似搬运如何解决(抖音搬运如何不被发现)

    抖音疑似搬运如何解决(抖音搬运如何不被发现)

  • 脏数据是指什么(在db技术中脏数据是指什么)

    脏数据是指什么(在db技术中脏数据是指什么)

  • 微信聊天删除记录对方还能看到吗(微信聊天删除记录怎么恢复)

    微信聊天删除记录对方还能看到吗(微信聊天删除记录怎么恢复)

  • 华为充电器max40w是什么意思(华为充电器max40w适用于华为什么机型)

    华为充电器max40w是什么意思(华为充电器max40w适用于华为什么机型)

  • 华为m6上市时间(华为m6上市时间价格)

    华为m6上市时间(华为m6上市时间价格)

  • t568a和t568b的区别(t568a和t568b的区别线序)

    t568a和t568b的区别(t568a和t568b的区别线序)

  • 苹果ipad有哪些型号(苹果ipad有哪些系列)

    苹果ipad有哪些型号(苹果ipad有哪些系列)

  • 篮牙音箱无法与手机连接的原因(蓝牙音箱无法配对)

    篮牙音箱无法与手机连接的原因(蓝牙音箱无法配对)

  • 流量可以打开WiFi打不开(流量可以打开的网站wifi无法连接)

    流量可以打开WiFi打不开(流量可以打开的网站wifi无法连接)

  • 微信号申诉失败还有其它办法吗(微信号申诉失败回执单号有什么用)

    微信号申诉失败还有其它办法吗(微信号申诉失败回执单号有什么用)

  • 摄像头焦距2.8mm和4mm区别(摄像头焦距2.8mm和4mm哪个好)

    摄像头焦距2.8mm和4mm区别(摄像头焦距2.8mm和4mm哪个好)

  • 华为nova6如何截屏(华为nova 6怎样截图)

    华为nova6如何截屏(华为nova 6怎样截图)

  • a2152是ipad几(a2152是ipad几平板)

    a2152是ipad几(a2152是ipad几平板)

  • 诺基亚2720flip什么时候上市(诺基亚27204g)

    诺基亚2720flip什么时候上市(诺基亚27204g)

  • 魅族16th有没有nfc(魅族16th有没有OTG)

    魅族16th有没有nfc(魅族16th有没有OTG)

  • 松果电单车在哪里充电(松果电单车在哪里扫码)

    松果电单车在哪里充电(松果电单车在哪里扫码)

  • 小米9如何投屏到电视(小米9如何投屏到平板)

    小米9如何投屏到电视(小米9如何投屏到平板)

  • WebSocket的使用方法(JS前端)(websocket怎么用)

    WebSocket的使用方法(JS前端)(websocket怎么用)

  • 工会经费计税依据包括社保吗
  • 税金及附加需要计提吗
  • 外出办事车费计入什么科目
  • 补缴以前年度增值税如何做账
  • 契税为什么计入成本
  • 申报个税人员金额一般
  • 技术开发收入免征所得税吗
  • 管理部门社保入哪个科目
  • 结转损益类费用科目的余额
  • 房地产企业融资存在的问题
  • 废气处理工程会计分录
  • 摊销商标使用权的会计科目
  • 2018年业务宣传费与广告费税前扣除标准及依据
  • 三证合一后还要去税务局吗
  • 员工工作服计入劳保费吗
  • 从租计征的房产税减半政策
  • 劳动报酬个人所得税由扣缴义务人预扣预缴
  • 免征增值税的会计处理方法有哪些
  • 公司在银行购买金币没有发票
  • 私营企业员工享受探亲假吗
  • 模具成本怎么核算
  • win10开始菜单失效如何解决
  • pqtray.exe - pqtray 是什么进程 有什么用
  • 建筑企业挂靠违法吗
  • win10任务视图怎么用
  • php如何实现多线程
  • 应交增值税减免税款包括什么
  • 发放应付职工薪酬是借方还是贷方
  • 公司搬家费用怎么入账
  • 价值高的备件算固定资产吗
  • 巨浪向我冲来改为拟人句
  • nerf 怎么瞄准
  • 合伙企业分配股票给合伙人
  • 事业单位财产清查内容包括
  • 如何提升人工劳动效率
  • 房产税计入哪里
  • framework教程
  • 后端三件套
  • remote远程
  • 可行性研究报告合同属于什么合同
  • 会计人员信息采集怎么看审核通过
  • 劳务费发票是不是专票
  • 织梦一直显示上一页和下一页
  • 缴纳增值税的营业收入
  • 印花税免税项目有哪些
  • 上月未结账本月不能结账
  • sql2000错误9003
  • sqlserver查询时报00bop错误
  • 应发工资账务处理
  • 小微企业享受免税吗
  • 金融企业应当按照交易或事项的实质和经济现实
  • 无形资产处置的相关费用计入哪里
  • 应付账款一直挂在账上会有问题吗
  • 赠送礼品怎么入账
  • 长期借款利息计入应付利息吗
  • 补缴增值税的会计处理
  • 出租房屋损坏赔偿
  • 新会计准则开办时间规定
  • 出售无形资产净损失
  • 企业买车计入什么科目
  • 会计调账是什么意思
  • mysql必知必会在线阅读
  • system is boot up with
  • iis7配置asp
  • centos更新命令
  • linux 杀掉指定用户的进程
  • win8任务栏图标太大了
  • win7 24小时制
  • win7自动关闭显示器
  • win7如何显示文件扩展
  • win8.1无法更新
  • android的游戏
  • unity gui
  • Python文本相似性计算之编辑距离详解
  • unity3d shader之God Ray上帝之光
  • dom基础知识
  • 收藏一些不常用的图片
  • ADB not responding. You can wait more,or kill"abd.exe" process manually and click 'Restar
  • 税务发票机器怎么操作
  • 深圳房东有钱吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设