Wie programmiere ich "Schiffe versenken" in Java?
Ich möchte gerne Schiffe versenken in Java programmieren und komme gerade nicht weiter...
Hier mein Beispiel-code:
import java.util.*;
public class schiffeversenkken {
public static void main(String[] args) {
Scanner scan = new Scanner (System.in);
// Hilfsvariablen
int x = 0 ;
int y = 0 ;
int i = 0 ;
int j = 0 ;
int s1 = 0 ;
int s2 = 0 ;
int s3 = 0 ;
//Spielfeld
int [][] feld = new int [10][10] ;
// Ausgabe Spielfeld
for(i = 0; i < feld.length; i++){
for(j = 0; j < feld.length; j++){
System.out.print(" [ " + feld[i][j] + " ]" + "\t" ) ;
}
System.out.println();
}
// Schiffe platzieren
for (s1=0;s1<3 ;s1++ ) {
System.out.println("x-Koordinate des Schiffes: ");
x = scan.nextInt() ;
System.out.println("y-Koordinate des Schiffes: ");
y = scan.nextInt() ;
feld [x][y] = 1 ;
} // end of for
System.out.println("erstes Schiff platziert!");
System.out.println(" ");
for (s2=0;s2<3 ;s2++ ) {
System.out.println("x-Koordinate des Schiffes: ");
x = scan.nextInt() ;
System.out.println("y-Koordinate des Schiffes: ");
y = scan.nextInt() ;
feld [x][y] = 1 ;
} // end of for
x = 0 ;
y = 0 ;
System.out.println("zweites Schiff platziert!");
System.out.println(" ");
for (s3=0;s3<3 ;s3++ ) {
System.out.println("x-Koordinate des Schiffes: ");
x = scan.nextInt() ;
System.out.println("y-Koordinate des Schiffes: ");
y = scan.nextInt() ;
feld [x][y] = 1 ;
} // end of for
x = 0 ;
y = 0 ;
System.out.println("drittes Schiff platziert!");
System.out.println(" ");
// neues Spielfeld ausgeben
for(i = 0; i < feld.length; i++){
for(j = 0; j <feld.length; j++){
System.out.print("[" + feld[i][j] + "]" + "\t");
}
System.out.println();
} // end of main
} // end of class schiffeversenkken
}
Meine Probleme sind jetzt, dass die Schiffe, die ich platziere sehe (Position durch "1" erkennbar, leere Felder gekennzeichnet durch "0" ). Diese möchte ich jedoch verbergen. Ich hab schon drüber nachgedacht es so zu lösen:
Ich vergleiche [x] [y] mit dem Wert "1". Trifft dies zu, lasse ich per System.out.print "feld [x][y] ausgeben (sorry ich kann an dieser Stelle leider keinen Quellcode einfügen :/ )
Das funktioniert leider nicht so, wie ich es mir vorgestellt hab :D
Eine weitere Möglichkeit wäre auch, die Schiffe per Zufall erstellen zu lassen, jedoch weiß ich da auch nicht so genau wie ich das anstellen soll.
Es wäre vermutlich auch mehr als praktisch sämtliche Aktionen in Methoden zu packen, was ich bis jetzt aber noch nicht gemacht habe, da ich relativ unvorbereitet an dieses Pogramm herangetreten bin...
Ich freue mich über schnelle Antworten :)
2 Antworten
Für soetwas kannst du deiner Kreativität freien lauf lassen.
Derzeit verwendest du als Spielbrett eine zweidimensionale int-Array.
Demnach könntest du jetzt Beispielsweise eine Klasse erstellen, die die Eigenschaften eines einzelnen Feldes deines Spielfeldes besitzt.
Nur als Beispiel:
class Feld { String anzeigeWert; boolean IstSchiffPlaziert; boolean IstSchiffVersenkt; boolean IstWasser; }
Wenn du nun anstatt deiner int-Array eine Array von dieser Klasse verwendest, kannst du beim Zeichnen des Spielfeldes den Anzeigewert ausgeben lassen. Gleichzeitig kann das Feld jedoch auch ein Schiff beinhalten (was du beispielsweise beim Setzen der Schiffe machst).
Ich hoffe der Denkanstoß hilft dir weiter.
Ich werd mir jetzt zusätzlich Klassen erstellen dankeschön
ich würde einfach ein Array machen, wo abgespeichert ist, wo sich die Schiffe befinden und ein Array machen, in dem Steht, was dem Spieler angezeigt wird
mach ich eigentlich immer so, ist eigentlich recht praktisch
Auf die Idee bin ich gar nicht gekommen :D danke :)