大家好,我是酷玩文仔,这期视频我们趁热打铁先做这个连连看脚本 c 一的视频,后面再更新。 其实我之前已经录了四十一期的按键经营视频教程了,像这种游戏脚本实战类视频的话,我会更注重解决思路和代码逻辑,一些与法相关的问题可能就不会再解释的太详细了。 然后说实话的话,这是一个比较复杂的游戏脚本,单纯是思路分析和方案设计都要用一整个视频去讲 啊,那我们现在就来设计这个方案。每个人设计脚本的思路都不一样,我的习惯就是先按照正常人的思维来设计,所谓的正常人思维就是正常人是怎么玩这个游戏的,脚本就怎么写。那么正 常人怎么玩连连看呢?首先他要找到这个游戏窗口在哪里,对吧?他的视线范围不会超出这个游戏窗口之外,所以我们需要了解到如何定位窗口,这个在第十九期视频里面有详细介绍, 然后连连看的话,他有一个全屏游戏的功能。但是我这里不建议你们在全屏游戏的情况下去写脚本, 因为全屏游戏的话,表面上你是不需要定位窗口了,但是后面调试脚本的时候你就会知道很麻烦的,所以我还是尽量在窗口画的情况下去写脚本 好。那么定位到窗口之后呢,就要开始找方块了,正常人怎么操作呢?首先找到任意一个方块作为起始方块,然后再找 一下附近有没有相同的方块,对吧?那么放到脚本里面的话,当然就不是任意找了,我们可以参考找图找色的方向,也就是从左到右,从上到下逐个方块去变利,然后变利的时候呢,每个方块都可以抽象成一个点, 这个点他就代表了这个方块,只要两个点的颜色是相同的,那么我们就认为他是两个相同的方块, 这个点我们姑且就先认为他是每个方块正中间的点。要便利这样一个平面上的每个点, 我们就需要建立一个平面直角坐标系。那么找到相同的方块之后呢,就判断他们能不能相连。我把这个界面看作是一个地图,那么判断能不能相连的这个过程就相 等于是寻路了。从起始方块出发到目标方块最多可以走三条路,能到达的就点击消除,不能的就跳过。 然后最后一步就是判断游戏是否结束了。做戏做全套吗?当你所有的格子都便利完,都找不到一个方块的时候,游戏就结束了。其实我上面说的便利这些方块,严格上来说都是指便利这些格子,因为他有些格子他不一定有方块,他可能是空的。 所以当我们按照正常人的思维做完这样一个方案设计之后,就会发现,其实这个脚本用到的都是一些非常基础的命令,除此之外就是要会调试脚本。我在第十三期视频里面有详细介绍,这个脚本真正复杂的地方就在于路径教练 这里,那么按照上面这个思路去写出来的脚本,从逻辑上来说是没有问题的。但是我越是按照正常人的思维去写脚本,就越会发现人类的能力是有极限的, 他最大的问题就在于速度实在是太慢了,我要以机器的思维重新审视这个方案,这个脚本他为什么慢?其实很明显 就是因为里面存在着大量的取色命令,虽然看起来只有两个,但是其实它里面是循环执行的,而且是两层循环。我之前的视频也说过,找图找色的命令是很慢的,取色命令估计也差不多, 凡是涉及到这种颜色和图形的命令,他的效率肯定是远不如纯粹的数学运算的。 所以这种脚本的优化思路也很简单,就是想办法减少他取色的次数,用其他的命令去代替。所以优化的重点就落在了确定其实方块和查找目标方块这两个模块里面。那么这两层循环他是怎么运作的呢? 比如我现在以第一行的第一个方块作为起始方块,然后要找跟他相同的目标方块, 连连看是十九乘以十一的矩阵,一共有二百零九个格子,所以我就要对剩下的二百零八个格子逐个去取色对比,一直到他被消除或者便利结束为止。 然后再以第二个方块作为起始方块,重复刚才的操作,对后面的二百零七个格子逐个去取色对比。那这时候我们就发现问题了,后面这些方块 刚才不是已经取过一次色了吗?为什么还要再取一次呢?多此一举是吧?其实每个方块应该说每个格子至少都要取一次色,这是不可避免的, 但是我现在已经不是按正常人的思维去思考了,我可以一次性把整个地图记录到一个二维数组里,后面直接在数组里取值就可以了,比起重复执行这个取色命令,那绝对是肉眼可见的效率提升。而且这样做有一个好处,就是 我一开始就知道有多少个方块,每次消除之后,方块数量就减二,减到零,游戏就结束了。这就是纯粹的数学运算,消除完的那一刻,脚本就结束了,连最后一次便利也省了。所以现在我们把方案改一下,在确定起始方块之前, 加一步遍地所有的方块,把他们的颜色都记录到二维数组里面,这里应该是所有的格子后面两层。循环本身不需要改变,只是循环题里面由原来的用取色命令取色,变成直接从二维数组里面取值。 教练,游戏是否结束,这里由原来的便利玩找不到一个方块,改成直接用剩余数量去判断 好。这个方案确实在很大程度上解决了效率的问题,但他是不是就没有其他问题呢?当然不是的, 这个方案在解决了之前的问题的同时,又带来了新的问题。我们在方案的第二步,把整个地图存到了一个二维数组里,但是在实际游戏中,这个地图是 会变的,而我们目前唯一能掌握的变化就只有这个,消除动作引起的变化,其他变化你永远不知道他会变成什么样子。比如说游戏无解,你需要自己使用从列道具,甚至你都不知道这个变化会在什么时候发生, 比如对方向你使用道具。总之,不管是什么情况,地图发生变化之后,就跟原来的二维数组对不上了,但是这个方案里面有任何的措施去挽救这种局面吗?显然没有。 而之前提到的正常人思维就不会遇到这个问题,因为他每次便利都会重新取色,所以不管这个地图怎么变化,他取色的时候始终取到的就是这个地图当前的状态。所以这两个方案其实是各有利弊的,他们各自都朝着自己的方向走向 的极端。一个是不分青红皂白的重新取色,严重脱慢了脚本的运行,另一个就是片面追求脚本的效率,而忽视了道具造成的影响。 所以我们还是要将两个方案合并,取其精华,弃其糟破,只有在必要的时候才重新取色,非必要的时候就直接从二维数组里面取值就可以了。所以现在的问题是, 我怎么知道什么时候要重新取色?或者说我怎么知道这个地图是不是无解?我怎么知道别人对我使用了道具? 我们先处理无解的情况,从界面上判断的话,无解的时候会出现两行字,但是这个文字是会渐渐消失的,比较难以捕捉,而且我不可能专门弄一个现成去盯着这个字有没有出现吧?所以我决定用 自己的条件去判断是否无解。无解就意味着就算把整个地图便利完,都不可能寻路成功,也就是说程序最多就止步在路径教练这里,他永远都不可能进入消除这一步, 所以只要进来了消除这里就视为有解。如果第一层便利走完了,都没有进入消除的话,那就视为无解。 然后再处理使用道具的情况,从界面上判断的话,游戏界面会出现一些图案,聊天窗口会有文本信息,但是这些信息跟上面说的一样,都实在是难以捕抓。其实我们可以往深一层去想, 别人对我们使用道具说到底就是为了阻止我们消除方块,所以其实我们没必要去纠结这个道具,我们关心的只是这个方块有 没有真正被消除,所以我们可以在每次消除操作之后判断一下方块是不是真的被消除了,如果真的被消除了,那就说明我们暂时没有受到道具的影响,如果消除失败,那我就认为是被使用道具了,那这时候就有必要重新取色了。 至于怎么判断方块是不是真的被消除了,我倾向于通过目标方块是否被选中的状态来判断, 因为我们消除的动作是先点击起始方块,再点击目标方块,如果点击完目标方块之后没有消除,目标方块就会处于被选中的状态,方块边框会有蓝色, 否则的话就是消除成功了。但是你不能判断他消除成功之后会是什么颜色,因为他消除成功之后 会有动态的烟雾效果,这个很难判定的,他不是直接就消失掉了。那我用时间轴的颜色变化来判断行不行呢?当然也是可以的,当我成功消除两个方块之后,这个时间轴就会回满,但是不管用什么条件,他们都各自会有发生误判的情况, 我暂时是没有想到什么条件可以完全避免误判的。如果你只考虑无道具的模式的话,那确实用时间轴判断会比较好,因为无道具只会在无解的时候使用从列,他没有禁手和闹钟这些乱七八糟的道具。 而且就算是误判了,我们还有判断游戏是否结束这一步来兜底,所以他不管再怎么误判都不会致命的。好,我们继续往下。既然会发生误判,那就说明我们这个剩余方块的数量可能是错的, 比如消除失败却误判为成功,那么这个数量就会提前减为零。然而实际上游戏还没结束,所以这里还要再加一个条件,根据我的观察,如果游戏结束了,时间轴就会归零, 这个条件是不受任何道具影响的。所以我们在剩余方块数量为零时,再加一个条件,如果时间也为零了,那就真的是结束了,否则就说明是误判,不管出于什么原因,重新取色就对了。 那既然判断时间是百分百准确的,为什么还要判断这个剩余方块数量呢?这里还是出于性能的考虑,因为判断时间是要取色的,我不想每次消除完都进行一次取色。前面这里是没有办法,但是这里就没有必要了,可以先判断剩余方块的数量 零了再判断时间。好,这个方案就已经非常接近我们的最终方案了。只是有个地方我认为还可以斟酌一下, 那就是找目标方块的时候到底从哪里开始找。我不说的话,你们可能都会习惯性的认为是从头开始,但是我认为这里有一个更好的设计,那就是从起始方块往后找。 为什么要这样设计呢?其实就是为了简化路径教练的逻辑,因为路径教练是要看两个方块的位置关系的,如果从头开始找目标方块的话, 比如说匹配到两个方块在同一行,你是不是还要先判断哪个在左哪个在右?这个位置关系直接决定了你行路的时候是往左还是往右,对吧?如果从起始方块后面开始找的话,那我从射雕 上就排除了很多位置关系。同一行的时候目标方块必定在右边,同一列的时候目标方块必定在下面,不在同一行也不在同一列的目标方块就必定在左下方或者右下方,这样我们就可以少考虑很多情况,少写很多逻辑代码。 那其实方块前面的难道就跳过了吗?是的,我还真的就不管了,如果前面真的有一个相同的方块,那他俩其实早就已经配对寻路过了, 只不过现在的起始方块在那个时候是作为目标方块罢了,所以只要他们没有被消除,在下一轮便利的时候他们还是会遇见的。所以最终方案是这样的, 目标方块要从起始方块往后找,在路径教练之前要多加一步判断位置关系。其实这一步可以算是 路径教验的一部分,只是这样写出来比较清晰一点。看到这里肯定会有人说啊,你这个最终方案这么复杂,我怎么可能一开始就想到这么完整的方案,我都是边做边想的。 如果你是这样想的话,那我要说你说的是对的,其实开发就是这样,你不可能一开始就面面俱到,什么都想的一清二楚才开始, 我能写这么多是因为我已经把脚本写过一遍了,这个方案里面的很多问题其实都是我在实际写代码的时候才遇到才解决的,只不过是我现在提前把这些问题在方案里面展示出来,把解决方案展示出来,可以让后面的思路更加清晰一点。 你以为我就真的是先想好一个终极版的方案,然后才来开始写代码的吗?不可能的。 ok, 这个视频就先到这里,下一个视频我 就开始学代码了,谢谢大家。
粉丝4407获赞1.1万


