APP下载

拼图游戏APP的设计与实现

2019-03-25张国荣

电脑知识与技术 2019年3期
关键词:奇偶性

张国荣

摘要:App Inventor是一个可视化,开源免费的编程工具,能够简单快捷地创建Android平台上的拼图游戏APP。利用逆序数的奇偶性能够判断拼图游戏的解是否存在,保证每一次随机游戏都是能够完成的。改进传统的九宫格布局设置,拓展到四行三列拼图的布局;采用微数据库技术,保存游戏玩家的最新纪录,从而增加了游戏的多样性和可玩性。

关键词:拼图游戏;Android;App Inventor;逆序数;奇偶性;微数据库

中图分类号:TP319      文献标识码:A      文章编号:1009-3044(2019)03-0096-04

Abstract: App Inventor is a visual, free open-source programming tool, which allows the user to create a jigsaw puzzle application for Android platform. The inverse ordinal number can be used to judge whether the solution of jigsaw puzzle exists or not, and ensure that every random game is solvable. Different from the traditional Nine-palace layout, the game uses four rows and three columns layout, and uses micro-database technology to keep the records of game players. The game is more diverse and fun.

Key words:Jigsaw puzzle game; Android; App Inventor; reverse order number; parity; micro-database

1 概述

拼图游戏是一款经典的休闲智力游戏,点击屏幕上与空格相邻的小图片,交换空格和被点击小图片,直到最终恢复完整的大图片,能够以越少的点击次数完成越成功。常见的拼图游戏有3行3列的九宫拼图和4行4列的十五子棋。

App Inventor是一款由Google公司开发的在线开放编程工具软件,用于在Android平台上构建移动应用。利用基于Web的图形化用户屏幕生成器,可以设计应用的外观,然后像玩拼图玩具一样,将“块”语言拼装在一起,来定义应用的行为。用App Inventor来创建一个拼图游戏APP,无需编写传统枯燥的代码,只是通过拼装一个个预设好的图形化积木块来实现App开发,避免了复杂的语法错误,从而使得软件开发变得前所未有的轻松和有趣。

2 拼图游戏APP的设计

拼图游戏可以多行多列,常见的是3行3列的九宫格游戏[1-2],也有4行4列的十五子棋游戏,这里对传统游戏进行改进,采用了4行3列的拼图布局设置。

2.1设计思路

1)首先准备拼图素材。选择一幅图片,如图1,宽高大小裁剪成240 像素*320像素, 再通过图形处理软件将这副完整图片切分成4行3 列, 形成12个80 像素*80 像素的小图片,选用前面的11张小图,第12张小图片不采用,使得大图片的右下角留出一个空格,便于游戏中小图片的移动。

2)游戏运行后, 玩家可以看到完整的大图片,单击开始游戏按钮,游戏开始,11个小图片被随机打乱,打乱的过程需要确保大图一定可以通过移动小图片恢复。

3)玩家单击与空格相邻的小图片可以移动小图片的位置,并判断大图片是否已经恢复完成。

4)拼图成功会弹出一个对话框,如果创造了新的纪录,将会提示保留。

5)游戏过程可以选择退出游戏,也可以选择重新开始游戏。

图2是游戏的流程图,逻辑结构并不复杂,难点在于如何确保随机排列的小圖片一定可以通过移动恢复完成大图片。

2.2需要解决的问题

根据游戏的设计思路,游戏需要解决两个关键的问题。

1)如何判断单击的小图片是可以移动的,也就是说,如何判断单击的小图片是与空格相邻的。

可以先计算空格的坐标,因为小图片的宽度是80像素,所以所有位置的X坐标相加应该是960像素,那么960减去11个小图片的X坐标就是空格的X坐标,同样地,1440减去11个小图片的Y坐标就是空格的Y坐标。再计算被单击的小图片与空格的距离,使用距离公式,知道两个对象的坐标,可以很容易求出距离,如果被单击的小图片与空格的距离是80,则说明它与空格相邻,可以移动到空格的位置。如果不是,则可以判断小图片与空格不相邻,单击无效。

2)游戏中大图片是否一定可以恢复完成。

