一、游戏功能分析

1)功能需求分析

功能需求分析如图1-1所示。

  1. 小人推箱子:当箱子周围存在通道时,通过小人的左右移动实现推箱子功能。
  2. 炸毁墙面:小人当前所在位置的四周有墙面时,按下空格可以炸毁墙面
  3. 设置关卡:游戏总共有100个关卡,用户在输入框中输入1~100之间的任意一个数字可以跳转到任意一个关卡。
  4. 重玩本关:用户点击该按钮时,恢复到本关最原始的状态。
  5. 撤销移动:用户可以实现恢复到上一步的状态。
  6. 游戏说明:显示游戏操作方法以及游戏规则。

二、总体设计

2.1 功能模块(或函数、类)

1) 界面设置

① 画布位置摆放及显示;

② 按钮布局排版;

③ 小人移动步数显示;

④ 关卡设置。

2)画布类

  • 控制小人移动
  • 小人推箱子
  • 小人炸毁墙面
  1. 按钮类
  • 上一关
  • 下一关
  • 撤销移动
  • 重玩本关
  • 游戏说明
  1. 文本框
  • 关卡设置
  • 显示小人移动步数
  • 游戏说明简介

2.2总体设计层次图(或类、方法关系图)

系统总体设计层次图如图2-1所示。

2.3函数说明

Canvas类的方法如表2-1所示。

                                    表2-1 canvas类函数表

函数名

功能

getContext(“2d”)

内建的HTML5对象,用于绘制多种路径,矩形等方法。

drawImage()

可以引入图像、画布、视频,并对其进行缩放或裁剪。

clearRect()

清空给定矩形内的指定像素

Save()

保存CanvasRenderingContext2d对象的属性、剪切区域和变换矩阵

Restore()

为画布重置为最近保存的图像状态

定时器方法如表2-2所示。

                                               表2-2 定时器方法表

函数名

功能

setInterval ( code, milliseconds[, args...] )

Code:需要执行的函数或js代码。

Milliseconds:执行函数或代码的间隔时间,单位为毫秒。

Args:可选参数用于给被调用的函数传递参数,参数可以有多个

clearInterval(intervalID);

取消指定定时器

Html标签如表2-3所示。

                                                      表2-3 html5标签表

标签名

功能

<div>

<div> 是一个块级元素。它的内容自动地开始一个新行。换行是 <div> 固有的唯一格式表现。可以通过 <div> 的 class 或 id 应用额外的样式。

<img>

img 元素向网页中嵌入一幅图像。

<input>

根据不同的 type 属性值,输入字段拥有很多种形式。输入字段可以是文本字段、按钮等等。

<button>

<button> 标签定义一个按钮。

<h1>

定义标题。<h1> 定义最大的标题。

<script>

<script> 标签用于定义客户端脚本,比如 JavaScript。

3.1 主要实现原理

1)游戏处理流程

推箱子游戏处理过程如图3-1所示。

图3-1 推箱子游戏过程演示图

3.2 基本界面

主界面设计如图3-2所示。

  1. 首先设置布局,采用绝对定位调整布局。在左边添加一个canvas画布用于显示游戏操作界面,默认情况下为第一关。右上部分设置一个input用于显示当前关卡数以及小人移动步数,点击游戏说明时,还可以显示游戏规则。右下部分为按钮类和关卡设置。
  2. 画布类具体说明:在js文件中设置游戏关卡的页面布局,用一个二维数组表示,不同数字分别表示不同的元素,(0)表示通道,(1)表示墙,(2)表示目的地,(3)表示箱子,(4)表示工人,(5)目的地的箱子。小人推箱子的原理图如图3-3所示

预先准备好P1,P2的坐标,分成一下几种情况讨论:

  1. 若P1出界,则小人不能前进;
  2. 若P1为墙,则小人不能前进;
  3. 若P1为箱子进一步讨论:
  1. P2为通道,则小人可以将箱子推到P2位置;
  2. 若P2为目的地,则小人可以将箱子推到P2位置,并且将P2变成目的地箱子的样式。

