diff --git a/src/Board.java b/src/Board.java index 0587b0c..c1b2974 100644 --- a/src/Board.java +++ b/src/Board.java @@ -1,3 +1,7 @@ +/** + * Die Board-Klasse repräsentiert das Spielfeld. + * @author Peer Ole Wachtel, Florian Alexy und Florian Hantzschel + */ import java.util.ArrayList; import java.util.List; @@ -8,7 +12,11 @@ public class Board { private List ships; private final int size; - + /** + * Initialisiert das Board und die zu Setzenden schiffe. + * @param size + * @author Peer Ole Wachtel, Florian Alexy und Florian Hantzschel + */ public Board(int size) { this.size = size; this.ships = new ArrayList<>(); @@ -64,6 +72,7 @@ public class Board { /** * creates all the ships on a board given a certain semester * @param semester the semester to be played in + * @author Peer Ole Wachtel */ private void createShip(int semester){ List shipData = Ship.semeterList.get(semester -1); diff --git a/src/OnlinePlayer_1_1_0.java b/src/OnlinePlayer_1_1_0.java index b401a6e..df7c8a9 100644 --- a/src/OnlinePlayer_1_1_0.java +++ b/src/OnlinePlayer_1_1_0.java @@ -10,7 +10,7 @@ public class OnlinePlayer_1_1_0 extends OnlinePlayer { * receives a message from the AsyncSocket * implemented according to version 1.1.0 of https://github.com/lgc-4/ProgProjekt-Netzwerkstandard * @param message the message from the socket - * @author Peer Ole Wachtel, Luca Conte + * @author Peer Ole Wachtel, Luca Conte, Florian Hantzschel */ @Override public void receive(String message) { @@ -67,6 +67,13 @@ public class OnlinePlayer_1_1_0 extends OnlinePlayer { //TODO CHAT break; + case "WITHDRAW": + //Found funny cheese to do this without GUI Access + HitResponse tmp_hit = new HitResponse(0, new Point(0,0)); + tmp_hit.setType(HitResponseType.VICTORY); + this.receiveHit(tmp_hit); + break; + default: //nichts passier da Paket ungültig break; diff --git a/src/SpecificAiPlayerEasy.java b/src/SpecificAiPlayerEasy.java index a499e81..6be23bb 100644 --- a/src/SpecificAiPlayerEasy.java +++ b/src/SpecificAiPlayerEasy.java @@ -1,12 +1,13 @@ /** * Diese Klasse implementiert den Einfachsten Ki Spieler. - * @author Florian und Florian + * @author Florian Alexy und Florian Hantzschel * */ public class SpecificAiPlayerEasy extends AiPlayer{ /** * Bein einfachen Ki Spieler wird nur der AiPlayer initialisiert und der Name gesetzt, * da in der Eltern-Klasse AiPlayer eine default implementierung für alle Methoden existieren. + * @author Florian Alexy und Florian Hantzschel */ public SpecificAiPlayerEasy() { super(); diff --git a/src/SpecificAiPlayerHard.java b/src/SpecificAiPlayerHard.java index 067af48..292bf6d 100644 --- a/src/SpecificAiPlayerHard.java +++ b/src/SpecificAiPlayerHard.java @@ -1,16 +1,16 @@ /** * Diese Klasse implementiert den Harten Ki Spieler. - * @author Florian und Florian + * @author Florian Alexy und Florian Hantzschel * */ import java.util.ArrayList; -import java.util.Random; +// import java.util.Random; wird nicht mehr verwendet public class SpecificAiPlayerHard extends AiPlayer{ private int gridSize; private boolean[][] shotsFired; private final ArrayList hitQueue; - private final Random random; + //private final Random random; wird nicht mehr verwendet private int nextChessRow; private int nextChessCol; @@ -24,7 +24,11 @@ public class SpecificAiPlayerHard extends AiPlayer{ private Point firstHit; // Speichert den ersten Treffer zur Bestimmung der Orientierung - + /** + * Eltern-Klasse wird initialisiert und alle lokalen variablen, + * die gesetzt werden können, werden initialisiert. + * @author Florian Alexy und Florian Hantzschel + */ public SpecificAiPlayerHard() { super(); this.setName("AI Player Hard"); @@ -32,19 +36,28 @@ public class SpecificAiPlayerHard extends AiPlayer{ this.shotsFired = new boolean[gridSize][gridSize];*/ this.gridSize = 0; this.hitQueue = new ArrayList<>(); - this.random = new Random(); + //this.random = new Random(); wird nicht mehr verwendet this.nextChessRow = 0; this.nextChessCol = 0; this.orientierung = Orientierung.UNBEKANNT; this.firstHit = null; } - // Checks if a position has already been shot at + /** + * Prüft, ob auf den punkt schonmal geschossen wurde. + * @param p zu prüfender Punkt + * @return boolean + * @author Florian Alexy und Florian Hantzschel + */ public boolean alreadyShot(Point p) { return shotsFired[p.getX()][p.getY()]; } - // Generates the next move for the AI + /** + * Bestimmt den nächsten punkt, der beschossen werden soll. + * @return Position + * @author Florian Alexy und Florian Hantzschel + */ public Point getNextMove() { if(gridSize == 0) { this.gridSize = super.board.getSize(); @@ -73,6 +86,12 @@ public class SpecificAiPlayerHard extends AiPlayer{ return new Point(row, col); } + /** + * Nachdem receiveShoot beim gegner den schuss verarbeitet hat, + * wird diese Methode mit der antwort aufgerufen. + * @param hitResponse the hitresponse + * @author Florian Alexy und Florian Hantzschel + */ @Override public synchronized void receiveHit(HitResponse hitResponse) { super.receiveHit(hitResponse); @@ -113,6 +132,7 @@ public class SpecificAiPlayerHard extends AiPlayer{ /** * Entfernt aus der hitQueue alle Punkte, die nicht der erkannten Orientierung entsprechen. + * @author Florian Alexy und Florian Hantzschel */ private void cleanUpHitQueue() { if (firstHit == null || this.orientierung == Orientierung.UNBEKANNT) { @@ -136,9 +156,10 @@ public class SpecificAiPlayerHard extends AiPlayer{ } /** - * Fügt benachbarte Felder in der **erkannten Orientierung** hinzu. - * - Ist die Orientierung HORIZONTAL, so werden nur links/rechts hinzugefügt. - * - Ist sie VERTICAL, so werden nur oben/unten hinzugefügt. + * Fügt benachbarte Felder in der erkannten Orientierung hinzu. + * Ist die Orientierung HORIZONTAL, so werden nur links/rechts hinzugefügt. + * Ist sie VERTICAL, so werden nur oben/unten hinzugefügt. + * @author Florian Alexy und Florian Hantzschel */ private void addPointsByOrientation(Point point) { if (this.orientierung == Orientierung.UNBEKANNT) { @@ -178,6 +199,7 @@ public class SpecificAiPlayerHard extends AiPlayer{ /** * Diese Methode erweitert die hitsQueue um die umliegenden Punkte die Schiffe seien könnten. * @param point + * @author Florian Alexy und Florian Hantzschel */ private void addAdjacentPoints(Point point) { int x = point.getX(); @@ -201,6 +223,7 @@ public class SpecificAiPlayerHard extends AiPlayer{ * Die Methode gibt zurück, ob eine Position auf dem Board ist. (Boolean) * @param point Punkt der geprüft werden soll * @return Ist auf dem Board oder nicht. + * @author Florian Alexy und Florian Hantzschel */ private boolean isValidPoint(Point point) { return point.getX() >= 0 && point.getX() < gridSize && @@ -208,13 +231,17 @@ public class SpecificAiPlayerHard extends AiPlayer{ } /** * Ki Methode um zu schießen. + * @author Florian Alexy und Florian Hantzschel */ @Override public void aiShoot() { this.enemy.receiveShoot(getNextMove()); } - // Advances the chess pattern to the next cell + /** + * Die Zeilen und spalten variable wird hier angepasst, sodass beim nächsten schuss im Muster geschossen wird. + * @author Florian Alexy und Florian Hantzschel + */ private void advanceChessPattern() { nextChessCol += 2; if (nextChessCol >= gridSize) { diff --git a/src/SpecificAiPlayerMedium.java b/src/SpecificAiPlayerMedium.java index a27390a..aa2c6ca 100644 --- a/src/SpecificAiPlayerMedium.java +++ b/src/SpecificAiPlayerMedium.java @@ -1,6 +1,6 @@ /** * Diese Klasse implementiert den Medium Ki Spieler. - * @author Florian und Florian + * @author Florian Alexy und Florian Hantzschel * */ import java.util.ArrayList; import java.util.List; @@ -11,6 +11,10 @@ public class SpecificAiPlayerMedium extends AiPlayer{ */ private List hitsQueue = new ArrayList<>(); + /** + * Eltern-Klasse wird initialisiert und der Name wird gesetzt. + * @author Florian Alexy und Florian Hantzschel + */ public SpecificAiPlayerMedium() { super(); this.setName("AI Player Medium"); @@ -18,6 +22,7 @@ public class SpecificAiPlayerMedium extends AiPlayer{ /** * Ki Methode um zu schießen. + * @author Florian Alexy und Florian Hantzschel */ @Override public void aiShoot() { @@ -25,7 +30,13 @@ public class SpecificAiPlayerMedium extends AiPlayer{ // Shoot at the enemy and receive the hit response enemy.receiveShoot(nextShot); } - + + /** + * Nachdem receiveShoot beim gegner den schuss verarbeitet hat, + * wird diese Methode mit der antwort aufgerufen. + * @param hitResponse the hitresponse + * @author Florian Alexy und Florian Hantzschel + */ @Override public synchronized void receiveHit(HitResponse hitResponse) { super.receiveHit(hitResponse); @@ -38,6 +49,7 @@ public class SpecificAiPlayerMedium extends AiPlayer{ /** * Die Methode bestimmt welche Position als nächstes beschossen werden soll. * @return + * @author Florian Alexy und Florian Hantzschel */ public Point ComputeNextShot() { Point nextShot; @@ -61,6 +73,7 @@ public class SpecificAiPlayerMedium extends AiPlayer{ /** * Diese Methode erweitert die hitsQueue um die umliegenden Punkte die Schiffe seien könnten. * @param point + * @author Florian Alexy und Florian Hantzschel */ private void addAdjacentPoints(Point point) { int x = point.getX(); @@ -85,6 +98,7 @@ public class SpecificAiPlayerMedium extends AiPlayer{ * Diese Methode gibt zurück, ob eine Position schon beschossen wurde. (Boolean) * @param p Punkt der geprüft werden soll * @return wurde schon beschossen oder nicht. + * @author Florian Alexy und Florian Hantzschel */ private boolean alreadyShot(Point p) { @@ -96,6 +110,7 @@ public class SpecificAiPlayerMedium extends AiPlayer{ * Die Methode gibt zurück, ob eine Position auf dem Board ist. (Boolean) * @param point Punkt der geprüft werden soll * @return Ist auf dem Board oder nicht. + * @author Florian Alexy und Florian Hantzschel */ private boolean isValidPoint(Point point) { return point.getX() >= 0 && point.getX() < board.getSize() &&