Kommentare und Withdraw #24

Merged
lgc merged 3 commits from FH_Last_changes into main 2024-12-23 19:39:53 +00:00
5 changed files with 75 additions and 16 deletions
Showing only changes of commit 4045d3ce7b - Show all commits

View File

@ -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.ArrayList;
import java.util.List; import java.util.List;
@ -8,7 +12,11 @@ public class Board {
private List<Ship> ships; private List<Ship> ships;
private final int size; 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) { public Board(int size) {
this.size = size; this.size = size;
this.ships = new ArrayList<>(); this.ships = new ArrayList<>();
@ -64,6 +72,7 @@ public class Board {
/** /**
* creates all the ships on a board given a certain semester * creates all the ships on a board given a certain semester
* @param semester the semester to be played in * @param semester the semester to be played in
* @author Peer Ole Wachtel
*/ */
private void createShip(int semester){ private void createShip(int semester){
List<ShipData> shipData = Ship.semeterList.get(semester -1); List<ShipData> shipData = Ship.semeterList.get(semester -1);

View File

@ -10,7 +10,7 @@ public class OnlinePlayer_1_1_0 extends OnlinePlayer {
* receives a message from the AsyncSocket * receives a message from the AsyncSocket
* implemented according to version 1.1.0 of https://github.com/lgc-4/ProgProjekt-Netzwerkstandard * implemented according to version 1.1.0 of https://github.com/lgc-4/ProgProjekt-Netzwerkstandard
* @param message the message from the socket * @param message the message from the socket
* @author Peer Ole Wachtel, Luca Conte * @author Peer Ole Wachtel, Luca Conte, Florian Hantzschel
*/ */
@Override @Override
public void receive(String message) { public void receive(String message) {
@ -67,6 +67,13 @@ public class OnlinePlayer_1_1_0 extends OnlinePlayer {
//TODO CHAT //TODO CHAT
break; 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: default:
//nichts passier da Paket ungültig //nichts passier da Paket ungültig
break; break;

View File

@ -1,12 +1,13 @@
/** /**
* Diese Klasse implementiert den Einfachsten Ki Spieler. * Diese Klasse implementiert den Einfachsten Ki Spieler.
* @author Florian und Florian * @author Florian Alexy und Florian Hantzschel
* */ * */
public class SpecificAiPlayerEasy extends AiPlayer{ public class SpecificAiPlayerEasy extends AiPlayer{
/** /**
* Bein einfachen Ki Spieler wird nur der AiPlayer initialisiert und der Name gesetzt, * 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. * da in der Eltern-Klasse AiPlayer eine default implementierung für alle Methoden existieren.
* @author Florian Alexy und Florian Hantzschel
*/ */
public SpecificAiPlayerEasy() { public SpecificAiPlayerEasy() {
super(); super();

View File

@ -1,16 +1,16 @@
/** /**
* Diese Klasse implementiert den Harten Ki Spieler. * Diese Klasse implementiert den Harten Ki Spieler.
* @author Florian und Florian * @author Florian Alexy und Florian Hantzschel
* */ * */
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Random; // import java.util.Random; wird nicht mehr verwendet
public class SpecificAiPlayerHard extends AiPlayer{ public class SpecificAiPlayerHard extends AiPlayer{
private int gridSize; private int gridSize;
private boolean[][] shotsFired; private boolean[][] shotsFired;
private final ArrayList<Point> hitQueue; private final ArrayList<Point> hitQueue;
private final Random random; //private final Random random; wird nicht mehr verwendet
private int nextChessRow; private int nextChessRow;
private int nextChessCol; private int nextChessCol;
@ -24,7 +24,11 @@ public class SpecificAiPlayerHard extends AiPlayer{
private Point firstHit; // Speichert den ersten Treffer zur Bestimmung der Orientierung 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() { public SpecificAiPlayerHard() {
super(); super();
this.setName("AI Player Hard"); this.setName("AI Player Hard");
@ -32,19 +36,28 @@ public class SpecificAiPlayerHard extends AiPlayer{
this.shotsFired = new boolean[gridSize][gridSize];*/ this.shotsFired = new boolean[gridSize][gridSize];*/
this.gridSize = 0; this.gridSize = 0;
this.hitQueue = new ArrayList<>(); this.hitQueue = new ArrayList<>();
this.random = new Random(); //this.random = new Random(); wird nicht mehr verwendet
this.nextChessRow = 0; this.nextChessRow = 0;
this.nextChessCol = 0; this.nextChessCol = 0;
this.orientierung = Orientierung.UNBEKANNT; this.orientierung = Orientierung.UNBEKANNT;
this.firstHit = null; 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) { public boolean alreadyShot(Point p) {
return shotsFired[p.getX()][p.getY()]; 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() { public Point getNextMove() {
if(gridSize == 0) { if(gridSize == 0) {
this.gridSize = super.board.getSize(); this.gridSize = super.board.getSize();
@ -73,6 +86,12 @@ public class SpecificAiPlayerHard extends AiPlayer{
return new Point(row, col); 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 @Override
public synchronized void receiveHit(HitResponse hitResponse) { public synchronized void receiveHit(HitResponse hitResponse) {
super.receiveHit(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. * Entfernt aus der hitQueue alle Punkte, die nicht der erkannten Orientierung entsprechen.
* @author Florian Alexy und Florian Hantzschel
*/ */
private void cleanUpHitQueue() { private void cleanUpHitQueue() {
if (firstHit == null || this.orientierung == Orientierung.UNBEKANNT) { 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. * Fügt benachbarte Felder in der erkannten Orientierung hinzu.
* - Ist die Orientierung HORIZONTAL, so werden nur links/rechts hinzugefügt. * Ist die Orientierung HORIZONTAL, so werden nur links/rechts hinzugefügt.
* - Ist sie VERTICAL, so werden nur oben/unten hinzugefügt. * Ist sie VERTICAL, so werden nur oben/unten hinzugefügt.
* @author Florian Alexy und Florian Hantzschel
*/ */
private void addPointsByOrientation(Point point) { private void addPointsByOrientation(Point point) {
if (this.orientierung == Orientierung.UNBEKANNT) { 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. * Diese Methode erweitert die hitsQueue um die umliegenden Punkte die Schiffe seien könnten.
* @param point * @param point
* @author Florian Alexy und Florian Hantzschel
*/ */
private void addAdjacentPoints(Point point) { private void addAdjacentPoints(Point point) {
int x = point.getX(); 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) * Die Methode gibt zurück, ob eine Position auf dem Board ist. (Boolean)
* @param point Punkt der geprüft werden soll * @param point Punkt der geprüft werden soll
* @return Ist auf dem Board oder nicht. * @return Ist auf dem Board oder nicht.
* @author Florian Alexy und Florian Hantzschel
*/ */
private boolean isValidPoint(Point point) { private boolean isValidPoint(Point point) {
return point.getX() >= 0 && point.getX() < gridSize && return point.getX() >= 0 && point.getX() < gridSize &&
@ -208,13 +231,17 @@ public class SpecificAiPlayerHard extends AiPlayer{
} }
/** /**
* Ki Methode um zu schießen. * Ki Methode um zu schießen.
* @author Florian Alexy und Florian Hantzschel
*/ */
@Override @Override
public void aiShoot() { public void aiShoot() {
this.enemy.receiveShoot(getNextMove()); 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() { private void advanceChessPattern() {
nextChessCol += 2; nextChessCol += 2;
if (nextChessCol >= gridSize) { if (nextChessCol >= gridSize) {

View File

@ -1,6 +1,6 @@
/** /**
* Diese Klasse implementiert den Medium Ki Spieler. * Diese Klasse implementiert den Medium Ki Spieler.
* @author Florian und Florian * @author Florian Alexy und Florian Hantzschel
* */ * */
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -11,6 +11,10 @@ public class SpecificAiPlayerMedium extends AiPlayer{
*/ */
private List<Point> hitsQueue = new ArrayList<>(); private List<Point> hitsQueue = new ArrayList<>();
/**
* Eltern-Klasse wird initialisiert und der Name wird gesetzt.
* @author Florian Alexy und Florian Hantzschel
*/
public SpecificAiPlayerMedium() { public SpecificAiPlayerMedium() {
super(); super();
this.setName("AI Player Medium"); this.setName("AI Player Medium");
@ -18,6 +22,7 @@ public class SpecificAiPlayerMedium extends AiPlayer{
/** /**
* Ki Methode um zu schießen. * Ki Methode um zu schießen.
* @author Florian Alexy und Florian Hantzschel
*/ */
@Override @Override
public void aiShoot() { public void aiShoot() {
@ -26,6 +31,12 @@ public class SpecificAiPlayerMedium extends AiPlayer{
enemy.receiveShoot(nextShot); 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 @Override
public synchronized void receiveHit(HitResponse hitResponse) { public synchronized void receiveHit(HitResponse hitResponse) {
super.receiveHit(hitResponse); super.receiveHit(hitResponse);
@ -38,6 +49,7 @@ public class SpecificAiPlayerMedium extends AiPlayer{
/** /**
* Die Methode bestimmt welche Position als nächstes beschossen werden soll. * Die Methode bestimmt welche Position als nächstes beschossen werden soll.
* @return * @return
* @author Florian Alexy und Florian Hantzschel
*/ */
public Point ComputeNextShot() { public Point ComputeNextShot() {
Point nextShot; 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. * Diese Methode erweitert die hitsQueue um die umliegenden Punkte die Schiffe seien könnten.
* @param point * @param point
* @author Florian Alexy und Florian Hantzschel
*/ */
private void addAdjacentPoints(Point point) { private void addAdjacentPoints(Point point) {
int x = point.getX(); 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) * Diese Methode gibt zurück, ob eine Position schon beschossen wurde. (Boolean)
* @param p Punkt der geprüft werden soll * @param p Punkt der geprüft werden soll
* @return wurde schon beschossen oder nicht. * @return wurde schon beschossen oder nicht.
* @author Florian Alexy und Florian Hantzschel
*/ */
private boolean alreadyShot(Point p) { 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) * Die Methode gibt zurück, ob eine Position auf dem Board ist. (Boolean)
* @param point Punkt der geprüft werden soll * @param point Punkt der geprüft werden soll
* @return Ist auf dem Board oder nicht. * @return Ist auf dem Board oder nicht.
* @author Florian Alexy und Florian Hantzschel
*/ */
private boolean isValidPoint(Point point) { private boolean isValidPoint(Point point) {
return point.getX() >= 0 && point.getX() < board.getSize() && return point.getX() >= 0 && point.getX() < board.getSize() &&