都说小时候盼着长大,长大了又念着童年。我怀念起,在那个简简单单的年代,似乎睡前能捧着个诺基亚玩会小游戏也算是当时孩生中一件趣事了,当时玩的比较多的是,拼图,贪吃蛇,桌上弹球等等。想到这里,我就渴望用自己所学的知识,做个拼图游戏出来……

游戏功能

1.游戏主体拼图
2.可更改的游戏难度
3.切换背景图片
4.来首轻松的BGM

完成示例

游戏思想

  1. 从示例图中可以看出,拼图主体是一个网状的方形,我们需要移动拼块来完成图片的复原。我们在这里引入类比思想,我们可以用二维数组的操作去模拟拼块的移动,用增加二维数组的阶数来实现游戏困难程度的提升,那么这里的每一个拼块就是存在数组中的元素。

  2. 这是一个游戏刚开始时候的图片,图片中拼块是混乱的,我们需要写一个算法来模拟这种混乱。

(小插曲,我曾经想的很简单,我单纯的认为只是让数组乱序就行了,但是在我实现后,我 发现这是一个重大错误思想。正所谓杂乱无章的武功恰恰有其意想不到的章法,拼图的混 乱也是有规律的,如果给他随机的顺序,就会出现完成拼图后有拼块错位的问题,类似于魔方的角安错位置,因此我们要写的是模拟人为的混乱算法!)——用改变数组的下标来类比四个方位的移动。

  1. 脚本中的数组与HTML中盒子的连接,当盒子状态改变时,同时改变数组内容。

游戏实现

游戏初始

由于游戏中默认是最低难度,所以我们在这里就以最低难度为背景来制作。

在html中写一个容器container,在script里写一个3*3二维数组。使用循环给container添加9个类名为part-ease的div。给数组从1到8赋值,最后一个设为 "" 代表拼图的缺口。给part-ease类定义样式,定义9个类part-ease1到8最后一个为empty。

(注意事项:要将background-size,x,y方向都设为300%,因为part-ease的高度都定义为容器的三分之一,他的背景图理应也是1/3,所以,对放大3倍的图片进行position操作,才是原图的那一块图片,但是我不知道为何,就算不设置300%所得的图片也只是比原图少了一小部分……)。

效果图

自走算法

声明两个变量x,y,分别为二维数组的前置坐标和后置坐标的变化量。

向左走:x = -1,y = 0

向右走:x = +1,y = 0

向上走:x = 0,y = -1

向下走:x = 0,y = +1

使用switch来选择,将四种方向设为4个case,0到3,定义一个0到3的随机数来执行向哪个方向走。将switch选择置于while循环,定义一个计数器,每次执行有效步数,计数器+1,并同步数组值的交换操作,当计数器达到一定值后结束。

不同难度可以改变计数器的最大值已达到合理的混乱程度。(注意事项,避免数组越域,根据实际情况,可以设置一个值记录上次的走向,让拼块避免往返走节省循环浪费)

dom的操作

因为每一块的图片都是定义在类名里,所以改变拼块就是改变类名,对part-ease进行监听,发生鼠标事件,且是有效拼块时,将其part-ease(位置数字)与empty交换即可,同时改变二维数组的值。

这里插入一个一位数组位置转二维数组位置的算法,因为这个被点击的拼块返回的index是一个它在同为part-ease的一维数组的index所以需要转化。

二维前置坐标 = (index / 数组阶数) 的向下取整
二维后置坐标 = index - 二维前置坐标 * 阶数

拼图完成

只要数组的元素回到[1,2,3,4,5,6,7,8,""]的排列就可以判定拼图成功啦!拼图成功后,图片的缺口将会变成失去的那部分,并提醒。

拼图完成

按钮操作

在html中给container写一个兄弟盒子用来存储按钮,分别为重新开始,选择难度,更换图片,查看原图。

效果图

重新开始:重新调用自走功能 选择难度:出现简单,中等,困难选择按钮,点击后,数组和拼图盒子都将初始化

效果图
中等难度
困难难度

更换图片:更改类名随机切换图片,并阻止使用原来图片

效果图

查看原图:对比原图进行游戏,点击返回,隐藏图片

美化

最后我们更改css,将加个背景音乐,我们的拼图游戏就大功告成了!

功能函数

  1. init(num) 初始化html,和数组,不同难度传值不同。
  2. begin(arr) 根据数组的存值来操作div类名
  3. change(index) 根据div类名改变来操作数组
  4. go() 模拟人为打乱
  5. winner() 判断胜利条件

项目教训

  1. jquery获取的类对象为静态获取,如果切换难度后将导致新生成的div没有添加click事件,所以不能单独拎出拼块对象,应该将click事件写在初始化里面

  2. 遇到了事件冒泡问题,我将难度按钮设置为选择难度的子元素,在点击时发生了事件冒泡,在查阅了资料后修正了Bug

  3. 类名与写在标签里的位置无关,与在css文件的位置有关如:

    <div class="part-hard part-hard1 bg2"></div>
复制代码

这里part-hard1 和 bg2都定义了一个样式,我曾经以为bg2会覆盖part-hard1,但是事实恰恰相反,因为我在css文件里把bg2写在了part-hard1前面,所以一定要注意啊。

