T583533 括号大战
题目背景
我很久以前想的游戏。
电脑版代码由我(洛谷 576074)和流水行船CCD(洛谷 377153)一起编写。
**电脑版游戏目前仅支持 windows!**
题目描述
### 基础定义与规则
这个游戏是一个双人游戏,在一个 $10 \times 10$ 的网格上进行。
每个格子是空地、括号、图形、镜子、墙中的一种。
定义【信号覆盖区域】为玩家每回合可以放置括号的区域。【信号覆盖区域】上有覆盖的【信号】。敌方任意东西会挡住己方【信号】的传播。敌方和己方的【信号】能同时存在于同一个格子上。
玩家轮流在自己的【信号覆盖区域】中的任意空地放置恰好一个任意方向的任意一种括号或任意一种图形。
最开始先手的【信号覆盖区域】为左上角 $3 \times 3$ 的网格,后手的【信号覆盖区域】为右下角 $3 \times 3$ 的网格。
定义【血量】和【攻击量】为一些特殊的值。
定义一个格子的【攻击总量】,为那个格子的【攻击量】+【后面】一个格子友方(**不包含自己**)向【前面】发出的【攻击总量】,攻击方向为【前面】。
【攻击总量】之间会在括号或图形处抵消。
每回合玩家可以删除任意多个己方在 $3 \times 3$ 范围内的括号,**立即生效**,删完后可以再放东西,但放了东西后不能删除。
### 括号
括号有方向,为上下左右中的一种。
定义一个括号的【前面】为那个括号的方向,【后面】为括号方向的反向,【侧面】为刨除前面和后面之外的两个方向。
每个括号会发射向它【前面】的【攻击量】。
**注意友方的【攻击总量】打到友方括号【侧面】或【前面】后直接清零。(被挡到了),但是【信号覆盖区域】会直接穿透。**
定义一个括号被【摧毁】当且仅当满足以下几个条件之一:
1. 侧面或后面被敌方大于 $0$ 的【攻击总量】攻击。
1. 正面被**大于**自身【血量】的敌方【攻击总量】攻击。
1. 不在【信号覆盖区域】内。
一个括号被【摧毁】后,会立刻消失。但它有可能会带动其他东西在这一局内一起消失,**同时被【摧毁】的同时消失。**
下面是不同的括号和它的特殊之处:
| 括号类型 | 【血量】 | 【攻击量】 | 特点 |
| :----------: | :----------: | :----------: | :----------: |
| `>` 尖括号 | 0.5 | 1 | - |
| `)` 小括号 | - | 0 | 正面无敌,但只能阻挡对方【信号覆盖区域】,对方【攻击总量】会直接穿透。 |
| `E` E | 0 | 0 | 其实应该是三根线的括号,但没有图标表示。 |
| `}` 大括号 | 0 | 1.5 | - |
| `]` 中括号 | 4 | 0 | - |
### 图形
和括号类似,不同点 **加粗** 显示。
**图形不分方向,可以视为所有方向都为【正面】**。
**自己往任何方向发射的【信号覆盖区域】和【攻击总量】都会直接穿透。**
定义一个图形被【摧毁】当且仅当满足以下几个条件之一:
1. **单面**被大于自身【血量】的敌方【攻击总量】攻击。
1. 不在【信号覆盖区域】内。
一个图形被【摧毁】后,会立刻消失。但它有可能会带动其他东西在这一局内一起消失,同时被【摧毁】的同时消失。
下面是不同的图形和它的特殊之处:
| 图形类型 | 【血量】 | 【攻击量】 | 特点 |
| :----------: | :----------: | :----------: | :----------: |
| `o` 圆形 | 2 | 0 | - |
| `*` 星号 | 1.5 | 0 | - |
| `x` 叉形 | 1.75(3.5) | 0 | 【攻击总量】只有一半会打到它,剩下的【攻击总量】直接穿透(相当于要大于 3.5 的【攻击总量】才能摧毁它)
### 能覆盖【信号】的东西列表
这里列出能覆盖【信号】的东西及覆盖方式。
| 类型 | 区域 |
| :----------: | :----------: |
| `>` | 它往【前面】的直线。 |
| `*` | 覆盖上下左右移动 3 步之内能到达的区域,不能经过敌方括号和图形、玻璃板、镜子。 |
| `E` | 它往【前面】的直线和它【侧面】一格(两个位置)往【前面】的直线。如果挡住【侧面】某一格,则对应的【信号】消失。 |
### 镜子
镜子是开局在格子上随机生成的。
镜子也有方向,为 `/\` 中的一种,分别表示形如 $\cancel{\phantom{\rule{5px}{10px}}}$ 的镜子和形如 $\bcancel{\phantom{\rule{5px}{10px}}}$ 的镜子。
镜子会反射括号的【攻击总量】**和对直线型新增的【信号覆盖区域】的判定**。
简单地说,它会改变括号的【前面】【后面】【侧面】,使得这些方向的格子不是一条直线,**甚至会相交**。
对于 $\cancel{\phantom{\rule{5px}{10px}}}$ 型的反射方向:上 $\leftrightarrow$ 左,下 $\leftrightarrow$ 右。
对于 $\bcancel{\phantom{\rule{5px}{10px}}}$ 型的反射方向:上 $\leftrightarrow$ 右,下 $\leftrightarrow$ 左。
显然,一个方向可能会经过多次反射。**注意一个括号一局就只能发出【攻击量】的攻击,如果攻击绕了一圈又回来了不能再累加到【攻击总量】里面去。**
### 玻璃板
都是场上初始随机生成,无法摧毁。
#### 横向玻璃板
会挡下经过它的所有纵向的【攻击总量】和【信号覆盖范围】。
#### 纵向玻璃板
会挡下经过它的所有横向的【攻击总量】和【信号覆盖范围】。
#### 十字玻璃板
会挡下经过它的所有【攻击总量】和【信号覆盖范围】。
### 墙\[scrapped\]
场上初始随机生成,会挡下经过它的所有【攻击总量】和【信号覆盖范围】。
其实就是十字玻璃板。
### 获胜条件
一方投降(某一方玩不了了(才放东西就没掉并且无法影响对方)不投降那还干什么)。
### 附加游戏
#### 星号大战
只放 `*` 星号,玩到不能再玩时看谁占的格子最多。(公共格子各统计一次,三人的时候有用)
由于放一排可以形成城墙不好破解,因此决定不能有星号相连(上下左右相连),但允许斜向形成墙。初始 $3 \times 3$ 范围内不做此限制。游戏里并没有加这一规矩,毕竟能联通也能玩,只不过没有不能相连那么考验布局。
输入格式
### 存档界面操作方法
左键进入,右键删除。
进入一个空存档将会打开初始化界面。
### 设置界面操作方法
点击更改鼠标所在列的设置,点 `启动!` 开始游戏。
### 游戏内操作方法
拖动放置。
输出格式
游戏自动存档,存档已加密。
说明/提示
# 历史版本和更新日志可在[此处](https://github.com/asdf123asdf123asdf123/Bracket-War)查看
最后一条更新日志:
> V2.1.1.0 增加单独的“星号大战”模式,同时修复已知BUG。**请注意这个版本存档的加密方式发生变化,无法兼容 V2.1.0.0**
**注意 JoKing 材质未完成。**