对照原始图片,若原先目的地的位置都变为箱子时,则说明闯关成功,用户可以点击下一关。用户每操作一次先判断是否可以前进,如果可以则修改游戏界面所对应的二维数组,接着重绘画布。当闯关成功时,弹出一个消息框用于提示用户。

  1. 文本框的显示:当用户未点游戏说明时,显示当前关卡数和小人移动次数。当用户点击游戏说明时则显示游戏规则。上述两类显示均采用同一种方法innerHTML。
  2. 按钮类:当鼠标未移动到按钮上时按钮背景为白色,当鼠标移动到按钮上时按钮背景色为彩色,使用css样式实现上述功能,对每个按钮设置两类样式,一类为鼠标未移动到按钮上的样式,另一类用hover方法定义的一种样式。
  3. 关卡搜索跳转功能:用户在文本框中输入关卡数,按下enter键或者点击search按钮跳转到相应的关卡。用js获得搜索框中的数据,用一个变量curLevel记录当前的关卡数,改变curLevel值,从记录所有关卡的js文件中取出对应下标-1的地图,调用drawImage重绘。

3.3 游戏元素及特效

3.3.1炸毁墙面的实现

首先分别判断小人的四周(上下左右)是否有墙,若某个方向有墙,则创建bomb类型的变量,该类中含有炸弹图片,墙的位置等信息。创建定时器,每隔1000/60ms调用draw2函数,用switch...case语句判断当前哪个方向有墙,由于要实现一个爆炸的动画,选取一张含有爆炸变化过程6个状态的图片,用一个该类的成员变量frm来记录当前当前炸弹处于哪个状态,切割对应的爆炸状态。若frm的值大于等于6时,说明炸弹动画已执行完毕,清除定时器,将被炸弹炸毁的墙面更改为通道,清除画布进行重绘,将成语变量frm重新置0,以便后续操作。当需要同时炸毁多面墙时,会启用多个定时器,相当于操作系统中的多道程序系统,有多个作业同时进入内存,实现进程的并发执行,提高操作系统的吞吐量。此处的定时器也是同样的道理。执行前中后的效果如图3-4,3-5,3-6所示。

3.4 事件处理

小人移动事件处理如图3-7所示。

小人推箱子以及是否闯关成功事件处理如图3-8所示。

  • 设计总结

本次推箱子小游戏的设计,用html5设计界面整体,用css样式排版界面以及适当的修饰美化,再结合JavaScript控制整个游戏的功能实现。游戏中看似复杂的逻辑其实并不难,只要理清游戏的整个控制流程以及罗列出游戏进行过程中的所有可能性,通过switch...case语句将所有可能出现的情况一一实现即可。本游戏中爆炸特效的制作,采用设置定时器以及清除定时器来实现一个爆炸过程的动画效果,这是区别于其他推箱子小游戏的一个特点。正如我们所知,推箱子是一个益智类的游戏,随着关卡数的增加,游戏难度系数越来越高,对玩家来说是一个巨大的思维考验,设置爆炸功能,可以给玩家多一个解决方案,若可以无限制的使用炸弹,则失去了益智类游戏的意义,因此,设置使用炸弹次数最多为3次,使得玩家在经过深思熟虑之后再使用。

本实验难点在于如何设计游戏地图使得此游戏的每个关卡均有解,这个参考了夏敏捷编著的HTML5网页游戏设计从基础到开发。

实现代码:https://download.csdn.net/download/Exaggeration08/12074443