项目源文件都在我的githup里,需要的可以下载。
github.com/colddayer/l…

前端菜鸟游戏篇,拼图游戏!相关推荐

  1. 微信小程序(游戏)----拼图游戏(设计思路)

    微信小程序(游戏)----拼图游戏(设计思路) 设计思路 1.将一张海报等分成 N*N 的矩阵 方法一:利用两个组件循环完成,view组件和image组件,view组件作为盒子规定大小--超出部分不显 ...

  2. 微信小程序开发的游戏《拼图游戏》

    微信小程序开发的游戏<拼图游戏> 代码直接考进去就能用 pintu.js // pintu.js Page({/*** 页面的初始数据*/data: {},initGame: functi ...

  3. java拼图游戏Mian_Java拼图游戏源码 MainApp启动器 main(): 创建主界面类对 联合开发网 - pudn.com...

    Java拼图游戏源码 所属分类:其他 开发工具:Java 文件大小:1977KB 下载次数:3 上传日期:2019-05-18 10:44:10 上 传 者:李易峰1 说明:  MainApp启动器 ...

  4. java 拼图游戏_Java 拼图游戏

    Java 拼图游戏 2014-07-01·WeaponX 11359 次浏览 ## 效果图 ![pintu.png](https://image.xsoftlab.net/baike/articleI ...

  5. android拼图游戏报告,拼图游戏报告分析报告.doc

    南京邮电大学计算机学院 2014/2015学年第1学期 <JAVA语言>课程报告 课题代号(单选)□课题1 □课题2 □课题3 课题名称: 拼图游戏 小组成员人数(单选)□1人 □2人 □ ...

  6. 沃拼图游戏软件测试,拼图游戏

    /*软件名称:  拼图游戏 /*开发平台:  microsoft Visual 6.0 /*测试环境:  microsoft Visual 6.0 /*开 发 者:  lin_miao /*开发时间: ...

  7. 沃拼图游戏软件测试,拼图游戏测试报告

    QT,拼图游戏,软件工程,说明文档,软件测试 拼图游戏测试报告 目 录 1 测试报告模板........................................................ ...

  8. cs6制作拼图游戏 dreamweaver_Dreamweaver拼图游戏的实现

    龙源期刊网 http://www.qikan.com.cn Dreamweaver 拼图游戏的实现 作者:罗月红 来源:<读与写 · 教育教学版> 2015 年第 08 期 摘要:随着计算 ...

  9. Java游戏开发——拼图游戏经典版

    游戏介绍: 拼图游戏是一款经典的益智游戏,游戏难度分为 简单.正常.困难 三种难度,分别对应3*3,4*4,5*5布局,游戏开始前图片被随机打乱,空块位于最右下角,玩家通过点击空块周围图片或者按键方式 ...

  10. 两年前端菜鸟回忆篇(1)

    如何掉入前端的坑 跟大学舍友讨论着毕业了该干什么工作,对未来充满迷茫,可能是因为到什么时间该考虑什么事情了,话题异常沉重.正当我们一筹莫展之时,学校给我们指了一条明路,计算机系两百个人,四个实习地方, ...

最新文章

  1. django之Ajax
  2. 维基解密揭秘CIA五种恶意软件用法
  3. Python基础篇【第6篇】: Python模块subprocess
  4. ldap客户端以及jenkins的配置
  5. [汇编语言]用[bx+idata]的方式进行数组的处理-字母大小写转换
  6. html中加减号怎么输入,jQuery 实现点击加减号改变input标签中的value值,该怎么解决...
  7. cp 过程中目录突然挂了_怎么解决管材激光切割机切管过程中出现的过烧及挂渣...
  8. php explore im,浏栏器-explore.class.php
  9. 基于Netty的RPC框架
  10. 后台图片验证码功能是什么实现的
  11. Linux 挂载华为存储,linux扫描挂载存储
  12. 企业园区网IPv6地址规划方案与应用
  13. 【考研政治】1. 导论和基本哲学问题
  14. 从浏览器直接转跳到APP具体页面---(魔窗)MagicWindow使用教程
  15. SQL数据库无法附加
  16. 〖TensorFlow2.0笔记21〗自定义数据集(宝可精灵数据集)实现图像分类+补充:tf.where!
  17. 文件操作系列之三——(windows中的文件操作)
  18. 撷英阁-东瀛扶桑之零起点生存日语学习笔记
  19. thinkphp5 注入 反序列化写文件 phar反序列化
  20. 2.2 STM32 RAM溢出分析(KEIL在Build的时候提示Error:L6406E:No space in execution)

热门文章

  1. 【求整数 1-100 的累加值,但要求跳过所有个位数为3的数 】
  2. 最新阿里腾讯头条美团等iOS面试总结
  3. postgis函数汇总
  4. 如何用js判断设备类型?
  5. 美定制礼品电商Cafepress上市
  6. Python:实现寻峰算法(附完整源码)
  7. 练手小项目,爬取3DM图片
  8. dayjs 取本周时间段
  9. 微信小程序——登录并保存用户信息到数据库
  10. MogaFX—汇率能充分反映货币压力吗?