游戏是否一定有解,这个问题已经有很多研究成果[3-7],主要是讨论九宫格游戏和十五子棋游戏是否有解的问题。网络上也有很多讨论,并且拓展到任意行和任意列的情形。所有讨论的基本思路是类似的,就是利用逆序数的奇偶性来判断拼图游戏的解是否存在,这里,引用文献[8]中的一个定理来判断随机打乱后的小图片是否能够通过移动恢复成大图片。

定理:设两个矩阵A和B,将矩阵从左到右,从上到下排成一个一维数组,设其逆序对的个数加上空白格在原矩阵所在的行列号之和P,若P(A)与P(B)的奇偶性相同,则两个矩阵可以通过拼图游戏规则进行转换。

因此,假设需要还原的图像缺的空格是右下角那一块,我们按照从左到右,从上到下用数字表示每一个小图片,右下角的空格用12表示,然后把数字排成一个排列1,2,…,12,显然,这个排列没有逆序对,空格的行列号之和(4+3=7)是奇数,所以P(A)是奇数,因此,打乱的小图片必须满足P(B)是奇数才能保证打乱后可以恢复到原来的图像。例如,用数字表示小图片,数字12表示空格,如图3,那么打乱后的图4有解,图5没有解。

3 拼图游戏APP的实现

3.1设计组件,初始化数据

在组件设计的时候,使用11个图像精灵组件放置11个小图片。初始化数据时,把精灵放在一个列表中,精灵的初始位置和空格位置也分别存放在坐标列表中,同时创建一个随机列表用来存放小图片打乱后的顺序,变量“步数”用来记录游戏过程中移动的步数,变量“空白区域X”和“空白区域Y”记录空格的坐标,变量“是否成功”记录游戏是否成功完成,游戏打开时,还需要读出数据库,把以前的记录读取出来,还要设置小图片开始时不能点击的,因为游戏还没有开始。

3.3单击小图片,与空格对换

游戏通过单击小图片,让小图片与相邻的空格对换,多次操作,小图片可以移动到原来的位置。移动前,需要计算空格的位置,然后计算小图片与空格的距离,判断小图片是否与空格相邻,如果相邻,则小图片和空格对换。单击小图片的操作是一样的,所以代码是类似,这里只列出第一个小图片的代码。

3.4判断图像恢复完成

每一次单击小图片,移动小图片之后,都需要检查是否所有小图片都恢复到原来的位置,如果所有小图片已经恢复完成,给出提示信息,如果创造新的纪录,则保存在微数据库中。所有精灵不启用,游戏结束。

3.5运行结果及讨论

游戏开发完成后,测试运行顺利,说明对小图片排列的顺序打乱有效而且可解,游戏更加多样和好玩。更进一步地发现,游戏中的小图片可以修改成任意行任意列,完整大图的空格也可以出现在任何一个位置。

4 结论

拼图游戏是一款经典的休闲智力游戏,不管在计算机还是在手机上都吸引着不少人参加,使用App Inventor这个开发工具,可以简便的开发出在手机上运行的应用,而且,游戏改变了传统的3X3或4X4布局,考虑解的存在问题,具有一定的实用价值和意义。

参考文献:

[1] 蔡艳桃. App Inventor随机九宫格拼图的实现[J].计算机光盘软件与应用,2014(9):172-173.

[2] 余战秋. 基于App Inventor的九宫格拼图游戏设计与实现[J].电脑编程技巧与维护,2017(18):34-36.

[3] 毕智超. 基于重排九宫问题的算法设计与实现[J]. 技术与市场,2017, 24(9):53-54.

[4] 黄沛杰. 重排九宫问题的分析与实现[J]. 现代计算机,2003(12):74-77.

[5] 杜海清. 快速判断“重排九宫”初始状态解的存在性[J].计算机应用,1993(6):59-61.

[6] 易校尉. 重排九宫问题的推广及可解性定理[J].武汉工业学院学报,2013,32(3):58-60.

[7] 吳辰渝, 常文武.15子棋的数学探究[J].上海中学数学,2012(1):95-96.

[8] realmagician. 拼图游戏可解性判断[EB/OL]. https://blog.csdn.net/realmagician/article/details/17395035.

【通联编辑:谢媛媛】

猜你喜欢

奇偶性
函数的图象、单调性和奇偶性
函数的单调性和奇偶性