大家好,我是宽文仔,那么我们继续来完善这个连连看脚本,现在就写到消除逻辑了,先起一个消除的子程序,在巡路的时候就已经有对他进行调用了,消除的操作非常简单, 首先鼠标移动到起始方块的坐标,注意是屏幕的像素点,坐标需要用起始方块的下标计算出来,这个公式在初始化的时候就已经写过了,把它复制下来,然后把 x 和 y 改成对应的方块下标就可以了。 鼠标移动完之后,左键单击一下,然后再移到目标方块的坐标上面,再左键单击一下就消除了。消除完之后需要更新二维数组,把这两个方块对应的值都改为零,如果这里不更新的话,就会影响到后面的判断。 其实脚本写到这里就已经能消除方块了,我们可以调试一下 f 十启动脚本, 好,可以看到这个脚本的主功能是没有问题的,但是还不够智能,或者说它自动化的程度还不够, 还是看回当初设计的方案。首先方块消除他未必就真的消除成功了,需要判断消除是否成功,这里采用目标方块是否被选中来判断。回到按键精灵控制命令,这里有一个 ifcare 的命令,他的意思就是说 如果这个点的颜色等于他的话,就执行下面的代码。根据我们的设计,这个指定点就是目标方块左上角的点,我们基于目标方块的取色点,横坐标减十,重坐标减二十,得到的就是这个方块左上角的点, 然后再用抓抓看一下连连看的方块被选中的时候,它的边框颜色是多少?这个蓝色的色号是 f 八零零零零, 如果这个方块左上角的颜色它等于 f 八零零零零的话,那就说明这个方块消除失败, 消除失败就要重新初始化,否则的话才是消除成功,消除成功了才需要修改这个二维数组。除了要更新二维数组,我们之前还定义了一个剩余方块数量的变量, 消除完之后这个数量就要减二,减完之后就要判断剩余的方块数量是否为零。根据方案,如果是零的话,就要判断游戏是否结束,也就是说判断那个时间轴如果不是零的话,那就不用处理了,让他自己返回去继续便利。 所以这里又涉及到了一个叫做判断游戏结束的子程序,我们这里定义一下这个子程序, 我们用时间轴右下角的点来做判断,先定义两个变量代表这个点的坐标,他跟游戏窗口左上角的相对坐标也是固定的,所以还是老方法,先调试看看窗口左上角的坐标,这里初始话就先不要执行了, 它的坐标是五六零二二零,然后再 按键抓抓,抓一下这个时间轴右下角的坐标,剪一下,计算他们的相对坐标,横坐标相差四百一,重坐标相差五百八十六。我们把这一个运算也写到这个子程序里, 然后定义时间轴右下角这个坐标的颜色,这个颜色也是直接斜死就可以了,刚才抓到的颜色是九零 b 零一零, 然后条件判断,这里还是用 if color 命令,如果时间轴右下角的颜色不等于刚才抓到的颜色的话, 说明时间已经走到了尽头,游戏已经结束,这时候才结束脚本的运行,否则的话,那就说明这个剩余方块数量肯定是错的,这个数量会错肯定是因为受到道具的影响,所以要重新初始化。 最后在保险一点,在上面寻找起始方块的时候,也有对剩余方块数量的判断,如果数量等于零的话,他就会跳出这个外耳循环,所以在这里也要用这个子程序判断一下游戏是否真正结束。 根据方案,我们的代码还没有处理无解的情况。首先定义这样一个变量,它代表每轮便利执行消除的次数,也就是说巡渡成功的次数,然后在每轮便利的第一步都把它设置为零,如果这个程序它进入到了消除这个子程序的话, 那么他的次数就加一,不管消除成不成功,只要能进来就说明不是无解,对吧?然后再回到寻找起始方块这里,这里每走完一轮便利都要判断一次,如果这个次数等于零的话, 那就说明无解,无解就要使用从列道具,直接按键盘上面的二就可以使用了。使用完之后也要重新进行初始化,否则不为零的话,那自己就不做处理,让他直接进入下一轮循环,进入下一轮循环之后,这个便利也会被重新设置为零。调试一下, 这是我们在游戏中途主动使用从列道具,看看会对这个脚本产生什么样的影响。 使用道具可以看到使用道具之后会造成消除失败,然后重新初始化, 重新初始化之后仍然会出现一些误判,明显可以看到鼠标点击的一些空白的地方,这是因为重新初始化的时候,之前消除的方块他还残留有一些烟雾,效果 我没有完全消失,这些烟雾的颜色就会被存到二维数组里面,被当成是方块的颜色了。不过我们有时间轴的判断来兜底,所以不管中间发生什么,最后肯定都能完成的。反正这个脚本又打不赢外挂,做到这个程度的话,我觉得其实也算 ok 了。 其实如果不是录制视频的话,我这个脚本会更快一点,我能明显感觉到录制视频的时候这个脚本的速度会变慢,特别是在初始化的时候,时间明显变长了。 ok, 整个脚本到这里就写完了。下一个视频的话我讲一下这个最佳取色点要怎么找, 之前我是直接给了,结果就是这个十和二十,其实要找到他的话还是要费一番功夫的。这个视频先到这里,谢谢大家。

