您的好邻居Tree Doctor刚给了您三种叫做Codémon的神奇生物。附近的Colorville镇有一场战斗比赛。您是最好的吗?
总览
这是一场战斗比赛。每个玩家控制一个由三个怪物组成的团队,目标是淘汰(杀死)另一个团队。共有100场比赛,获得胜利和平局的得分。得分最高的团队获胜!
怪兽
科德蒙是一个复杂的小动物。有五种类型(元素)可供选择,三个统计数据,每个都有三个移动位置。
种类
每个Codémon被分配一种类型。这五种类型是正常,精神,火,水和草。每个都有其优点和缺点。损坏基于下图:
这些数字是伤害乘数。例如,烈火之水具有0.5的修正值(半伤害),而烈火之草则提高了一倍(2)。
统计资料
每个怪物都有三个决定其战斗能力的属性。攻击会造成伤害。防御可以降低承受的伤害。速度允许它先于速度较低的那些移动。
每个怪物的每个属性的起始值均为50,最大值为100。创建怪物时,您将能够分配80个附加的统计值(每个)。请记住,没有任何一项统计数据可以超过100。因此,您可以分配100/80 / 50、90 / 80/60或65/65/100,但120/50/60是非法的。任何拥有非法数据的球队将被取消比赛资格。您不需要全部使用80分,但是您可能不应该使用最低50/50/50。
您也可以将HP视为统计数据,但每个Codémon的不可修改HP为100。当HP降至零时,他们将无法继续战斗。每次战斗之前,HP会加满100。
动作
每个怪物都知道三个战斗招式。选择的三个必须不同,因此不能使用打孔/打孔/打孔。
一共有15个动作,每种动作三个。每种类型都有直接攻击,效果较弱的攻击和唯一效果移动。
id name type power uses usable effect
0 Punch N 20 - NFWG
1 Heal N 0 3 NFWG Heals 50 HP
2 Slow N 10 5 NFWG Enemy speed x0.8
3 Pain P 20 - PFWG
4 Sleep P 0 3 PFWG No enemy action until wake
5 Weaken P 10 5 PFWG Enemy Atk x0.8
6 Fireball F 20 - NPFW
7 Burn F 0 3 NPFW Enemy -10 HP each turn
8 Sharpen F 10 5 NPFW Own Atk x1.25
9 Watergun W 20 - NPWG
10 Confuse W 0 3 NPWG Enemy may strike itself (10 power)
11 Shield W 10 5 NPWG Own Def x1.25
12 Vine G 20 - NPFG
13 Poison G 0 3 NPFG Enemy -5xTurns HP each turn
14 Sap G 10 5 NPFG Enemy Def x0.8
type
指移动的类型。power
是其惊人的力量。uses
表示每次战斗可以使用多少次(-
无限制)。usable
显示可以使用的类型(例如,不能将Punch赋予Psychic类型,因为没有P
)。effect
展示这些举动有什么作用。每个效果都有75%的机会起作用,但治疗效果除外,此效果始终有效。
对于改变怪物属性的效果,可以叠加效果。例如,两次使用弱化可将对手的攻击降低至0.64效率。不会改变怪兽状态(睡眠,燃烧等)的效果不会叠加。
睡眠使对手进入睡眠状态,每回合开始时有60%的机会醒来。睡觉的怪物不会采取任何行动。
活跃时,燃烧在每回合结束时对对手造成10点HP 。毒药的作用与此类似,但是每回合的毒药量会增加。第一回合为5,此后每回合获得5。因此,到第四回合,它将造成20点伤害。这些都是单位伤害,不受怪物类别和加成的影响。
混乱可能会使怪物自己攻击,而不是按要求做。该攻击的威力为10,在给定回合中有30%的几率发生。
需要明确的是,效果会持续到战斗结束(如上所述,“睡眠”除外)。
如果由相应类型的怪物使用,招式也将获得20%的力量提升。例如,使用藤蔓的草怪会被提升,而使用“冲床”则不会。
秘密统计
每个怪物的统计数据和类型(但不能移动)都是公众知识。您的对手将能够看到他们在战斗什么,以便选择最佳动作。但是,也有一些隐藏的奖金。
具体来说,每两场战斗之后,您会为团队中的每个怪物获得一个“奖励”统计点。积分将分配给所有死活的怪物,胜利者或失败者。您可以将其分配给您选择的三个统计数据中的任何一个。您不能将它们堆叠在单个怪物上。每个怪物每次都会得到一个。这些点不受100限制。由于将进行100轮战斗,因此,如果您分配所有奖金,则最多可以获得149个统计数据。同样,对手只会看到您的“基本”数据,因此您进入比赛的距离越远,他们的知识与事实的距离就越远。
战斗
战斗在三人一组之间进行,每个团队一次活跃。首先,将向您展示对手的队伍,并要求您选择哪个怪物将成为您的第一个“活跃”玩家。
之后,将按照以下步骤进行转弯:
- 切换:强制进行怪物切换(如果有)
- 选择战斗动作
- 切换:发生任何可选的怪物切换(选择为战斗动作)
- 睡眠检查:有机会从睡眠中醒来
- 攻击1:如果能,更快的怪物会使用其选择的动作
- 攻击2:如果能,另一只怪物使用其选择的动作
- 效果伤害:对活着的怪物造成灼伤/毒药伤害
“速度更快”是指速度较高的怪物。如果两个速度统计都相同,则每转一圈,由PRNG投币选择。
在活动怪物死亡的任何回合结束时,都会要求您选择一个新的活动对象。您可能也选择到主动怪物切换为您的移动任何转(前提是你有一个以上的活着)。同样,如果您随手而动,那么该回合就不会做出战斗动作。
不活动时,怪物不会被“处理”。这意味着它们不会遭受烧伤/中毒伤害,不会累积中毒计数器,不会从睡眠中唤醒等。切换时不会移除或更改任何效果。这不是其他怪物战斗游戏。如果您在发起攻击并烧毁的情况下退出,则当您重新打开时,它们仍会存在。
无论您是否杀死对手,都会造成效果伤害。这样,两个团队的成员都可以在一个回合中死亡。
当一个团队用完可用的怪物时,他们就会输掉。如果两队都在同一回合中用完,那就是平局。如果战斗持续1000回合,那是平局。
确定损坏的公式是:
floor((effAttack / effDefense) * movePower * typeMultiplier * moveBoost)
effAttack
并且effDefense
是有效的统计信息的怪物。有效攻击是通过将“攻击”和“加成攻击”相加,然后乘以(乘以0.8或1.25)(如果有任何影响)来获得的。请记住,这些效果会叠加。
当类型修饰符为0(普通<->通灵)或移动的异能为0(治疗,燃烧等)时,伤害只能为0。否则将最小值强制为1。
比赛
比赛持续100回合。在每个回合中,各队进行随机组合并随机配对。如果队伍数量奇数,剩下的人会再见(得分为平局)。赢得一场战斗会为球队赢得2分,并列为1分,并且没有损失。最终得分最高的团队获胜!
如果各队并列,则将举行一场仅将各队并列第一的比赛来确定决胜局的顺序。
协议
控制器将向您的程序发送以下四个命令之一。第一个字符确定命令类型,并在必要时跟随数据。
您的程序将接受命令作为参数,并将在一秒钟内响应STDOUT 。不要活着听STDIN,它不会在那里。每个命令将产生一个新进程。
您可以将数据/状态写入磁盘。将所有文件放在与您的团队同名的子文件夹中。写入的数据不能超过32 KB,否则您将失去资格。数据将在各回合之间保留,但将在锦标赛之间清除。
指令
团队资料
在锦标赛开始时发送一次,以注册您的团队。您的回复应该是固定的,对于每个比赛都应该不同。
查询:
T
响应:
name|member0|member1|member2
name
是带有您的团队名称的字符串。请仅使用字母数字,以便于解析。memberN
是一个成员字符串,提供每个怪物的详细信息:
成员字符串:
name:typeid:attack:defense:speed:moveid0:moveid1:moveid2
同样,“ name”是一个字符串,这次带有这个怪物的名字。typeid
是它的类型。类型ID按照上表中显示的顺序,Normal = 0,Grass = 4。
接下来的三个字段是您的基本统计信息。请记住上面统计信息部分所述的限制。
最后三个是怪物的举动。ID显示在上方的移动图中。
团队数据回复示例如下所示:
DummyTeam|DummyA:0:50:60:70:0:1:2|DummyB:0:50:60:70:0:1:2|DummyC:0:50:60:70:0:1:2
在此之前,任何将垃圾,格式错误或非法数据发送回去的团队都不会参与。
选择有效
该消息在每次战斗开始时发送,并且在怪物死亡并需要切换时发送。
查询:
C#battleState
battleState
显示当前战斗的状态。在这里忍受我,这很丑陋:
yourTeamState#theirTeamState
其中XteamState
的样子:
name:activeSlot|member0state|member1state|member2state
activeSlot
显示当前处于活动状态的怪物(0-2)。成员国有两种口味。如果是您的团队,它会提供更多信息。所以,
您的 memberXstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:moveCount0:moveCount1:moveCount2:bonusAttack:bonusDefense:bonusSpeed:effectid:effectid:effectid
他们的 memberXstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:effectid:effectid:effectid
id
只是一个整数标识符,如果您不喜欢使用,可以用来跟踪怪物name
。
attack:defense:speed
是您的基本统计信息。
poisonedturns
告诉您中毒了多少回合。
moveCountX
告诉您每个动作还剩下多少用途。如果为0,则无法使用。对于无限移动,这将是负面的。
bonus(stat)
是您分配给每个统计数据的奖励积分的数量。
effectid
是已应用于怪物的大小可变的效果列表。无论是否存在主动效果,字符串上都不会出现尾随:
。如果有叠加效果,它们将在列表中显示为多个效果。
效果ID为:
0 NONE (should not appear, internal use)
1 POISON
2 CONFUSION
3 BURN
4 SLEEP
5 HEAL (should not appear, internal use)
6 ATTACK_UP
7 ATTACK_DOWN
8 DEFENSE_UP
9 DEFENSE_DOWN
10 SPEED_DOWN
响应:
memberSlot
唯一需要的响应是单个数字0,1,2,告诉您要激活哪个成员。该成员必须是能够战斗的成员。1
如果成员1已死亡,请不要发回。
战斗动作
每回合,您都需要决定要做什么。
查询:
A#battleState
在battleState
这里正是如上所述。
响应:
要使用移动,请发回移动所在的插槽。例如,如果我将“打孔”分配给了插槽0,则发送0
会执行“打孔”。
要切换到另一个成员,请发送该成员的广告位加10。因此要切换到成员2,发送12
。
不在[0,1,2,10,11,12]中的任何内容均被视为无效,并且将导致本回合不采取任何措施。
奖励统计
每两场战斗后,您会为每个团队成员获得一个秘密的加分。
查询:
B#yourTeamState
您的团队状态与上面显示的相同,请不要重复。
响应:
stat0:stat1:stat2
您的回复将代表每个团队成员要增加的统计数据。攻击为0,防御为1,速度为2。
因此,为了提高成员的速度,成员2的攻击和成员3的防御,您将做出以下响应:
2:0:1
控制者
可以在BitBucket上找到该控制器:https://Geobits@bitbucket.org/Geobits/codemon.git
只需将所有已编译的类文件,提交内容和players.conf放入一个文件夹中并运行即可。
控制器的主类称为Tournament
。用法是:
java Tournament [LOG_LEVEL]
从0-4的日志级别提供了越来越多的信息。级别0静默运行锦标赛,并给出结果,而级别3给出逐行注释。级别4是调试输出。
您可以在比赛中添加提交内容,players.conf
只需添加运行程序所需的命令行字符串,每行一个。以开头的行#
是注释。
在您的帖子中,包括我将需要添加到命令中的命令players.conf
以及所有编译步骤(如果需要)。
其中包括一个由所有正常成员组成的虚拟团队,其中包括三个正常动作。他们随机选择举动,并且有糟糕的数据。乐于击败他们。
杂项规则
您不得读写任何外部资源(如上所述,在您自己的子文件夹中,最大32 kB除外)。
您的团队需要参加比赛“盲注”。这意味着您无法分析其他人的消息来源来确定特定团队/怪物在给定情况下会做什么。您可以分析对手的移动/状态并随着比赛的进行保持跟踪,但无需对这些信息进行硬编码。
不要干扰其他过程/提交。请勿调用它们,使用反射获取其数据等。请勿弄乱我的计算机。只是不要尝试。这是我自行决定的。违反者可能被禁止将来进入。
参赛者最多只能参加两次比赛。如果您提交的更多,我只会对前两个提交的分数进行评分。如果要撤消一个,请将其删除。
条目可能不仅仅存在以支持其他条目。另外,您可能不能尝试间接取消其他参赛者的资格(例如,对试图将其写入磁盘的DQ玩家使用27M角色队伍名称)。每个提交都应发挥自己的优势取胜。
您的程序一次最多可以生成一个子进程(后代总数,而不是直接子代)。提供输出后,主进程和任何子进程都必须立即终止。无论哪种方式,请确保您都不会超时。
比赛将在装有Intel i7 3770K处理器的运行Ubuntu的计算机上举行。
结果
这些是当前玩家的结果。这是非常的顶级竞争者之间的密切,而且我在想碰撞的回合数高达500(和调整的奖励积分的间距相匹配)。有任何反对意见吗?
------- Final Results -------
158 Happy3Campers
157 LittleKid
71 InsideYourHead
68 HardenedTrio
46 BitterRivals
Google云端硬盘上的完整播放结果
bye
,对于不平衡数量的竞争者,不再需要任何竞争,并且可以确保比赛对是公平且均匀分布的。
n^2
而不是的战斗n
。仅以目前的7个竞争对手和100轮比赛而言,这是2100场战斗(原样为300场,而500轮则为1500场)。随着越来越多的参赛者进入,情况只会变得更糟。我可以缩减回合数,但是由于内在的可变性(关于状态esp),我犹豫了一下,而且50的倍数(用于奖励积分)更容易。