Methoden "Schiffe versenken" Quellcode in Methoden umwandeln

Ich habe schon einen kompletten Quellcode zu dem Spiel, möchte ihn jetzt jedoch in Methoden unterteilen (für Erstellung des Arrays/Feldes, für das platzieren von Schiffen, für das Schießen auf Schiffe und das Überprüfen, ob es ein Treffer war und ob ich das Schiff bereits versenkt habe)
Prizipiell habe ich es mir so gedacht:
Ich erstelle zwei 2D Arrays, ein Array in dem ich die Schiffe "speichere" und ein Array, welches dem Spieler angezeigt wird, damit er eine Visualisierung des Speilfeldes hat.
Momentan erstelle ich meine Schiffe selber, will dieses ,wie später beschrieben, zufällig geschehen lassen.
Dann lasse ich die Koordinaten für die Schüsse eingeben und überprüfe in meinem Array, in dem die Schiffe gespeichert werden (array feld), ob in diesem Feld eine "1" steht. (1 steht in diesem Fall für einen Teil des Schiffes).
Meine Schiffe sollen 3 Felder groß sein, weshalb ich damit überprüfe, ob ich 3x einen Treffer gelandet habe und wenn ja, dann endet das Spiel.
So und jetzt der Code:
Java:
import java.util.*;
public class schiffeversenkken {
 
  public static void main(String[] args) {
    Scanner scan = new Scanner (System.in);
   
    // Hilfsvariablen
    int x = 0 ;
    int x1 = 0 ;
    int y = 0 ;
    int y1 = 0 ;
    int i = 0 ;
    int i1 = 0 ;
    int j = 0 ;
    int j1 = 0 ;
    int s1 = 0 ;
    int s2 = 0 ;
    int s3 = 0 ;
    int t = 0 ;
    boolean treffer = false;
    boolean versenkt = false;
   
    //Spielfeld
    int [][] feld = new int [10][10] ;
    int [][] anzeige = 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
   
    x = 0 ;
    y = 0 ;
    System.out.println("Schiff platziert!");
    System.out.println(" ");
   
    // neues Spielfeld ausgeben
    for(i1 = 0; i1 < feld.length; i1++){
      for(j1 = 0; j1 <feld.length; j1++){
        System.out.print("[" + anzeige[i1][j1] + "]" + "\t");    
      }
      System.out.println();
    } // end of main
   
    System.out.println("Nun such dir ein Feld zum beschießen aus!");
   
    //while (versenkt = false) {
     
     
     
     
      while (t<3) {
        System.out.println("x-Koordinate des Schusses: " );
        x1 = scan.nextInt();
        System.out.println("y-Koordinate des Schusses: " );
        y1 = scan.nextInt();
        if (feld[x1][y1] == 1) {
          treffer = true;
          System.out.println("Treffer!");
          t = t + 1 ;
        } else{
          treffer = false ;
          System.out.println("Kein Treffer!");
        }// end of if
        treffer = false ;
        if (t == 3) {
          versenkt = true ;
          System.out.println("Du hast das Boot versenkt! Herzlichen Glückwunsch. Jetzt geh die badenden Matrosen aufsammeln.");
        } // end of if
      }
    }
   
  } // end of class schiffeversenkken
//}