潘妮的追击第三关,本周有三关都是连连看,这里用一个小窗的方法来卡一个暂停。 首先我这个是小米手机,上面有一个小窗应用的功能, 用这个功能可以在两个应用之间切换,是以另外一个应用变成一个小窗口在上面悬浮,我这里点开的是相册,所以你操作下面的他,他会在前面挡着,然后你点一下上面这个窗口呢, 下面的就会暂停,我试过几次之后, 真的可以,就是不出现那个,不弹出那个暂停窗口,然后他还是保持暂停的状态,就像这样,你可以观察好了植物的哪些地方可以连,然后再去点下面操作, 就让上面那个小窗口在上面悬浮着,然后接下来就是同样的操作,一直连连,连到差不多感觉没了,然后点这个暂停,有的时候他会弹出那个大的窗口挡住 你可以再点一次,这时候你观察好了你再去连,这样你就可以省去暂停的时间,因为你看的时间,看看半天浪费时间,然后导致这个得分不高。 很多人都在用的啊,我之前是不会用,我之前都不知道有这个事,今天才学会的。 同时呢,要注意这个三连销和四连销不一样,四连销它是植物开大招的,所以观察的时候尽量找那种能四连的最好 没有四年的,那就只能三年了。这里升级植物和上面的任务,也可以把这个小窗口拖动一点去看到后面的情况。接下来就是同样的操作了,没学会的可以再看一遍,开头 就是怎么找到那个小窗。

