package net.sf.colossus.server;
import java.util.Iterator;
import junit.framework.TestCase;
import net.sf.colossus.game.BattlePhase;
import net.sf.colossus.game.Creature;
import net.sf.colossus.game.EntrySide;
import net.sf.colossus.game.Player;
import net.sf.colossus.variant.BattleHex;
import net.sf.colossus.variant.CreatureType;
import net.sf.colossus.variant.MasterBoardTerrain;
import net.sf.colossus.variant.MasterHex;
import net.sf.colossus.variant.Variant;
/**
* JUnit test for line of sight.
*
* @author David Ripton
*/
public class CarryTest extends TestCase
{
GameServerSide game;
BattleServerSide battle;
LegionServerSide attacker;
LegionServerSide defender;
CreatureType cyclops;
CreatureType troll;
CreatureType ogre;
CreatureType ranger;
CreatureType gorgon;
CreatureType lion;
CreatureType griffon;
CreatureType hydra;
CreatureType centaur;
CreatureType colossus;
CreatureType gargoyle;
CreatureType warlock;
Player red;
Player blue;
public CarryTest(String name)
{
super(name);
}
@Override
protected void setUp()
{
Variant variant = VariantSupport.loadVariantByName("Default", true);
game = GameServerSide.makeNewGameServerSide(variant);
assertEquals("Default", game.getVariant().getName());
red = game.createAndAddPlayer("Red", "SimpleAI");
blue = game.createAndAddPlayer("Blue", "SimpleAI");
cyclops = game.getVariant().getCreatureByName("Cyclops");
troll = game.getVariant().getCreatureByName("Troll");
ogre = game.getVariant().getCreatureByName("Ogre");
ranger = game.getVariant().getCreatureByName("Ranger");
gorgon = game.getVariant().getCreatureByName("Gorgon");
lion = game.getVariant().getCreatureByName("Lion");
griffon = game.getVariant().getCreatureByName("Griffon");
hydra = game.getVariant().getCreatureByName("Hydra");
centaur = game.getVariant().getCreatureByName("Centaur");
colossus = game.getVariant().getCreatureByName("Colossus");
gargoyle = game.getVariant().getCreatureByName("Gargoyle");
warlock = game.getVariant().getCreatureByName("Warlock");
}
public void testCarries()
{
MasterHex hex = game.getVariant().getMasterBoard().getHexByLabel("35");
assertEquals("Desert", hex.getTerrain().getId());
attacker = new LegionServerSide("Rd03", null, hex, hex, red, game,
centaur, centaur, lion, colossus);
defender = new LegionServerSide("Bu03", null, hex, hex, blue, game,
hydra);
game.getPlayerByName("Red").addLegion(attacker);
game.getPlayerByName("Blue").addLegion(defender);
attacker.setEntrySide(EntrySide.LEFT);
game.createBattle(attacker, defender,
BattleServerSide.LegionTags.DEFENDER, hex, BattlePhase.FIGHT);
battle = game.getBattleSS();
CreatureServerSide centaur1 = attacker.getCritter(0);
CreatureServerSide centaur2 = attacker.getCritter(1);
CreatureServerSide lion1 = attacker.getCritter(2);
CreatureServerSide colossus1 = attacker.getCritter(3);
CreatureServerSide hydra1 = defender.getCritter(0);
placeCreature(centaur1, "C5");
placeCreature(centaur2, "D6");
placeCreature(lion1, "E4");
placeCreature(colossus1, "C4");
placeCreature(hydra1, "D5");
assertTrue(hydra1.canStrike(centaur1));
assertTrue(hydra1.canStrike(centaur2));
assertTrue(hydra1.canStrike(lion1));
assertTrue(hydra1.canStrike(colossus1));
assertEquals(10, game.getBattleStrikeSS().getDice(hydra1, centaur1));
assertEquals(10, game.getBattleStrikeSS().getDice(hydra1, centaur2));
assertEquals(10, game.getBattleStrikeSS().getDice(hydra1, lion1));
assertEquals(12, game.getBattleStrikeSS().getDice(hydra1, colossus1));
assertEquals(5, game.getBattleStrikeSS().getStrikeNumber(hydra1,
centaur1));
assertEquals(5, game.getBattleStrikeSS().getStrikeNumber(hydra1,
centaur2));
assertEquals(4, game.getBattleStrikeSS()
.getStrikeNumber(hydra1, lion1));
assertEquals(5, game.getBattleStrikeSS().getStrikeNumber(hydra1,
colossus1));
hydra1.findCarries(centaur1);
assertEquals(3, battle.getCarryTargets().size());
assertEquals(0, hydra1.getPenaltyOptions().size());
hydra1.findCarries(centaur2);
assertEquals(3, battle.getCarryTargets().size());
assertEquals(0, hydra1.getPenaltyOptions().size());
hydra1.findCarries(lion1);
assertEquals(0, battle.getCarryTargets().size());
assertEquals(2, hydra1.getPenaltyOptions().size());
hydra1.findCarries(colossus1);
assertEquals(0, battle.getCarryTargets().size());
assertEquals(0, hydra1.getPenaltyOptions().size());
}
private void placeCreature(Creature creature, String battleHexLabel)
{
MasterBoardTerrain terrain = battle.getLocation().getTerrain();
BattleHex battleHex = terrain.getHexByLabel(battleHexLabel);
creature.setCurrentHex(battleHex);
}
public void testCarries2()
{
MasterHex hex = game.getVariant().getMasterBoard().getHexByLabel("1"); // Plains
attacker = new LegionServerSide("Rd03", null, hex, hex, red, game,
warlock, warlock, colossus);
defender = new LegionServerSide("Bu03", null, hex, hex, blue, game,
gargoyle, ogre, ogre);
game.getPlayerByName("Red").addLegion(attacker);
game.getPlayerByName("Blue").addLegion(defender);
attacker.setEntrySide(EntrySide.LEFT);
game.createBattle(attacker, defender,
BattleServerSide.LegionTags.ATTACKER, hex, BattlePhase.FIGHT);
battle = game.getBattleSS();
CreatureServerSide warlock1 = attacker.getCritter(0);
CreatureServerSide warlock2 = attacker.getCritter(1);
CreatureServerSide colossus1 = attacker.getCritter(2);
CreatureServerSide gargoyle1 = defender.getCritter(0);
CreatureServerSide ogre1 = defender.getCritter(1);
CreatureServerSide ogre2 = defender.getCritter(2);
gargoyle1.setHits(3);
ogre1.setHits(5);
ogre2.setHits(5);
placeCreature(warlock1, "A3");
placeCreature(warlock2, "B4");
placeCreature(colossus1, "E3");
placeCreature(gargoyle1, "D3");
placeCreature(ogre1, "E2");
placeCreature(ogre2, "F2");
assertTrue(colossus1.canStrike(gargoyle1));
assertTrue(colossus1.canStrike(ogre1));
assertTrue(colossus1.canStrike(ogre2));
assertEquals(10, game.getBattleStrikeSS()
.getDice(colossus1, gargoyle1));
assertEquals(10, game.getBattleStrikeSS().getDice(colossus1, ogre1));
assertEquals(10, game.getBattleStrikeSS().getDice(colossus1, ogre2));
assertEquals(3, game.getBattleStrikeSS().getStrikeNumber(colossus1,
gargoyle1));
assertEquals(2, game.getBattleStrikeSS().getStrikeNumber(colossus1,
ogre1));
assertEquals(2, game.getBattleStrikeSS().getStrikeNumber(colossus1,
ogre2));
colossus1.findCarries(gargoyle1);
assertEquals(2, battle.getCarryTargets().size());
assertEquals(0, colossus1.getPenaltyOptions().size());
colossus1.findCarries(ogre1);
assertEquals(1, battle.getCarryTargets().size());
assertEquals(2, colossus1.getPenaltyOptions().size());
Iterator<PenaltyOption> it = colossus1.getPenaltyOptions().iterator();
PenaltyOption po = it.next();
assertEquals(2, po.getCarryTargets().size());
colossus1.findCarries(ogre2);
assertEquals(1, battle.getCarryTargets().size());
assertEquals(2, colossus1.getPenaltyOptions().size());
it = colossus1.getPenaltyOptions().iterator();
po = it.next();
assertEquals(2, po.getCarryTargets().size());
}
}