Pygame实现记忆拼图游戏6

《Pygame实现记忆拼图游戏5》中实现了绘制图案背面的功能,接下来实现绘制图案正面的功能,即绘制35个图案。

1 获取图案信息

《Pygame实现记忆拼图游戏1》中提到,要绘制的35个图案是由不同颜色和形状组成的,因此,在绘制图案之前,要获取图案的颜色和形状。通过自定义函数getShapeAndColor()来实现该功能,代码如图1所示。

图1 getShapeAndColor()函数的代码

其中,getShapeAndColor()函数的第一个参数board表示《Pygame实现记忆拼图游戏3》中提到的getRandomizedBoard(),随机生成的70个图案,board中包含10个元素,每个元素又包含7个子元素,每个子元素包含了元素的颜色和形状信息;getShapeAndColor()函数的第二个和第三个参数分别表示图案的列数和行数;第73行代码根据图案的行数和列数得到该图案的颜色和形状,其中第一个元素表示形状,第二个元素表示颜色。通过调试代码,调用getShapeAndColor()函数得到第2行1列图案的形状和颜色,如图2所示。

图2 调试代码得到的结果

2 根据行列数、形状和颜色绘制图案

在根据行列数获取到图案的形状和颜色后,就可以根据行列数、形状和颜色绘制图案了。

2.1 根据行列数获取图案位置

《Pygame实现记忆拼图游戏1》,游戏中用到形状有5种,颜色有7种,因此通过自定义函数drawIcon()分别绘制5种形状的图案,代码如图3所示。

图3 drawIcon()函数的代码

其中,drawIcon()的shape和color参数表示图案的形状和颜色,boxx和boxy表示图案所处的列数和行数;第75-76行代码定义了表示图案边长一半和四分之一长度的变量half和quarter;第78行代码调用《Pygame实现记忆拼图游戏4》中提到的leftTopCoordsOfBox()函数根据列数和行数得到图案左上角的坐标left和top,即图案的位置。

2.2 绘制圆环

如果图案的形状是圆环,则使用图4所示的代码进行绘制。

图4 绘制圆环的代码

圆环的图案如图5所示。

图5 圆环的图案

第79行代码判断图案的形状是否是圆环,从图5中可以看出,绘制圆环的过程就是绘制两个同心圆,半径比较大的同心圆绘制成红色(指定颜色),半径比较小的圆绘制为背景色,就可以达到圆环的效果。因此,第80-81行代码的作用就是通过pygame.draw.circle()函数绘制半径比较大的圆,该函数的DISPLAYSURF表示游戏代码中创建的游戏窗口;color表示圆的颜色;left+harf和top+half表示圆心的坐标,正好位于图案的中心位置;half-5表示圆的半径;第82-83行代码绘制半径比较小的圆,BGCOLOR表示背景色。

2.3 绘制正方形

如果图案的形状是正方形,则使用图6所示的代码进行绘制。

图6 绘制正方形的代码

正方形的图案如图7所示。

图7 正方形图案

从图7中可以看出,正方形的左上角坐标距离图案左上角坐标left和top大概quarter个单位,正方形的编程是图案边长的一半,因此,在图6中第86行将正方形左上角的坐标设置为left+quarter和top+quarter,将正方形的边长设置为BOXSIZE-half。

2.4 绘制菱形

如果图案的形状是菱形,则使用图8所示的代码进行绘制。

图8 绘制菱形的代码

菱形的图案如图9所示。

图9 菱形图案

图8中第87行代码判断图案形状是否是菱形,如果是,则第88行代码调用pygame.draw.polygon()函数绘制菱形,第89行表示菱形上方顶点的坐标;第90行表示菱形右端顶点的坐标;第91行表示菱形下方顶点的坐标;第92行表示菱形左侧顶点的坐标。可以通过图9来确定这四个顶点的坐标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值