2 显示和遮挡图案
从图1中可以看出,游戏显示图案也就是“亮牌”的过程是从右向左进行的,而隐藏图案也就是“扣牌”的过程是从左向右进行的。“亮牌”和“扣牌”是通过自定义函数drawBoxCovers()实现的。该函数的代码如图7所示。
图7 drawBoxCovers()函数代码
在第62行定义的drawBoxCovers()中,参数board表示生成的70个图案;boxes参数表示“1.2 对随机排列的图案进行分组”中分组后每一组的图案;coverage表示覆盖到图案上的背景,如图8所示。
图8 放慢速度之后的“翻牌”和“扣牌”
从图8中可以看出,亮牌的过程是首先显示图案,之后将表示覆盖到图案上的背景的coverage由大到小变化,使得图案慢慢地显露出来,达到亮牌的效果;同理,coverage由小到大变化,使得图案慢慢地被覆盖住,达到扣牌的效果。图7第63行使用for循环将boxes中的8个图案分别取出来;第64行根据图案的列数box[0]和图案的行数box[1],通过leftTopCoordsOfBox()获取图案左上角的坐标left和top;第65行代码在该图案的位置处先绘制背景色,如图8所示;第66行代码根据自定义函数getShapeAndColor()获取该图案的形状和颜色;第67行代码通过drawIcon绘制该图案;68-70行代码判断coverage,如果coverage大于零,则绘制在已显示图案的基础上绘制宽度为coverage的覆盖物,如果coverage从大到小变化,则显示该图案,如果coverage从小到大变化,则盖住该图案,也就是说drawBoxCovers()函数根据coverage的不同变化,实现显示或者遮盖图案的效果;第71行代码显示效果;第72行代码设置游戏的帧率,如果不设置帧率,此时显示和盖住图案的过程非常快,通过将帧率也就是FPS的值设置为30,会降低显示和盖住图案的速度。FPSCLOCK在main()函数中定义,该变量为全局变量,如图9所示。
图9 FPSCLOCK定义的代码
FPS在函数外部定义,将该变量定义为30,表示游戏每秒使用30帧。
3 图案的渐变显示
通过自定义函数revealBoxesAnimation()实现图案的渐变显示,代码如图10所示。
图10 revealBoxesAnimation()函数的代码
其中,第59行中board表示70个图案的信息,boxesToReveal表示要显示的图案组,每组8个图案;第60-61行代码通过for循环使得coverage从BOXSIZE减小到(-REVEALSPEED)-1,最后调用“2 显示和遮挡图案”中提到的drawBoxCovers实现图案的渐变显示。其中,REVEALSPEED表示图案显示的速度,在函数外定义为8。
4 图案的渐变遮盖
通过自定义函数coverBoxesAnimation ()实现图案的渐变显示,代码如图11所示。
图11 revealBoxesAnimation()函数的代码
其中,第63行中board表示70个图案的信息,boxesToCover表示要遮盖的图案组,每组8个图案;第64-65行代码通过for循环使得coverage从0增加到BOXSIZE+REVEALSPEED,最后调用“2 显示和遮挡图案”中提到的drawBoxCovers实现图案的渐变遮盖。