基于html5实现的推箱子小游戏相关推荐

  1. 【基于Swing+Java的推箱子小游戏的设计与实现(效果+源代码+论文+答辩PPT)墙裂推荐!!超级好玩儿!带背景音乐~~】

    快速阅读目录 (一)效果 (1)游戏静态截图 (2)动态游戏示例 (二)源代码示例 (三)说明 (一)效果 (可以通过上下左右键来控制箱子的移动) (1)游戏静态截图 初始化游戏界面: 选项: < ...

  2. 手把手教你使用Python实现推箱子小游戏(附完整源码)

    文章目录 项目介绍 项目规则 项目接口文档 项目实现过程 前置方法编写 move核心方法编写 项目收尾 项目完善 项目整体源码 项目缺陷分析 项目收获与反思 项目介绍 我们这个项目是一个基于Pytho ...

  3. 基于Java Swing JFream 组件的趣味推箱子小游戏

    一 需求分析 设计一个经典的推箱子小游戏,在窗体里有墙,箱子,胜利的标志,和工人,用户可以通过键盘上的"上"."下"."左"."右 ...

  4. [源码和文档分享]基于Java Swing JFream 组件的趣味推箱子小游戏

    一 需求分析 设计一个经典的推箱子小游戏,在窗体里有墙,箱子,胜利的标志,和工人,用户可以通过键盘上的"上"."下"."左"."右 ...

  5. 基于51单片机推箱子小游戏Proteus仿真

    资料编号:118   下面是相关功能视频演示: 118-基于51单片机推箱子小游戏Proteus仿真(源码+仿真+全套资料) 功能讲解: 采用51单片机作为控制CPU,使用独立按键来控制前后左右,使用 ...

  6. HTML5推箱子小游戏 源码 共100关哦!

    推箱子 源码链接地址:https://github.com/shunyue1320/sokoban.git 推箱子小游戏展示效果图: 源码链接地址:https://github.com/shunyue ...

  7. 一个适合初学者的C++推箱子小游戏

    一个适合初学者的C++推箱子小游戏 博主最近在学习关于C++的一些基础,这是本人突发奇想做的一个小游戏,编程其实并不难,重要的是,你的思路,以及优化,当然,这个小游戏,本人也是基于一个学习者编写的 本 ...

  8. 控制台推箱子小游戏C语言

    自己开发的C语言控制台推箱子小游戏,基于二维数组实现,功能不多但是游戏整体较为完整,因为技术有限,所以代码暂未优化且整体显得较为臃肿,整体架构简单,代码全自主设计编写,仅作交流学习,还望大佬多多指点. ...

  9. c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

最新文章

  1. windows启动mysql8服务_MySQL8.0服务启动(windows10)
  2. hrg哈工大机器人集团好吗_哈工大机器人集团(HRG)
  3. 【点云分割】区域生长(用鼠标选中一个点长出一个)
  4. GCC中的弱符号与强符号
  5. C#winform程序窗口全屏是否遮盖任务栏问题
  6. 用深度优先搜索解决最长路径问题
  7. 【5G会话管理】UE IPv6地址的分配(SLAAC协议)
  8. PS更换证件照背景色,并去除人物像边线
  9. python小课风变编程_风变编程Python小课最近很火,大家学完感受如何?
  10. cs架构自动化测试工具选型
  11. PAT乙级题解——1093 字符串A+B (20分)
  12. 通识3——1080i、1080p、2K、4K是什么意思?
  13. 多年收藏的经典笑料,现在转帖出来
  14. 自动动态调整广告出价OCPC
  15. Redis - CLUSTER命令中槽管理命令详解
  16. 轻型货车鼓式制动器设计(论文+CAD图纸+Catia三维图+开题报告+任务书+翻译……)
  17. Phonetic symbol 辅音 - 清辅音 -- /f/
  18. 马云退隐前,在年会上说了最重要的三件事
  19. 导出Excel—外部表不是预期的格式
  20. envi读取格式ang 还是mtl_ENVI学习笔记一 软件入门

热门文章

  1. 《统计学》——思考题第八章假设检验(贾俊平)
  2. 2022全球顶级碳纤维自行车品牌排名辐轮王第一土拨鼠引领十强
  3. Blizzard Something
  4. 视频消息沟通,我的工作总是快人一步,感谢帧想
  5. 计算机语言python发音_最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几...
  6. 把.pfx文件转为.pvk和.spc文件的办法
  7. jszip压缩图片file-saver批量导出空文件夹以及有损图片问题解决
  8. html判断手机号码正确,js判断手机号是否正确并返回的实现代码
  9. 水晶报表中让行高自适应高度(即根据内容的来适应高度)
  10. 关于解决django框架 python manage.py问题及python manage.py startapp xxx问题