我一直认为,编写游戏,是python初学者寻求进阶的一个有效途径。俄罗斯方块是一款很老的游戏,但对于python初学者而言还是有相当的难度。
目前看到网上的大部分实现都是面向过程的,虽然能够实现功能,但是整个程序的可扩展性和可维护性都很差,而且写这样的程序,对我们这些初级程序员的提高是有限的。
我们期望能够构建出结构清晰,扩展性强的,容易维护的代码,而不是所有逻辑和细节都糅合在一起的超级大杂烩。
最终效果
俄罗斯方块
初步设计
游戏面板(Board):15 * 25 的方格,操作在游戏面板中进行;
形状(Shape):一共有7种形状:L、J、T、Z、S、I、O
形态(Style):每种形状都可以进行旋转,旋转后呈现不同的形态(或者方向),例如L形状,就有4种形态。
方格(Cell):游戏面板和形状都是由方格组成的,是最小单位。在初步设想中,方格有两个状态:填充和空白,看上去我们可以用简单的0和1来表示方格,即1表示填充,0表示空白;不过稍微思考下,方格的状态其实有3种:1.活动方格;2.非活动方格(着陆方格);3.空白方格。
因此我们这样来表示3种状态(这里用了二进制来表示显得规整一点,其实就是0,1,2三个值):
# CELL STATE
BLANK = 0b00
ACTIVE = 0b01
LANDED = 0b10
每一个Style形态用方格的BLANK和ACTIVE状态表示组成,因此简单的二维数组就能表示。比如L形状的四种形态,可以表示成:
s1 = [[1, 1, 1],
[1, 0, 0]]
s2 = [[1, 1],
[0, 1],
[0, 1]]
s3 = [[0, 0, 1]