大家好,我是矿文仔,那么接下来我们就继续完善这个寻路逻辑。首先是一级寻路向右,因为他只是往右走,所以重坐标是固定的,只需要定义一个局部变量 x, 这个 x 它需要从起始方块往右走到目标方块,所以它的初始值就不是零了,是起始方块的 x 下标加一, 也就是以起始方块的右边那个格子作为起点,然后终点就是目标方块的 x 下标,这里 x 每次循环都加一。如果 x 最终能够等于目标方块的 x 下标的话,那就说明可以直接消除了, 消除就调用消除的子程序,当然这个子程序的逻辑我们也是后面再补,消除完成之后他还是会回到这里的,所以 这里再加一个语句,退出此程序,让他赶紧回去找下一个起始方块。如果还没有走到目标方块的位置,那就说明这个 x 他还在路上,这个货循环他还没有走到最后一轮,那就要判断这条路到底能不能走通, 也是直接从二维数组里面取值, x 下标就是当前的 x, y 下标就是起始方块的 y 下标,因为它是从起始方块往右走嘛,所以这个 y 下标是没有变的。 如果渠道的值不等于零的话,那就说明中途有方块挡住了,此路不通,就不要浪费时间,赶紧退出子程序,回去找下一个目标方块。 如果是等于零的话,那就说明这条路还是通的,那就不需要处理,让他继续走。所以现在明白为什么这里要加一了吧, 如果不加一的话,其实方块的位置他就是有方块的,他就会直接判定这条是死路,连家门口都出不了,直接就退出。子辰去了 一级行路向下也是同样的道理,往下走的话,横坐标不变,重坐标在变,所以局部变量就是歪。他从起始方块的歪下标加一开始,到目标方块的歪下标结束,相等的时候就可以消除,然后退出。如果是死路的话,那就直接退出。 接下来是二级寻路上右。这个逻辑要稍微复杂一点,就是从起始方块往上, 把能走通的每一个空格子都作为二级巡路的起点,然后再直行往右的二级巡路。所以这里涉及到两个方向,也就是说要用两层循环去便利了。外层 循环是往上走,内层循环就往右走。先定义 x 和 y 两个局部变量,然后外层循环往上走,对应的就是 y 在变, y, 从起始方块的 y 下标减一开始,也就是说从起始方块上面的那一个格子开始, 走到哪里呢?根据路线,他一直走到最上方才拐弯也是有可能的,所以只能让他走到零,然后不长是负一,要写清楚,代表每次循环就减一,前面默认是一,就不用写,这里是负一的话,必须要写 这个 y。 从路线上来分析,它有可能会走到最上方,但是实际上我们还是要判断一下这条路它到底通不通,还是从二维数组里面取值。对于 y 层循环,它往上走, x 下标是不变的,就是起始方块 x 下标, y 下标就是当前便利道的 y, 如果取值为零的话,那就继续执行里程的循环,如果此路不通的话,那就从哪来回哪去吧。 接下来是里程循环往右走,对应的是 x 在变,从起始方块的 x 下标加一开始到目标方块的 x 下标就结束了,也就是说走到目标方块的正上方就结束了,如果此路不通的话, 那就退出循环。注意这里是退出循环,而不是退出整个子程序,因为外程循环他还是要继续执行的, 这里往上走一格之后,再重新执行里程循环往右走,如果 x 等于目标方块的 x 下标,那就说明他可以走到目标 方块的正上方,那就要执行三级巡路了。三级巡路就是要从 y 开始往下走,一直走到目标方块,这个我们都知道,但是这个 y 他是一个局部变量,而三级巡路又是另外一个子程序,那么他怎么拿到这个 y 的值呢? 所以这里在调用三级寻路下的时候,还需要将这个 y 作为参数传递过去,只要在调用子程序的名称后面加个括号,把参数写进去就可以了。如果有多个参数的话,就用逗号分割,然后再定义子程序,这里用同样的方法接收参数就可以了。 那么三级巡路下执行完之后,无非也就是成功或者失败。通常来说,如果成功了就退出这个子程序,如果失败了就继续走这个二级巡路。但是这里不一样, 无论成功还是失败,这里都可以直接退出这个子程序了。为什么呢?这里应该算是一个比较巧妙的优化,首先他整个路线是上右下,一级行路我是往上走的,三级行路我掉了个头,往下走, 那就说明我一开始走的这条路是最近的,如果这条路不行,不管他是在哪一段不行,再尝试下去的话,他也只会越走越远。 如果他只是在二级巡路失败了,那走远一点或许可以绕过障碍连的上。然而问题就在这里,他是在三级巡路的时候失败的, 不管你一级寻路走到哪里,你走的再远都是要掉头回来的,你要回来就要经过这里,你始终都不可能躲得过在三级路线上面的这个障碍,除非你换一个方向, 比如说下右下,这样走就可能走的通。当然是另外一种情况了,至少上右下这个路线组合已经没有再尝试的必要了,所以这里不管成功与否,都直接退出这个子程序吧。其实有类似情况的路线组合还有很多,总结起来就是 只要一级寻路和三级寻路的方向相反,而且是在三级寻路的时候失败的,那么都可以这样处理。接下来是二级寻路上左的逻辑,其实他跟二级寻路上右是一样的,只不过是里程循环的不长,由一变成负一而已,直接复制改一下就可以了。 然后是二级巡路右下,首先定义 x 和 y 一样是两层否循环去便利,外层循环是往右一直到最右边,如 如果是死路,就直接退出子程序。里程循环是往下一直到目标方块的歪下标。接下来的逻辑就比上面还要稍微复杂一点,因为右下他有可能直接就消除了,也有可能是右下右或者右下左, 他的路线组合比较多。首先判断右下直接消除的情况,如果 x 等于目标方块的 x 下标, y 也等于目标方块的 y 下标,那就说明这条路可以直接到达目标方块,那就直接消除了,然后退出此程序。 否则如果是死路的话,就退出里程的循环。再否则就是如果不能直接消除,同时他也不是死路的话,就判断他有没有走到与目标方块同一行,如果是在同一行,也就是说歪向 等,而且 x 小于目标方块的 x 下标的话,那就是二级巡路的终点,他在目标方块的左方,那对应的就是右下右这条路线了,所以就要调用三级巡路右,他要从 x 开始往右走,所以把 x 作为参数传递过去。 右下右的话,他的一级巡路和三级巡路方向相同,所以这里需要判断他是否消除成功,成功了才可以退出子程序。 最后就是如果在同一行,但是 x 大于目标方块的 x 下标的话,那就说明二级巡路走到了目标方块的正右方,那就对应右下左的这条路线, 所以就调用三级行路向左传递 x 作为参数,这里不管成功与否,都可以直接退出此程序。二级行路左下跟 这个逻辑也像是直接复制改一下就行了,他包含了左下左下右、左下左三种组合,他只是一级巡路的时候从往右变成了往左, 所以这里也把加一变成了减一,然后一直走到最左边,他的不长就改成负一,然后原来的右下右,现在变成了左下右,所以不需要判断是否成功,可以直接退出这个子程序。反过来的原来的右下左变成了左下左,所以这里就要加一个判断条件。 然后是二级巡路下右,其实整体框架都是一样的,直接复制上面的改就行了。下右的话,外层循环是 y 往下走,里程循环是 x 往右走,下右下的时候要教验是否消除成功,下右上就不需要。 最后一个是二级巡路下左跟下右一样,只是底层的循环不长,改成负一。好,二级巡路写完了,接下来是三级巡路。 首先是三级巡路上,他接受了 y 作为参数,这个 y 传过来之前是二级巡路的终点,传过来之后就变成了三级巡路的起点,往上走的话只有 y 在变。 首先定义一个局部变量 y, 但是因为此程序本身就已经接收了一个参数 y, 这样写就会产生冲突,所以要修改一下这个接收参数的名字。接收参数跟传递参数的名字可以不一样的,按顺序对应上就可以了。 这个 y 作为三级巡路的起点,我给他起这个名字。然后是一层破循环, y 从二级巡入终点的 三面一格开始,到目标方块的歪下标结束,不长是负一,如果歪等于目标方块的歪下标,那就说明通过三级巡路最终到达了目标方块的位置,那就可以消除方块,然后退出此程序, 否则如果是死路,那也是直接退出此程序。这里是三级巡路网上,那就意味着他跟目标方块在同一列,所以就取目标方块的 x 下标,还有当前便利刀的 y, 三级巡路下也是一样的,只是他往下走不常从负一变为了一。三级巡路左的话, y 就变成了 x, 然后判断是不是死路,这里就用当前变力道的 x 和目标方块的 y 下标三级巡路右也是一样的,只不过是把这个不 常由负一改为了一好。寻路逻辑到这里就写完了,总结一下吧。其实这里寻路的基本逻辑是很简单粗暴的,他就是把所有能走的路都走一遍,看看能不能连上, 但是这样的话路线就太多了,会浪费时间,所以就要结合方块的位置关系来进行优化,减少不必要的尝试。还有就是整个行路过程都是纯逻辑运算,没有什么取色找色的命令,可以最大限度的提高脚本的效率。 下一个视频主要就是写消除方块的逻辑以及游戏结束的判定逻辑,以及如何应对使用道具的情况。这个视频就暂时先到这里,谢谢大家。

