Schleife bis "Bedingung" ausführen

xtina80

Mitglied
Hallo, immer wenn ich gerade ein Problem gelöst haben, stoße ich leider wieder auf neue Probleme:(

Ich möchte für mein Spiel eine ganz simple Kampfschleife, die endet sobald einer der kämpfenden Charaktere tot ist.

Durch Recherchen zum Thema "Kampfsystem" bin ich darauf gestoßen, dass man dieses Problem mit

do
"methode";
while("Bedingung trifft nicht mehr zu");

lösen kann.

Ich habe dies nun ausprobiert und es funktioniert nicht, da sich die Spielfiguren nun in Endlosschleife bekämpfen, obwohl sie schon längst tot sind:confused::(

Mein Code dazu:

Java:
Spielfigur held = new Held();
Monster goblin = new Goblin();
      do {
        held.schlagen(goblin);
        goblin.schlagen(held);
       } 
       while(held.leben <= 0 || goblin.leben <= 0);

Was mache ich falsch?

Es tut mir Leid, wenn ich mich sehr doof anstelle aber ich bin totaler Anfänger in Java! Ich habe mir zwar bereits verschiedene Codes zu diesem Thema angeschaut aber die waren alle mit einem zu komplizierten Grundgerüst drum herum, sodass ich keinen Durchblick mehr hatte, wie ich das auf meinen Code anwenden könnte.

Für Lösungsvorschläge wäre ich sehr dankbar!

LG
 

Joose

Top Contributor
Dein Bedingung ist falsch ;)
Du sagst "solange das Leben von dem Helden oder dem Goblin kleiner gleich 0 ist führe den Code in der Schleife aus"

Eigentlich müsstest du prüfen: "Ist das Leben vom Held und vom Goblin noch größer 0"
Somit würde die Schleife enden sobald einer von beiden weniger oder gleich 0 Leben hat.
 

xtina80

Mitglied
Also müsste das so aussehen?

Java:
do {
        held.schlagen(goblin);
        goblin.schlagen(held);
       }
       while(held.leben > 0 && goblin.leben > 0);

Das Problem ist jetzt aber, dass die sich nicht in einer Schleife bekämpfen bis einer von Ihnen stirbt, sondern nur jeweils einmal:(
 

Joose

Top Contributor
Das Problem ist jetzt aber, dass die sich nicht in einer Schleife bekämpfen bis einer von Ihnen stirbt, sondern nur jeweils einmal:(
Naja kann es sein das einer von beiden schon nach dem 1.Schlag stirbt? Dann würde die Schleife ja richtig funktionieren.

Entweder verwendest du den Debugger und kontrollierst was passiert oder du lässt dir ein paar Kontrollausgaben auf der Konsole ausgeben um zu sehen wie sich die Werte von "leben" der beiden ändern.
 

Jardcore

Top Contributor
Kleine Frage nebenbei
do {
held.schlagen(goblin);
goblin.schlagen(held);
}
while(held.leben > 0 && goblin.leben > 0);
Was passiert wenn der Goblin vom Helden getötet wird? Schlägt er dann trotzdem?
Zum besseren Verstäntnis würde ich noch eine Methode definieren, die istAmLeben() heißt.
Java:
public boolean istAmLeben() {
    return leben > 0;
}

Dann kannst du wiederrum deine Schleife verbessern;
Java:
do{
    held.schlagen(goblin);
    goblin.schlagen(held);
} while(held.istAmLeben() && goblin.istAmleben()); // solange einer von beiden am Leben ist.

In deiner schlagen Methode kannst du dann wohlöglich auch mit istAmLeben() Testen ob der jeweilige Character überhaupt noch schlagen darf.[/COLOR]
 

xtina80

Mitglied
Das wäre der Code für die Klasse Spielfigur:

Java:
    public int leben;
    private int lebenMax;
    private int lebenMin;
    private String name;

    /**
     * Constructor for objects of class Spielfigur
     */
    public Spielfigur()
    {
       leben = 100;
       lebenMax = 100;
       lebenMin = 0;
       Main.ausgabe("Eine neue Spielfigur erscheint. ");
    }
   
    public void setName(String p_name)
    {
        name = p_name;
    }
   
   
    public Spielfigur (int p_leben)
    {
        leben = p_leben;
        lebenMax = p_leben;
        lebenMin = 0;
    }
   
   
    public void schlagen(Spielfigur ziel) 
    { if (ziel.leben>ziel.lebenMin)
       
       ziel.verliereLeben(10);
       
       else
       
       ziel.verliereLeben(0);
    }
   
    public void beissen(Held ziel)
   
    { if (ziel.leben>0)
       
       ziel.verliereLeben(15);
       
       else
       
       ziel.verliereLeben(0);
    }
   
    public void heilen(Spielfigur ziel) 
   
    {if (ziel.leben>ziel.lebenMax)
       
         ziel.heileLeben(5);
       
       else
       
       ziel.heileLeben(0);
    }
   
    public void heileLeben (int anzahl)
    {
       
        if(leben < anzahl)
        {   leben += anzahl;
            Main.ausgabe(this+"hat "+anzahl+" Leben bekommen :) ");
         
        }
        else
        {  
           leben=lebenMax;
            Main.ausgabe(this+" hat bereits volles Leben! ");
           
        }  
    }
     
    public void verliereLeben (int anzahl)
    {
     
        if(leben >= anzahl)
        {
           
            leben =- anzahl;
            Main.ausgabe(this+" hat "+anzahl+" Leben verloren :( ");
         
        }
        else
        {  
            leben=lebenMin;
        }  
       
    }

}

und das wäre der Code für Main zur Ausführung:

Java:
 import java.util.*;

public class Main
{
    public static void main()
   
   {
       Scanner scanner = new Scanner (System.in);
       
       ausgabe("Willkommen zu dem besten Spiel, das Sie jemals gespielt haben: Helden und Monster!\n \n Aber bevor das Abenteuer losgehen kann, müssen Sie zunächst einmal bestimmen, mit wem Sie überhaupt spielen wollen. \n ");
   
       ausgabe("\nBitte wählen Sie für einen männlichen Charakter (m) und für einen weiblichen Charakter (w)!");
       
       
         boolean Geschlecht = true;
         
         while (Geschlecht){
         String input = scanner.next();
         if(input.equalsIgnoreCase("m")) 
         {
            System.out.println("Sie haben sich also für einen Mann entschieden.");
            Geschlecht = false;
         }
       
   
         else if (input.equalsIgnoreCase("w"))
       
         {
            System.out.println("Sie haben sich also für eine Frau entschieden.");
            Geschlecht = false;
         }
       
         else
       
         {
            System.out.println("Mann oder Frau! Sie können nur zwischen diesen beiden wählen!\nBitte wählen Sie für einen männlichen Charakter (m) und für einen weiblichen Charakter (w)!");
       
         }
   
      }
   
     ausgabe("\nBitte wählen Sie (1) für Heiler, (2) für Magier oder (3) für Krieger:");
   
     Spielfigur held = null;
       
   
       
       while(held == null)
       {
           String input2 = scanner.next();
           
           switch (input2)
         
           
          {
     
             case "1":
             held = new Heiler();
             System.out.println("Glückwunsch! Sie haben sich mit dem Heiler für die richtige Klasse entschieden!\n");
             break;
                   
             case "2":
             held = new Magier();
             System.out.println("Glückwunsch! Sie haben sich mit dem Magier für die richtige Klasse entschieden!\n");
             break;
               
             case "3":
             held = new Krieger();
             System.out.println("Glückwunsch! Sie haben sich mit dem Krieger für die richtige Klasse entschieden!\n");
             break;
       
             default:
             System.out.println("Falsche Eingabe! Bitte wählen Sie (1) für Heiler, (2) für Magier oder (3) für Krieger:");
             break;
       
         }
      }
     
      System.out.println("\nSo! Jetzt kann das Abenteuer aber losgehen! \n Sind Sie bereit? Bitte wählen Sie (j) für JA und (n) für NEIN");
     
      boolean Spielen= true;
       
       while (Spielen){
         String input = scanner.next();
         if(input.equalsIgnoreCase("j")) 
         {
            System.out.println("Das war die einzig richtige Entscheidung!\n");
            Spielen = false;
         }
       
   
         else if (input.equalsIgnoreCase("n"))
       
         {
            System.out.println("\nDas glaube ich Ihnen nicht! Am besten wir versuchen es noch einmal: \n Entweder (j) für JA oder (n) für NEIN");
           
         }
       
         else
       
         {
            System.out.println("\nFalsche Eingabe! Entweder (j) für JA oder (n) für NEIN");
       
         }
   
      }
     
     
       Monster goblin = new Goblin();
      do {
        held.schlagen(goblin);
        goblin.schlagen(held);
       }
       while(held.leben > 0 && goblin.leben > 0);
       

     
    }

    public static void ausgabe (String text)
   {
       System.out.println (text);
   }
}
 

xtina80

Mitglied
Kleine Frage nebenbei

Was passiert wenn der Goblin vom Helden getötet wird? Schlägt er dann trotzdem?
Zum besseren Verstäntnis würde ich noch eine Methode definieren, die istAmLeben() heißt.

Ja, genau das hatte ich mir auch schon überlegt. Ich hatte das so:

Java:
public boolean lebtNoch()
    {
        if(leben > 0)
        {
            return true;
        }
       
        else
       
        {  Main.ausgabe(this+" ist an seinen Verletzungen gestorben ");
           
            return false;
        }  
    }

aber ist das dann in Verbindung mit der schlagen Methode

Java:
public void schlagen(Spielfigur ziel) 
    { if (ziel.leben>ziel.lebenMin)
       
       ziel.verliereLeben(10);
       
       else
       
       ziel.verliereLeben(0);
    }

und verliereLeben:

Java:
public void verliereLeben (int anzahl)
    {
     
        if(leben >= anzahl)
        {
           
            leben =- anzahl;
            Main.ausgabe(this+" hat "+anzahl+" Leben verloren :( ");
         
        }
        else
        {  
            leben=lebenMin;
        }  
       
    }

nicht "doppelt gemoppelt"?
 

Joose

Top Contributor
Nein.
Dein Held schlägt den Goblin, die Gesundheit vom Goblin fällt auf <=0.
Laut Code würde der Goblin nun nochmal den Held schlagen, was aber nicht passieren darf.

Deine Schlagen Methode prüft nur ob das Ziel noch lebt, nicht aber die schlagende Figur selbst.
 

flopalko

Bekanntes Mitglied
Weiters als Anregung zum Verbessern deines Codes:
Wenn du schon Membervariablen wie lebenMin und lebenMax hast denke darüber nach, wo es sinnvoll ist diese einzusetzen, wo du sie jetzt noch nicht hast.
Kann es in deinem Spiel zB eine Figur geben die unsterblich ist? Ihr lebenMin wäre demnach ja dann zB 2 und nicht 0. Kann es in deinem Code dann vorkommen, dass diese Figur weniger als 2 Leben hat?
Wie gesagt, gehe wenn du fertig bist kritisch deinen Code durch und frage dich, ob du manche Sachen nicht besser lösen kannst.
 

xtina80

Mitglied
Vielen vielen Dank für eure Mühe und Hilfestellung! Jetzt funktioniert es so wie ich es mir vorgestellt habe!

Weiters als Anregung zum Verbessern deines Codes:
Wie gesagt, gehe wenn du fertig bist kritisch deinen Code durch und frage dich, ob du manche Sachen nicht besser lösen kannst.

Das versuche ich stets, nur fällt es mir jetzt am Anfang noch schwer einen Überblick zu erhalten, da es noch so einige Baustellen gibt, die ich noch lösen möchte bevor es ans Optimieren geht, wie zB.:

- Namensabfrage mit Eingabe und Weiterbenutzung des Namens im Laufe des Spiels
- die Geschlechter nicht nur als Abfrage sondern ins Spiel einbauen (anstatt Krieger, dann KriegerIN usw.)
- bei verlorenem Kampf ein "Game over" und Spielende
- eventuell ein Zufallsgenerator für den Schaden anstatt festgelegte Parameter

und noch so einige Verbesserungen und Kleinigkeiten, von denen ich momentan noch keine Ahnung habe wie ich diese umsetzen soll.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Zuweisungen und Methodenaufrufe in Bedingung der while Schleife? Java Basics - Anfänger-Themen 2
L while Schleife mit 2 Bedingung endet nicht Java Basics - Anfänger-Themen 3
P Bedingung in Schleife wird nicht ausgeführt Java Basics - Anfänger-Themen 5
W while Schleife und Bedingung Java Basics - Anfänger-Themen 11
N Methode mit While-Schleife und If-Bedingung und Array-Initialisierung Java Basics - Anfänger-Themen 4
I Welche Schleife/Bedingung nehme ich her Java Basics - Anfänger-Themen 5
C Compiler-Fehler Wird eine if Bedingung nach einer for-Schleife nach jeder Iteration überprüft? Java Basics - Anfänger-Themen 1
F Erste Schritte If Bedingung in Schleife dynamisch erweitern Java Basics - Anfänger-Themen 4
R for-Schleife bei erfüllter Bedingung beenden Java Basics - Anfänger-Themen 7
MiMa for Schleife Bedingung Java Basics - Anfänger-Themen 4
S for schleife mit if bedingung Java Basics - Anfänger-Themen 21
2 Bedingung bei Schleife Java Basics - Anfänger-Themen 23
H Bedingung while-Schleife | integer number too large Java Basics - Anfänger-Themen 2
G If-Schleife läuft ohne erfüllte Bedingung Java Basics - Anfänger-Themen 13
S For Schleife, Bedingung Java Basics - Anfänger-Themen 4
M Schleife abhängig von Bedingung Java Basics - Anfänger-Themen 5
M While-Schleife mit Wartezeit Java Basics - Anfänger-Themen 15
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
DrahtEck Schleife soll wieder da anfangen wo ich es möchte ! Java Basics - Anfänger-Themen 17
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Ranger229 Endless loop in while Schleife Java Basics - Anfänger-Themen 3
MaZ Quadrat Schleife(Pyramide) Java Basics - Anfänger-Themen 9
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
P Wie kann diese Schleife beenden Java Basics - Anfänger-Themen 1
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
T Variable in Schleife deklarieren, Speicherplatz, Garbage Collector Java Basics - Anfänger-Themen 10
Ostkreuz While Schleife neustarten Java Basics - Anfänger-Themen 20
S Verschachtelte for-Schleife Java Basics - Anfänger-Themen 2
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
laxla123 Verschachtelte If-Else Schleife Java Basics - Anfänger-Themen 21
S Erste Schritte do-while Schleife Münzwurf Java Basics - Anfänger-Themen 1
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
P Best Practice While loop schleife Java Basics - Anfänger-Themen 5
ohneInformatik; For Schleife. Was macht dieser Code?? Java Basics - Anfänger-Themen 5
I For Schleife Summe berechnen Java Basics - Anfänger-Themen 13
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
R do while Schleife Verständnisfrage Java Basics - Anfänger-Themen 2
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
N Warum Springt iterator nur in der Schleife weiter Java Basics - Anfänger-Themen 9
J for Schleife kleinste Zufallszahl finden Java Basics - Anfänger-Themen 25
A Return in While Schleife Java Basics - Anfänger-Themen 6
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
J do..while Schleife Java Basics - Anfänger-Themen 14
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
S Textausgabe in einer For-Schleife Java Basics - Anfänger-Themen 12
B Automatisierte Ausgabe (Schleife, If-Abfrage?) Java Basics - Anfänger-Themen 24
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
T Mit jedem Wert in der for-Schleife weiter arbeiten Java Basics - Anfänger-Themen 3
berserkerdq2 Warum muss man manchmal in der RUnmethode sleep in eine schleife tun? Java Basics - Anfänger-Themen 9
F for-Schleife halbiert Durchläufe ungewollt Java Basics - Anfänger-Themen 6
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
Bugs Bunny Fehlerhafte Berechnung beim erneuten Durchlaufen der Schleife Java Basics - Anfänger-Themen 5
J Methoden iterator for-schleife (hasNext() ) Java Basics - Anfänger-Themen 7
S Was macht ++ ohne Schleife? Java Basics - Anfänger-Themen 4
LFB In einer For-Schleife alles in einer Zeile ausgeben Java Basics - Anfänger-Themen 14
Neuling47 for schleife Java Basics - Anfänger-Themen 6
M Variable in einer Schleife initialisieren Java Basics - Anfänger-Themen 46
JavaBeginner22 Würfeln bis 6 while Schleife Java Basics - Anfänger-Themen 13
D EinMalEins mithilfe einer for-Schleife und Array Java Basics - Anfänger-Themen 1
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
W Schleife und einmal variable++ zu viel Java Basics - Anfänger-Themen 20
sgtcoopa Array übergeben Schleife Java Basics - Anfänger-Themen 0
T Mäxchenspiel mit Schleife Java Basics - Anfänger-Themen 3
D try/catch-Block bei for-Schleife Java Basics - Anfänger-Themen 14
D Hilfe bei einer Aufgabe mit for-Schleife Java Basics - Anfänger-Themen 6
J Schleife Problem Java Basics - Anfänger-Themen 2
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
stormyark 4 Bit in einer for-schleife funktioniert nicht Java Basics - Anfänger-Themen 3
M ArrayList mit einer Schleife befüllen Java Basics - Anfänger-Themen 2
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
S Sentinel-Schleife Java Basics - Anfänger-Themen 0
D Array mit while-schleife Java Basics - Anfänger-Themen 12
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
P9cman Vokal Zähler mit switch case und for-Schleife Java Basics - Anfänger-Themen 4
B do while Schleife Java Basics - Anfänger-Themen 3
I Fehler bei for-Schleife Java Basics - Anfänger-Themen 6
S Mit for-Schleife ein 2D JLabel-Array mit veränderbaren Icons erstellen Java Basics - Anfänger-Themen 3
D Codeverständis For-Schleife Java Basics - Anfänger-Themen 4
SergioCK Do while Schleife wiederholen Java Basics - Anfänger-Themen 14
M For-Schleife Java Basics - Anfänger-Themen 20
el_pato DialogFenster wird nicht in Schleife geöffnet? Java Basics - Anfänger-Themen 30
J if-Schleife innerhalb einer if-Schleife wird in der Konsole nicht gelesen Java Basics - Anfänger-Themen 4
EinNickname9 Denkfehler bei einfacher Schleife Java Basics - Anfänger-Themen 83
paulen1 Methoden Unerwünschte Ausgabe bei System.out.print in For-Schleife Java Basics - Anfänger-Themen 8
S Array mit for-Schleife besetzen Java Basics - Anfänger-Themen 7
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
M for schleife ohne geschweifte Klammer Java Basics - Anfänger-Themen 15
H For-Schleife bis Index von Eingabe laufen lassen Java Basics - Anfänger-Themen 24
Informatikf Methoden While Schleife Java Basics - Anfänger-Themen 3
U geschachtelte if-Schleife Java Basics - Anfänger-Themen 15
M While Schleife? Java Basics - Anfänger-Themen 4
Poppigescorn Quersumme Berechnen mit einer While Schleife Java Basics - Anfänger-Themen 13
I Potenz berechnen mit for-Schleife Java Basics - Anfänger-Themen 3
J Koordinaten per Schleife ausgeben Java Basics - Anfänger-Themen 6
S Schleife funktioniert nicht Java Basics - Anfänger-Themen 2
M For Schleife/ArrayList Java Basics - Anfänger-Themen 12
OZAN86 Methoden for schleife Java Basics - Anfänger-Themen 3
G --i versus i++ in for-Schleife Java Basics - Anfänger-Themen 11
OZAN86 For Schleife von 1-50 die Zahlen werden durch ein Komma getrennt Java Basics - Anfänger-Themen 10
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben