package net.ciklum.icfpc11.controller.runners import net.ciklum.icfpc11.domain.Game import net.ciklum.icfpc11.domain.Player import net.ciklum.icfpc11.parser.Command import static net.ciklum.icfpc11.parser.Application.LEFT import net.ciklum.icfpc11.controller.AiPlayer import net.ciklum.icfpc11.controller.Controller import net.ciklum.icfpc11.controller.ai.Strategy import net.ciklum.icfpc11.controller.ai.ReviveStrategy import net.ciklum.icfpc11.domain.Card import net.ciklum.icfpc11.domain.Slot import net.ciklum.icfpc11.controller.ai.DecWeaklingStrategy /** * blabla * @author vic */ @Typed class AiVsRevivalTester { private final static class DumbCommando extends AiPlayer { DumbCommando(String name) { super(name) } @Override Strategy getCurrentStrategy() { if (!rushStrategy.complete) { // or go on with Commando return rushStrategy } int weakling = DecWeaklingStrategy.findWeakling(Game.instance) if (weakling >= 0) { betterDecStrategy = new DecWeaklingStrategy(Game.instance, 0, 16) return betterDecStrategy } decStrategy } } private final static class Savior extends AiPlayer { Savior(String name) { super(name) } @Override Strategy getCurrentStrategy() { if (save0Strategy != null && !save0Strategy.complete) { // continue saving slot 0 return save0Strategy } else { save0Strategy = null } int deadSlot = Game.instance.currentProponent.slots.findIndexOf{ Slot it -> !it.alive } int safeSlot = findSafeSlot() if (deadSlot == 0) { // start saving slot 0 save0Strategy = new ReviveStrategy(Game.instance, 0, safeSlot) return save0Strategy } return decStrategy } @Override Command getNextCommand() { currentStrategy.complete ? new Command(LEFT, 0, Card.I) : currentStrategy.nextCommand } } static void main(String[] args) { Player rusher = new DumbCommando('rusher') Player savior = new Savior('savior') def game = Game.push(rusher, savior) def controller = new Controller(game) controller.go(true) println "Rusher (p0)" println rusher.slotsToString() println "savior (p1)" println savior.slotsToString() } }