-Implemented most of Steal
-Started Attack Signed-off-by: Tony Grosinger <github2@grosinger.net>
This commit is contained in:
parent
a0e3d07a90
commit
b7c5991a7a
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -37,4 +37,20 @@ public interface Drone extends GameObject {
|
||||
*/
|
||||
public EnumMove move();
|
||||
|
||||
/**
|
||||
* Asks for which drone should be stolen from. Will be called whenever the
|
||||
* Move method returns Steal.
|
||||
*
|
||||
* @return <code>Neighbor</code>;
|
||||
*/
|
||||
public Neighbor steal();
|
||||
|
||||
/**
|
||||
* Asks for which drone should be attacked. Will be called whenever the Move
|
||||
* method returns Attack.
|
||||
*
|
||||
* @return <code>Neighbor</code>
|
||||
*/
|
||||
public Neighbor attack();
|
||||
|
||||
}
|
||||
|
@ -36,10 +36,12 @@ public class DroneListItem {
|
||||
private int lumaLocatorDistance;
|
||||
private int objectLocatorDistance;
|
||||
private int reliability;
|
||||
private int defenses;
|
||||
private int attack; // Between 1 and 2 - reflects how well can attack
|
||||
private int defenses; // Between 1 and 2 - reflects ability to block
|
||||
// steal
|
||||
private int speed; // Reflected in movements per turn
|
||||
private int cargoSpace;
|
||||
private int theft;
|
||||
private int theft; // Between 1 and 2 - reflects how well can steal
|
||||
|
||||
// Info about this robot
|
||||
|
||||
@ -209,6 +211,10 @@ public class DroneListItem {
|
||||
return team;
|
||||
}
|
||||
|
||||
public boolean getInventoryIsFull() {
|
||||
return inventory.size() >= cargoSpace;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the next DroneListItem in the Linked List
|
||||
*
|
||||
@ -335,11 +341,11 @@ public class DroneListItem {
|
||||
return true;
|
||||
}
|
||||
case Attack: {
|
||||
// TODO - Implement attack
|
||||
doAttack();
|
||||
return true;
|
||||
}
|
||||
case Steal: {
|
||||
// TODO - Implement steal
|
||||
doSteal();
|
||||
return true;
|
||||
}
|
||||
default: {
|
||||
@ -351,6 +357,93 @@ public class DroneListItem {
|
||||
|
||||
// Movement
|
||||
|
||||
/**
|
||||
* Finds who the drone wants to attack and attempts to perform attack.
|
||||
*/
|
||||
private void doAttack() {
|
||||
Neighbor victimNeighbor = current.attack();
|
||||
|
||||
if (victimNeighbor == null) {
|
||||
// Seems they did something wrong. Turn wasted.
|
||||
return;
|
||||
}
|
||||
|
||||
DroneListItem victimList = Nomads.UIDToListItem(victimNeighbor.getUID());
|
||||
|
||||
int victimDefence = victimList.getDefenses();
|
||||
|
||||
// Find a random number between 0-100 to determine success.
|
||||
// Min + (int)(Math.random() * ((Max - Min) + 1))
|
||||
int rand = 0 + (int) (Math.random() * ((100 - 0) + 1));
|
||||
|
||||
// Find modified random number based on stats
|
||||
int newRand = rand * (victimDefence - attack) * -1;
|
||||
newRand += rand;
|
||||
|
||||
// If number is <= 35, drone becomes wanted
|
||||
// If number is <= 70, steal fails
|
||||
// If number is > 70, steal
|
||||
// Depending on how much higher than 70, more items will be stolen
|
||||
|
||||
// TODO - Continue implementing attack
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds who the drone wants to steal from and attempts to perform steal.
|
||||
*/
|
||||
private void doSteal() {
|
||||
Neighbor victimNeighbor = current.steal();
|
||||
|
||||
if (victimNeighbor == null) {
|
||||
// Seems they did something wrong. Turn wasted.
|
||||
return;
|
||||
}
|
||||
|
||||
DroneListItem victimList = Nomads.UIDToListItem(victimNeighbor.getUID());
|
||||
|
||||
int victimDefence = victimList.getDefenses();
|
||||
|
||||
// Find a random number between 0-100 to determine success.
|
||||
// Min + (int)(Math.random() * ((Max - Min) + 1))
|
||||
int rand = 0 + (int) (Math.random() * ((100 - 0) + 1));
|
||||
|
||||
// Find modified random number based on stats
|
||||
int newRand = rand * (victimDefence - theft) * -1;
|
||||
newRand += rand;
|
||||
|
||||
// If number is <= 35, drone becomes wanted
|
||||
// If number is <= 70, steal fails
|
||||
// If number is > 70, steal
|
||||
// Depending on how much higher than 70, more items will be stolen
|
||||
|
||||
int itemsInVictimInventory = victimList.inventory.size();
|
||||
Double percentToTake = .00;
|
||||
|
||||
if (newRand <= 35) {
|
||||
// TODO - Implement wanted
|
||||
} else if (newRand <= 70) {
|
||||
percentToTake = .00;
|
||||
} else if (newRand > 70 && newRand <= 80) {
|
||||
percentToTake = .2;
|
||||
} else if (newRand > 80 && newRand >= 90) {
|
||||
percentToTake = .4;
|
||||
} else if (newRand >= 100 && newRand <= 98) {
|
||||
percentToTake = .7;
|
||||
} else if (newRand > 98) {
|
||||
percentToTake = 1.0;
|
||||
} else {
|
||||
// Not sure what happened here
|
||||
}
|
||||
|
||||
int itemsToTake = (int) Math.ceil(itemsInVictimInventory * percentToTake);
|
||||
while (itemsToTake < 0 && !getInventoryIsFull() && victimList.inventory.size() > 0) {
|
||||
// Min + (int)(Math.random() * ((Max - Min) + 1))
|
||||
int randIndex = 0 + (int) (Math.random() * (((victimList.inventory.size() - 1) - 0) + 1));
|
||||
inventory.add(victimList.inventory.get(randIndex));
|
||||
victimList.inventory.remove(randIndex);
|
||||
}
|
||||
}
|
||||
|
||||
private void moveDrone(Direction direction) {
|
||||
if (waiting != 0) {
|
||||
waiting--;
|
||||
|
@ -140,7 +140,7 @@ public class DroneTools {
|
||||
if (objectHere instanceof Drone) {
|
||||
Drone droneHere = (Drone) objectHere;
|
||||
DroneListItem listItemHere = Nomads.droneToListItem(droneHere);
|
||||
Neighbor aWildNeighbor = new Neighbor(listItemHere.getX(), listItemHere.getY(), droneHere.getName());
|
||||
Neighbor aWildNeighbor = new Neighbor(listItemHere.getX(), listItemHere.getY(), droneHere.getName(), droneHere.getUID());
|
||||
neighbors.add(aWildNeighbor);
|
||||
}
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ public class Neighbor implements GameObject {
|
||||
private String name;
|
||||
private int x;
|
||||
private int y;
|
||||
private String UID;
|
||||
|
||||
/**
|
||||
* Class Constructor
|
||||
@ -19,10 +20,11 @@ public class Neighbor implements GameObject {
|
||||
* @param name
|
||||
* - Name of the Drone
|
||||
*/
|
||||
public Neighbor(int x, int y, String name) {
|
||||
public Neighbor(int x, int y, String name, String UID) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.name = name;
|
||||
this.UID = UID;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -48,6 +50,15 @@ public class Neighbor implements GameObject {
|
||||
return y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve UID of this Neighbor
|
||||
*
|
||||
* @return <code>String</code> - UID
|
||||
*/
|
||||
public String getUID() {
|
||||
return UID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(String newName) {
|
||||
name = newName;
|
||||
|
@ -172,10 +172,33 @@ public class Nomads {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches a Drone to a DroneListItem
|
||||
*
|
||||
* @param theDrone
|
||||
* <code>Drone</code> to be found
|
||||
* @return <code>DroneListItem</code>
|
||||
*/
|
||||
public static DroneListItem droneToListItem(Drone theDrone) {
|
||||
for (DroneTeam team : allTeams) {
|
||||
DroneListItem current = team.getFirst();
|
||||
if (current.getCurrent().getUID() == theDrone.getUID())
|
||||
if (current.getCurrent().getUID().equals(theDrone.getUID()))
|
||||
return current;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches a UID to a Drone
|
||||
*
|
||||
* @param UID
|
||||
* <code>String</code> UID that needs to be found
|
||||
* @return <code>DroneListItem</code>
|
||||
*/
|
||||
public static DroneListItem UIDToListItem(String UID) {
|
||||
for (DroneTeam team : allTeams) {
|
||||
DroneListItem current = team.getFirst();
|
||||
if (current.getCurrent().getUID().equals(UID))
|
||||
return current;
|
||||
}
|
||||
return null;
|
||||
|
@ -113,9 +113,57 @@ public class World {
|
||||
* GameObject to be placed
|
||||
*/
|
||||
public void setObjectAt(int x, int y, GameObject newItem) {
|
||||
if (theWorld[x][y] == null) {
|
||||
theWorld[x][y] = newItem;
|
||||
// TODO - Make sure this spot is free.
|
||||
// If it is not, then move somewhere close by
|
||||
} else {
|
||||
Point here = findEmptyPoint(new Point(x, y));
|
||||
theWorld[here.getX()][here.getY()] = newItem;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find "closest" point that is available to the point provided
|
||||
*
|
||||
* @param currentPoint
|
||||
* - Location of drone
|
||||
* @return <code>Point</code>
|
||||
*/
|
||||
private Point findEmptyPoint(Point currentPoint) {
|
||||
// Current point is where the drone is
|
||||
boolean validSpace = theWorld[currentPoint.getX()][currentPoint.getY()] == null;
|
||||
Point tryThis = new Point(currentPoint.getX(), currentPoint.getY());
|
||||
int outX = 1;
|
||||
int outY = 0;
|
||||
int multiplier = 1;
|
||||
|
||||
while (!validSpace) {
|
||||
tryThis.setX(currentPoint.getX() + (outX * multiplier));
|
||||
tryThis.setY(currentPoint.getY() + (outY * multiplier));
|
||||
if (theWorld[tryThis.getX()][tryThis.getY()] == null)
|
||||
validSpace = true;
|
||||
else {
|
||||
if (outX == 1 && outY == 0) {
|
||||
outY = 1;
|
||||
} else if (outX == 1 && outY == 1)
|
||||
outX = 0;
|
||||
else if (outX == 0 && outY == 1)
|
||||
outX = -1;
|
||||
else if (outX == -1 && outY == 1)
|
||||
outY = 0;
|
||||
else if (outX == -1 && outY == 0)
|
||||
outY = -1;
|
||||
else if (outX == -1 && outY == -1)
|
||||
outX = 0;
|
||||
else if (outX == 0 && outY == -1)
|
||||
outX = 1;
|
||||
else if (outX == 1 && outY == -1) {
|
||||
outY = 0;
|
||||
outX = 1;
|
||||
multiplier++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return tryThis;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -207,7 +255,8 @@ public class World {
|
||||
}
|
||||
|
||||
/**
|
||||
* Searches for any buildings within range spaces of x,y
|
||||
* Searches for any buildings within range spaces of x,y. This returns a
|
||||
* building and should not be given to a Drone
|
||||
*
|
||||
* @param x
|
||||
* - X Index
|
||||
@ -218,8 +267,17 @@ public class World {
|
||||
* @return <code>ArrayList(building)</code>
|
||||
*/
|
||||
public ArrayList<Building> buildingsInRange(int x, int y, int range) {
|
||||
// TODO - Implement buildingsInRange
|
||||
return null;
|
||||
ArrayList<Building> allBuildings = new ArrayList<Building>();
|
||||
|
||||
for (int i = -range; i <= range; i++) {
|
||||
for (int j = -range; j <= range; j++) {
|
||||
GameObject objectHere = theWorld[x + i][y + j];
|
||||
if (objectHere != null && objectHere instanceof Building) {
|
||||
allBuildings.add((Building) objectHere);
|
||||
}
|
||||
}
|
||||
}
|
||||
return allBuildings;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -251,8 +309,8 @@ public class World {
|
||||
Objective newObjective = new Objective(bounty, UID);
|
||||
setObjectAt(randX, randY, newObjective);
|
||||
|
||||
//Create a point to return that is somewhere nearby the actual location
|
||||
Point pointCloseBy = new Point(randX+varX, randY+varY);
|
||||
// Create a point to return that is somewhere nearby the actual location
|
||||
Point pointCloseBy = new Point(randX + varX, randY + varY);
|
||||
|
||||
return pointCloseBy;
|
||||
}
|
||||
|
Reference in New Issue
Block a user