打飞机、挖掘机,除了这些之外,Axure还可以设计一个真正可玩的小游戏:2048。赶紧来看看是怎么弄的吧~ 废话不多说,简单来说,这篇文章就是为了纪念我的Axure修炼之路,第一炮:2048(http://e2lapu.axshare.com) 1、逻辑定义 第一步当然是定义好逻辑啦。(这里借助了XMind的力量)比较复杂的逻辑主要是集中在上下左右移动时的变化,以右移为例,穷举出所有的可能性如下。当然这里只是穷举了右移中其中一行,剩下的3行以及上移/下移/左移等,都是一样的逻辑,只是ABCD对应的顺序发生改变。至于其他方向顺序是怎么样的,同志啊,自己要多想想。 2. 初始化 首先就是要初始化咯~由于其实的3个数字为随机摆放,因此一开始我设想用中继器+Math.random()的方式来实现(提醒一下,这里容易走弯路),参考自http://www.woshipm.com/rp/612965.html 那么,问题就来了,移动的时候怎样对中继器中的值进行操作?(这时候很怀念数组,想要更新中继器中的数值很简单,但是想在外部读取中继器中的值…难啊!!) 如果从外部无法读取到中继器中特定值,则无法根据上述的逻辑判断来进行值的操作,思前想后了半天,鄙人想到一个取巧的方法,将中继器中的值全部读到一样的4X4的矩形阵中,当然,这也不容易,不信你试试。 看明白了吗?看明白就怪了。 简单解释一下: 在中继器每项加载时,增加一个全局变量count,通过count判断这个时候加载的是中继器中第几项值,如果是第一项,则赋值给4×4矩阵中的矩形1,以此类推。 没错,这个中继器最后的作用就是用来初始化的[捂脸]……跟我初衷不一样啊,大哥…… 现在,我们就得到一个初始化带三个数字的4×4矩阵A,下一步就是实现上下左右移移移……动大法。 3. 移动 如果到这里你都明白了,那么其实这篇教程的精华你已经学习到了[捂脸]是的,最有成就感的其实就是把中继器中的值读出来。 好了,回到正题,上面我们得到一个初始化的矩阵A,但是对于矩阵元件来说,想直接进行移动操作还是比较有难度,因此我创建了16个全局变量A1…A4B1…..D4等,将矩阵中的值赋予它们。 注意到了吗?赋值完后,我启动了一个循环,上文提到,每行的变化逻辑都是一样的,所以我只写了一行,剩下的三行就交给了这个循环。 接下来就是做苦工了,将上面脑图中的逻辑用条件判断语句表达出来,先以右移为例,毕竟我是右撇子。先取第一行的四个值,即A1-A2-A3-A4,将他们的值传递给新的4个变量ABCD。因为Axure没有数组(再次吐槽),你不想把16个全部写一遍那就乖乖的再搞四个变量出来。 为了减少元件数量同时清晰思路,我将上文中右移的逻辑分为四类:D空C空/D空C非空/D非空C空/D非空C非空。大佬判断是哪个小弟干活,小弟就乖乖干。 这个时候其实已经实现的七七八八啦,可以简单的测试一下自己实现的逻辑是否正常,尽量这个时候就进行检查,避免后面增加上下左移,搞得你头晕眼花。 如果这个逻辑没有问题,那就已经把右移搞定,下面就是将剩下三个方向的逻辑代入到右移的套路中。简单来看,如果右移第一行是A1A2A3A4–>ABCD,那么左移第一行就是倒过来的A4A3A2A1–>ABCD,下移是A1B1C1D1–>ABCD,上移就是巴拉巴拉… 反正你就想方设法把剩下三个方向套用到右移已经做好的模型里就是了。这个时候我们已经完成移动的逻辑,需要的就是把这些变化完的值再给到矩阵A中。 到这里,你就已经完成90%啦,剩下就是再随便生成一个数添加到矩阵A里就行啦,啥?这也要我教? 4. 添加随机数 差点忘记说,添加随机数前,需要判断用户移动的动作是否有效,即移动时是否相邻的值相同或者位置发生变化,如果没有发生有效移动,那么是不能添加随机数的,而且,如果判断矩阵A已经没有空白位置,且无法发生有效移动,则游戏结束。判断方法嘛…很简单嘛…好好想想 现在讲添加随机数,简单粗暴的办法就是用Math.random生成一个1-16之间的整数,如果生成1,则判断矩阵A中矩形1是否为空,为空则给它一个值(也是用Math.random随机生产2或者4),不为空则重新生产一个整数,一直到找到一个空值为止。啥?如果一直没有为空的咋办?上面那段话你没看吗,大哥??要先判断游戏是不是已经Over了好么! 5. 结语 这就完成了,是不是很简单~随便加加几句文字,再美化美化就可以去忽悠人了啦~不是,就可以去与异性增进感情。附上源码:https://pan.baidu.com/s/1mihtDOW 写在后面,算法的三个结构就是顺序选择和循环,Axure可以实现这三点,基本上可以实现大部分软件想要的效果,因此还是很强大的工具。当然,这个本来就是个原型工具,所以其实我就是为了学习和好玩才做了这么一个东西,真想编程去学C/C++啊,混蛋。 欢迎各位深入浅出地进行指导^_^