pygame学习(一)

起因

我的wp手机依然坚守在二线,虽然一般不玩游戏,但是实在是闲的时候也会尝试一些小游戏,而又有时候没有控制住的话,可能会非常沉迷。上一个沉迷的小游戏是2048,这次是消消乐。

规则说明:

  1. 10 * 10 的方块空间,随机出现5种颜色,如果2个相同的方块相邻(上下左右四个方向),会将相连的相同颜色的块消除掉。
  2. 消除后,位于方块上方的方块会进行下落,如果某一列所有方块都被消除了,则位于该列右侧的所有方块会进行左移
  3. 计分规则为,每次消除方块的个数n,则该步得分为 n n 5
  4. 当所有方块都被消除或者,没有可以消除的方块的时候,游戏结束
  5. 未实现:原版中的如果将方块消除的剩余数目低于10个,则会有一定的积分奖励,最高为所有方块都被消除,会奖励2000分;关卡与道具是非必须的。

    实现代码

    这个项目放到了练习项目地址

    遇到的问题

  6. pygame.event的监听模型,目前常用的 get poll wait,wait是阻塞的,其他两个是非阻塞的。另外如果不想默认监听所有event的话可以使用pygame.event.set_allowed方法来设置需要监听的方法,因为event列表长度是有限的。
  7. pygame.time.Clock,生成对象后可以使用tick(30),来控制帧率,30表示每秒30帧
  8. 精灵(pygame.sprite.Sprite)与精灵组(pygame.sprite.Group)的使用,Group.update 会自动调用组内精灵的update方法,clear方法,用于清除指定Surface上一帧所画的精灵,默认输入2个参数,第一个是之前精灵在哪个Surface上画画的,第二个是背景Surface,举个例子:A是红色的Surface背景,B是蓝色的精灵,B在group里,调用group的clear时,会将之前B占A的地方涂抹成C相对应的颜色。有点类似蒙版的效果
  9. 判断相同色块使用基本的广度优先搜索

不足的地方

  1. 算法效率有待提升,虽然对于这个小游戏以及得益于当前强大的计算机性能,这个小游戏运行起来基本不占用什么资源,但是代码一些部分写的还是有些粗放
  2. 没有中间动画,这个虽然不影响游戏结果,但是一个游戏怎么可以没有动画