Compare commits

...

9 Commits

Author SHA1 Message Date
Ole Wachtel a381c8d660 add OnlinePlayer Konstructer 2024-11-30 13:25:42 +01:00
Luca Conte d425e64fa0 Merge pull request 'hotfixes - so we can at least run it' (#9) from hotfixes into main
Reviewed-on: #9
2024-11-27 12:01:15 +00:00
Luca Conte b2a26c1f81 fix compiler errors 2024-11-27 13:00:18 +01:00
Luca Conte 73add1442b fix class names 2024-11-27 13:00:05 +01:00
Luca Conte 11c7dda19b fix deprecated function calls 2024-11-27 12:59:55 +01:00
alexy f3d56b37c7 Merge pull request 'Schiffe setzen Validierung hinzugefuegt' (#8) from oleFundF into main
Reviewed-on: #8
Reviewed-by: flo <florian.hantzschel@stud.hs-hannover.de>
2024-11-26 16:00:08 +00:00
FlorianAlexy c8b3f4f2db Schiffe setzen Validierung hinzugefuegt
Florian und Florian haben eine schoene Validierung zum setzen der Position eines Schiffes hinzugefuegt.
2024-11-26 16:43:25 +01:00
Luca Conte ec789dd562 Merge pull request 'ole' (#7) from ole into main
Reviewed-on: #7
Reviewed-by: lgc <main@lugico.de>
2024-11-26 14:01:01 +00:00
ole 22937ab45d Merge pull request 'Kronjuwild' (#6) from Kronjuwild into main
Reviewed-on: #6
Reviewed-by: ole <git@peer-ole.de>
2024-11-14 16:23:21 +00:00
8 changed files with 113 additions and 19 deletions

View File

@ -8,14 +8,14 @@ public abstract class AiPlayer extends Player {
}
public Point RandomPoint() {
Random random = new Random(); // Pseudo Random für zufallszahlen
int posx = random.nextInt(super.board.size); // Generiert 0 - 13
int posy = random.nextInt(super.board.size); //
int posx = random.nextInt(super.board.getSize()); // Generiert 0 - 13
int posy = random.nextInt(super.board.getSize()); //
return new Point(posx,posy);
}
public void AiSetShips() {
for(int i = 0; i < super.board.ships.size(); i++) { // Interiert durch alle Shiffe
while(!super.board.ships.get(i).setPosition(RandomPoint()))
for(int i = 0; i < super.board.getShips().size(); i++) { // Interiert durch alle Shiffe
while(!super.board.getShips().get(i).setPosition(RandomPoint(), super.board.getShips(), super.board.getSize())) {}
} // Versucht das Aktuelle Shiff zu setzten und wiederholt solange bis es funktioniert
return;
}

View File

@ -68,7 +68,7 @@ public class Board {
}
public int getSize() {
return size;
return this.size;
}
}

View File

@ -7,8 +7,15 @@ public class GameController {
public void startLocalGame(Class<? extends LocalPlayer> localPlayerClass, Class<? extends AiPlayer> enemyClass, int size) throws InstantiationException, IllegalAccessException {
LocalPlayer localPlayer = localPlayerClass.newInstance();
AiPlayer aiPlayer = enemyClass.newInstance();
LocalPlayer localPlayer;
AiPlayer aiPlayer;
try {
localPlayer = localPlayerClass.getDeclaredConstructor().newInstance();
aiPlayer = enemyClass.getDeclaredConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
return;
}
localPlayer.setEnemy(aiPlayer);
aiPlayer.setEnemy(localPlayer);
}

View File

@ -1,5 +1,20 @@
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
public abstract class OnlinePlayer extends Player{
private Socket socket;
private BufferedReader netIn;
private PrintWriter netOut;
public OnlinePlayer(int size, Socket socket, BufferedReader netIn) throws IOException {
super(size);
this.socket = socket;
this.netIn = netIn;
this.netOut = new PrintWriter(socket.getOutputStream(), true);
//TODO Auto-generated constructor stub
}
}

View File

@ -1,10 +1,11 @@
import java.awt.Point;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
record ShipData (int size, String name){
}
record ShipData (int size, String name){}
public class Ship {
static List<List<ShipData>> semeterList = Arrays.asList(Arrays.asList(
@ -56,16 +57,79 @@ public class Ship {
public Ship (int size, String name) {
this.size = size;
this.name = name;
this.horizontal = false;
this.horizontal = false; //true = von Punkt aus nach rechts; false = von Punkt aus nach unten
this.position = null;
this.hitsOnMe = 0;
this.sunk = false;
}
public boolean setPosition(Point pos) {
//TODO Conte abrfrage ob shif da sein darf
this.position = pos;
return true;
public boolean setPosition(Point pos, List<Ship> shipsList, int boardSize) {
// ueberpruefe boundaries
if (pos.x < 0 || pos.y < 0 || pos.x >= boardSize || pos.y >= boardSize) {
return false;
}
// bestimme die Endposition anhand der Ausrichtung
int endX = pos.x;
int endY = pos.y;
if (this.horizontal) { // rechts links
endX = pos.x + this.size - 1;
if (endX >= boardSize) {
return false;
}
} else { // oben unten
endY = pos.y + this.size - 1;
if (endY >= boardSize) {
return false;
}
}
// Liste an Punkten die das Schiff einnehmen wuerde
List<Point> shipPoints = new ArrayList<>();
for (int i = 0; i < this.size; i++) {
int x = this.horizontal ? pos.x + i : pos.x; //falls horizontal dann pos.x + i ansonsten pos.x
int y = this.horizontal ? pos.y : pos.y + i;
shipPoints.add(new Point(x, y));
}
// ueberlappen mit anderen Schiffen pruefen
for (Ship otherShip : shipsList) {
// eigenes Schiff ueberspringen
if (otherShip == this) {
continue;
}
// ueberspringe falls noch nicht gesetzt
if (otherShip.position == null) {
continue;
}
// Punkte die das andere Schiff besetzt
List<Point> otherShipPoints = otherShip.getOccupiedPoints();
// ueberlappen checken
for (Point p : shipPoints) {
if (otherShipPoints.contains(p)) {
// ueberlappen entdeckt
return false;
}
}
}
// kein ueberlappen also setze das Schiff
this.position = pos;
return true;
}
public List<Point> getOccupiedPoints() {
List<Point> points = new ArrayList<>();
if (this.position == null) {
return points;
}
for (int i = 0; i < this.size; i++) {
int x = this.horizontal ? this.position.x + i : this.position.x;
int y = this.horizontal ? this.position.y : this.position.y + i;
points.add(new Point(x, y));
}
return points;
}
public Point getPosition() {

View File

@ -1,7 +1,7 @@
public class SpecificAiPlayer1 extends AiPlayer{
public class SpecificAiPlayerEasy extends AiPlayer{
public SpecificAiPlayer1(int size) {
public SpecificAiPlayerEasy(int size) {
super(size);
}
}

View File

@ -1,7 +1,7 @@
public class SpecificAiPlayer1 extends AiPlayer{
public class SpecificAiPlayerHard extends AiPlayer{
public SpecificAiPlayer1(int size) {
public SpecificAiPlayerHard(int size) {
super(size);
}
}

View File

@ -1,3 +1,6 @@
import java.util.ArrayList;
import java.util.List;
import java.awt.Point;
public class SpecificAiPlayerMedium extends AiPlayer{
@ -13,7 +16,7 @@ public class SpecificAiPlayerMedium extends AiPlayer{
// Shoot at the enemy and receive the hit response
enemy.receiveShoot(nextShot);
HitResponse hitResponse = enemy.board.getHitResponsOnPoint(nextShot)
HitResponse hitResponse = enemy.board.getHitResponsOnPoint(nextShot);
// If it's a hit or sunk, add adjacent cells to the hitsQueue
if (hitResponse.getHitResponse() == HitResponseType.HIT) {
addAdjacentPoints(nextShot);
@ -58,6 +61,11 @@ public class SpecificAiPlayerMedium extends AiPlayer{
}
}
private boolean alreadyShot(Point p) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'alreadyShot'");
}
private boolean isValidPoint(Point point) {
return point.x >= 0 && point.x < board.getSize() &&
point.y >= 0 && point.y < board.getSize();