大家好,我是关文仔。那么紧接着上一个视频,我们现在已经完成了对地图的初始化,根据方案的话,下一步就要找一个方块作为起始方块,然后再去找目标方块。 我们先起一个子程序叫寻找起始方块,在初始化完成的时候就可以调用了,首先还是定义两个局部变量 x 和 y, 然后还是两层 for 循环去便利,外面还要再套一层循环,因为现在的情况跟初始化的时候不一样,初始化的时候 每个方块只要取一次就够了,因为取一次就存下来了。但是这里的便利不是为了取色,他是要把这个方块作为起始方块,以便于后面找目标方块配对消除。这里两层或 循环走完,就算是完成一轮便利,但是大部分方块在第一轮便利的时候都没有被消除,因为那个时候剩余的方块很多,所以大部分情况都是入境教练失败的。 那么第一次失败不要紧,能消除的先消除,剩下的可以留到下一次便利的时候再尝试嘛, 至于要便利多少次才能够消除完,这个谁都不知道,所以我们可以用这个方块剩余数量来作为条件,避免陷入死循环。 当剩余的方块数量大于零的时候就继续变利,也就是说如果剩余的方块他等于零的话,就结束这个循环,否则就一直循环下去。好再回到这两层循环里面, x 和 y 他就是二位数组的一个下标嘛,所以我们可以直接从二位数 数组里面取值,判断这个格子他有没有方块,如果取出来的值不等于零的话,那就说明这个格子是有方块的,而且取出来的值就是这个方块的颜色,那我就把这个方块作为起始方块, 也就是说这个颜色他就是其实方块的颜色了。先定义一下变量,他就等于从二位数组里面拿出来的值,然后再定义两个变量,把其实方块的下边也记录一下,后面巡录的时候要用到这两个变量的这里,再给他复一下值。 ok, 起始方块就是这样的,没什么要求的,他只要四个方块就行了。拿到起始方块之后就要根据他来找目标方块,这里另起一个子程序叫做寻找目标方 块,拿到起始方块之后就可以调用了,目标方块他要跟起始方块的颜色一样,这样他才有资格进行路径较验嘛。所以其实刚才我们定义的这个起始方块颜色的变量啊, 其实它同时也是目标方块的颜色,这两个肯定是要相等的,还是老规矩,先定义两个局部变量 xoy, 然后就是两层货循环, 但是这一次便利又跟前面的不一样,如果 x 和 y 还是按照之前那样从零开始,那就相当于是从头开始找目标方块了。 但是根据我们的方案,目标方块是要在其实方块往后去找的,所以回到代码这里,外层循环这里,我们就直接从其实方块 那一行开始,这样就能确保目标方块不可能出现在起始方块的上方。里程循环这里还是先从零开始,这个零不能直接改成起始方块所在的那一列, 因为它换函之后还是要从第一列开始的,也就是说 y 加一之后, x 还是要从零开始的,所以这里面再加一个 f 条件,判断 目标方块一定要在起始方块的右边,或者说下面才继续下一步,如果是同一行的话,就在他的右边,如果不是同一行的话,那就肯定是在他下面了。好,现在位置关系满足条件了,但是颜色还没有判断呢,还是一样的, 直接从二维数组里面取出当前便利到的方块的颜色,如果它的颜色 等于起始方块的颜色的话,那就是配对成功了。跟上面一样的,还是先定义两个变量,把目标方块的下标记录下来,然后在这里复一下值。 然后在教验路径之前,需要先判定一下方块的位置关系。我们先起一个指程序,叫做判定位置关系,在确定目标方块之后就可以调用了。 至于里面的逻辑的话,我们留到下一批视频再写。现在我们要先解决这样一个问题,就是不管位置关系怎么样, 后面的路径教练无非就是导向两个结果,就是成功或者失败。那么成功之后这个程序要怎么走?失败之后又要怎么走?从这一步就开始要设计了,我之前设计的方案 只提到了消除失败之后要怎么走,没有交代寻路失败之后要怎么走。如果寻路失败,那当然是要继续找目标方块了,一直到便利完为止。但是如果寻路成功了,就会进入消除操作, 如果消除也成功了,而且游戏没有结束的话,那就不需要找目标方块了,原来的起始方块也已经消失,要轮到下一个方块做起始方块了。其实这个逻辑大家都知道,关键是在代码怎么实现,这也是我现在才讲这个设计的原因。 可能很多人的第一反应就是消除成功了,就调用上面这个子程序找起始方块,寻路失败了就调用下面这个子程序找目标方块。但其实这样是不可行的,因为我们在寻路或者消除方块的时候, 这两个子程序的循环都是没有走完的。比如找到的目标方块,下标可能是五五,如果这时候寻路失败了,你直接从外部调用这个子程序,他就会走到这个循环的外面,然后重新执行这个循环。重新执行就意味着 x 和 y 都被重置, 本来应该是循环到下标六五的,现在已重置,又从起始方块开始往后找了,直接就导致你找到的目标方块永远都是同一个方块,陷入一个死循环。所以说这一整个脚本他不是我们理解的那种简单的轮回, 除了上面初始化完成的时候,其他地方就不能再直接调用这两个指程序了,我们只能让下面的指程序在执行完成之后自己回来继续执行这两层循环。其实指 程序它本身就是这样的,在执行完之后,它就会回到当初调用它的地方,比如说这里调用判定位置关系, 然后判定位置关系又会调用三极巡录,三极巡录再调用消除,消除完之后,只要他里面没有死循环,或者说没有再跳到别的地方的话,他就会自己回去当初调用他的地方,从消除 又回到三极巡录,然后再回到判定位置关系,然后再回到当初这一句调用他的地方。所以我们现在就要做好这样一个设计, 就是说不管他后面的具体逻辑是什么,他最后都会回到这个地方,所以在这里还缺一个逻辑,在这里我们要判断方块消除是否成功,至于怎么判断是否消除成功呢?我们之前不是定义了一个二维 数组吗?如果一对方块他被消除了,那两个位置他也变成空格值了,所以二维数组肯定是要更新的,所以我们可以去二维数组这里取值,如果取到的值等于零的话,那就说明方块被消除了,我就直接用命令退出这个值。程序 指程序在退出之后就会回到当初调用他的地方,也就是靠寻找目标方块这一行代码,然后这两层循环就会继续正常的进行, x 和 y 的值就不会受到影响。如果消除失败的话,那就让他继续寻找目标方块, 所以这里不用做处理,不用做处理的话,他回到这里之后就会继续这两层货循环。好,写完这一步,方块的配对逻辑才算是完成了。 接下来判定位置关系的逻辑,我们等到下一批视频再讲,这一批视频就先到这里。

