用Python和Pygame做小游戏2, 1024方块

我们之前用[PyQt5实现过1024方块游戏],现在换成pygame看看能不能简化代码。

游戏本身逻辑代码因为是numpy写的,基本上不用动。只是图形界面和键盘绑定事件要做替换。我在替换底层框架的操作上一般是先把所有相关的引用都去掉,这样python或者java就会出错,只需要无脑替换代码就好了。

在这里,把Qt相关的import全部去掉, main方法也要替换成pygame的初始代码
用Python和Pygame做小游戏2, 1024方块

原来的MyApp 就不再需要继承QWidget子类了,但里面的初始化方块列表需要保留。 还是需要建立一个4x4的矩阵,然后显示到主界面上。同时还要在内存中建立一个对应numpy数组,做数据合并和旋转计算。
用Python和Pygame做小游戏2, 1024方块

Square方法也基本不用动
用Python和Pygame做小游戏2, 1024方块
pygame有两个重要的类,一个是surface,用来处理图形操作。一个是rect,代表坐标和长宽,给出初始值后就可以通过left, right拿到计算后的坐标值,而不需要我们自己写代码计算,非常方便。

只需要把Qt的fillRect方法换成pygame.draw.rect , DISPLAYSURF是main方法里建立的一个surface对象,相当于原来的qlabel。所有的图像操作都由它来处理。

同时字体也用pygame.font替换掉了,font可以用get_rect()拿到rect , 用blit方法就可以象图片的操作画到DISPLAYSURF上面了。详情可以参阅用Python和Pygame做小游戏1
最后是键盘事件,跟Qt没有很大区别,只不过键位需要替换成pygame的常量
用Python和Pygame做小游戏2, 1024方块

总结
pygame 比PyQt更简洁,不需要layout这样的代码,我们只需要担心坐标和更新界面就好了。下一次,我们就需要实现动画效果了,敬请期待。