Tetris2

来自Botzone Wiki
Administrator讨论 | 贡献2017年10月10日 (二) 16:23的版本 (创建页面,内容为“俄罗斯方块·改(Tetris2)是Botzone平台上的双人回合制游戏。与Tetris相比,多出了关于旋转的额外规则,详情可以参看#...”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

俄罗斯方块·改(Tetris2)是Botzone平台上的双人回合制游戏。与Tetris相比,多出了关于旋转的额外规则,详情可以参看#方块

作者

裁判程序 zys 播放器 zhouhy

故事

(尚未完成,稍安勿躁)

书接上文,自那琼柰派入门考校之后,四位敝衣少年经历种种玄学坎坷,终于拜得上仙为师,却哪知,道门也不是一个远离纷争的所在。他们上了山入了门,没想到师门给他们的第一件任务,竟是远渡重洋查探魔门。

「本派密探报,有海外倭岛名唤『贾巴沃克』者,以望气之法查探,魔气四溢,其中必有蹊跷。尔等初入本派,须有作为,这便是你们立功的大好时机!」

「可是,我们…还什么都…」

「噫,莫急,为师自有秘宝可保你们平安~」

说着,少年们的面前,四只小方块闪着奇异的光芒,带着流光飘进了他们的衣带。

「记得,若有危难,切莫逞能,四宝合一,方有生机!」

……

风和日丽的贾巴沃克岛上,似乎有着一股奇怪的气场,让人感到说不出的烦闷。

「唔噗噗噗……成天与代码之类的死物打交道也真是无聊,不过看来,有人正带着有趣的风物来玩了呢」

(未完待续)

人类玩家操作说明

两种操作方式任选其一即可。

  • 鼠标
    • 点击对方场地上的图标可以给对手指定方块
    • 拖动块可以移动位置,也可以穿墙(仅限可以直接从顶部落到的地方)
    • 左键点击块可以使之坠落到底
    • 右键点击屏幕可以提交操作(此时方块必须落地)
  • 键盘
    • 数字1~7可以给对手指定方块
    • 上下左右键可以移动位置
    • 英文/键可以将方块坠落到底
    • 回车键可以提交操作(此时方块必须落地)
    • 英文.键可以枚举方块的下一个可能的初始状态(用于在场地顶部转不过来之类的情况)

游戏规则

本游戏为双人回合制游戏,每个玩家在独立的矩阵场地上进行游戏。

每回合,双方玩家同时决策,既需要控制自己的方块落地,又需要为对手指定下一回合的方块。

玩家消去行后,方块会转移到对方场地底部,从而给对方增加难度。

地图

每个玩家的场地是高20格、宽10格的矩阵。在程序中,坐标是(x, y)的形式,其中x是横坐标,y是纵坐标。最左下方的格子的坐标是(1, 1)。

方块

游戏中,方块共有七种类型,每种类型的方块有四种姿态(即方向)。

Tetris.Blocks.png

上图的方块在程序中,从左到右的类型编号分别是数字0~6,上左下右四种方向分别对应着数字0~3。

旋转中心用o进行了标记,方块的坐标即其旋转中心的坐标。

方块只能逆时针旋转(即上左下右的顺序进行旋转),旋转时旋转中心不动。

新规则:旋转时,每次旋转时需要保证中间经过的姿态和最终的姿态都是合法的,同时还需要保证中途经过的一些格点为空:

Tetris2.Blocks.BlankRequirement.png

上图中,红色、深灰色、浅灰色格子均需要为空,方可进行旋转。

给对手指定方块

第一回合,双方的方块类型由玄学系统指定,而且是相同的类型。

除了第一回合之外,每个回合的方块类型都是由对方指定的。因此,每回合玩家都要给出对方下一个方块的类型。

指定方块时,必须保证对方的各类方块的数目的极差(即最大值减最小值)不超过2,否则将会被视为非法行为。

描述自己的方块落地点

每回合,玩家可以得知自己本回合控制的方块类型。

(20日前发布的规则中的落地序列依然有效,你可以选择不修改以前的程序而正常进行游戏,我们会取最后一个元组作为实际输入,但是我们提供了更简单的交互方式)

Tetris routeExplained.png

【常见问题】

我需要给出什么?

  • 你需要给出最终状态坐标,系统帮你算路径和路径起点,存在合法路径就算合法输入

最终状态有什么要求?

  • 从起点通过若干水平平移、竖直下降、旋转可达

起点有什么要求?

  • 可以从顶端“畅通无阻”落入
  • 起点也是系统帮你找的

这是不是意味着我的方块只能垂直落到场地里?

  • 不,这只意味着你的方块的运动路径需要从能垂直落到的地方开始,之后可以有平移旋转

……所以,什么样的最终状态才算合法?

  • 简单来说,就是“能从顶端出发、经过若干非升操作可达的状态”


【具体解释】

你只需要给出你的块的最终状态的横坐标x、纵坐标y、姿态o,系统会自动寻找一个能够从场地顶端到目标位置的、纵坐标单调不增的路径,其中动作包括逆时针旋转、水平移动和垂直向下移动

  • 系统寻找的路径的起点会保证整个块都在场地内,且可以从y=20的地方“畅通无阻”地落到起点。(所谓「从y=20的地方畅通无阻地落到起点」等价于对起点应用样例的checkDirectDropTo函数)
  • 路径起点的所有可能姿态都会被枚举,存在一种得到合法路径的可能性即可。
  • 如果找不到满足条件的路径,则属于非法输入,并会被判负。

方块的消除与转移

每回合方块落地后,如果有行已满,那么这些行将会被“消除”,其它的行下落补上空行。

被消除的行并不会消失,而是会去除最后一个落地的方块(即本回合刚刚造成这几行消除的方块),然后按照同样的顺序堆叠起来,放置在对方的场地底部。对方场地原有的方块就会被“顶起来”。

积分

玩家具有积分,但是仅用于平局时的处理。

对于每一回合,玩家一次性消去1、2、3、4行的积分分别是1、3、5、7。

总积分是上述积分的和。

胜负

一切非法行为会被立即判负,包括程序崩溃、超时、坐标越界、格式错误、找不到到落点的路径等。双方同时判负会被认定为平局。

在互相给出方块后,如果场地中无法容纳该方块,则会被判负。

在发生方块转移后,如果场地的最高方块高度超过边界(即大于20),则会被判负。

如果双方同时超过边界,或者同时放不下方块,那么积分高者胜。

如果双方积分相同,那么游戏平局。

游戏交互方式

Botzone上其他游戏一样,本游戏每步(每次程序运行)限时1秒。

如果希望在回合间传递数据,请参阅Bot#交互

本游戏仅提供简单交互的样例程序和介绍。

提示

如果你不能理解以下交互方式,可以直接看#样例程序,按照说明填写代码,并修改其中

// 做出决策(你只需修改以下部分)

// 决策结束,输出结果(你只需修改以上部分)

之间的部分即可!

本游戏与Botzone上其他游戏一样,使用相同的交互方式:Bot#交互

调试时可以通过拖动进度条来快速调试。

简单交互

request
第一回合的request是一行两个数字t和c,空格分隔,t表示自己拿到的方块类型,n表示自己的颜色(0红1蓝)
以后的request是一行四个数字t、x、y、o,空格分隔,t表示自己拿到的方块类型,x和y表示对方方块落在的位置坐标,o表示对方方块的姿态
response
每个回合的response都是一行四个数字t、x、y、o,空格分隔,t表示给对方下回合的方块类型,x和y表示自己方块最终点的位置坐标,o表示最终点方块的姿态

定义了request和response后,玩家的输入总体格式可以参看Bot#简化交互

对于样例对局,第四回合色玩家的样例输入和样例输出如下:

输入

4
1 0
3 2 1 2
1 2 1 2
5 5 1 2
2 1 4 1
2 8 1 2
2 4 2 1


输出

2 3 2 2

样例程序

请注意展开按钮在右侧!-----=====≡≡≡≡≡>

简单交互样例程序