Das Schiff würde ich mit Hilfe der Random-Methode platzieren lassen, also :
Java:
import java.util.Random ;
public class platzieren {
  public static void main (String[] args){
    int i = 0 ;
    int x = 0 ;
    int y = 0 ;
    while (i<100) {
      Random random = new Random ();
      x = random.nextInt(10)+1;
      y = random.nextInt(10)+1;
      System.out.println(x + "\t" + y);
      i = i + 1 ;
    } // end of while
  }
 
} // end of class platzieren
Jedoch weiß ich nicht, wie ich das als Methode gestalten soll:(
Ich hoffe mir kann jemand helfen, sorry schon mal im Voraus für so eine dumme Frage:rolleyes:
 

Joose

Top Contributor
Wo genau liegt das Problem? Weißt du nicht wie Methoden aufgebaut sind oder weißt du nicht welchen Code du am Besten wie auf die Methoden aufteilst?

Hier ein Link der dir Methoden allgemein erklärt: http://www.java-tutorial.org/methoden.html
Ansonsten wäre nur zu erwähnen das Methoden möglichst kurz sein sollten und immer nur für eine Sache zuständig sein (also Wert X berechnen aber nicht Wert X, Y und Z in einer Methode berechnen).
 

Joose

Top Contributor
Mir reicht ja eine Methode für den x Wert des Schusses den Rest könnte ich mir dann ja selber erarbeiten

Kleines Beispiel:
Diesen Code
Java:
System.out.println("x-Koordinate des Schiffes: ");
x = scan.nextInt() ;
kann wie folgt um bauen:

Java:
public int readIntValue(String text) {
    System.out.println(text);
    return scan.nextInt();
}
.....
x = readIntValue("Hier steht ein Text:");
 
K

kneitzel

Gast
Also Beispiele für Methoden finden sich in eigentlich jeder Anleitung zu Java. Java ist auch eine Insel wäre so ein Werk, in dem Java erklärt wird.

Bezüglich Methoden gibt es zwei wichtige Punkte:
a) Lesbarkeit - durch sinnvolle Namen bei Methoden wird der Code meist schön lesbar. So ist das Ziel, dass der Code sich von alleine erklärt.
b) Verhinderung von doppeltem Code. Code ist einfacher zu warten, wenn sich Code nicht wiederholt. Das Beispiel von Joose geht in diese Richtung. Es gibt an mehreren Stellen diese Eingabe von einer Zahl und das kann man dann vereinfachen. Sehr schön zeigt sein Beispiel auch, wie Argumente genutzt werden um gewisse Unterschiede zu vereinheitlichen. So gab es bei den unterschiedlichen Codestücken jeweils anderen Text in der Ausgabe.

Dies ändert aber nichts daran, dass ich immer noch ein ganz gravierendes Problem sehe und das ist die fehlende Objektorientierung. Mag sein, dass ihr da jetzt nach der Unterteilung in Methoden auf die Objektorientierung kommen wollt im Unterricht, aber ich halte davon nichts. Das erinnert mich an die alten Diskussionen, in wie weit man erst C lernen solle um dann zu C++ zu kommen. Und ich bin ein großer Gegner davon, denn ich habe die Erfahrung gemacht, dass dies Kontraproduktiv ist. Der Grundgedanke kann doch von Anfang sein, sich hinzusetzen um dann zu überlegen aus welchen Teilen etwas aufgebaut ist. Und dann kommt man auf Dinge wie ein Spielfeld, Schiffe, .... Und dann kann man da von Grund auf anfangen seinen Code aufzuschreiben. Der Vorteil ist dann auch von Anfang an, dass man immer alles halbwegs in Methoden packen muss, denn anders geht es ja nicht.
Aus einem Script (Sorry, was anderes ist dieses "alles ist static" und am besten nur in der main methode) ein objektorientiertes Programm machen zu wollen halte ich für falsch. Da ist es einfacher, sauber bei null anzufangen. Sollte es wichtige Teile geben, dann kann man die ggf. noch kopieren, aber ansonsten halte ich den Neuanfang für geeigneter.

Diese ganze Diskussion dürfte aber hinfällig sein, da es hier ja um die Begleitung eines Unterrichts geht und da ist der Lehrer federführend und da hilft so ein Einwurf wohl auch wenig. Dem Schüler/Student geht es da ja in erster Linie um gute Noten oder um einen Schein so dass er weiter kommt und in keiner Weise um die wirkliche Erlernung der Java Entwicklung.

Daher bitte ich an dieser Stelle auch direkt um Entschuldigung für diesen Einwurf, aber ich konnte mich nicht beherrschen.

