public void setShiffAtRandomPosition(Schiff schiff) { Random rand = new Random(); int direction = rand.nextInt(2); int maxWidth = this.width; int maxHeight = this.height; if (direction == 0) { maxWidth -= (schiff.getPunkte().size() - 1); } else { maxHeight -= (schiff.getPunkte().size() - 1); } int col = rand.nextInt(maxWidth); int row = rand.nextInt(maxHeight); SchiffName typ = schiff.getName(); switch (typ) { case KREUZER: schiff = new Kreuzer(row, col, direction); break; case SCHLACHTSCHIFF: schiff = new Schlachtschiff(row, col, direction); break; case UBOOT: schiff = new UBoot(row, col, direction); break; case ZERSTOERER: schiff = new Zerstoerer(row, col, direction); break; default: schiff = null; break; } boolean kolidiert = false; for (Schiff s : schiffListe) { if (s.kolidiertMitSchiff(schiff)) { kolidiert = true; } } if (!kolidiert) { addSchiff(schiff); } else { setShiffAtRandomPosition(schiff); } }
public void markiereZerstoertesSchiff(Schiff schiff) { for (Punkt p : schiff.getBereich()) { try { Feld feld; feld = map[p.getRow()][p.getCol()]; if (!feld.isIstSchiff()) { feld.setIstBeschossen(true); } else { feld.setIstZerstoert(true); } } catch (IndexOutOfBoundsException e) { } } }
public void shoot(int row, int col) throws IndexOutOfBoundsException { Feld feld; feld = map[row][col]; if (feld.getIstBeschossen()) { throw new SchiffeVersenkenException("Angegebene Position ist schon beschossen."); } feld.setIstBeschossen(true); feld.setIstSchiff(false); boolean continueGame = false; for (Schiff schiff : schiffListe) { if (schiff.istGetroffen(row, col)) { feld.setIstSchiff(true); } if (schiff.isIstZerstoert()) { markiereZerstoertesSchiff(schiff); continueGame = continueGame && false; } else { continueGame = true; } } if (!continueGame) { Main.setDoRun(false); } }