样例输入 1
3 4
.mmp
.ooo
a...
0 10 5 2
2
10 10 3 1 1 2
10 10 5 2 1 3
3
10 100 0 0 1
5 0 2 0 2
5 0 0 2 2样例输出 1
MOVE 1 1
ATTACK 1 2
BUY 3 2
MOVE 1 2
ATTACK 1 3
BUY 1 1
MOVE 1 3
TALK 1 4魔塔是 RPG(Role Playing Game,角色扮演游戏)的代表。在这款游戏中,你需要操作勇士与怪物战斗,并用获取的金钱提升自己的能力,从而挑战更强的怪物。而最终的目标,则是营救公主。
与传统的魔塔相比,本题去除了大量的设定,只留下了一些最基本的元素。
游戏的场地为一个矩形,被划分为 $M\times N$ 个小方格。
小方格可能是空地,也可能有人或怪物。下面是所有可能出现的状态,用一个字母表示:
a:adventurer,表示勇士的初始位置;
n:表示NPC;
p:princess,表示公主;
m:monster,表示怪物;
o:表示墙壁;
.:表示空地。
NPC、公主、怪物、墙壁均不可穿越,勇士只能向上下左右四个方向相邻(注:之后所有的“相邻”都表示四个方向)的空地移动。移动后,空地与勇士的位置交换。
怪物是唯一可以改变的地形;怪物被消灭后,会变为空地。
触发战斗的条件是勇士所在的位置与怪物相邻。
勇士与怪物均拥有三个属性:生命值、攻击力、防御力。怪物的属性会在游戏开始时给出,且不会改变;而勇士可以通过商店进行购买,同时生命值也会因为战斗而下降。
每一场战斗由勇士先进行攻击,之后怪物攻击,之后勇士攻击,之后怪物攻击……如此循环。
每次攻击所造成的伤害为 $\max($ 攻击者攻击力 $-$ 对方防御力 $,0)$,对方的生命值会扣减这个数值。
任何一方生命值小于等于 $0$ 将会死亡,战斗结束。
战斗举例 1:
勇士 生命值 10 攻击力 5 防御力 2
怪物 生命值 10 攻击力 3 防御力 1
勇士先进行攻击,对怪物造成 $5-1=4$ 点伤害,怪物生命值为 6;
怪物进行攻击,对勇士造成 $3-2=1$ 点伤害,勇士生命值为 9;
勇士进行攻击,对怪物造成 $5-1=4$ 点伤害,怪物生命值为 2;
怪物进行攻击,对勇士造成 $3-2=1$ 点伤害,勇士生命值为 8;
勇士进行攻击,对怪物造成 $5-1=4$ 点伤害,怪物生命值为 -2,死亡!
在这场战斗中,勇士消灭怪物,损失了 2 点生命值。
战斗举例 2:
勇士 生命值 10 攻击力 5 防御力 6
怪物 生命值 10 攻击力 5 防御力 2
由于怪物对勇士造成的伤害为 0,而勇士对怪物造成的伤害不为 0,故结果为勇士消灭怪物,损失 0 点生命值。
当勇士死亡,或战斗进入无限循环(两方伤害均为 0)时,均为勇士失败,游戏立即结束。
勇士可以进入商店购买物品。商店可以在任何时候使用,与勇士当前位置无关。
勇士拥有初始金钱,同时每个怪物被消灭时也会掉落一定的金钱。
在商店里,属性以物品的形式呈现。每个物品包括了价格、生命值、攻击力、防御力、存量几个属性。
勇士支付对应的价格后,即可获得这一商品的生命值、攻击力、防御力,并直接加到自己的属性上。此外,勇士够买这一商品的次数不能超过其存量。
触发对话的条件是勇士与 NPC 或公主相邻。
勇士可以与场地中的 NPC 对话,NPC 会给勇士人生的经验。
这些对话在大多数时候只起到为 RPG 渲染环境的作用,但有时,这些对话对过关有提示作用。极少数情况下,NPC 的对话会与游戏规则抵触,此时以 NPC 对话内容为准。
最后,勇士可以与公主对话,对话之后营救成功,游戏立即结束,公主同样会留下一段感谢的话。
游戏的目标是,在营救公主时,保留尽可能多的生命值。生命值会按照一定的规则,转化为公主的爱意值,也即 1 到 10 之间的整数。
若未成功营救公主(战斗时死亡、无限循环,操作不合法等),则算作未完成游戏目标,爱意值将被记为 0。
这是一道提交答案型试题,你不需要提交你的源程序。你只需根据给出的 10 个输入文件,使用适当的方法编写 10 个输出文件并提交。
所有的输入文件 mota1.in ~ mota10.in 已在对应的目录下。
输入文件 motaX.in 的第一行是两个正整数 $N$ 与 $M$,表示场地的宽与长。
接下来 $N$ 行,每行 $M$ 个字符,为“场地”中所对应的字符,中间没有空格。这些字符中,保证勇士 a 与公主 p 恰好出现一次。
接下来一行包括四个空格隔开的整数 $\text{Cash}, \text{Health}, \text{Atk}, \text{Def}$,分别表示勇士的初始金钱、初始生命值、初始攻击力、初始防御力。
接下来一行为一个整数 $P$,表示怪物的数量。
接下来 $P$ 行,每行有六个空格隔开的整数 $\text{cash},\text{hp},\text{atk},\text{def},x,y$,描述了一只怪物,分别表示击杀怪物获得的金钱、怪物生命值、怪物的攻击力、怪物的守备力、怪物的行坐标、怪物的列坐标(也即:怪物在第 $x$ 行,第 $y$ 列)。保证场地中的每个 m 所对应的坐标,均在本段恰好出现一次。
接下来一行为一个整数 $R$,表示商店中物品的种类。
接下来 $R$ 行,每行有五个空格隔开的整数 $\text{cash},\text{hp},\text{atk},\text{def},\text{num}$,描述了一件物品,分别表示商品的价格,购买之可以获得的生命值、攻击力、防御力,以及商品存量。
输入文件结束。
勇士向 $(1,1)$ 移动后,攻击 $(1,2)$ 处的怪物。 勇士的属性为 $(10,5,2)$,怪物的属性为 $(10,3,1)$。这是战斗系统中的例子,勇士损失 $2$ 点生命,消灭怪物获得 $10$ 金钱。此时,$(1,2)$ 变为空地。 勇士购买 $3$ 号商品 $2$ 件,也即 $4$ 点防御,此时属性为 $(10,5,6)$。 勇士向 $(1,2)$ 移动后,攻击 $(1,3)$ 处的怪物。这也是战斗系统中的例子,勇士无伤消灭怪物,获得 $10$ 金钱。 勇士购买 $1$ 号商品 $1$ 件,也即 $100$ 点生命。此时勇士生命为 $108$。 勇士向 $(1,3)$ 移动后与位于 $(1,4)$ 的公主对话,游戏结束。 可以证明,$108$ 是勇士通关时可能的最大生命值。
3 4
.mmp
.ooo
a...
0 10 5 2
2
10 10 3 1 1 2
10 10 5 2 1 3
3
10 100 0 0 1
5 0 2 0 2
5 0 0 2 2MOVE 1 1
ATTACK 1 2
BUY 3 2
MOVE 1 2
ATTACK 1 3
BUY 1 1
MOVE 1 3
TALK 1 4