Search in sources :

Example 6 with AbstractActionableObject

use of spacesettlers.objects.AbstractActionableObject in project spacesettlers by amymcgovern.

the class HumanTeamClient method getPowerups.

@Override
public Map<UUID, SpaceSettlersPowerupEnum> getPowerups(Toroidal2DPhysics space, Set<AbstractActionableObject> actionableObjects) {
    HashMap<UUID, SpaceSettlersPowerupEnum> powerUps = new HashMap<UUID, SpaceSettlersPowerupEnum>();
    if (lastKeyPressed == HumanKeyPressed.FIRE) {
        for (AbstractActionableObject actionableObject : actionableObjects) {
            SpaceSettlersPowerupEnum powerup = SpaceSettlersPowerupEnum.FIRE_MISSILE;
            powerUps.put(actionableObject.getId(), powerup);
        }
    }
    return powerUps;
}
Also used : AbstractActionableObject(spacesettlers.objects.AbstractActionableObject) HashMap(java.util.HashMap) SpaceSettlersPowerupEnum(spacesettlers.objects.powerups.SpaceSettlersPowerupEnum) UUID(java.util.UUID)

Example 7 with AbstractActionableObject

use of spacesettlers.objects.AbstractActionableObject in project spacesettlers by amymcgovern.

the class PacifistFlagCollectorTeamClient method getTeamPurchases.

@Override
public /**
 * If there is enough resourcesAvailable, buy a base.  Place it by finding a ship that is sufficiently
 * far away from the existing bases
 */
Map<UUID, PurchaseTypes> getTeamPurchases(Toroidal2DPhysics space, Set<AbstractActionableObject> actionableObjects, ResourcePile resourcesAvailable, PurchaseCosts purchaseCosts) {
    HashMap<UUID, PurchaseTypes> purchases = new HashMap<UUID, PurchaseTypes>();
    double BASE_BUYING_DISTANCE = 200;
    boolean bought_base = false;
    int numBases, numShips;
    // count the number of ships for the base/ship buying algorithm
    numShips = 0;
    for (AbstractActionableObject actionableObject : actionableObjects) {
        if (actionableObject instanceof Ship) {
            numShips++;
        }
    }
    // try to balance
    if (purchaseCosts.canAfford(PurchaseTypes.BASE, resourcesAvailable)) {
        for (AbstractActionableObject actionableObject : actionableObjects) {
            if (actionableObject instanceof Ship) {
                Ship ship = (Ship) actionableObject;
                Set<Base> bases = space.getBases();
                // how far away is this ship to a base of my team?
                boolean buyBase = true;
                numBases = 0;
                for (Base base : bases) {
                    if (base.getTeamName().equalsIgnoreCase(getTeamName())) {
                        numBases++;
                        double distance = space.findShortestDistance(ship.getPosition(), base.getPosition());
                        if (distance < BASE_BUYING_DISTANCE) {
                            buyBase = false;
                        }
                    }
                }
                if (buyBase && numBases < numShips) {
                    purchases.put(ship.getId(), PurchaseTypes.BASE);
                    bought_base = true;
                    System.out.println("Pacifist Flag Collector is buying a base!");
                    break;
                }
            }
        }
    }
    // can I buy a ship?
    if (purchaseCosts.canAfford(PurchaseTypes.SHIP, resourcesAvailable) && bought_base == false) {
        for (AbstractActionableObject actionableObject : actionableObjects) {
            if (actionableObject instanceof Base) {
                Base base = (Base) actionableObject;
                purchases.put(base.getId(), PurchaseTypes.SHIP);
                System.out.println("Pacifist Flag Collector is buying a ship!");
                break;
            }
        }
    }
    return purchases;
}
Also used : AbstractActionableObject(spacesettlers.objects.AbstractActionableObject) HashMap(java.util.HashMap) PurchaseTypes(spacesettlers.actions.PurchaseTypes) Ship(spacesettlers.objects.Ship) UUID(java.util.UUID) Base(spacesettlers.objects.Base)

Example 8 with AbstractActionableObject

use of spacesettlers.objects.AbstractActionableObject in project spacesettlers by amymcgovern.

the class PacifistHeuristicAsteroidCollectorTeamClient method getTeamPurchases.

@Override
public /**
 * If there is enough resourcesAvailable, buy a base.  Place it by finding a ship that is sufficiently
 * far away from the existing bases
 */
Map<UUID, PurchaseTypes> getTeamPurchases(Toroidal2DPhysics space, Set<AbstractActionableObject> actionableObjects, ResourcePile resourcesAvailable, PurchaseCosts purchaseCosts) {
    HashMap<UUID, PurchaseTypes> purchases = new HashMap<UUID, PurchaseTypes>();
    double BASE_BUYING_DISTANCE = 200;
    boolean bought_base = false;
    if (purchaseCosts.canAfford(PurchaseTypes.BASE, resourcesAvailable)) {
        for (AbstractActionableObject actionableObject : actionableObjects) {
            if (actionableObject instanceof Ship) {
                Ship ship = (Ship) actionableObject;
                Set<Base> bases = space.getBases();
                // how far away is this ship to a base of my team?
                boolean buyBase = true;
                for (Base base : bases) {
                    if (base.getTeamName().equalsIgnoreCase(getTeamName())) {
                        double distance = space.findShortestDistance(ship.getPosition(), base.getPosition());
                        if (distance < BASE_BUYING_DISTANCE) {
                            buyBase = false;
                        }
                    }
                }
                if (buyBase) {
                    purchases.put(ship.getId(), PurchaseTypes.BASE);
                    bought_base = true;
                    // System.out.println("Buying a base!!");
                    break;
                }
            }
        }
    }
    // can I buy a ship?
    if (purchaseCosts.canAfford(PurchaseTypes.SHIP, resourcesAvailable) && bought_base == false) {
        for (AbstractActionableObject actionableObject : actionableObjects) {
            if (actionableObject instanceof Base) {
                Base base = (Base) actionableObject;
                purchases.put(base.getId(), PurchaseTypes.SHIP);
                break;
            }
        }
    }
    return purchases;
}
Also used : AbstractActionableObject(spacesettlers.objects.AbstractActionableObject) HashMap(java.util.HashMap) PurchaseTypes(spacesettlers.actions.PurchaseTypes) Ship(spacesettlers.objects.Ship) UUID(java.util.UUID) Base(spacesettlers.objects.Base)

Example 9 with AbstractActionableObject

use of spacesettlers.objects.AbstractActionableObject in project spacesettlers by amymcgovern.

the class Team method getTeamMovementEnd.

/**
 * Allows the client to do cleanup after an action and before
 * the next one (if needed)
 *
 * @param simulatedSpace
 * @return
 */
public void getTeamMovementEnd(Toroidal2DPhysics space) {
    final Toroidal2DPhysics clonedSpace = space.deepClone();
    final Set<AbstractActionableObject> clonedActionableObjects = getTeamActionableObjectsClone(space);
    // if the previous thread call hasn't finished, then just return default
    if (executor == null || executor.isTerminated()) {
        executor = Executors.newSingleThreadExecutor();
    } else {
        return;
    }
    // System.out.println("exec " + executor.isTerminated());
    Future<Boolean> future = executor.submit(new Callable<Boolean>() {

        public Boolean call() throws Exception {
            teamClient.getMovementEnd(clonedSpace, clonedActionableObjects);
            return true;
        }
    });
    Boolean didReturn = false;
    try {
        // start
        didReturn = future.get(SpaceSettlersSimulator.TEAM_END_ACTION_TIMEOUT, TimeUnit.MILLISECONDS);
    // finished in time
    } catch (TimeoutException e) {
        // was terminated
        // set didReturn false
        System.out.println(getTeamName() + " timed out in getTeamMovementEnd");
        didReturn = false;
    } catch (InterruptedException e) {
        // we were interrupted (should not happen but lets be good programmers)
        // set didReturn false
        didReturn = false;
        e.printStackTrace();
    } catch (ExecutionException e) {
        // the executor threw and exception (should not happen but lets be good programmers)
        // set didReturn false
        didReturn = false;
        e.printStackTrace();
    } catch (RejectedExecutionException e) {
        System.err.println("exec" + executor.isTerminated());
        e.printStackTrace();
    } catch (Exception e) {
        // we shouldn't do this but it seems necessary to make
        // the agent behave (do nothing) if it crashes
        didReturn = false;
        System.err.println("Error in agent.  Printing stack trace.");
        e.printStackTrace();
    }
    executor.shutdownNow();
    // figure out how many beacons the team has collected
    // figure out how many hitsInflicted and killsInflicted the team has
    int beacons = 0;
    int hits = 0;
    int killsInflicted = 0;
    int killsReceived = 0;
    int damageInflicted = 0;
    int damagedReceived = 0;
    for (Ship ship : teamShips) {
        beacons += ship.getNumBeacons();
        hits += ship.getHitsInflicted();
        killsInflicted += ship.getKillsInflicted();
        killsReceived += ship.getKillsReceived();
        damageInflicted += ship.getDamageInflicted();
        // check team ships for how much damageInflicted they have received
        damagedReceived += ship.getDamageReceived();
    }
    // check the bases for how much damageInflicted they have received
    for (UUID baseID : teamBaseIDs) {
        Base base = (Base) space.getObjectById(baseID);
        damagedReceived += base.getDamageReceived();
        killsReceived += base.getKillsReceived();
    }
    setTotalBeacons(beacons);
    this.totalKillsInflicted = killsInflicted;
    this.totalKillsReceived = killsReceived;
    this.totalHitsInflicted = hits;
    this.totalDamageInflicted = damageInflicted;
    this.totalDamageReceived = damagedReceived;
}
Also used : AbstractActionableObject(spacesettlers.objects.AbstractActionableObject) TimeoutException(java.util.concurrent.TimeoutException) RejectedExecutionException(java.util.concurrent.RejectedExecutionException) ExecutionException(java.util.concurrent.ExecutionException) RejectedExecutionException(java.util.concurrent.RejectedExecutionException) Base(spacesettlers.objects.Base) Toroidal2DPhysics(spacesettlers.simulator.Toroidal2DPhysics) Ship(spacesettlers.objects.Ship) RejectedExecutionException(java.util.concurrent.RejectedExecutionException) ExecutionException(java.util.concurrent.ExecutionException) UUID(java.util.UUID) TimeoutException(java.util.concurrent.TimeoutException)

