From b7c5991a7a875fe65491cbcae9c59a3912d4f356 Mon Sep 17 00:00:00 2001 From: Tony Grosinger Date: Sat, 4 Jun 2011 22:35:53 -0700 Subject: [PATCH] -Implemented most of Steal -Started Attack Signed-off-by: Tony Grosinger --- bin/net/grosinger/nomads/Drone.class | Bin 491 -> 560 bytes bin/net/grosinger/nomads/DroneListItem.class | Bin 6866 -> 8496 bytes bin/net/grosinger/nomads/DroneTools.class | Bin 5683 -> 5727 bytes bin/net/grosinger/nomads/Neighbor.class | Bin 867 -> 999 bytes bin/net/grosinger/nomads/Nomads.class | Bin 4388 -> 4731 bytes bin/net/grosinger/nomads/World.class | Bin 8127 -> 9180 bytes src/net/grosinger/nomads/Drone.java | 20 +++- src/net/grosinger/nomads/DroneListItem.java | 101 ++++++++++++++++++- src/net/grosinger/nomads/DroneTools.java | 2 +- src/net/grosinger/nomads/Neighbor.java | 13 ++- src/net/grosinger/nomads/Nomads.java | 25 ++++- src/net/grosinger/nomads/World.java | 78 ++++++++++++-- 12 files changed, 220 insertions(+), 19 deletions(-) diff --git a/bin/net/grosinger/nomads/Drone.class b/bin/net/grosinger/nomads/Drone.class index 72210059b8e91496f51993eab1787ec2c63fe226..f344d59d44533abf430ef9eb3364225a0925db39 100644 GIT binary patch delta 137 zcmaFOyn%)5)W2Q(7#J9g7^F6G@iFqS7MG+Z<}flSYH0dQ6c82iOU+ErNXjp=W@KPX zEGbD$&YmpBsLdkA$e=w@Kx*;?MvlomjGS!j3=)hCN)QnRMz+Zt85Oix7#a8(1Q-~A dv>=FPU}6vglfn!lK$?qzkwKI}oI%n-5&*CT7*qfN delta 80 zcmdnM@|v0J)W2Q(7#J9g7{oVn@i9*JWz=L5W@ONwC?GX?3ZpQKC?kUsh<%h%fstkM gGe!j|1||l6pav!e0R}-J&BegTAjBZTAm$(m0R3zZKmY&$ diff --git a/bin/net/grosinger/nomads/DroneListItem.class b/bin/net/grosinger/nomads/DroneListItem.class index 47e8905bfb135e670e741998e3cc09268a20cffd..3ad8935c52ef418cf0bbbc4d980a48b50bddd50b 100644 GIT binary patch literal 8496 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 MMf^jAh*ekgdw_vong9R* literal 6866 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 bOAKS-2EP+#@mqut!{?XqB~XZx`6V9%8QkH- diff --git a/bin/net/grosinger/nomads/DroneTools.class b/bin/net/grosinger/nomads/DroneTools.class index 0df934063e1c37227965ae71bf2ca3928e58e077..d87188542deb5921bca98e9e2b05f2349d502061 100644 GIT binary patch delta 1289 zcmZWpYj9IV7(JW&%HtwU>9vVAT9DB;N!#%i$A(r!2d6U?iwL!XLo;nAP^Co-AXu&1 zilPX?wUt;gwv-LhC|R_lDXdRg0o)R<=iie2?lMVFA9J{*FYy&W=jfEbXYdHYsnz-!scSb>*r-qAS=`-}!SZ_V2#V8at|_sss7+!Y zO#wNHUT+#To@PqUlv@+%&M*71k%C%7{x{J!weCl=Cyr%?97iJ^a!(!4Z%(77T5&7m zh{P?po*yo_Y_?k+#ac#oJWy@*xvgnD*w`a8LoV4nc~6hTJTx!mk~7$qBtQ1!3EH^{ zIrPF$wJ*ynKm{skWyL7E@CdcN07G~b7r=rd4B#<}B$S{Z-4w}KjaoEdAr#tOg&y)j zCCoBBP6!&3G&T{B6;BeTPG}~s1)F)!>FU~Q`JEmxJcXy}-$`4J&~Zr=<8|U#23z7- zltrvb2p67Y@NB);mqBl17V)NG^!w7-LnA@%7^ApPXn*-uVU<6PeKeO7Od79KRBT3r z{y{cK_!4{oUs8BOTM8q@JqMTIEu=~0?UYr({=i-II76EAg>50N7D@%Fus*Y}tN&LR z(Fr1|=j}Xo-+!q2WZ|5mtVt(GB(Q3N6ra>>Gm00RGN`9Vq0yTnOEm)iA92&$eoa^m4r=c?it+}lV1MEwM$fswzEJ~Xv@fOb_Rw)r#}#NVIw+OT(XKyJEJgZhoWe` z;O4Eny$-DmVTgir%Ak0KJVwb<-BvD zY^Y#%e)+;5R40x`M3jt+FGxB`zbxcP*vsa1E|u^!zj9>e3=3vz(@ zUsUlDUS=qWM-sQScWjQuS4I+X2C=fKYMp{@{3t8s<5tOQM;bc}*iHtivZ={HF>n>H zU^kCho7tlv$J%b;Ju>kQZNo0-PjZ7xa09t?2R7S_^OW{{TK(TBYTZkVBwGucgk z)$)jnx9~RKYpavTuus7|{C8W0@Gkaq#eTK?zKU@YL-uaR7<3g=$T6&>%if&>Hh$h7 z^rSJZVg~yu|3ox-j}hsxiX(K%<5+dW7>=tr0Y8I17ERs~c`(x67PVm(Un)4s;Cvv` z6{#U(tfr+qk&Hg1;wzludmMgth97p6mwki4TR=yHZ$n@TW#awA=*g@7NRV)o zCjNWSwxIW;)tA9tnwUW|pLP0JE&tP5;mcujoi*sO>UeZ*ugEmfJ94SBS71Kc@8dN^ z^{FB3z$muj0Jh*Db|XZo+?!7b)mTEB6_e<}6EsdI_Tfns!h%H@L5d^+UYhVzB#GFB zsj=Y{2Vb=qM6)l$c14InKVfAa4T5P*hMJpZ)~;v zMLvvjd!84%O4huPLCXx%twt-1s&m+WM;F{}-8f z28jZGkZ1S(mmMr#kveFy4Wa;6M{xQZh*|`&dFq%#2N&tG=W^yc+Kxk^@ry!(5%98| zN?j#}MIkJSVR;nCs*M9p)a3XE9fu5UP?Pf7hX${jj%l&M>>tJTEOpdOqZAkL5k96Y zDsc{&q$K66en?vB-w05IngI_S$==ldwTr`RR diff --git a/bin/net/grosinger/nomads/Neighbor.class b/bin/net/grosinger/nomads/Neighbor.class index 4f03424afa3f8c38bd7e199259d81e7689c3eaed..93fb9618792a608701b0d4ca0fe61784aef4df0f 100644 GIT binary patch literal 999 zcmZuuU2hUW6g{&nyDcuZmQo6|*48g}jc(HTR?}!S8WMsJtwbLeI-%RZZnA9sc=HGO zpozr92Y-M+%6MiLtbq*~?w#SBd(S!i{`2z}fJ1mT41wK9rv5OACt);{i66z|;B4Y| zWjH+V$B7M7VErO^ANZpn8v3vM7jlr=umtvUiLZjO%s>KW#EZa2=Zb%lCfsu*AU^W6 zc|Hjg-n3r`SWm(zOpgWJR=d4SS$=VQT=6_UlO+^z!$BDvoYiuBs}R_9u!@rEwj5l` zx@`wGR@7U=frAx+wN4nx?&Y{IlhdF-(qiL5FzN+KsP3~zGd&L{bll0cJkN@*?4eA% z+Vp12T~0Mpk(Kw4vz@E(6)z&gu*|j72A)8-1i7%6Zd>Jay<++4MDrxM~ zVS%Rz6Na+PzuQo8=*lp3WdN)eab;ZR_Zn}Xi7T=;ydPNinp0G~ohho`!zpTB-JGKS zO>>(HLoQI`j&07ab4CLdG}-O&13by^ zg)e&FQTxiq;P^~32vSR&3@}?FX#IdM%F6%b%9jPQn@hf(ORg@G4|Bl)5Ll07>IF$W45L6MUK9`fv!U0P zVQ}7!6C0+$!iE3E_xgSmcptkLvX|Ph1U7SlAN+yLngq;_~piXiF#YWzv)HL#1_YGWoSyAGT<*z*A&2lt2DMLwVOXo%1g8 zyMsB#$E^DNZt||UzcKHwj!<^jMy&QmsQ%KZ6~-!2Dw?Q~ZH34uSi)0Az|HWiR#}lr z&l5UR6AhgyElSxM*2j}Q-m0tUUZMJvi9uq((vKUO+Q}Nm)B+pWj2>`Nhnk_9b=|MU!VXuUEbnT$&;J0d-HO2g diff --git a/bin/net/grosinger/nomads/Nomads.class b/bin/net/grosinger/nomads/Nomads.class index a99c266719fb27336c8271c991567ce44b2ee7a0..200d79b1a6a109c035caa30927f590bd6360fe2f 100644 GIT binary patch delta 453 zcmZXRy-PxI6o%iQn&!TEe(BtfBgkPcFZuTIB!6kz} zC@c!jkP!AeN2G;7*ssGiZWz?!d{hWU7;4*nzsT@ZP@I-L_HjAIO}18#c?U-4e1VAM zmBd+w-g2~PFP#7&BnR znsAQ?nHlPuZP4NoPqeiWv+-l$E?HQ~!o2*~;_RPAmhulN`3QF8;6N5VI4QGm;~6jC g7N(K~U$7v@5bX_6?MvcB-zNB`qJL#^r-g;kG~;>xe_lW`j)+JSlqti?2T||1ydI diff --git a/bin/net/grosinger/nomads/World.class b/bin/net/grosinger/nomads/World.class index 19bfcfc7d73dd5d9925cb8fd47ef5e9785217bec..79239a4f9885f22dc30d15782bc7e21f45cea562 100644 GIT binary patch literal 9180 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 + */ + public Neighbor steal(); + + /** + * Asks for which drone should be attacked. Will be called whenever the Move + * method returns Attack. + * + * @return Neighbor + */ + public Neighbor attack(); + } diff --git a/src/net/grosinger/nomads/DroneListItem.java b/src/net/grosinger/nomads/DroneListItem.java index 48a83c9..376bca2 100644 --- a/src/net/grosinger/nomads/DroneListItem.java +++ b/src/net/grosinger/nomads/DroneListItem.java @@ -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--; diff --git a/src/net/grosinger/nomads/DroneTools.java b/src/net/grosinger/nomads/DroneTools.java index dc23b7e..cf4d761 100644 --- a/src/net/grosinger/nomads/DroneTools.java +++ b/src/net/grosinger/nomads/DroneTools.java @@ -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); } } diff --git a/src/net/grosinger/nomads/Neighbor.java b/src/net/grosinger/nomads/Neighbor.java index 6c5f303..cfbf37d 100644 --- a/src/net/grosinger/nomads/Neighbor.java +++ b/src/net/grosinger/nomads/Neighbor.java @@ -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 String - UID + */ + public String getUID() { + return UID; + } + @Override public void setName(String newName) { name = newName; diff --git a/src/net/grosinger/nomads/Nomads.java b/src/net/grosinger/nomads/Nomads.java index 9419e19..8359eeb 100644 --- a/src/net/grosinger/nomads/Nomads.java +++ b/src/net/grosinger/nomads/Nomads.java @@ -172,10 +172,33 @@ public class Nomads { } } + /** + * Matches a Drone to a DroneListItem + * + * @param theDrone + * Drone to be found + * @return DroneListItem + */ 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 + * String UID that needs to be found + * @return DroneListItem + */ + public static DroneListItem UIDToListItem(String UID) { + for (DroneTeam team : allTeams) { + DroneListItem current = team.getFirst(); + if (current.getCurrent().getUID().equals(UID)) return current; } return null; diff --git a/src/net/grosinger/nomads/World.java b/src/net/grosinger/nomads/World.java index c88e347..92db099 100644 --- a/src/net/grosinger/nomads/World.java +++ b/src/net/grosinger/nomads/World.java @@ -113,9 +113,57 @@ public class World { * GameObject to be placed */ public void setObjectAt(int x, int y, GameObject newItem) { - theWorld[x][y] = newItem; - // TODO - Make sure this spot is free. - // If it is not, then move somewhere close by + if (theWorld[x][y] == null) { + theWorld[x][y] = newItem; + } 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 Point + */ + 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 ArrayList(building) */ public ArrayList buildingsInRange(int x, int y, int range) { - // TODO - Implement buildingsInRange - return null; + ArrayList allBuildings = new ArrayList(); + + 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; } /** @@ -250,10 +308,10 @@ 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; }