Date of last change:2017-10-20 to version v1.01
Maintainer: huzhenzhen [email protected]
Homepage: https://github.com/hushidong/puzzle-ballgame
License: GNU Lesser General Public License LaTeX Project Public License 1.3 or later
设计了一个拼图游戏,拼图形状由相同或不同数量的球连接而成,各连接球形状通过拼图最终可以拼成一个三角矩阵(各形状中的球构成的三角网格)。游戏代码采用QT实现,主要利用QGraphicsView实现交互界面与行为逻辑,利用C++类完成形状划分/形状唯一性/形状落位判断等核心算法。游戏操作最主要的操作是点击(鼠标左键),用于选择形状和空位以完成形状控制,其它控制可以由按钮或鼠标加键盘实现。
编译环境: windows 7 x64+ qt 5.8.0
点击开始按钮开始进行游戏。 点击示例按钮可以看到某种拼图答案,注意:实现拼图的方案有很多种,示例只是其中一种。 如果完成当前拼图,想换一套形状的方案,可以点击重新划分按钮,游戏将重新划分生成新的形状。 当觉得游戏过于简单或困难,可以设置网格大小和链接球数的大小,点击重新设置或重新划分按钮即可根据新的网格大小和链接球数生成一套新的形状以便进行游戏。其中生成形状数量将在形状数量文本框显示。如果觉得游戏中球的大小不合适可以重新设置球的尺寸,即在球的尺寸文本框设置,设置尺寸后,点击重新设置或重新划分按钮启动。
网格数和链接球数设置,如果不恰当无法划分得到形状,因此为方便形状划分,两者有一定的对应关系,典型值为: 6,4 7,4 8,5 9,5 10,5 11,5 12,6
游戏完成后统计完成时间,当时间够短时,记录并保存进排行榜,点击历史排行榜按钮可以显示保存的成绩排行。
采用点击方式选择形状并落位。 当点击到当前形状的某个球时,该形状及该球被选择。然后点击空位矩阵中的某个空位时,当前空位被选择。这时进行落位判断,判断的起点是选中的球落在选中的空位上,若当前形状的所有球都可以放入一个空位则形状放下,落位成功,否则落位操作无效。
点击选中某一形状后,这时该形状被点击的球设置为球的旋转和翻转中心,旋转和翻转将围绕该球进行。 按键盘向右箭头键或界面上的向右旋转按钮,形状向右旋转90度。 按键盘向左箭头键或界面上的向左旋转按钮,形状向右旋转90度。 按键盘向上箭头键或界面上的上下翻转按钮,形状上下翻转。 按键盘向下箭头键或界面上的左右翻转按钮,形状左右翻转。 按界面上的移出网格按钮或者用右键点选该形状,形状将复位到原来在网格外的位置。
- Changes to code:
- "*.cpp": 增加一些对象的析构/或者利用类的成员对象避免重复构造新的对象,控制内存,避免进行多次操作以后内存不断增加。
- "*.cpp": 增加了界面上按钮控制之间的逻辑,当点击开始后,计时器只有当完成游戏才会停止,除非过程中修改了网格大小,球的直径。当网格大小修改后,不按重新设置和重新划分,游戏不影响。但是当球的直径改变后,因为涉及到球的重新绘制,因此将不能进一步游戏,只能重新设置或重新划分。当没有选中形状,点击旋转等按钮是给出提示。
- "*.cpp": 利用QMediaPlayer增加了音效,不同按键响应不同的声音。
- "*.cpp": 利用QTimer和QTime增加了计时,游戏开始则启动计时,完成后统计时间并记录。(ballgrid中的qtimer和qtime对象不能时指针对象,使用它就出错)
- "*.cpp": 利用QtXml增加了排行榜,将游戏成绩统计保存为xml文件,当游戏者得到更好成绩时更新如排行榜,增加了按钮以显示排行榜。