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

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

  • bi工具有哪些(主流bi工具有哪些)

    bi工具有哪些(主流bi工具有哪些)

  • 滴滴审核头像审核多久(滴滴头像审核中能跑滴滴吗)

    滴滴审核头像审核多久(滴滴头像审核中能跑滴滴吗)

  • 动画启动方式有几种(动画启动方式怎么设置)

    动画启动方式有几种(动画启动方式怎么设置)

  • 电脑格式化是不是什么都没有了(电脑格式化是不是可以删除所有)

    电脑格式化是不是什么都没有了(电脑格式化是不是可以删除所有)

  • 无法激活面容ID怎么办(无法激活面容id有几种情况)

    无法激活面容ID怎么办(无法激活面容id有几种情况)

  • 拼多多如何屏蔽好友(拼多多如何屏蔽店铺)

    拼多多如何屏蔽好友(拼多多如何屏蔽店铺)

  • 拍立得黑色保护板卡住(拍立得黑色保护板卡住拿不出来)

    拍立得黑色保护板卡住(拍立得黑色保护板卡住拿不出来)

  • 1650和1650super区别(1650和1650super区别大不大)

    1650和1650super区别(1650和1650super区别大不大)

  • 快手一个手机号绑定两个怎么办(快手一个手机号能注册几个号)

    快手一个手机号绑定两个怎么办(快手一个手机号能注册几个号)

  • 抖音头像只能改一次吗(抖音头像不可以换了怎么办)

    抖音头像只能改一次吗(抖音头像不可以换了怎么办)

  • 在抖音被举报者会知道是谁举报的吗(抖音被人举报会怎样)

    在抖音被举报者会知道是谁举报的吗(抖音被人举报会怎样)

  • vivo蓝牙设置在哪里(vivo手机蓝牙在哪里设置)

    vivo蓝牙设置在哪里(vivo手机蓝牙在哪里设置)

  • ipad air2可以插u盘吗(ipadair2支持外接u盘吗)

    ipad air2可以插u盘吗(ipadair2支持外接u盘吗)

  • 显示器开机亮一下就黑屏是怎么回事(显示器开机亮一下就灭 指示灯亮)

    显示器开机亮一下就黑屏是怎么回事(显示器开机亮一下就灭 指示灯亮)

  • 微信翻译怎么收起来(微信翻译怎么收不到信息)

    微信翻译怎么收起来(微信翻译怎么收不到信息)

  • 苹果耳机坏了可以换吗(苹果耳机坏了可以修吗)

    苹果耳机坏了可以换吗(苹果耳机坏了可以修吗)

  • 华为nova4悬浮窗设置(华为nova4悬浮窗怎么使用)

    华为nova4悬浮窗设置(华为nova4悬浮窗怎么使用)

  • ppt怎么调兼容模式(如何设置ppt兼容)

    ppt怎么调兼容模式(如何设置ppt兼容)

  • 苹果在哪关闭自动续费(苹果在哪关闭自动更新app)

    苹果在哪关闭自动续费(苹果在哪关闭自动更新app)

  • 笔画键盘怎么用(笔画键盘怎么用视频)

    笔画键盘怎么用(笔画键盘怎么用视频)

  • vivox23支持nfc功能吗(vivox23支持nfc功能的手机)

    vivox23支持nfc功能吗(vivox23支持nfc功能的手机)

  • p30pro怎么显示充电速度(华为p30怎么显示充电进度)

    p30pro怎么显示充电速度(华为p30怎么显示充电进度)

  • 小红书违规笔记怎么删除(小红书违规笔记怎么回事)

    小红书违规笔记怎么删除(小红书违规笔记怎么回事)

  • 视频聊天声音能关掉吗(视频聊天声音能听到吗)

    视频聊天声音能关掉吗(视频聊天声音能听到吗)

  • 微软输入法中文模式打出来是字母解决方法(微软输入法中文输入卡顿)

    微软输入法中文模式打出来是字母解决方法(微软输入法中文输入卡顿)

  • 税后利息税怎么算
  • 延期缴纳税款是纳税争议吗
  • 个人以房产投资企业需要过户吗
  • 促销费用计入销售费用哪个科目
  • 未到账的银行存款怎么取
  • 小规模小于30万免税会计分录
  • 税票百分之十三怎么算
  • 增值税调整收入税额差额怎么写
  • 股东分红是净利润还是毛利润
  • 替票怎么控制数量
  • 半成品委托加工费计入成本还是费用
  • 金蝶财务软件固定资产模块固定资产调拨
  • 高新技术企业外债便利化
  • 社会保险基金管理局是干什么的
  • 即征即退和一般项目进项税比例怎样算出进项税额
  • 商品过期可以向商家索要赔偿吗
  • 免税企业取得增值税专用发票怎么处理
  • 增值税附加税计入什么会计科目
  • 增值税滞留票产生的原因及处理办法
  • 企业资产损失会计处理
  • 股东未发工资可否提出仲裁
  • 资管公司如何缴纳流转税?
  • 竣工决算调整入库流程
  • 支付网银年费计入什么科目
  • 存货计划成本法好处
  • 跨年的收入可以在次年冲吗
  • php遍历显示多维数组
  • 结算备付金的账户是什么
  • Win10 Build21376内测版发布 重新设计默认用户界面字体
  • php oci_connect
  • low是什么文件
  • 车辆开具发票后会计分录?
  • linux系统设置屏幕常亮
  • 商业企业营业收入
  • php获取访问用户的ip
  • php开发实战权威指南
  • 二手房买卖要交契税吗
  • 买税控盘的钱怎么做账
  • 建行e信通怎么提现怎么操作
  • 分类问题的评价方法有
  • php array search
  • 会计证书现场领取
  • 应付职工薪酬如何记账
  • 新政府会计制度与旧制度区别
  • vue–router
  • 上个月没有清卡在其他地区税务
  • 应交增值税进项税额
  • 处置可供出售金融资产原先进入公允价值变动损益
  • 研发费用加计扣除新税收政策
  • 年底进项比销项大要做账么
  • 加计扣除的会计要素
  • 网吧出售
  • 加强备案管理
  • 私立学校增值税免税吗
  • 怎么用两台电脑登录同一个微信
  • 递延所得税转回税率不一致
  • win2008安装sql2005
  • xp系统怎么修改网络ip地址
  • linux系统中的输入输出分为三类
  • p2p是什么文件
  • linux系统批量查找替换多个字符
  • 阿里云服务器linux系统
  • mac怎么快速上手
  • win 10 ie浏览器
  • linux常用性能监控命令
  • 如何解决在沟通中产生的漏斗效应
  • cocos2d-x教程
  • node.js web
  • 用python怎么写字
  • nodejs socket框架
  • 安卓状态栏宽度
  • 基于js实现微信直播
  • python程序解读举例
  • 电子发票未验真是假发票吗
  • 非贸付汇代扣代缴企业所得税
  • 电子税务局怎么添加银行账户信息
  • 陕西省国税务局大企业处长邓谷祥简历
  • 消费税的征收范围口诀
  • 蓬溪房价2020最新消息
  • 什么督导组词
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设