1984 年,苏联工程师阿列克谢・帕基特诺夫在电脑上敲下一串代码,无意间创造出了风靡全球的游戏 —— 俄罗斯方块。这个由 “tetra”(希腊语,意为 “四”)与 “Tennis”(帕基特诺夫喜爱的网球)组合而成的名字,带着数学与运动的奇妙融合,开启了一场跨越时代的方块冒险。
作为童年的回忆,每个游戏少年都希望有一款自己的俄罗斯方块游戏,接下来我们就开始“tetra”的创作之旅。
成品展示
游戏速度会随着等级提升而加快,且在等级超过 5 级后会出现异形方块,增加游戏的难度和趣味性。
不同等级速度的设计要求
基础设定
-
基础下跌速度:代码中使用
BASE_FALL_SPEED
变量来表示方块的基础下跌速度,初始值设定为0.5
秒,即每0.5
秒方块下落一格。
BASE_FALL_SPEED = 0.5
- 速度递减规则:每升一级,方块的下跌速度会减少一定的值,减少的值由
SPEED_DECREMENT
变量控制,其值为0.05
秒。
SPEED_DECREMENT = 0.05
等级与速度的关系
- 等级
level
会根据玩家的得分进行更新,计算公式为level = 1 + score // 100
,即每获得 100 分,等级提升 1 级。 - 方块的实际下跌速度
fall_speed
根据等级进行动态调整,计算公式为fall_speed = BASE_FALL_SPEED - (level - 1) * SPEED_DECREMENT
。 - 为了防止方块下跌速度过快,代码中设置了速度下限,当
fall_speed
小于0.1
秒时,会将其重置为0.1
秒。
异形方块出现条件
- 异形方块定义:代码中定义了
EXTRA_SHAPES
列表,其中包含了 3 种 3x3 的随机异形方块。
EXTRA_SHAPES = [
[[1, 1, 1], [1, 0, 1], [1, 1, 1]],
[[0, 1, 0], [1, 1, 1], [0, 1, 0]],
[[1, 0, 1], [0, 1, 0], [1, 0, 1]]
]
- 出现条件:异形方块会在玩家达到一定等级后出现,具体条件是当玩家的等级
level
大于 5 时,新生成的方块会从SHAPES
列表和EXTRA_SHAPES
列表的组合中随机选取;当等级小于等于 5 时,只从SHAPES
列表中随机选取。该逻辑在new_piece
函数中实现:
def new_piece(level):
if level > 5:
all_shapes = SHAPES + EXTRA_SHAPES
else:
all_shapes = SHAPES
shape = random.choice(all_shapes)