package net.sf.colossus.server;
import java.util.logging.Level;
import java.util.logging.Logger;
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 LOSTest extends TestCase
{
// TODO the unit test might as well use stdout
private static final Logger LOGGER = Logger.getLogger(LOSTest.class
.getName());
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 wyvern;
CreatureType dragon;
CreatureType minotaur;
CreatureType guardian;
Player black;
Player green;
Player red;
Player blue;
public LOSTest(String name)
{
super(name);
}
@Override
protected void setUp()
{
// Nothing to do here, moved stuff to setupForVariant because
// we need now the variant name as argument.
}
private void setupForVariant(String variantName)
{
Variant v = VariantSupport.loadVariantByName(variantName, true);
game = GameServerSide.makeNewGameServerSide(v);
createPlayersAndCreatures();
}
private void createPlayersAndCreatures()
{
black = game.createAndAddPlayer("Black", "SimpleAI");
green = game.createAndAddPlayer("Green", "SimpleAI");
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");
wyvern = game.getVariant().getCreatureByName("Wyvern");
dragon = game.getVariant().getCreatureByName("Dragon");
minotaur = game.getVariant().getCreatureByName("Minotaur");
guardian = game.getVariant().getCreatureByName("Guardian");
}
// Example 6 from Bruno Wolff's clarifications.
// TODO Should allow two different strike numbers against centaur.
public void testLOS1()
{
LOGGER.log(Level.FINEST, "testLOS1()");
setupForVariant("Default");
MasterHex hex = game.getVariant().getMasterBoard().getHexByLabel("3"); // Brush
defender = new LegionServerSide("Rd03", null, hex, hex, red, game,
centaur, gargoyle);
attacker = new LegionServerSide("Bl03", null, hex, hex, black, game,
hydra);
game.getPlayerByName("Red").addLegion(defender);
game.getPlayerByName("Blue").addLegion(attacker);
attacker.setEntrySide(EntrySide.RIGHT);
game.createBattle(attacker, defender,
BattleServerSide.LegionTags.ATTACKER, hex, BattlePhase.FIGHT);
battle = game.getBattleSS();
Creature centaur1 = defender.getCritter(0);
Creature gargoyle1 = defender.getCritter(1);
Creature hydra1 = attacker.getCritter(0);
placeCreature(centaur1, "B3");
placeCreature(gargoyle1, "B4");
placeCreature(hydra1, "D4");
assertTrue(!battle.isLOSBlocked(hydra1.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(hydra1.getCurrentHex(), gargoyle1
.getCurrentHex()));
}
private void placeCreature(Creature creature, String battleHexLabel)
{
MasterBoardTerrain terrain = battle.getLocation().getTerrain();
BattleHex battleHex = terrain.getHexByLabel(battleHexLabel);
creature.setCurrentHex(battleHex);
}
public void testLOS2()
{
LOGGER.log(Level.FINEST, "testLOS2()");
setupForVariant("Default");
MasterHex hex = game.getVariant().getMasterBoard().getHexByLabel("40"); // Jungle
defender = new LegionServerSide("Gr03", null, hex, hex, green, game,
centaur, centaur, lion, lion, ranger, ranger, ranger);
attacker = new LegionServerSide("Bk03", null, hex, hex, black, game,
gargoyle, cyclops, cyclops, cyclops, gorgon, gorgon, ranger);
game.getPlayerByName("Green").addLegion(defender);
game.getPlayerByName("Black").addLegion(attacker);
attacker.setEntrySide(EntrySide.LEFT);
game.createBattle(attacker, defender,
BattleServerSide.LegionTags.ATTACKER, hex, BattlePhase.FIGHT);
battle = game.getBattleSS();
Creature centaur1 = defender.getCritter(0);
Creature centaur2 = defender.getCritter(1);
Creature lion1 = defender.getCritter(2);
Creature lion2 = defender.getCritter(3);
Creature ranger1 = defender.getCritter(4);
Creature ranger2 = defender.getCritter(5);
Creature ranger3 = defender.getCritter(6);
Creature gargoyle1 = attacker.getCritter(0);
Creature cyclops1 = attacker.getCritter(1);
Creature cyclops2 = attacker.getCritter(2);
Creature cyclops3 = attacker.getCritter(3);
Creature gorgon1 = attacker.getCritter(4);
Creature gorgon2 = attacker.getCritter(5);
Creature ranger4 = attacker.getCritter(6);
placeCreature(centaur1, "D1");
placeCreature(centaur2, "E1");
placeCreature(lion1, "F1");
placeCreature(lion2, "C1");
placeCreature(ranger1, "D2");
placeCreature(ranger2, "E2");
placeCreature(ranger3, "F2");
placeCreature(gargoyle1, "A1");
placeCreature(cyclops1, "A2");
placeCreature(cyclops2, "C4");
placeCreature(cyclops3, "E5");
placeCreature(gorgon1, "C3");
placeCreature(gorgon2, "D4");
placeCreature(ranger4, "E4");
assertTrue(!battle.isLOSBlocked(ranger1.getCurrentHex(), gargoyle1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger1.getCurrentHex(), cyclops1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), cyclops2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), cyclops3
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger1.getCurrentHex(), gorgon1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), gorgon2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), ranger4
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), gargoyle1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), cyclops1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), cyclops2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), cyclops3
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), gorgon1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger2.getCurrentHex(), gorgon2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger2.getCurrentHex(), ranger4
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), gargoyle1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), cyclops1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), cyclops2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), cyclops3
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), gorgon1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger3.getCurrentHex(), gorgon2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger3.getCurrentHex(), ranger4
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon1.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon1.getCurrentHex(), centaur2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon1.getCurrentHex(), lion1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon1.getCurrentHex(), lion2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon1.getCurrentHex(), ranger1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon1.getCurrentHex(), ranger2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon1.getCurrentHex(), ranger3
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon2.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon2.getCurrentHex(), centaur2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon2.getCurrentHex(), lion1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon2.getCurrentHex(), lion2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon2.getCurrentHex(), ranger1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon2.getCurrentHex(), ranger2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon2.getCurrentHex(), ranger3
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger4.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger4.getCurrentHex(), centaur2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger4.getCurrentHex(), lion1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger4.getCurrentHex(), lion2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger4.getCurrentHex(), ranger1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger4.getCurrentHex(), ranger2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger4.getCurrentHex(), ranger3
.getCurrentHex()));
}
public void testLOS3()
{
LOGGER.log(Level.FINEST, "testLOS3()");
setupForVariant("Default");
MasterHex hex = game.getVariant().getMasterBoard()
.getHexByLabel("100"); // Tower
defender = new LegionServerSide("Gr03", null, hex, hex, green, game,
centaur, lion, ranger, ranger);
attacker = new LegionServerSide("Bk03", null, hex, hex, black, game,
cyclops, gorgon, gorgon, gorgon, gorgon, ranger, ranger);
game.getPlayerByName("Green").addLegion(defender);
game.getPlayerByName("Black").addLegion(attacker);
attacker.setEntrySide(EntrySide.BOTTOM);
game.createBattle(attacker, defender,
BattleServerSide.LegionTags.ATTACKER, hex, BattlePhase.FIGHT);
battle = game.getBattleSS();
Creature centaur1 = defender.getCritter(0);
Creature lion1 = defender.getCritter(1);
Creature ranger1 = defender.getCritter(2);
Creature ranger2 = defender.getCritter(3);
Creature cyclops1 = attacker.getCritter(0);
Creature gorgon1 = attacker.getCritter(1);
Creature gorgon2 = attacker.getCritter(2);
Creature gorgon3 = attacker.getCritter(3);
Creature gorgon4 = attacker.getCritter(4);
Creature ranger3 = attacker.getCritter(5);
Creature ranger4 = attacker.getCritter(6);
placeCreature(centaur1, "D3");
placeCreature(lion1, "E3");
placeCreature(ranger1, "C3");
placeCreature(ranger2, "D4");
placeCreature(cyclops1, "D2");
placeCreature(gorgon1, "A3");
placeCreature(gorgon2, "A2");
placeCreature(gorgon3, "A1");
placeCreature(gorgon4, "C1");
placeCreature(ranger3, "F1");
placeCreature(ranger4, "B4");
assertTrue(!battle.isLOSBlocked(ranger1.getCurrentHex(), cyclops1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger1.getCurrentHex(), gorgon1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger1.getCurrentHex(), gorgon2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger1.getCurrentHex(), gorgon3
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger1.getCurrentHex(), gorgon4
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), ranger3
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger1.getCurrentHex(), ranger4
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), cyclops1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger2.getCurrentHex(), gorgon1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), gorgon2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), gorgon3
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), gorgon4
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), ranger3
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), ranger4
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon1.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon1.getCurrentHex(), lion1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon1.getCurrentHex(), ranger1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon1.getCurrentHex(), ranger2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon2.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon2.getCurrentHex(), lion1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon2.getCurrentHex(), ranger1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon2.getCurrentHex(), ranger2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon3.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon3.getCurrentHex(), lion1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon3.getCurrentHex(), ranger1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon3.getCurrentHex(), ranger2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon4.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon4.getCurrentHex(), lion1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon4.getCurrentHex(), ranger1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon4.getCurrentHex(), ranger2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger3.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger3.getCurrentHex(), lion1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), ranger1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), ranger2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger4.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger4.getCurrentHex(), lion1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger4.getCurrentHex(), ranger1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger4.getCurrentHex(), ranger2
.getCurrentHex()));
}
public void testLOS4()
{
LOGGER.log(Level.FINEST, "testLOS4()");
setupForVariant("Default");
MasterHex hex = game.getVariant().getMasterBoard().getHexByLabel("4"); // Hills
defender = new LegionServerSide("Gr03", null, hex, hex, green, game,
centaur, centaur, lion, lion, ranger, ranger);
attacker = new LegionServerSide("Bk03", null, hex, hex, black, game,
gorgon, gorgon, ranger, ranger);
game.getPlayerByName("Green").addLegion(defender);
game.getPlayerByName("Black").addLegion(attacker);
attacker.setEntrySide(EntrySide.BOTTOM);
game.createBattle(attacker, defender,
BattleServerSide.LegionTags.ATTACKER, hex, BattlePhase.FIGHT);
battle = game.getBattleSS();
Creature centaur1 = defender.getCritter(0);
Creature centaur2 = defender.getCritter(1);
Creature lion1 = defender.getCritter(2);
Creature lion2 = defender.getCritter(3);
Creature ranger1 = defender.getCritter(4);
Creature ranger2 = defender.getCritter(5);
Creature gorgon1 = attacker.getCritter(0);
Creature gorgon2 = attacker.getCritter(1);
Creature ranger3 = attacker.getCritter(2);
Creature ranger4 = attacker.getCritter(3);
placeCreature(centaur1, "D4");
placeCreature(centaur2, "B1");
placeCreature(lion1, "C5");
placeCreature(lion2, "B2");
placeCreature(ranger1, "D6");
placeCreature(ranger2, "E3");
placeCreature(gorgon1, "D2");
placeCreature(gorgon2, "D3");
placeCreature(ranger3, "B3");
placeCreature(ranger4, "F1");
assertTrue(!battle.isLOSBlocked(ranger1.getCurrentHex(), gorgon1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), gorgon2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), ranger3
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), ranger4
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger2.getCurrentHex(), gorgon1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger2.getCurrentHex(), gorgon2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger2.getCurrentHex(), ranger3
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger2.getCurrentHex(), ranger4
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon1.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon1.getCurrentHex(), centaur2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon1.getCurrentHex(), lion1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon1.getCurrentHex(), lion2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon1.getCurrentHex(), ranger1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon1.getCurrentHex(), ranger2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon2.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon2.getCurrentHex(), centaur2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon2.getCurrentHex(), lion1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon2.getCurrentHex(), lion2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon2.getCurrentHex(), ranger1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(gorgon2.getCurrentHex(), ranger2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger3.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger3.getCurrentHex(), centaur2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger3.getCurrentHex(), lion1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger3.getCurrentHex(), lion2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), ranger1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger3.getCurrentHex(), ranger2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger4.getCurrentHex(), centaur1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger4.getCurrentHex(), centaur2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger4.getCurrentHex(), lion1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger4.getCurrentHex(), lion2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger4.getCurrentHex(), ranger1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger4.getCurrentHex(), ranger2
.getCurrentHex()));
}
public void testLOS5()
{
LOGGER.log(Level.FINEST, "testLOS5()");
setupForVariant("TG-ConceptIII");
MasterHex hex = game.getVariant().getMasterBoard().getHexByLabel("1"); // Plains - Delta
defender = new LegionServerSide("Gr03", null, hex, hex, green, game,
troll, troll, troll, troll, wyvern);
attacker = new LegionServerSide("Bk03", null, hex, hex, black, game,
ranger, ranger, ranger);
game.getPlayerByName("Green").addLegion(defender);
game.getPlayerByName("Black").addLegion(attacker);
attacker.setEntrySide(EntrySide.LEFT);
game.createBattle(attacker, defender,
BattleServerSide.LegionTags.ATTACKER, hex, BattlePhase.FIGHT);
battle = game.getBattleSS();
Creature troll1 = defender.getCritter(0);
Creature troll2 = defender.getCritter(1);
Creature troll3 = defender.getCritter(2);
Creature troll4 = defender.getCritter(3);
Creature wyvern1 = defender.getCritter(4);
CreatureServerSide ranger1 = attacker.getCritter(0);
CreatureServerSide ranger2 = attacker.getCritter(1);
CreatureServerSide ranger3 = attacker.getCritter(2);
placeCreature(troll1, "D6");
placeCreature(troll2, "B3");
placeCreature(troll3, "C3");
placeCreature(troll4, "E4");
placeCreature(wyvern1, "E3");
placeCreature(ranger1, "E1");
placeCreature(ranger2, "E2");
placeCreature(ranger3, "F2");
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), troll1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), troll2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger1.getCurrentHex(), troll3
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), troll4
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), wyvern1
.getCurrentHex()));
assertTrue(!ranger1.canStrike(troll1));
assertTrue(!ranger1.canStrike(troll2));
assertTrue(ranger1.canStrike(troll3));
assertTrue(!ranger1.canStrike(troll4));
assertTrue(!ranger1.canStrike(wyvern1));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), troll1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), troll2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger2.getCurrentHex(), troll3
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), troll4
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger2.getCurrentHex(), wyvern1
.getCurrentHex()));
assertTrue(!ranger2.canStrike(troll1));
assertTrue(!ranger2.canStrike(troll2));
assertTrue(!ranger2.canStrike(troll3));
assertTrue(!ranger2.canStrike(troll4));
assertTrue(ranger2.canStrike(wyvern1));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), troll1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), troll2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), troll3
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger3.getCurrentHex(), troll4
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger3.getCurrentHex(), wyvern1
.getCurrentHex()));
assertTrue(!ranger3.canStrike(troll1));
assertTrue(!ranger3.canStrike(troll2));
assertTrue(!ranger3.canStrike(troll3));
assertTrue(!ranger3.canStrike(troll4));
assertTrue(ranger3.canStrike(wyvern1));
}
public void testLOS6()
{
LOGGER.log(Level.FINEST, "testLOS6()");
setupForVariant("Badlands-JDG");
MasterHex hex = game.getVariant().getMasterBoard().getHexByLabel(
"5000"); // MountainsAlt
defender = new LegionServerSide("Gr03", null, hex, hex, green, game,
dragon, dragon, minotaur, minotaur, minotaur);
attacker = new LegionServerSide("Bk03", null, hex, hex, black, game,
ranger, ranger, ranger);
game.getPlayerByName("Green").addLegion(defender);
game.getPlayerByName("Black").addLegion(attacker);
attacker.setEntrySide(EntrySide.LEFT);
game.createBattle(attacker, defender,
BattleServerSide.LegionTags.ATTACKER, hex, BattlePhase.FIGHT);
battle = game.getBattleSS();
Creature dragon1 = defender.getCritter(0);
Creature dragon2 = defender.getCritter(1);
Creature minotaur1 = defender.getCritter(2);
Creature minotaur2 = defender.getCritter(3);
Creature minotaur3 = defender.getCritter(4);
CreatureServerSide ranger1 = attacker.getCritter(0);
CreatureServerSide ranger2 = attacker.getCritter(1);
CreatureServerSide ranger3 = attacker.getCritter(2);
placeCreature(dragon1, "D3");
placeCreature(dragon2, "C3");
placeCreature(minotaur1, "E4");
placeCreature(minotaur2, "B2");
placeCreature(minotaur3, "A1");
placeCreature(ranger1, "E2");
placeCreature(ranger2, "C2");
placeCreature(ranger3, "E5");
assertTrue(!battle.isLOSBlocked(ranger1.getCurrentHex(), dragon1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), dragon2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), minotaur1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), minotaur2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger1.getCurrentHex(), minotaur3
.getCurrentHex()));
assertTrue(ranger1.canStrike(dragon1));
assertTrue(!ranger1.canStrike(dragon2));
assertTrue(!ranger1.canStrike(minotaur1));
assertTrue(!ranger1.canStrike(minotaur2));
assertTrue(!ranger1.canStrike(minotaur3));
assertTrue(!battle.isLOSBlocked(ranger2.getCurrentHex(), dragon1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger2.getCurrentHex(), dragon2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), minotaur1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger2.getCurrentHex(), minotaur2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger2.getCurrentHex(), minotaur3
.getCurrentHex()));
assertTrue(ranger2.canStrike(dragon1));
assertTrue(!ranger2.canStrike(dragon2));
assertTrue(!ranger2.canStrike(minotaur1));
assertTrue(ranger2.canStrike(minotaur2));
assertTrue(!ranger2.canStrike(minotaur3));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), dragon1
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger3.getCurrentHex(), dragon2
.getCurrentHex()));
assertTrue(!battle.isLOSBlocked(ranger3.getCurrentHex(), minotaur1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), minotaur2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger3.getCurrentHex(), minotaur3
.getCurrentHex()));
assertTrue(!ranger3.canStrike(dragon1));
assertTrue(!ranger3.canStrike(dragon2));
assertTrue(ranger3.canStrike(minotaur1));
assertTrue(!ranger3.canStrike(minotaur2));
assertTrue(!ranger3.canStrike(minotaur3));
}
public void testLOS7()
{
LOGGER.log(Level.FINEST, "testLOS7()");
setupForVariant("Default");
MasterHex hex = game.getVariant().getMasterBoard().getHexByLabel("40"); // Jungle
defender = new LegionServerSide("Gr03", null, hex, hex, green, game,
hydra);
attacker = new LegionServerSide("Bk03", null, hex, hex, black, game,
hydra, guardian);
game.getPlayerByName("Green").addLegion(defender);
game.getPlayerByName("Black").addLegion(attacker);
attacker.setEntrySide(EntrySide.LEFT);
game.createBattle(attacker, defender,
BattleServerSide.LegionTags.ATTACKER, hex, BattlePhase.FIGHT);
battle = game.getBattleSS();
Creature hydra1 = defender.getCritter(0);
CreatureServerSide hydra2 = attacker.getCritter(0);
Creature guardian1 = attacker.getCritter(1);
placeCreature(hydra1, "D5");
placeCreature(hydra2, "E3");
placeCreature(guardian1, "E4");
assertTrue(!battle.isLOSBlocked(hydra1.getCurrentHex(), hydra2
.getCurrentHex()));
assertEquals(5, game.getBattleStrikeSS().getStrikeNumber(hydra2,
hydra1));
}
public void testLOS8()
{
LOGGER.log(Level.FINEST, "testLOS8()");
setupForVariant("Default");
MasterHex hex = game.getVariant().getMasterBoard().getHexByLabel("7"); // Desert
defender = new LegionServerSide("Gr03", null, hex, hex, green, game,
ranger);
attacker = new LegionServerSide("Bk03", null, hex, hex, black, game,
hydra);
game.getPlayerByName("Green").addLegion(defender);
game.getPlayerByName("Black").addLegion(attacker);
attacker.setEntrySide(EntrySide.RIGHT);
game.createBattle(attacker, defender,
BattleServerSide.LegionTags.ATTACKER, hex, BattlePhase.FIGHT);
battle = game.getBattleSS();
Creature hydra = defender.getCritter(0);
Creature ranger = attacker.getCritter(0);
placeCreature(ranger, "D4");
placeCreature(hydra, "A1");
// should be blocked: even from cliff may not RS over a dune
// Current implementation is not working correctly
// - see 2820231 Illegal rangestrike
assertTrue(battle.isLOSBlocked(ranger.getCurrentHex(), hydra
.getCurrentHex()));
}
public void testLOS9()
{
LOGGER.log(Level.FINEST, "testLOS9()");
setupForVariant("Default");
MasterHex hex = game.getVariant().getMasterBoard()
.getHexByLabel("100"); // Tower
defender = new LegionServerSide("Gr03", null, hex, hex, green, game,
centaur, lion, ranger, ranger);
attacker = new LegionServerSide("Bk03", null, hex, hex, black, game,
cyclops, gorgon, gorgon, gorgon, gorgon, ranger, ranger);
game.getPlayerByName("Green").addLegion(defender);
game.getPlayerByName("Black").addLegion(attacker);
attacker.setEntrySide(EntrySide.BOTTOM);
game.createBattle(attacker, defender,
BattleServerSide.LegionTags.ATTACKER, hex, BattlePhase.FIGHT);
battle = game.getBattleSS();
Creature ranger2 = defender.getCritter(3);
Creature cyclops1 = attacker.getCritter(0);
Creature gorgon1 = attacker.getCritter(1);
placeCreature(ranger2, "D4");
placeCreature(cyclops1, "D2");
placeCreature(gorgon1, "C2");
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), cyclops1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(ranger2.getCurrentHex(), gorgon1
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(gorgon1.getCurrentHex(), ranger2
.getCurrentHex()));
assertTrue(battle.isLOSBlocked(cyclops1.getCurrentHex(), ranger2
.getCurrentHex()));
}
}