Pytris (Python, Anton Slavin, 2019)

来自俄罗斯方块中文维基

{{#html:MathJax}}

Pytris
开发 Anton Slavin、Elen Liivapuu
游戏平台 Python(Pygame、tkinter)
发行时间 2019年10月22日
游戏信息
预览块数 1
场地大小 10 × 20 -1(默认)
8–28 × 10–36(选范围)[注 1]
暂存块
硬降
旋转系统 专用
Pytris (Python, Anton Slavin, 2019) title.png
Pytris (Python, Anton Slavin, 2019) ingame.png

Pytris 是一款 Python 四连方块游戏。
该游戏的起始界面有选择场地大小和自定方块形状的功能。

玩法

消行、变速。
所谓的变速,就是通过“难度”和“变速”参数来改变游戏中的每秒帧数: $$dcounter += (FPS * dt) / ((difficulty*10) / spdmodifier)$$ 难度(difficulty)开局 75,每消一行减 1,每按一次 N 减 2,最低为 2;
变速(spd_modifier)下键 20,空格键 50。
死亡判定:顶出死亡——第 20 行及以上出现任意砖格。[注 2]

操作

左右键横移,X 或上键旋转,下键软降,空格键高速强制软降[注 3]
P 或 Esc 键暂停,R 新游戏,M 静音,N 直接跳转至下一块[注 4],Q 退出游戏。
只有横移和软降可以仅对当前方块长按[注 5],其他操作都只能单点。
该游戏使用实心天花板,方块需要适当降落才能开始旋转。

方块环境配置

七种方块默认使用 SRS 配色。

Tet.pngTet.pngTet.pngX234Tet.pngTet.pngTet.png
Tet.pngTet.pngTet.png2234Tet.pngTet.pngTet.png
Tet.pngTet.pngTet.png3334Tet.pngTet.pngTet.png
Tet.pngTet.pngTet.png4444Tet.pngTet.pngTet.png

碰撞箱的标准入场位置如上图所示。
其中,X 格坐标为 (4,21)。
默认的十宽场有入场偏移的设定,各方块都可能在上图基础上向右偏一行入场。
该游戏的碰撞箱处理逻辑是只要箱内最左侧一列或最上方一行是全空的,就把方块整体相应地靠过去
该游戏的旋转是先把方块的整个碰撞箱的内容顺时针旋转 90 度再按碰撞箱处理逻辑调整。
该游戏没有安排处理冲突的代码,方块的最终旋转结果会强取与方块堆重叠的格位,暴力旋转。
以下图组中,每一组的最左图是入场朝向,右图是依次顺时针旋转的朝向:

OO
OO
IIII
Tet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.png
ITet.pngTet.pngTet.png
ITet.pngTet.pngTet.png
ITet.pngTet.pngTet.png
ITet.pngTet.pngTet.png
JTet.pngTet.png
JJJ
Tet.pngTet.pngTet.png
JJTet.png
JTet.pngTet.png
JTet.pngTet.png
JJJ
Tet.pngTet.pngJ
Tet.pngTet.pngTet.png
Tet.pngJTet.png
Tet.pngJTet.png
JJTet.png
LLL
LTet.pngTet.png
Tet.pngTet.pngTet.png
LLTet.png
Tet.pngLTet.png
Tet.pngLTet.png
Tet.pngTet.pngL
LLL
Tet.pngTet.pngTet.png
LTet.pngTet.png
LTet.pngTet.png
LLTet.png
Tet.pngTTet.png
TTT
Tet.pngTet.pngTet.png
TTet.pngTet.png
TTTet.png
TTet.pngTet.png
TTT
Tet.pngTTet.png
Tet.pngTet.pngTet.png
Tet.pngTTet.png
TTTet.png
Tet.pngTTet.png
Tet.pngSS
SSTet.png
Tet.pngTet.pngTet.png
STet.pngTet.png
SSTet.png
Tet.pngSTet.png
ZZTet.png
Tet.pngZZ
Tet.pngTet.pngTet.png
Tet.pngZTet.png
ZZTet.png
ZTet.pngTet.png

Pytris (Python, Anton Slavin, 2019) 有向左一格的踢墙。
这个踢墙的运行逻辑是两步判断:
一、如果目标旋转位置会出界(墙与地板),就取旋转后的形状左偏一列。
二、如果前一条的结果仍然出界,就取旋转前的形状左偏一列。
绝大多数情况下,第二判都能取位成功,但有一个例外:
I 横贴左墙接近场底时旋转,两次踢墙判断都会失败,此时,I 会向左穿越到最右侧,一转穿一格。[注 6]

自定义说明

在 config.ini 文件中设置。
场地的宽度和高度可在起始界面拉条设置,调好之后要点下方的按钮确认。
方块形状的数字序列按行标注,1 表示有方格,0 表示无方格,每行取三或四位数为宜。
方块颜色的数字序列分别是红绿蓝值,不写颜色的新定方块会被游戏随机取值。

注释

  1. 具体数值可在 pytris.py 第 92 和 97 行修改。
  2. 第 20 行还没到天花板,但它已经是死线了。
  3. 说明中是 Hard drop,但实际效果并不是硬降(其实质是临时大幅增加游戏的每秒帧数)
  4. 难度升得更快,滥用可能使程序闪退
  5. 如果先长按一种,再追加长按另一种,后者无效;
    如果是同时开始长按的,二者可以成功叠加。
  6. 有时会导致游戏程序结束

外链