Methoden Code sinnvoll in Methoden einteilen

uhFarren

Mitglied
Hallo,
ich hab vor einigen Wochen mit der Java Programmierung angefangen und bin momentan bei Methoden angelangt. Als ich am Üben und beim erstellen von einigen Übungsprogrammen war enstand irgendwann das folgende (Von GUI bin ich noch weit entfernt und will mich der hierbei nicht widmen, mich hat die Logik hinter einem Kampfsystem und das schreiben dieser jedoch mitlerweile echt gefesselt). Jetzt möchte ich diesen Code jedoch sinnvoll in Methoden verpacken und meine Main-Methode ein wenig abspecken lassen😉.
Jedoch stehe ich gerade ein wenig auf dem Schlauch was ich jeweils alles (gerade die Variablen Schaden, Name und Leben der einzelnen Charaktere ) zusammen in jeweils eine Methode packen kann.
Die "Kampf" Dialoge würde ich noch gebacken kriegen, beim Rest sehe im Momentan etwas Schwarz.

Ich hoffe ihr könnt mir ein paar Tipps geben. Gegoogelt und hier im Forum gesucht hab ich schon etwas, fand jetzt jedoch nichts was mir konkret bei meinem Fall weiterhilft.

War ein langer Tag. Vieleicht steht mein Gehirn auch nur auf minimalleistung🙂


Java:
import java.io.*;
public class Charakter {

   
    public static void main(String[] args)throws IOException {
        Methoden Spieler=new Methoden();
        Methoden Gegner=new Methoden();
        String Eingabe;
        boolean repeat=true,repeat1=true,repeat2=true,repeat3=true;
        BufferedReader Eingabebuff=new BufferedReader(new InputStreamReader(System.in));
     
        System.out.print("Wählen Sie den Namen für ihren Helden: ");
        Spieler.Name=Eingabebuff.readLine();
        while(repeat==true){
        System.out.print("Wählen Sie die Klasse ihres Helden: Krieger, Schuetze, Magier ");
        Eingabe=Eingabebuff.readLine();
       
        if(Eingabe.equals("Krieger")){
        Spieler.Leben=200;
        Spieler.Schaden=30;
        repeat=false;
        }
        else if(Eingabe.equals("Schuetze")){
        Spieler.Leben=170;
        Spieler.Schaden=40;
        repeat=false;
        }
        else if(Eingabe.equals("Magier")){
        Spieler.Leben=120;
        Spieler.Schaden=65;
        repeat=false;
        }
        else{
         System.out.println("Ungültige Eingabe");
         repeat=true;
         }
    }
         while(repeat1==true){
        System.out.print("Wählen Sie den Gegner ihres Helden: Ork, Zwerg, Elf ");
        Eingabe=Eingabebuff.readLine();
      
        if(Eingabe.equals("Ork")){
        Gegner.Name="Ork";
        Gegner.Leben=300;
        Gegner.Schaden=10;
        repeat1=false;
        }
        else if(Eingabe.equals("Zwerg")){
        Gegner.Name="Zwerg";
        Gegner.Leben=250;
        Gegner.Schaden=15;
        repeat1=false;
        }
        else if(Eingabe.equals("Elf")){
        Gegner.Name="Elf";
        Gegner.Leben=80;
        Gegner.Schaden=55;
        repeat1=false;
        }
        else{
        System.out.println("Ungültige Eingabe.");
        repeat1=true;
         }
        }
    System.out.printf("%s betritt die Arena und steht einem %s gegenüber",Spieler.Name,Gegner.Name );
    System.out.println("");
    while(Spieler.Leben>=1 && 1<=Gegner.Leben){
   
    System.out.println("____________________________________________");
    Gegner.Leben=Gegner.Leben-Spieler.Schaden;
    Spieler.Spielerang();
    System.out.printf("%s erleidet %s Schaden. Restleben: %s",Gegner.Name,Spieler.Schaden,Gegner.Leben);
    System.out.println("");
  
    if(Gegner.Leben<=0){
    System.out.printf("Die Menge tobt!!! %s hat obsiegt!",Spieler.Name);
    System.out.println("");
    break;}
   
    Spieler.Leben=Spieler.Leben-Gegner.Schaden;
    Gegner.Gegnerang();
    System.out.printf("%s erleidet %s Schaden. Restleben: %s",Spieler.Name,Gegner.Schaden,Spieler.Leben );
    System.out.println("");
    if(Spieler.Leben<=0){
    System.out.printf("%s sinkt zu Boden. Dein Held wurde geschlagen!",Spieler.Name);
    System.out.println(""); 
   break;
    }
    }
 
       }
       }

Java:
public class Methoden {
    String Name;
    int Leben,Schaden;
    void Gegnerang(){
    System.out.println("Dein Gegner schlägt zu!!");
    }
    void Spielerang(){
    System.out.println("Dein Held greift an!!");
    }
}
 
Moin,
mal grundlegend: in Deinem Stadium würde ich alle Programmteile, die Du mehrfach und an verschiedenen Stellen verwenden willst, in eine eigene Methode auslagert!
Die Klasse "Methoden" macht (auch im Sinne der OOP) nicht wirklich Sinn.
Wozu eine eigene Klasse, die lediglich eine Sammlung irgendwelcher Methoden ist ??
BTW: was soll "Gegnerang" und "Spielerang" bedeuten ?? 😱

Um die main-Methode zu entlasten, kannst Du die dort liegende Logik natürlich auslagen in Klasse, und dann über sowie "starteSpiel()" etc. aufrufen!

VG Klaus
 
"Gegnerang" und "Spielerang" sollen vermutlich "GegnerangRIFF" und "SpielerangRIFF" sein.

Man kann zwar auch größere Berechnungen in statische Klassen auslagern, ich mach das aber nur, wenn diese Berechnungen an vielen Stellen verwendet werden und nicht ausschließlich zu einer Klasse gehören. (Und wenn ich mir noch nicht sicher bin, wie die letztendliche Implementierung aussieht)

Probiers mal, in deiner Main nur den Kampf selbst zu verwalten, aber die Kämpfer als eigene Klasse anzulegen. In der Main fragst du den Spieler, wer er sein und gegen wen er antreten möchte, aber dann erstellst du zwei Kämpfer-Objekte, die die Methode hauDenGegner haben.
 

Zurück
Oben