java-dhbw/SchiffeVersenken/src/Feld.java
2023-04-24 15:35:55 +02:00

83 lines
3 KiB
Java

public class Feld {
public static final int sizeX = 16;
public static final int sizeY = 8;
private final NoSchiff none = new NoSchiff();
private final BrokenSchiff broken = new BrokenSchiff();
public Schiff[][] map = {
{none, none, none, none, none, none, none, none, none, none, none, none, none, none, none, none},
{none, none, none, none, none, none, none, none, none, none, none, none, none, none, none, none},
{none, none, none, none, none, none, none, none, none, none, none, none, none, none, none, none},
{none, none, none, none, none, none, none, none, none, none, none, none, none, none, none, none},
{none, none, none, none, none, none, none, none, none, none, none, none, none, none, none, none},
{none, none, none, none, none, none, none, none, none, none, none, none, none, none, none, none},
{none, none, none, none, none, none, none, none, none, none, none, none, none, none, none, none},
{none, none, none, none, none, none, none, none, none, none, none, none, none, none, none, none},
};
public Feld() {
}
public void printMap() {
StringBuilder output = new StringBuilder("\033[2J ");
int index = 0;
for (int i=0; i < sizeX; i++) {
output.append(String.format("%x ", i));
}
output.append('\n');
for (Schiff[] row : this.map) {
output.append(String.format("%x ", index));
for (Schiff ship : row) {
// this seems to be the repr of the Schiff class, not the object actually?
output.append(String.format("%s ", ship.repr()));
}
output.append('\n');
index++;
}
System.out.println(output);
}
public boolean insertShip(Schiff ship, int y, int x) {
System.out.println(String.format(
"Inserting ship into map: %s",
ship
));
if (x >= sizeX || y >= sizeY || y < 0 || x < 0) {
System.err.println(
String.format("Tried to insert a ship at invalid coordinates:\n"+
"x: %s\n"+
"y: %s\n", x, y)
);
return false;
}
this.map[y][x] = ship;
assert this.map[y][x] == ship;
return true;
}
public boolean hit(int y, int x) {
if (x >= sizeX || y >= sizeY || y < 0 || x < 0) {
System.err.println("Tried to hit a ship at invalid coordinates.");
return false;
}
if (map[y][x] instanceof RealSchiff) {
if (map[y][x].laenge > 0) {
map[y][x].laenge -= 1;
map[y][x] = broken;
System.out.println("Hit!");
}
else {
map[y][x].laenge = 0;
map[y][x] = broken;
System.out.println("Ship destroyed!");
}
return true;
}
else {
// no hit
return false;
}
}
}