位置: 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(图像可以分成哪些类别?)

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

  • 安卓手机如何打开.cfg文件(安卓手机如何打开.p7b文件)

    安卓手机如何打开.cfg文件(安卓手机如何打开.p7b文件)

  • 一加9rt是直屏吗

    一加9rt是直屏吗

  • 苹果11最近删除照片在哪里(苹果11最近删除的照片清空了还能恢复吗)

    苹果11最近删除照片在哪里(苹果11最近删除的照片清空了还能恢复吗)

  • 来电显示虚拟运营商什么意思(来电显示虚拟运营商接了怎么办)

    来电显示虚拟运营商什么意思(来电显示虚拟运营商接了怎么办)

  • modmyi源可以删除吗(如何删除mod包)

    modmyi源可以删除吗(如何删除mod包)

  • VIVO手机越更新越卡是真的吗(vivo手机越更新越卡是真的吗)

    VIVO手机越更新越卡是真的吗(vivo手机越更新越卡是真的吗)

  • beats solo3支持安卓吗?(beats solo3兼容安卓吗)

    beats solo3支持安卓吗?(beats solo3兼容安卓吗)

  • oppor11s内存不足怎么办(oppor11s内存不足怎么清理)

    oppor11s内存不足怎么办(oppor11s内存不足怎么清理)

  • 开飞行模式还有辐射吗(开飞行模式还有网吗)

    开飞行模式还有辐射吗(开飞行模式还有网吗)

  • 怎么在手机上去图片水印(怎么在手机上去除马赛克看原图)

    怎么在手机上去图片水印(怎么在手机上去除马赛克看原图)

  • 电脑dvi是什么意思(电脑上dvi-d是什么意思)

    电脑dvi是什么意思(电脑上dvi-d是什么意思)

  • opporeno2与opporeno2z有什么不同(opporeno2与opporeno2z那个屏幕大)

    opporeno2与opporeno2z有什么不同(opporeno2与opporeno2z那个屏幕大)

  • 港版8p支持电信吗(港版8p支持电信4g吗)

    港版8p支持电信吗(港版8p支持电信4g吗)

  • 苹果m开头是哪里产的(iphone m开头)

    苹果m开头是哪里产的(iphone m开头)

  • 手机每天ip地址一样吗(每个手机ip地址)

    手机每天ip地址一样吗(每个手机ip地址)

  • 芒果tv手机会员电视可以用吗(芒果TV手机会员怎么在平板上登录)

    芒果tv手机会员电视可以用吗(芒果TV手机会员怎么在平板上登录)

  • 华为荣耀20怎么插耳机(华为荣耀20怎么刷机)

    华为荣耀20怎么插耳机(华为荣耀20怎么刷机)

  • 5G的愿景是(5g愿景与需求白皮书)

    5G的愿景是(5g愿景与需求白皮书)

  • 显卡在主机的什么位置(显卡在主机的哪个位置)

    显卡在主机的什么位置(显卡在主机的哪个位置)

  • 拼多多里的多多农场在哪(拼多多里的多多钱包怎么提现到微信)

    拼多多里的多多农场在哪(拼多多里的多多钱包怎么提现到微信)

  • 笔画键盘打字怎么打(笔画键盘打字怎么打出来)

    笔画键盘打字怎么打(笔画键盘打字怎么打出来)

  • 2021快手怎么删除不了自己作品了(2020快手怎么删除)

    2021快手怎么删除不了自己作品了(2020快手怎么删除)

  • u盘装系统有哪些常见问题?u盘装系统注意事项详解(u盘装系统?)

    u盘装系统有哪些常见问题?u盘装系统注意事项详解(u盘装系统?)

  • 【vite·5】vite中环境变量的使用与配置(全网最全)(vite中文网)

    【vite·5】vite中环境变量的使用与配置(全网最全)(vite中文网)

  • 融资租赁税率是什么意思
  • 新会计准则下具体会计准则对银行的影响不包括
  • 管理会计与财务会计的联系与区别
  • 跨省工程需要什么条件
  • 物业公司可以开什么项目的发票
  • 已结转的凭证可以取消结转吗
  • 个人挂靠公司承接工程如何做会计处理?
  • 手写农产品发票有效吗
  • 哪些可用商业汇票结算?
  • 应交增值税和未交增值税是一个科目吗
  • 开票方与受票方的区别
  • 同业清算互联前置 骗局
  • 管理费用劳务费包括什么
  • 预收账款长期挂账如何处理
  • 库存商品结转成本
  • 三星笔记使用攻略
  • 如何不同版本复制粘贴
  • 收到股东垫付款的会计分录
  • nvcpl.dll是什么
  • win 8和win 7有什么区别
  • 个人开工程款票在哪开票
  • help是什么文件夹可以删除吗
  • vue浏览器版本
  • win7纯净版系统
  • 赔付支出有哪些
  • wordpress使用
  • 委托银行收款的会计分录怎么写
  • 产品成本核算方法
  • 一个非常有用的工具用英语怎么说
  • java图片转换成文件流
  • c+c#
  • 从公账发工资是什么凭证
  • MySQL数据库有什么特点
  • 如何测试php
  • 无形资产资产处置损益和营业外收入
  • 给客户维修设备更换配件怎么开票
  • mongodb管理工具
  • mongodb 日志
  • 货款分批付的会计分录
  • 增值税发票红字发票未抵扣怎么开
  • 原始凭证可以外带吗
  • 劳务派遣差额征税政策
  • 企业所得税怎么算
  • 资产负债表应付职工薪酬是负数是什么原因
  • 定期定额户用财务制度备案吗
  • 小规模超30万附加税有减免吗
  • 个人独资企业法人可以发工资吗
  • 处置子公司利润表怎么合并
  • 建安企业增值税预缴
  • 为什么要缴纳残保金
  • 建厂房之前需要什么条件
  • 支票有效期10天是自然日还是工作日
  • 主营业务利润率反映了企业的什么能力
  • mysql改造
  • WIN10系统中断
  • fan.error是什么意思
  • linux系统中的链接文件主要分为两种
  • win7开机黑屏只有鼠标安全模式也不行
  • 苹果手机
  • 一键快速关机下载手机版
  • windows隐藏分区
  • win8iis安装配置
  • 快速批量取关
  • centos安装命令yum
  • linux安装oracle数据库步骤
  • unitystudio手机版
  • python解析数据
  • unity shader lerp
  • javascript 继承
  • python如何用
  • python设计程序
  • python数据操作
  • 理解js绑定事件是什么
  • 社保由税务部门征收的文件
  • 江苏省国家税务局官网
  • 地税局是政府部门吗
  • 公寓土地增值税30%-60%阶梯税
  • 山东耕地占用税税率
  • 企业职工病退后一般能领多少钱
  • 核算成本需要哪些数据来源
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设