大家好,我是款文仔,那么这一批视频的话呢,主要讲一下这个最佳取色点怎么找。首先我再次重申一下最佳取色点的要求, 连连看一共有四十四个不同的方块,最佳取色点这个坐标,他落在这四十四个方块里,取到的必须是四十四个不同的颜色,当然也要跟背景色不同, 因为如果从不同的方块里面取出相同的颜色的话,程序就会产生误判,他会认为这两个不同的方块是一对,而且这种误判是永久性的,不是说重新出石化就可以解决的那一种。 所以说最佳取色点的坐标其实是相对于每个方块的左上角而言的。既然这个点在所有的方块里面取到的颜色都要为一,那么首先我单 要把所有的方块都拿到手,怎么拿呢?其实就是不停的开游戏截屏,然后再到按键抓抓里面去截图,把四十四个方块都截下来,而且要注意是截成三十一乘以三十五大小的,差一个像素都不行。你比如说像这些 排在一起的方块比较难截图的话,那就挑这种单个独立出来的方块就比较好截一点。这一步非常的枯燥啊,我就不演示了,我这里展示一下提前准备好的四十四个方块的截图, 这些方块都是标准的三十一乘以三十五像素的,接下来就是要把这四十四个方块都放到一张图里,把他们都弄成一排,方便我们去便利。这一步的话,用最普通的画图工具就可以完成了。打开 windows 系统自带的画图工具,然后再查看这里勾选网格线,这个网格线主要是方便我们比对每张图片的大小是不是一致的,然后就开始贴图,点击粘贴下面这个箭头,选择粘贴来源。先确认一下第一张图片是不是三十一乘以三十五的, 是的话就选择这张图片,图片就进来了,现在看起来有点小,按住键盘的 ctrl 键,然后鼠标滚轮往上就可以把它放大,这时候每一个格子就相当于是一个像素了。然后继续粘贴来源, 选择下一张图片,然后拖动他对比一下这个宽度和高度是否一致,是的话就将这张图片紧贴着排在最右边,后面就是重复同样的操作一样非常枯燥,这里我就跳过了,我直接给你们看 一下最后的结果。四十四张图片排完之后,就可以点击保存生成 png 格式的图片,然后打开这张 png 开始写代码,其实逻辑就跟前面遍地连连看的地图是一样的。这个还更简单一点,所有的方块都在一行, 直接用一维数组就好了,但是因为这时候我们还不知道最佳取色点的相对坐标是十跟二十,我们只能把方块里面的每一个点都尝试一遍,所以我们仍然需要用两层循环去便利。先量一下第一个方块左上角的坐标 是二二四二零七,所以 x 就是从二二四开始,方块的宽度是三十一,所以在二二四加三十的地方结束。 y 就是从二零七开始,方块的高度是三十五,所以在二 二零七加三十四结束。这两层货循环是对一个方块里面的所有点进行便利,但是这里有四十四个方块,所以还需要一个货循环去便利所有的方块。 我这里就起一个函数去便利,因为这里已经有两层循环了,再嵌套太深就不好了。顺便给你们讲一下函数怎么用。其实函数和子程序没有什么区别的, 只不过是函数有返回值,子程序没有。就是说函数执行完之后可以带着一个值返回他调用的地方,而子程序他就是单纯的返回,他不会带一个什么值返回的,所以不需要返回值的地方,我就习惯用子程序了。 首先定义函数跟子程序是一样的,把 sub 改成方程就可以了。后面一样是函数名称和参数,这里要接收上 上面的 x 和 y。 然后函数的调用方式也差不多,可以直接括或者直接写函数名字去调用。因为函数是有返回值的,所以我甚至可以把调用放在一个 if 判断后面, 这里的函数名称加参数就是调用,调用之后会有返回值,返回值就直接参与这个 if 的条件判断了。 回到这个函数里面,我们要变利四十四个方块,所以要先定义一个局部变量来作为他的下标,然后是一个否循环,从零到四十三,逐个方块去取色。 取色命令就不用解释了吧,跟前面巡路的逻辑相比,是不是觉得这个特简单,但是这里还没完呢,我的目的不是取色,我才不关心他是什么颜色,我只关心他的颜色有没有重复。所以我需要一个数组,把 之前取到的颜色都存下来,然后每取一个颜色都去数组里面检查一下这个颜色是不是已经存在了,所以还要定义这样一个数组, 他的长度是四十四,以及便利他的时候用到的下标,然后就直接循环吧,下标从零到四十三。在数组里面取值,如果数组里面取出来的值等于当前取到的颜色的话,那就说明这两个方块的颜色重复了, 或者说当前渠道的颜色他跟这个背景色是一样的话,也是不行的。这两个条件只要他满足其中一个,那么就说明这个点他不是最佳取色点,那我就让他返回 force 函数。设置返回值的方法就是把要返回的值复制到跟函数同名的变量里,这个函数的名字叫遍地取色, 所以我就让便利取色等于 force。 要注意这里只是设置返回值,不是说他马上就返回了这个值他是会等到函数结束之后才返回的,所以我这里用命令马上结束这个函数,就可以实现立即返回的效果。 如果暂时没有重复的话,就把渠道的颜色存进数组里面。如果外面这个货循环走完都没有重复的话, 那就说明这四十四个方块的颜色都没有重复,就说明这个点是最佳取色点,那我就把返回值设为处,后面他自己结束就会返回了。 返回来这里是个 if, 判断为初的时候他就会继续执行。在这里的话可以把 x 和 y 打印出来,看一下是多少,然后结束脚本,因为这个最佳取色点我们只要拿到一个就行了。 当然如果你想把所有的最佳取色点都查出来的话,那这里就不要结束脚本,让他这两个破循环自己走完,最后可以再加一个脚本结束。好,现在调试脚本。 好,可以看到第一个 j 加取色点已经出来了,它的坐标是二三四二二七, 二三四就等于二二四加十,二二七就等于二零七加二十,也就是说这个最佳取色点他相对于方块左上角的坐标而言,就是横坐标加十,中坐标加二十。之前我在视频里面跟你们讲的十跟二十就是这么来的。 好,可以看到现在的话已经输出了五个最佳取色点,就是说其实你可以不用十跟二十的,这五个点,你随便取一个都是可以的。好, 脚本结束一共输出五个最佳取色点,那么整个连连看脚本的教程就暂时先到这里,谢谢大家。