Example 10 with AbstractActionableObject

use of spacesettlers.objects.AbstractActionableObject in project spacesettlers by amymcgovern.

the class AggressiveHeuristicAsteroidCollectorSingletonTeamClient method getTeamPurchases.

@Override
public /**
 * If there is enough resourcesAvailable, buy a base.  Place it by finding a ship that is sufficiently
 * far away from the existing bases
 */
Map<UUID, PurchaseTypes> getTeamPurchases(Toroidal2DPhysics space, Set<AbstractActionableObject> actionableObjects, ResourcePile resourcesAvailable, PurchaseCosts purchaseCosts) {
    HashMap<UUID, PurchaseTypes> purchases = new HashMap<UUID, PurchaseTypes>();
    double BASE_BUYING_DISTANCE = 200;
    boolean bought_base = false;
    if (purchaseCosts.canAfford(PurchaseTypes.BASE, resourcesAvailable)) {
        for (AbstractActionableObject actionableObject : actionableObjects) {
            if (actionableObject instanceof Ship) {
                Ship ship = (Ship) actionableObject;
                Set<Base> bases = space.getBases();
                // how far away is this ship to a base of my team?
                double maxDistance = Double.MIN_VALUE;
                for (Base base : bases) {
                    if (base.getTeamName().equalsIgnoreCase(getTeamName())) {
                        double distance = space.findShortestDistance(ship.getPosition(), base.getPosition());
                        if (distance > maxDistance) {
                            maxDistance = distance;
                        }
                    }
                }
                if (maxDistance > BASE_BUYING_DISTANCE) {
                    purchases.put(ship.getId(), PurchaseTypes.BASE);
                    bought_base = true;
                    // System.out.println("Buying a base!!");
                    break;
                }
            }
        }
    }
    // see if you can buy EMPs
    if (purchaseCosts.canAfford(PurchaseTypes.POWERUP_EMP_LAUNCHER, resourcesAvailable)) {
        for (AbstractActionableObject actionableObject : actionableObjects) {
            if (actionableObject instanceof Ship) {
                Ship ship = (Ship) actionableObject;
                if (!ship.getId().equals(asteroidCollectorID) && !ship.isValidPowerup(PurchaseTypes.POWERUP_EMP_LAUNCHER.getPowerupMap())) {
                    purchases.put(ship.getId(), PurchaseTypes.POWERUP_EMP_LAUNCHER);
                }
            }
        }
    }
    // can I buy a ship?
    if (purchaseCosts.canAfford(PurchaseTypes.SHIP, resourcesAvailable) && bought_base == false) {
        for (AbstractActionableObject actionableObject : actionableObjects) {
            if (actionableObject instanceof Base) {
                Base base = (Base) actionableObject;
                purchases.put(base.getId(), PurchaseTypes.SHIP);
                break;
            }
        }
    }
    return purchases;
}
Also used : AbstractActionableObject(spacesettlers.objects.AbstractActionableObject) HashMap(java.util.HashMap) PurchaseTypes(spacesettlers.actions.PurchaseTypes) Ship(spacesettlers.objects.Ship) UUID(java.util.UUID) Base(spacesettlers.objects.Base)

Aggregations

UUID (java.util.UUID)14 AbstractActionableObject (spacesettlers.objects.AbstractActionableObject)14 HashMap (java.util.HashMap)11 Ship (spacesettlers.objects.Ship)9 PurchaseTypes (spacesettlers.actions.PurchaseTypes)8 Base (spacesettlers.objects.Base)8 ExecutionException (java.util.concurrent.ExecutionException)5 Map (java.util.Map)4 RejectedExecutionException (java.util.concurrent.RejectedExecutionException)4 TimeoutException (java.util.concurrent.TimeoutException)4 SpaceSettlersPowerupEnum (spacesettlers.objects.powerups.SpaceSettlersPowerupEnum)4 Toroidal2DPhysics (spacesettlers.simulator.Toroidal2DPhysics)4 AbstractAction (spacesettlers.actions.AbstractAction)3 DoNothingAction (spacesettlers.actions.DoNothingAction)2 AbstractObject (spacesettlers.objects.AbstractObject)2 ResourcePile (spacesettlers.objects.resources.ResourcePile)2 Position (spacesettlers.utilities.Position)2 LinkedHashSet (java.util.LinkedHashSet)1 ExecutorService (java.util.concurrent.ExecutorService)1 Future (java.util.concurrent.Future)1