import java.util.Random; public class Battleship{ /************************ y UND Y SIND LOGISCH VERTAUSCHT ************************/ public Battleship(){ //Spielfeld Speiler char x = 97; int i = 0; int j = 0; //Kopfzeile for (j = 0; j < kopfzeile.length; j++){ System.out.print(kopfzeile[j] + " "); } System.out.print("\t\t"); for (j = 0; j < kopfzeile.length; j++){ System.out.print(kopfzeile[j] + " "); } System.out.println(); //Spiefeld for (i = 0; i < spielfeld.length; i++) { //Ausgabe 1. Spielfeld for ( j = 0; j < spielfeld[i].length; j++) { spielfeld[i][j] = '~'; if ((j == 0 || j == 11) && i < 10){ spielfeld[i][j] = x; } System.out.print(spielfeld[i][j] + " "); } // Computerfeld System.out.print("\t\t"); for ( j = 0; j < cspielfeld[i].length; j++) { cspielfeld[i][j] = '~'; // Seitenspalten if ((j == 0 || j == 11) && i < 10){ cspielfeld[i][j] = x; } System.out.print(cspielfeld[i][j] + " "); } System.out.println(); x++; } //Fußzeile for (j = 0; j < kopfzeile.length; j++){ System.out.print(kopfzeile[j] + " "); } System.out.print("\t\t"); for (j = 0; j < kopfzeile.length; j++){ System.out.print(kopfzeile[j] + " "); } System.out.println("\n");} public enum Ship{ Speedboat(1,4), Yacht(2,3), Fregatte(3,2), Kreuzer(4,1); private final int size; private int count; private int lives; Ship(int size, int count){ this.size = size; this.lives = size; this.count = count; } public void hit() {this.lives--;} public int getCount() {return count;} public void redCount() {this.count-- ;} public int getSize() { return size; } public void sink(){ if (this.lives == 0){ System.out.println("Schiff versenkt!"); } } } Ship [][] ankert = new Ship[10][12]; //Zeile Spalte char [][] spielfeld = new char [10][12]; char [][] cspielfeld = new char [10][12]; String[] kopfzeile = {" ", "1","2","3","4","5","6","7","8","9","10"," "}; public void ausgabe(){ char x = 97; int i = 0; int j = 0; //Kopfzeile for (j = 0; j < kopfzeile.length; j++){ System.out.print(kopfzeile[j] + " "); } System.out.print("\t\t"); for (j = 0; j < kopfzeile.length; j++){ System.out.print(kopfzeile[j] + " "); } System.out.println(); //Spielfeld mit Rand //Spiefeld for (i = 0; i < spielfeld.length; i++) { //Ausgabe 1. Spielfeld for ( j = 0; j < spielfeld[i].length; j++) { //spielfeld[i][j] = '~'; if ((j == 0 || j == 11) && i < 10){ spielfeld[i][j] = x; } System.out.print(spielfeld[i][j] + " "); } //Ausgabe 2. Spiefeld System.out.print("\t\t"); for ( j = 0; j < cspielfeld[i].length; j++) { //cspielfeld[i][j] = '~'; // Seitenspalten if ((j == 0 || j == 11) && i < 10){ cspielfeld[i][j] = x; } System.out.print(cspielfeld[i][j] + " "); } System.out.println(); x++; } //Fußzeile for (j = 0; j < kopfzeile.length; j++){ System.out.print(kopfzeile[j] + " "); } System.out.print("\t\t"); for (j = 0; j < kopfzeile.length; j++){ System.out.print(kopfzeile[j] + " "); } System.out.println("\n"); } public void place(Ship s, char a, int x, boolean horiz){ int i = 0; int y = (int) a - 97; if (!canPlace( s, a, x, horiz)){System.out.print("Platzieren nicht möglich\n ");} else{ // Schiff platzieren if (horiz){ for (i = 0; i < s.getSize(); i++){ spielfeld[y][x+i] = '<'; ankert[y][x+i] = s; } } else { for (i = 0; i < s.getSize(); i++){ spielfeld[y+i][x] = 'V'; ankert[y][x+i] = s; } } } } /*public boolean canPlace(Ship s, char a, int x, boolean horiz){ int y = (int) a - 97; for (int i = y - 1; i <= y +s.getSize(); i++){ // -1 +1 wegen Rand for (int j = x - 1; j <= x + 1; j++){ //Checken ob rand if (i < 0 || i >= spielfeld.length || j < 0 || j >= spielfeld[i].length) { continue; } if (spielfeld[i][j] != '~'){return false;} } } if (!horiz && y + s.getSize()-1 <= spielfeld.length) // vertikal { for (int i = y - 1; i <= y +s.getSize(); i++){ // -1 +1 wegen Rand for (int j = x - 1; j <= x + 1; j++){ //Checken ob rand if (i < 0 || i >= spielfeld.length || j < 0 || j >= spielfeld[i].length) { continue; } if (spielfeld[i][j] != '~'){return false;} } } for (int i = 0; i < s.getSize(); i++) { if(spielfeld[y+i][x] != '~') { System.out.println("Passd Ned"); return false; } } } if (horiz && x + s.getSize()-1 <= spielfeld[0].length-2) //horizontal { for (int i = y - 1; i <= y +1; i++){ // -1 +1 wegen Rand for (int j = x - 1; j <= x + s.getSize(); j++){ //Checken ob Rand if (i < 0 || i >= spielfeld.length || j < 0 || j >= spielfeld[i].length) { continue; } //Checken ob Schiff if (spielfeld[i][j] != '~'){return false;} } } //Checken ob Wasser for (int i = 0; i < s.getSize(); i++) { if(spielfeld[y][x+i] != '~') { System.out.println("Passd Ned"); return false; } } } s.redCount(); return true; } */ /* public boolean canPlace(Ship s, char a, int x, boolean horiz) { int y = (int) a - 96; if (!horiz) { // vertikal if (y + s.getSize() - 1 >= spielfeld.length) return false; for (int i = y - 1; i <= y + s.getSize(); i++) { for (int j = x - 1; j <= x + 1; j++) { if (i < 0 || i >= spielfeld.length || j < 0 || j >= spielfeld[i].length) { continue; } if (spielfeld[i][j] != '~') return false; } } } else { // horizontal if (x + s.getSize() - 1 >= spielfeld[0].length) return false; for (int i = y - 1; i <= y + 1; i++) { for (int j = x; j <= x + s.getSize(); j++) { if (i < 0 || i >= spielfeld.length || j < 0 || j >= spielfeld[i].length-2) continue; if (spielfeld[i][j] != '~') return false; } } } return true; } */ public boolean canPlace(Ship s, char a, int x, boolean horiz) { int y = (int) a - 96; // a→0, b→1, ... if (horiz) { //passt ins Feld? System.out.println("311"); if (x + s.getSize() - 1 >= spielfeld[0].length) return false; /// Nachbarfelder //if (a == 'a') ehemalig for (int i = y - 1; i <= y + 1; i++) System.out.println("316"); if (y == 0){ for (int i = y; i <= y +1; i++) { for (int j = x - 1; j <= x + s.getSize(); j++) { if(spielfeld[i][j] == 'V') return false; if(spielfeld[i][j] == '<') return false; } } } else if (y == 9){ for (int i = y - 1; i <= y; i++) { for (int j = x - 1; j <= x + s.getSize(); j++) { if(spielfeld[i][j] == 'V') return false; if(spielfeld[i][j] == '<') return false; else { i=0; j=0; for ( i = y - 1; i <= y + 1; i++) { for ( j = x - 1; j <= x + s.getSize(); j++) { if(spielfeld[i][j] == 'V') return false; if(spielfeld[i][j] == '<') return false; } } } } } if(!horiz) { // vertikal System.out.println("326"); if (y + s.getSize() - 1 >= spielfeld.length) return false; // Nachbarbereich: Zeilen y-1..y+size, Spalten x-1..x+1 for (int i = y - 1; i <= y + s.getSize(); i++) { for (int j = x - 1; j <= x + 1; j++) { if (spielfeld[i][j] == 'V') return false; if(spielfeld[i][j] == '<') return false; } } } return true; } public void shoot(char a, int x){ int y = (int) a - 97; if (cspielfeld[y][x] == '~'){ //Miss cspielfeld[y][x] = '0'; } else if (cspielfeld[y][x] != 'y'){ // Hit cspielfeld[y][x] = 'y'; ankert[y][x].hit(); ankert[y][x].sink(); } } }