83 lines
3 KiB
Java
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;
|
|
}
|
|
}
|
|
}
|