BCTetris (Python, 2010)

来自俄罗斯方块中文维基
Falsetetris2.png 本条目介绍的内容不是官方的俄罗斯方块游戏。
这个游戏模拟了俄罗斯方块的玩法,在名称中使用了「Tetris」或「俄罗斯方块」,但没有经过俄罗斯方块公司官方授权。
2010 年,josmiley 完成过四个 Python 方块游戏的制作,BCTetris 是知名度最高的一个。
另外三作使用的名称分别是 tetrix、tetriz 和 tetrisdz。
这四个游戏的代码量都不大,有较为密切的制作关联,本条目将其合并介绍。
BCTetris
开发 josmiley
游戏平台 Python(Pygame)
发行时间 2010年5月3日
游戏信息
预览块数 0
场地大小 10 × 20
暂存块
硬降
旋转系统 专用
[[文件:|125px]]
BCTetris (Python, 2010) ingame.png

BCTetris 是一个 Python 四连方块游戏。
该游戏是一个“啃字节”(Byte-crunching)方块游戏,主文件容量不足 1KB。
第一版 BCTetris 容量为 757 字节,第五版 717 字节。

玩法

消行。
死亡判定:锁定死亡
这个游戏开局必是 Z,之后的块序由历史摆块位置算出。
受这一计算的影响,这个游戏很容易崩溃不动。

操作

左右键横移,上键顺时针旋转,下键软降一格。
这四个操作都只能单点,键盘上存有许多同功能的键(此处不赘述)。

方块环境配置

黑场白块。

Tet.pngTet.pngTet.png4444Tet.pngTet.pngTet.png
Tet.pngTet.pngTet.png4333Tet.pngTet.pngTet.png
Tet.pngTet.pngTet.png4322Tet.pngTet.pngTet.png
Tet.pngTet.pngTet.png43X2Tet.pngTet.pngTet.png

范围框的入场位置如上图所示。
其中,X 格坐标为 (6,21)。
以下图组中,每一组的最左图取贴底的朝向,右图是依次顺时针旋转的朝向:
(此处用灰色表示方格,以便于辨认)

GG
GG
Tet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.png
GGGG
Tet.pngTet.pngGTet.png
Tet.pngTet.pngGTet.png
Tet.pngTet.pngGTet.png
Tet.pngTet.pngGTet.png
Tet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.png
GGGG
Tet.pngGTet.pngTet.png
Tet.pngGTet.pngTet.png
Tet.pngGTet.pngTet.png
Tet.pngGTet.pngTet.png
Tet.pngTet.pngTet.png
GTet.pngTet.png
GGG
Tet.pngGG
Tet.pngGTet.png
Tet.pngGTet.png
Tet.pngTet.pngTet.png
GGG
Tet.pngTet.pngG
Tet.pngTet.pngG
Tet.pngTet.pngG
Tet.pngGG
Tet.pngTet.pngTet.png
Tet.pngTet.pngG
GGG
Tet.pngGTet.png
Tet.pngGTet.png
Tet.pngGG
Tet.pngTet.pngTet.png
GGG
GTet.pngTet.png
Tet.pngGG
Tet.pngTet.pngG
Tet.pngTet.pngG
Tet.pngTet.pngTet.png
Tet.pngGTet.png
GGG
Tet.pngGTet.png
Tet.pngGG
Tet.pngGTet.png
Tet.pngTet.pngTet.png
GGG
Tet.pngGTet.png
Tet.pngTet.pngG
Tet.pngGG
Tet.pngTet.pngG
Tet.pngTet.pngTet.png
Tet.pngGG
GGTet.png
Tet.pngGTet.png
Tet.pngGG
Tet.pngTet.pngG
Tet.pngTet.pngTet.png
GGTet.png
Tet.pngGG
Tet.pngTet.pngG
Tet.pngGG
Tet.pngGTet.png

BCTetris (Python, 2010) 没有踢墙。

代码展示

代码作者:josmiley
编程语言:Python
需要模块:早期(如 1.9.2 cp27)版本 pygame

from pygame import*;D,b,u=display,list(bin(256)),'1';X=D.set_mode((160,320)).fill;E,l,F,S,p=enumerate,b*25+list(bin(2047)),[list(bin(int(x,36)).zfill(57))for x in'9hf 2i136 9hf 2i136 4qr 4qr 4qr 4qr 1l3 4zvur b2c 7hqm9 35z 4zxfm b2a 2i135 f 7w9g3r6 f fsiw7ic 4qu 4zxfl 4qu 4zxfl 2hxxf 6br 7hs76 b29'.split()],252,3
while p>2:
	p,d,f,S=-3,0,p%28,S-2;time.set_timer(2,S)
	while d-11:
		for e in event.get(2):
			e=e.key;d,r=(11,-1,0,11,1)[(e&3)+(e>0)],f/4*4+(f+(e==273))%4;z=zip(l[p+d:],F[r]+[0]*230)
			if not(u,u)in z:p+=d;f,d=r,0;[X(-(u in j),((p+i-58)%11*16,(p+i-58)/11*16,16,16))for i,j in E(z)];D.flip()
	for i,j in E(F[f]):
		if j==u:l[p+i]=u
	for i in range(3,278,11):
		if l[i:i+10]==10*[u]:l=b+l[:i]+l[i+11:]

另外三作

Josmiley tetrix.png Josmiley tetriz.png Josmiley tetridz.png
  • 图一:Tetrix(2010 年 4 月 15 日)。
    每放 10 个方块升级一次速度,消行按平方给分(1、4、9、16)。
    按键的敏感度偏高,单点旋转容易过头,需要小心。
    这个版本是最早的,却也是唯一不直接按老版 pygame 的事件(event)语句来使用 key 的。
    (用新版 Pygame 模块也能顺利运行)
  • 图二:Tetriz(2010 年 4 月 20 日,v3.1)。
    也是啃字节方块,在 pygame 网站上的题目意为“16 行代码的方块”,主文件容量 2165 字节。
    这个版本容量比 BCTetris 大很多,但不会有游戏崩溃问题。
    每放 1 个方块加 1 点速度,得分等于总消行数,消 n 行减 n 点速度。
    常规操作风格保持不变,但是软降的 ARR 极短,需要小心。
  • 图三:Tetrisdz(2010 年 11 月 13 日)。
    每消 10 行升级一次速度,消行按平方和给分(1、5、14、30)。
    这个版本将游戏重点从啃字节转回了方块游戏本身,升级和难度的变化更贴近传统方块,按键敏感度降回正常水平。
    这个版本没有专门在 pygame 网站上发出。

外链