Konrad
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Schiffe versenken JButton Schiffe mit GUI verbinden Hilfe! Allgemeine Java-Themen 2
H "Schiffe versenken" Allgemeine Java-Themen 3
S Verwendet Programmiersprache aus Quellcode - Datei ermitteln Allgemeine Java-Themen 6
C Quellcode-Übersetzung englisch zu deutsch Allgemeine Java-Themen 9
D Suche Quellcode! Allgemeine Java-Themen 8
B Quellcode einer Java libary finden um zu copy & paste'n Allgemeine Java-Themen 5
G Quellcode wiederherstellen Allgemeine Java-Themen 28
B Quellcode lesen - Aussortieren Allgemeine Java-Themen 3
M Quellcode von Java-Methoden Allgemeine Java-Themen 9
U Swing Hilfe beim Quellcode für ein Codierungs-/Decodierungsprogramm Allgemeine Java-Themen 9
G Externer Quellcode Allgemeine Java-Themen 3
T Android Webview Webpage Quellcode to string Allgemeine Java-Themen 0
B Quellcode für Zwischenprüfung Allgemeine Java-Themen 4
M Aus Javaprogramm .NET Quellcode kompileren Allgemeine Java-Themen 2
J XML Dokument Zeilenumbruch in den Quellcode einfügen Allgemeine Java-Themen 5
T ExceptionHandling mit bescheidenem Quellcode Allgemeine Java-Themen 14
I Methoden Quellcode auslesen (Refelction o.ä.) Allgemeine Java-Themen 5
H Zeilenumbruch in Quellcode Allgemeine Java-Themen 4
G Eingegeben Formeln in Quellcode einbetten?! Allgemeine Java-Themen 4
E Compiler-Fehler wie muss ich die entstandene Quellcode kompilieren?? Allgemeine Java-Themen 2
T Api in Quellcode laden Allgemeine Java-Themen 8
L Java Quellcode auf Windows 7 ausführen? Allgemeine Java-Themen 3
S jsr in Quellcode Allgemeine Java-Themen 4
M R250 Quellcode Allgemeine Java-Themen 2
J Quellcode aus .jar auslesen? Allgemeine Java-Themen 3
M JLapack Quellcode beifügen? Allgemeine Java-Themen 4
P Probleme mit wikipedia quellcode zur binären Suche Allgemeine Java-Themen 6
X Quellcode von nativen Funktionen Allgemeine Java-Themen 2
D Übersetzen von Quellcode Allgemeine Java-Themen 11
N Java Quellcode zu Syntaxbaum Allgemeine Java-Themen 3
M Wie in Eclipse Quellcode incl. Zeilennummern kopieren? Allgemeine Java-Themen 6
G SourceForge - Quellcode Allgemeine Java-Themen 15
V Quellcode auf "Güte" testen? Allgemeine Java-Themen 5
C Java Quellcode parsen Allgemeine Java-Themen 8
M Quellcode DriverManager Allgemeine Java-Themen 2
C Fehler im Quellcode. Suche in einem Baum Allgemeine Java-Themen 3
G Problem mit Quellcode, Eingabe wird nicht angezeigt --HELP-- Allgemeine Java-Themen 2
T Problem mit Quellcode Allgemeine Java-Themen 2
D Was haltet ihr von meinem Quellcode - JConsole? Allgemeine Java-Themen 2
Lazybone Java Quellcode sichern Allgemeine Java-Themen 9
P Fehler im Quellcode Allgemeine Java-Themen 8
J Viel Text mit " im Quellcode abspeichern Allgemeine Java-Themen 7
R Copyright-Notiz am Anfang jeder Quellcode-Datei? Allgemeine Java-Themen 5
R Problem mit Quellcode Allgemeine Java-Themen 2
M Events im Quellcode auslösen Allgemeine Java-Themen 4
J Java Quellcode Aufbereitung für Dokumentation Allgemeine Java-Themen 11
padde479 Organisation von Quellcode Allgemeine Java-Themen 6
F Quellcode von Java ansehen Allgemeine Java-Themen 4
S In einem HTML Quellcode gewünschten Abschnitt in Datei Save Allgemeine Java-Themen 9
R Java Quellcode zu exe Datei unsw. Allgemeine Java-Themen 5
G Quellcode inkludieren Allgemeine Java-Themen 3
J Quellcode aus JAVA Programmen Allgemeine Java-Themen 4

Ähnliche Java Themen


Oben