我们看过了世间的陌生门,变得好像陌生人。 珠宝七千一百三笔返回首页点击两个相同的汉字,即 你我想要的一直照顾。 欢迎查看排行榜,一个全国排第二百六十一名,太棒了! what?

你们要的多仓播放器影视仓十二月最新版,它来了!最全影视接口和 tv 配置教程已经打包好了,免费获取口令,手机、平板、电视、电脑都可以,简单三步教会你获取。首先点我视频右下角分享,再点分享链接,它会自动复制, 然后打开手机上这个应用,它就会自动弹出文件包,没弹出在首页搜索精灵爱玩,打开资源包,找到影视仓文件,先保存再下载就可以啦!

大家好,我是库王文仔,那么这个视频的话就紧接着上一个视频来啊,我们就根据这个方案来写一个脚本,首先就是要定位窗口,那我们写一个子程序,就叫定位窗口,然后在脚本开始的时候调用一下。 定位窗口的话,需要先获取窗口句柄,窗口插件这里有一个命令,可以利用窗口标题来获取窗口句柄,我们先定义一个窗口句柄的变量,然后用抓抓工具获取一下连连看游戏窗口的标题是什么? 复制一下它的标题,填到参数这里,插入 mini, 然后调试输出一下,看看获取到的句柄对不对。幺四四三幺幺四,跟按键转 抓拿到的窗口聚饼是一样的,应该是没有问题。然后还是在窗口插件这里有一个得到窗口客户区大小的命令,唯一的参数就是刚刚获取到的窗口聚饼。 这个命令他返回的是什么东西呢?文档这里有写,他返回的是一个制服串,由窗口左上角的横中坐标以及窗口的宽度、高度四个数字组成,每个数字之间用管道符来进行连接, 但是这个制服串的话,我们是没有办法直接使用的,所以需要利用这个管道服来对他进行分割,他这里有一个命令,这个命令就是对这个制服串用管道服进行分割,分割之后就会生成一个数组,里面有四个元素,这个变量我们也给他 自己起个名字,这个数组有四个元素,这里的话我只需要前两个就够了,也就是说我只需要窗口左上角的坐标就够了。这个窗口大小对于我来说没有意义,因为我知道连连看他的举证是十九乘以十一的,格子的大小也是固定的, 所以我只需要知道第一个格子所在的位置就够了。那我们先定义一下左上角格子的坐标, 窗口左上角的横坐标就是 ltx, 重坐标就是 lty, 但是这个坐标不能直接拿到啊,要一步一步来。第一个格子跟窗口左上角他们的相对位置是固定的, 我们先调试输出,看看这个窗口左上角的坐标是多少好,结果是五六零二二零。 然后再看一下第一个方块他左上角的坐标是多少好,他的坐标是五七四四零幺。然后再用减法计算一下,发现他们的横坐标相差十四中坐标相差一百八十一。 所以用窗口左上角的横坐标加十四,中坐标加一百八十一,就可以得到第一个格子左上角的坐标。因为这里格子跟方块是一样大的,所以要测量格子的时候直接对着方块量就可以了。那么对应的代码的话就是 l t x, 它就等于左上角的横坐标加上十四, l t、 y, 就等于左上角的重坐标加上一百八十一。我们现在已知方块左上角的横重坐标。要计算 方块中心点的坐标,还缺两个条件,就是这个方块的宽度和高度。但是我现在要告诉你们,中心点并不是最好的选择, 那么最佳取色点应该要怎么选呢?因为这个点他是用来区分不同方块的,所以他只需要满足一个条件,那就是对于所有四十四个不同的方块来说,在这个点上面取出来的颜色都不一样,都是唯一的,这就可以了。 但是方块的中心点显然就不满足这个条件,比如说这两个方块他们的中心点甚至都没有落在这个俄罗斯方块的图案里面,他是直接落在了这个方块的背景上, 和这两个方块他们的背景又是一样的,那就意味着程序会判断这两个方块他们是一对,但实际上并不是。所以最佳取 色点在哪呢?我现在明确告诉你,每个方块左上角的横坐标加十,中坐标加二十,就是最佳的取色点。具体是怎么找到的,后面我会单独分一批出来讲,因为我另外写了个脚本专门来找这个点, 我这里暂时就把它当做是已知条件,直接拿来用。所以这个方块左上角的坐标,横坐标还需要加十,中坐标还需要加二十, 这才是我们要便利的第一个点的坐标,所以这个就不再是左上角格子的中心坐标了,应该叫做左上角格子的取色点。 好,这就是我们要便利的第一个点的坐标。因为所有的格子都是紧密排列的,中间没有间隔,所以左右相邻的两个点,他们之间的距离就 等于方块的宽度,上下相邻的两个点,他们的距离就等于方块的高度,所以说到底我们还是要测量方块的高度和宽度。像这种排列在一起的方块不好量,那我们就找一个单独的方块,像这种单独出来一个的方块就很好去测量了。 我们首先拿到他左上角的坐标,然后再拿到他右下角的坐标注意量的时候,只量正面就可以了,侧边和下面这个斜四十五度角的部分是不算的,因为如果他旁边还有方块的话,会把这一部分挡住的。 然后方块的宽度就是横坐标相减,再加一也就是三十一,高度就是重坐标相减再加一就是三十五。那么我们在代码里面也要定义一下这个方块的宽度和高 高度,直接把这个直斜时就可以了,宽度是三十一,高度是三十五。好,现在第一个方块的点有了,然后方块的宽高都有了,那么接下来就要便利所有的点。我们另起一个子程序叫做初始化, 因为根据我们的方案,我们是要在一开始就便利所有的格子,然后把他们的颜色记录到一个二维数组里面,然后在便利的同时去计算这个地图一共有多少个方块。我们需要一个二维数组来记录这个地图。二维数组是一个什么概念呢? 假如说连连看的地图只有一行十九个格子,那我们就可以用一维数组来表示,数组里面有十九个元素,每个元素的值就是对应这个格子的颜色,然后对应的 下标就是零到十八,它的结构大概就是这个样子。但是现在这个地图它是二维的,所以数组也要是二维数组。那么所谓的二维数组就是在原先的数组里面再嵌套一层数组,比俄罗斯套娃还要复杂一点, 外面一层数组代表行,这个地图一共有十一行,所以外面一层一共有十一个元素,然后每一个元素又是一个数组,里面的这个数组就代表列,每一行有十九列,所以里面每个数组都有十九个元素。所以在游戏里面, 所有的格子对应到这个二维数组的下标,就是下面这个表,他和屏幕坐标有点类似,左上角是零,零往右走一格, x 就加一,往左走一格, x 就减一往上就是 y 减一往下就是 y 加一,这个非常的重要,后面全程都是基于这个坐标系来写逻辑的。然后回到代码,我们先定义一下这个二维数组,我们定位窗口之后,紧接着就要调用初始化的子程序, 然后在初始化的子程序里面写循环。二维数组就需要两层或循环去变利,外层循环就是变利这个二维数组的外程。外程的下标它代表的是第几行,也就是相当于沿着众坐标去变利, 所以把变量设为 y, 初始值是零,从零到十不长,默认是一,就不用写,也就是说从零开始,每循环一次就加一,一直加到十,这样,那么相对应的里程循环就是 x, x 也是从零开始到十八不长也是一。 x 每加一就相当于是往右挪一格, y 加一就是相当于往下挪一格。这里的 x 和 y 我需要定义一下, 而且是在子程序里面去定义这个变量,为什么呢?因为后面在寻物的时候肯定还要写很多很多,这种循环肯定还要用到 x 和 y 这两个变量。如果我把 x 和 y 像上面一样给他定义到外面去, 它就是一个全局通用的变量,它可能会被其他的子程序修改,所以我要把这个 x 和 y 定义在这个子程序里,那么它就是一个局部变量,它的作用范围就在这个子程序里面, 外部是没有办法访问到这个变量的,就算其他的子程序,他也定义了一个 x 和 y, 那也只是明智 相同而已,实际上他们的内存地址都不是同一个,这样就不会互相干扰。好,再回到这两层循环里面循环他干嘛呢?当然是要取色了, 在颜色图形命令这里有一个得到指定点颜色命令,可以用把变量名字改一下,改成方块的颜色,或者说格子的颜色,反正能理解就行了。 这里我们还需要提供取色的坐标,这里要注意不能直接写 x 和 y, 因为 x 和 y 他只是对应这个格子在二维数组里面的下标,他不是真正屏幕上的像素点坐标,真正的坐标是要计算得到的。 首先我们知道第一个点,它的横坐标是 l t x, 如果是第二列的话,那就再加一个方块的宽度,那么 d x 列的话,就宽 度乘以 x 了。然后重坐标也是一样的,我们知道左上角方块的重坐标,它是 l t y, 如果是第二行的话,那就加一个高度,那现在是 d y 行,那就再乘以 y。 当然这个方块颜色最好也把它定义成一个局部变量。这里还可以加一个鼠标移动的命令,来看一下我们计算的坐标对不对。鼠标移动到取色的坐标,然后调试 好,可以看到鼠标的移动轨迹,跟我们计划的是一样的,那就没有问题了。那么拿到颜色之后,根据方案,我们是要把它记录到二维数组里,但是这里还有一个问题,我们是便利所有的格子取色,但是这个 格子他不一定有方块的,他有可能是空的,那么如果这里是空的话,我们拿到的就是一个背景色,背景色是固定只有一个,如果把背景色也存下来,那么寻路的时候他就会认为这两个空的格子是一对,但其实这里根本就没有方块, 所以这里我还要判断取到的颜色他到底是不是等于背景色。现在就在外面定义一下这个背景色,他的纸也是固定的,像这个方块的宽高一样,直接斜死就行了。 七零四七三零是一个制服串,要用引号把它引起来循环这里拿到颜色之后先对比一下,如果拿到的颜色不等于背景色,那就把这个色号记录到二维数组里面,否则的话也要给他一个值。 通常我们用数字零来表示没有,但是这里最好要用字符串的零,跟这个颜色的数据类型保持一致,不然判断的时候他就会报错,提示数据类型不一致。这个是按键精灵语法的一个不太方便的地方,但是没有办法, 所以我们这里就只能用一个字符串的零。好,现在地图记录完成了,那么根据方案的话,我们还需要在这里计算这个地图一共有多少个方块, 方案这里的话我漏了血啊,但是其实很明显的,因为我们最后需要用这个剩余方块数量来判断游戏是否结束, 那么这个剩余方块数量哪里来了?那当然是一开始初始化的时候就要给他记录下来,然后每次消除就减二嘛,所以先在外面定义一个方块总数量,然后再初始化的 的时候先给他负责零,然后在便利这里如果判断到这个格子有方块的话,他就加一,否则就不用加 好定位窗口和初始化地图,就先讲到这里。那么下一批视频的话呢?就是开始要找其实方块以及配对这个目标方块了。


十二日影视仓最新版多仓播放器,它来了最新最全影视接口和超详细的配置教程。主包已经打包好了,支持手机平板 tvpc 端。今天三秒教会你,首先点我视频右下角分享,再点分享链接,它会自动复制,然后打开手机上这个应用, 它就会自动弹出文件包,没弹出在首页搜索精灵爱玩,打开资源包,找到影视仓文件,先保存再下载就可以了。