package net.ciklum.icfpc11.domain.greenspoon10 import net.ciklum.icfpc11.domain.Slot import net.ciklum.icfpc11.domain.Game import net.ciklum.icfpc11.domain.GameError /** * blabla * @author vic */ @Typed class Attack extends CurriedFunction { Attack() { super(new AttackMultiarg(), 3, []) } private final static class AttackMultiarg implements MultiArgFunction { @Override Function evaluate(List args) { def i = args[0] def j = args[1] def n = args[2] Slot mySlot = Game.instance.currentProponent.getSlot(i.value) int nValue = n.value if (mySlot.vitality < nValue) { throw new GameError("Can't pay for attack($nValue) with a slot ${i.value} - its vitality is only ${mySlot.vitality}") } mySlot.vitality = mySlot.vitality - nValue Slot hisSlot = Game.instance.currentOpponent.getSlot(255-j.value) if (hisSlot.isAlive()) { if (Game.instance.nowZombieTime) { hisSlot.vitality = hisSlot.vitality + (nValue * 9).intdiv(10) } else { hisSlot.vitality = hisSlot.vitality - (nValue * 9).intdiv(10) } } Identity.IDENTITY } String toString() { "attack" } } }