H5数独游戏开发数字填入及检验
上节课给大家介绍了数字面板如何响应鼠标点击事件,在控件台打印一条消息表示对鼠标点击的响应。在实际游戏中,用户点击数字面板空白处后将显示数字选择面板,用户点击数字选择面板上的数字按钮后,将点击的数字填入数字面板。我们规定以下两种情况下不显示数字选择面板:1、用户没有点击数字面板空白处;2、上次填入数字后检验出重复数字。运行效果如下图所示:
这个截图中用户在第四行、第四列的空白处填入了数字9,导致行、列、块预警,即同一行数字9重复,同一列数字9重复,3X3块内数字9重复。下面我们先介绍如何显示数字选择面板。数字选择面板是在数字面板的回调函数中实现,代码如下:
我们看看那个clickInNumBord()函数做了什么,它的代码如下:
这个函数主要做了这几件事,首先计算出数字面板的起始及结束坐标,然后判断点击位置是否在数字面板范围内,接着计算出点击位置在数字面板内的行、列号,然后判断点击的是不是固定数字,是的话返回false不变更游戏状态为4,否则调用setClcikPosition()函数保存点击位置的行、列号。我们来看看这个setClcikPosition()函数的代码,如下:
这个函数的作用我们最后再来介绍,先让我们回到数字面板的回调函数继续往下面讲解,接下来就是清除鼠标事件,然后将游戏状态值设置为4,表示显示数字选择面板,即响应用户点击后弹出数字选择面板。然后游戏进入等待用户点击数字面板上数字按钮的状态。那么用户点击的数字是怎样填入数字面板的呢?我来告诉大家吧,关键点就在控件参数初始化数组中每一个数字按钮的事件回调函数,我们以数字按钮1为例,看看它的回调函数代码:
先清除鼠标点击事件,然后填入数字1,最后恢复游戏状态值为2,即回到正常游戏状态,我们来看看填入数字的函数FillNum()的代码:
首先获取数字面板上点击的位置(行、列号),然后将点击处的数字标注为用户选择填入的数字,最后判断填入的数字是否合理,即判断在3X3块内,同一行内、同一列内是否有重复的数字,有的话设置数字重复预警状态为显示状态。这里check3X3BlockNum()、checkRowNum()和checkColNum()为数字重复检测函数,下面我们分别来看看它们的代码,首先看看check3X3BlockNum()的代码,如下:
首先调用calc3X3BlockRowCol()计算数字填入位置的3X3块起始行、列号及结束行、列号,然后依次对3X3块内的每一数字检测是否有重复,这里有两种情况,一是当前数字是默认生成的固定数字,二是当前数字是用户输入的数字,如果是第二种情况,需要判断当前检测的位置是否与用户填入数字的位置一致,一致的话不算重复数字,至于为什么大家开动小脑筋想一下就明白了。下面我们看看那个calc3X3BlockRowCol()的代码,如下:
代码的作用很简单,一目了然,根据用户点击处的行、列号计算出点击位置所在3X3块的起始行、列号和结束行、列号。至于checkRowNum()和checkColNum()的代码并不复杂,与check3X3BlockNum()代码很相似,这里不展开讲了,可以查看本期视频。好了,到这里,数字已填入数字面板,并且进行了重复检测,如果数字有重复,将打开预警显示状态,数字面板会显示数字重复预警(即有重复数字的3X3块、行、列背景与相应大小的红色块进行alpha混合,并将混合的结果输出到相应的背景处),这个效果是如何实现的呢?让我们先来看看go3X3BlockWarning、goRowWarning和goColWarning这三个预警对象的实现代码,先介绍3X3块预警go3X3BlockWarning对象的实现代码
gxs3x3BlockWarning类继承自gxsShape,增加了一个表示是否显示的成员变量bShow,以及对此变更读写的两个成员函数getShow()和setShow(),除此之外,还有initParameter()和draw()两个成员函数,代码如下
这个函数将在形状初始化的时候被调用,返回当前形状的起始坐标及宽高。下面看看它的成员函数draw(),代码如下:
首先判断是否需要显示预警块,是的话计算块的起始位置及宽高,然后获取预警块所在区域的背景图像,依次将背景图像中的每一个像素与红色进行alpha混合,再将混合好的图像复制到预警块所在区域,这种效果就好像在数字面板相应区域放上了一块红色透明玻璃。为方便同时显示预警块,我将三种预警块的显示放在了一个叫做drawWarning()的函数内,代码如下:
那么请大家想一下,我们应该在什么地方调用此函数呢?想到没有?这个地方就是绘制游戏场景的函数内,即gxsGameObj的成员函数drawScene(),代码如下:
好了,到此用户已经可以填入数字了,并且一旦检测到数字重复会显示数字重复预警,我们规定,数字重复预警未清除的情况下,不允许用户点击数字面板空白处(即点击后不显示数字选择面板,除非用户点击的是导致预警的重复数字)。为此,我们还需要修改一下setClcikPosition()的代码,代码如下:
在判断出显示预警的情况下,在控件后打印一条提示消息,然后直接返回,否则保存当前点击的行、列位置。显然以控件台消息提示用户有数字重复预警未清除不够友好,下节课我们将以对话框的形式提示用户有数字重复预警未清除。最后,将今天的内容录了一个视频,文章未提到的地方可以参看视频。
H5数独游戏开发数字填入及预警
未完待续,敬请关注!后续更精彩,谢谢大家!
从工厂辞职后,工厂已经终止缴纳社保,如果工作未找到,那以后的最好方式有哪些?感谢邀请,更感谢楼主的提问。楼主你好,从工厂辞职以后。工厂就停止交纳社保,但是一直没有找到工作。那么以后最好的方式是什么?其实很简单,你没有实现再就业,但是我们的个人社保自己是可以
国产奶粉选择哪些品牌比较好?伊利金领冠珍护奶粉怎么样?国产奶粉哪个牌子好?这个问题我还是很有发言权的,我家大宝一直喝的都是国产奶粉,伊利金领冠的奶粉还是很不错的,伊利致力于中国宝宝营养研究19年了,也是大品牌,它家的奶粉我还是很放心。
女生长发什么发型比较好看?女生长发飘飘,摇曳多姿,最显女性柔美和风情这种女生,是男人的最爱,梦寐以求黑直长有时真的太单调了,小颜为大家整理了9款今年流行的明星同款的长发发型,希望跟着这些小姐姐们,也可以美美
女生穿什么样子的连衣裙比较好看?在夏日,连衣裙可以说是各个小仙女必备的单品,但是穿来穿去感觉它已经无法带给你新鲜感,那是因为你衣橱里的裙装不仅大同小异,就是穿搭都是固定的。无裙不欢的夏日,如果想要每天拥有新鲜感,
涂什么颜色的指甲油显手白?大家好!我是迷妹美容日常,希望我的回答对你有用哦!美貌是女人们一生追求的事业,任何有关于美的东西都会让女人们想要去尝试,就向今天的这个关于美甲的问题,哪种颜色的美甲显手白?大家都知
有什么好看的大牌豆沙色口红推荐一下?看图识色害羞害羞害羞黄皮最显白色号全啦害羞害羞帮大家整理了黄皮显白大牌口红色号,供参考送心送心我来说几个我觉得比较特别,入股不亏的大牌豆沙色口红。迪奥772我很早很早以前久推过这支
用手机拍的照片来几张?谁有好看的奉献一下?这一组照片是我昨天晚上用我的华为P30手机拍的!是在洛阳牡丹公园散步时拍的,自己觉得很好看!你们觉得呢?(原创欢迎关注)手机拍照,第一手要稳,第二角对角要准ok美丽的照出来了,我喜
越来越多的女人穿职业装,好看吗?你怎么看?女人穿职业装非常好看,它可以展现女人的端庄淑女,又不失性感妩媚,它既可以满足自身之美,又能满足工作需要,同时也吸引着异性爱慕的目光,穿职业装的女人是一道令人难忘的美丽风景,就像一道
毛呢大衣与牛仔裤,怎么搭配更好看?毛呢大衣,简直就是秋冬季节的福利。它防风保暖,又利落有型,穿起来不会显得臃肿,也是更加的时髦有范。在我们日常的穿搭中,毛呢大衣更是必不可少的单品。那么毛呢大衣需要怎么搭配才更好看呢
预算15万购买手表,有哪些款式值得推荐?预算15万可以考虑的品牌有不少,但是从品牌档次高低的角度看,笔者建议多考虑一些所谓的顶级奢华品牌,比如宝玑江诗丹顿宝珀伯爵百达翡丽积家朗格格拉苏蒂原创爱彼雅典雅克德罗等。其中,像是
有哪些好看的全屏壁纸美图?有哪些好看的全屏壁纸?谢谢信任。看了朋友们回答和提供的壁纸,非常之好。在基础上,为了使您有数不尽的好看的全屏壁纸,本人略微展开回答如下,供参考。一全屏壁纸一般而言,所说的全屏壁纸是