diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..9a874b5 Binary files /dev/null and b/.DS_Store differ diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000..7b0d367 Binary files /dev/null and b/src/.DS_Store differ diff --git a/src/main/.DS_Store b/src/main/.DS_Store new file mode 100644 index 0000000..5ddc54c Binary files /dev/null and b/src/main/.DS_Store differ diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store new file mode 100644 index 0000000..bd68ff8 Binary files /dev/null and b/src/main/java/.DS_Store differ diff --git a/src/main/java/lol/.DS_Store b/src/main/java/lol/.DS_Store new file mode 100644 index 0000000..6bade33 Binary files /dev/null and b/src/main/java/lol/.DS_Store differ diff --git a/src/main/java/lol/client/ai/RandomAI.java b/src/main/java/lol/client/ai/RandomAI.java index f60584d..9317a98 100644 --- a/src/main/java/lol/client/ai/RandomAI.java +++ b/src/main/java/lol/client/ai/RandomAI.java @@ -15,14 +15,15 @@ public RandomAI(Arena arena, Battlefield battlefield) { public Turn championSelect() { Turn turn = new Turn(); String championName; + //TODO Champion diversity switch(teamID) { case Nexus.BLUE: championName = "Warrior"; break; - case Nexus.RED: championName = "Archer"; break; + case Nexus.RED: championName = "Scientist"; break; default: throw new RuntimeException("Unknown team color."); } turn.registerAction(new ChampionSelect(teamID, championName)); turn.registerAction(new ChampionSelect(teamID, "Warrior")); - turn.registerAction(new ChampionSelect(teamID, "Archer")); + turn.registerAction(new ChampionSelect(teamID, "Scientist")); return turn; } @@ -30,22 +31,22 @@ public Turn turn() { Turn turn = new Turn(); // Try to attack the Nexus first. arena.teamOf(teamID).forEachChampion((champion, id) -> - battlefield.visitAdjacent(champion.x(), champion.y(), champion.attackRange(), new TileVisitor(){ - public void visitNexus(Nexus nexus) { - if(nexus.teamOfNexus() != teamID) { - turn.registerAction(new Attack(teamID, id, nexus.x(), nexus.y())); - } - } - })); + battlefield.visitAdjacent(champion.x(), champion.y(), champion.attackRange(), new TileVisitor(){ + public void visitNexus(Nexus nexus) { + if(nexus.teamOfNexus() != teamID) { + turn.registerAction(new Attack(teamID, id, nexus.x(), nexus.y())); + } + } + })); // Add a move action in case we could not attack the Nexus. arena.teamOf(teamID).forEachChampion((champion, id) -> - battlefield.visitAdjacent(champion.x(), champion.y(), champion.walkSpeed(), new TileVisitor(){ - public void visitGrass(int x, int y) { - if(random.nextInt() % 3 == 0) { - turn.registerAction(new Move(teamID, id, x, y)); - } - } - })); + battlefield.visitAdjacent(champion.x(), champion.y(), champion.walkSpeed(), new TileVisitor(){ + public void visitGrass(int x, int y) { + if(random.nextInt() % 3 == 0) { + turn.registerAction(new Move(teamID, id, x, y)); + } + } + })); return turn; } } diff --git a/src/main/java/lol/game/ASCIIBattlefieldBuilder.java b/src/main/java/lol/game/ASCIIBattlefieldBuilder.java index 7570c08..1a53f75 100644 --- a/src/main/java/lol/game/ASCIIBattlefieldBuilder.java +++ b/src/main/java/lol/game/ASCIIBattlefieldBuilder.java @@ -5,11 +5,14 @@ // Initialize the battlefield with the given textual battlefield. // The textual battlefield is an ASCII representation: -// - '~' is a grass tile (groundASCIIMap). +// - ',' is a grass tile (groundASCIIMap). +// - '~' is a water tile (groundASCIIMap). +// - '-' is a path tile (groundASCIIMap). // - '*' is a rock tile (groundASCIIMap). // - 'B' is a blue Nexus tile (destructibleASCIIMap). // - 'R' is a red Nexus tile (destructibleASCIIMap). // - '.' indicates no destructible is present there (destructibleASCIIMap). + public class ASCIIBattlefieldBuilder { private Battlefield battlefield; private char[][] groundASCIIMap; @@ -57,6 +60,7 @@ private void initDestructibleTile(char destructibleASCII, int x, int y) { assert placed : errorMsg; break; case '.': break; + case ',': break; default: throw new RuntimeException("No destructible object with the representation `" + destructibleASCII + "`."); } diff --git a/src/main/java/lol/game/Arena.java b/src/main/java/lol/game/Arena.java index a0b1e0d..36be3fa 100644 --- a/src/main/java/lol/game/Arena.java +++ b/src/main/java/lol/game/Arena.java @@ -87,7 +87,7 @@ public void visitChampionSelect(int teamID, String championName) { } else { System.out.println("Champion selection action outside of the champion selection phase (teamID = " - + teamID + ", championName = " + championName + "."); + + teamID + ", championName = " + championName + "."); } } } diff --git a/src/main/java/lol/game/Battlefield.java b/src/main/java/lol/game/Battlefield.java index ae6ac68..442bad8 100644 --- a/src/main/java/lol/game/Battlefield.java +++ b/src/main/java/lol/game/Battlefield.java @@ -10,11 +10,16 @@ public class Battlefield { public enum GroundTile { GRASS, - ROCK; + ROCK, + WATER, + PATH; + public static GroundTile fromASCII(char c) { switch(c) { - case '~': return GroundTile.GRASS; + case ',': return GroundTile.GRASS; case '*': return GroundTile.ROCK; + case '~': return GroundTile.WATER; + case '-': return GroundTile.PATH; default: throw new RuntimeException("No ground tile with the representation `" + c + "`."); } } @@ -22,6 +27,8 @@ public static GroundTile fromASCII(char c) { public static boolean walkable(GroundTile groundTile) { switch(groundTile) { case GRASS: return true; + case WATER: return true; + case PATH: return true; case ROCK: return false; default: throw new RuntimeException("Missing GroundTile case in walkable."); } @@ -29,8 +36,10 @@ public static boolean walkable(GroundTile groundTile) { public static char stringOf(GroundTile groundTile) { switch(groundTile) { - case GRASS: return '~'; + case GRASS: return ','; case ROCK: return '*'; + case WATER: return '~'; + case PATH: return '-'; default: throw new RuntimeException("Missing GroundTile case in stringOf."); } } diff --git a/src/main/java/lol/game/Champion.java b/src/main/java/lol/game/Champion.java index 26f7198..8b17972 100644 --- a/src/main/java/lol/game/Champion.java +++ b/src/main/java/lol/game/Champion.java @@ -22,10 +22,13 @@ public static Champion makeWarrior() { return new Champion("Warrior", 15, 1, 3, 2); } + public static Champion makeScientist() { return new Champion("Scientist", 3, 2, 15, 2);} + public static Champion make(String name) { switch(name) { case "Archer": return makeArcher(); case "Warrior": return makeWarrior(); + case "Scientist" : return makeScientist(); default: throw new RuntimeException("The champion " + name + " does not exist."); } } diff --git a/src/main/java/lol/game/TileVisitor.java b/src/main/java/lol/game/TileVisitor.java index dfe84fe..fabfc3a 100644 --- a/src/main/java/lol/game/TileVisitor.java +++ b/src/main/java/lol/game/TileVisitor.java @@ -3,11 +3,15 @@ public interface TileVisitor { default void visitGrass(int x, int y) {} default void visitRock(int x, int y) {} + default void visitPath(int x, int y) {} + default void visitWater(int x, int y) {} default void visitGround(Battlefield.GroundTile groundTile, int x, int y) { switch(groundTile) { case GRASS: visitGrass(x, y); break; case ROCK: visitRock(x, y); break; + case PATH: visitPath(x, y); break; + case WATER: visitWater(x, y); break; default: throw new RuntimeException("Missing GroundTile case in visitGround."); } } diff --git a/src/main/java/lol/ui/BattlefieldView.java b/src/main/java/lol/ui/BattlefieldView.java index 4029a71..1b55e2d 100644 --- a/src/main/java/lol/ui/BattlefieldView.java +++ b/src/main/java/lol/ui/BattlefieldView.java @@ -48,8 +48,11 @@ public void update() { ImageView groundView(Battlefield.GroundTile tile) { switch(tile) { case GRASS: return sprites.grass(); + case WATER: return sprites.water(); + case ROCK: return sprites.rock(); + case PATH: return sprites.path(); default: throw new UnsupportedOperationException( - "Displaying ground tile `" + tile.name() + "` is not yet supported."); + "Displaying ground tile `" + tile.name() + "` is not yet supported."); } } @@ -57,9 +60,10 @@ ImageView championView(Champion champion) { String name = champion.name(); if(name.equals("Archer")) { return sprites.archer(); } else if (name.equals("Warrior")) { return sprites.warrior(); } + else if (name.equals("Scientist")) { return sprites.scientist();} else { throw new UnsupportedOperationException( - "Displaying Champion tile `" + name + "` is not yet supported."); + "Displaying Champion tile `" + name + "` is not yet supported."); } } diff --git a/src/main/java/lol/ui/Sprites.java b/src/main/java/lol/ui/Sprites.java index a3eae85..e32a6d6 100644 --- a/src/main/java/lol/ui/Sprites.java +++ b/src/main/java/lol/ui/Sprites.java @@ -5,15 +5,22 @@ public class Sprites { private Image grassImage; + private Image waterImage; + private Image pathImage; private Image archerImage; private Image warriorImage; + private Image scientistImage; private Image blueNexusImage; private Image redNexusImage; public Sprites() { + grassImage = new Image("sprites/grass-tile.png"); + waterImage = new Image("sprites/water-tile.png"); + pathImage = new Image("sprites/path-tile.png"); archerImage = new Image("sprites/archer.png"); warriorImage = new Image("sprites/warrior.png"); + scientistImage = new Image("sprites/scientist.png"); blueNexusImage = new Image("sprites/blue-nexus.png"); redNexusImage = new Image("sprites/red-nexus.png"); } @@ -28,6 +35,18 @@ public ImageView grass() { return makeView(grassImage); } + public ImageView water() { + return makeView(waterImage); + } + + public ImageView path() { + return makeView(pathImage); + } + + public ImageView rock() { + return makeView(pathImage); + } + public ImageView archer() { return makeView(archerImage); } @@ -36,6 +55,8 @@ public ImageView warrior() { return makeView(warriorImage); } + public ImageView scientist() {return makeView(scientistImage);} + public ImageView blueNexus() { return makeView(blueNexusImage); } diff --git a/src/main/resources/.DS_Store b/src/main/resources/.DS_Store new file mode 100644 index 0000000..06977f8 Binary files /dev/null and b/src/main/resources/.DS_Store differ diff --git a/src/main/resources/maps/ground.map b/src/main/resources/maps/ground.map index 90b1282..05a805d 100644 --- a/src/main/resources/maps/ground.map +++ b/src/main/resources/maps/ground.map @@ -1,10 +1,11 @@ -~~~~~~~~~~ -~~~~~~~~~~ -~~~~~~~~~~ -~~~~~~~~~~ -~~~~~~~~~~ -~~~~~~~~~~ -~~~~~~~~~~ -~~~~~~~~~~ -~~~~~~~~~~ -~~~~~~~~~~ \ No newline at end of file +,,,,,,,--- +,--------- +,-~,,,,--- +,-,~,,-,-, +,-,,~-,,-, +,-,,-~,,-, +,-,-,,~,-, +---,,,,~-, +---------, +---,,,,,,, + diff --git a/src/main/resources/sprites/.DS_Store b/src/main/resources/sprites/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/src/main/resources/sprites/.DS_Store differ diff --git a/src/main/resources/sprites/path-tile.png b/src/main/resources/sprites/path-tile.png new file mode 100644 index 0000000..8b692e4 Binary files /dev/null and b/src/main/resources/sprites/path-tile.png differ diff --git a/src/main/resources/sprites/scientist.png b/src/main/resources/sprites/scientist.png new file mode 100644 index 0000000..ed3c613 Binary files /dev/null and b/src/main/resources/sprites/scientist.png differ diff --git a/src/main/resources/sprites/water-tile.png b/src/main/resources/sprites/water-tile.png new file mode 100644 index 0000000..3152c59 Binary files /dev/null and b/src/main/resources/sprites/water-tile.png differ diff --git a/target/classes/maps/destructible.map b/target/classes/maps/destructible.map new file mode 100644 index 0000000..d276547 --- /dev/null +++ b/target/classes/maps/destructible.map @@ -0,0 +1,10 @@ +.......... +........R. +.......... +.......... +.......... +.......... +.......... +.......... +.B........ +.......... \ No newline at end of file diff --git a/target/classes/maps/ground.map b/target/classes/maps/ground.map new file mode 100644 index 0000000..05a805d --- /dev/null +++ b/target/classes/maps/ground.map @@ -0,0 +1,11 @@ +,,,,,,,--- +,--------- +,-~,,,,--- +,-,~,,-,-, +,-,,~-,,-, +,-,,-~,,-, +,-,-,,~,-, +---,,,,~-, +---------, +---,,,,,,, + diff --git a/target/classes/sprites/archer.png b/target/classes/sprites/archer.png new file mode 100644 index 0000000..2d4a35a Binary files /dev/null and b/target/classes/sprites/archer.png differ diff --git a/target/classes/sprites/blue-nexus.png b/target/classes/sprites/blue-nexus.png new file mode 100644 index 0000000..175719b Binary files /dev/null and b/target/classes/sprites/blue-nexus.png differ diff --git a/target/classes/sprites/grass-tile.png b/target/classes/sprites/grass-tile.png new file mode 100644 index 0000000..7cfadc7 Binary files /dev/null and b/target/classes/sprites/grass-tile.png differ diff --git a/target/classes/sprites/path-tile.png b/target/classes/sprites/path-tile.png new file mode 100644 index 0000000..8b692e4 Binary files /dev/null and b/target/classes/sprites/path-tile.png differ diff --git a/target/classes/sprites/red-nexus.png b/target/classes/sprites/red-nexus.png new file mode 100644 index 0000000..8354f52 Binary files /dev/null and b/target/classes/sprites/red-nexus.png differ diff --git a/target/classes/sprites/river-tile.png b/target/classes/sprites/river-tile.png new file mode 100644 index 0000000..3152c59 Binary files /dev/null and b/target/classes/sprites/river-tile.png differ diff --git a/target/classes/sprites/warrior.png b/target/classes/sprites/warrior.png new file mode 100644 index 0000000..1edbcdf Binary files /dev/null and b/target/classes/sprites/warrior.png differ diff --git a/target/classes/sprites/water-tile.png b/target/classes/sprites/water-tile.png new file mode 100644 index 0000000..3152c59 Binary files /dev/null and b/target/classes/sprites/water-tile.png differ diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..5df500b --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,37 @@ +lol/client/ai/RandomAI$2.class +lol/game/Arena.class +lol/game/action/ChampionSelect.class +lol/client/Client.class +lol/client/ai/AIBase.class +lol/game/Champion.class +lol/game/TileVisitor.class +lol/game/Battlefield$2.class +lol/game/Arena$Phase.class +lol/game/action/Spawn.class +lol/ui/Sprites.class +lol/game/Team$1.class +lol/game/action/Turn.class +lol/ui/BattlefieldView.class +lol/common/ServerInfo.class +lol/game/action/ActionVisitor.class +lol/game/action/ChampionAction.class +lol/game/action/Attack.class +lol/server/Server.class +lol/game/ASCIIBattlefieldBuilder.class +lol/game/Battlefield$1.class +lol/game/Team.class +lol/game/action/Action.class +lol/client/ai/RandomAI$1.class +lol/game/Battlefield.class +lol/ui/BattlefieldView$1.class +lol/server/LOL2D.class +lol/game/Team$2.class +lol/client/ai/RandomAI.class +lol/game/Battlefield$GroundTile.class +lol/game/Nexus.class +lol/game/Arena$ApplyAction.class +lol/game/TileVisitor$1.class +lol/common/BadProtocolException.class +lol/server/Player.class +lol/game/action/Move.class +lol/game/Destructible.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..4db837d --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,26 @@ +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/common/ServerInfo.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/action/ChampionAction.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/client/ai/RandomAI.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/Team.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/Battlefield.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/action/ChampionSelect.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/action/Action.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/ui/BattlefieldView.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/client/ai/AIBase.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/action/Move.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/server/Player.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/common/BadProtocolException.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/action/ActionVisitor.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/action/Turn.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/client/Client.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/TileVisitor.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/server/Server.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/Arena.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/Destructible.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/ui/Sprites.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/Champion.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/action/Spawn.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/action/Attack.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/ASCIIBattlefieldBuilder.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/server/LOL2D.java +/Users/daniel/git/BICS-S2.21/lol2d/src/main/java/lol/game/Nexus.java