Hi,
erstmal vielen Dank für deine Hilfe, wusst nicht das mein Code so katastrophal ist :oops: ^^
Werd mich gleich mal dran setzen deinen Code zu verstehen und einzubauen. Meld mich dann bei Zeiten nochmal.
Nochmals Danke das du dir trotz allem die Mühe gemacht hast.
MfG Erinaceus
€: So, hab die letzten paar Tage an dem Code gearbeitet:
€2: Ich seh gerade das das Forum die Befehle die zulang sind durch einen Zeilenumbruch abknickt und die Ordnung stört.
Gibts ne brauchbare Möglichkeit das zu ändern?
Hier ist die Hauptklasse, mit den Verbesserungen und ein wenig verändert.
Btw. Die Möglichkeit zu fliehen ist noch nicht ausgereift und wird vermutlich noch verändert/verbessert.
Hoffentlich kriegste dieses Mal keinen Anfall 
Code:
import java.io.*;
import java.util.*;
public class Spiel {
static Einheit Spieler = new Einheit (); // Objekt das deinen Spieler beschreibt
static BufferedReader Eingabe = new BufferedReader (new InputStreamReader (System.in)); // Wird benutzt um Eingaben zu erfassen in Spiel () und Kaempfen ().
static Random ZufallsZahl = new Random (); // Wird benutzt um Zufallsereignisse zu beschreiben in Spiel () z.B. fürs überleben nach Niederlage. In Kaempfen z.B. um zu entscheiden wer den ersten Zug hat.
static boolean KlassenWahlFalsch = false; // Wird benutzt um festzustellen ob eine Klasse gewählt wurde.
static boolean Gerettet = false; // Wird benutzt um festzustellen ob der Spieler sich nach einer Niederlage retten konnte oder nicht.
static boolean Gewonnen = false; // Wird benutzt um festzustellen, ob der Spieler Gewonnen hat oder nicht. Durch Spieler.Tot ersetzbar?
static boolean Spiel=true; // Wird benutzt um festzustellen ob der Spieler weiterspielen will (While)
static int Nochmal; // Wird benutzt um die Variable Spiel entsprechend abzuändern
static int KampfJa; // Wird benutzt um festzustellen ob der Spieler sich dem Kampfstellt oder nicht.
static int KlassenWahl; // Wird benutzt um den Switch bei der KlassenWahl zu verwenden.
static boolean KampfVorbei = false;
static Einheit Gegner = new Einheit(); // Wird benötigt um dem Spieler einen Gegner zu stellen.
public static void main (String args [])
{
Spiel(); // Wird seperat gestartet, da start () sonst nicht die Variablen zurücksetzen kann
}
public static void Spiel ()
{
while (!KlassenWahlFalsch) // Solange keine Klasse gewählt ist.
{
System.out.println("Waehlen sie ihre Klasse:");
System.out.println("Krieger == 1");
System.out.println("Dieb== 2");
try {
KlassenWahl=Integer.parseInt(Eingabe.readLine());
switch (KlassenWahl)
{
case 1: Spieler.Krieger();
KlassenWahlFalsch=!KlassenWahlFalsch;
break; // Spieler wird ein Krieger und die KlassenWahl ist ausgeführt.
case 2: Spieler.Dieb();
KlassenWahlFalsch=!KlassenWahlFalsch;
break;// Spieler wird ein Dieb und die KlassenWahl ist ausgeführt.
default: System.out.println("Die Eingabe war ungültig."); // Selbst erklärend ;P
}
}
catch (NumberFormatException e)
{
System.out.println("Der eingeben Wert kann nicht akzeptiert werden.");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} // KlassenWahl While endet
System.out.println("Sie sind ein "+ Spieler.Klasse + " Und besitzen folgenden Attribute: ");
System.out.println(Spieler.Staerke + " Staerke ");
System.out.println(Spieler.Geschick + " Geschick");
System.out.println(Spieler.HealthPoints + " Lebenspunkte");
while (Spiel) // Solange der Spieler spielen möchte
{
System.out.println("Sie treffen auf einen Gegner: ");
while (!KampfVorbei) // Solange man weder geflohen ist noch gewonnen hat.
{
System.out.println("Wollen sie den Kampf beginnen?");
System.out.println("1== Stellen");
System.out.println("2==Weglaufen");
try {
KampfJa=Integer.parseInt(Eingabe.readLine());
}
catch (NumberFormatException e)
{
System.out.println("Die eingegeben Zahl enstpricht nicht einem Integer.");
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
switch (KampfJa) // Auswahl: Fliehen oder Kaempfen
{
case 1:Kaempfen.GegnerDaten();
break;
case 2: Gerettet= Kaempfen.Fliehen();
break;
default: System.out.println("Ihre Eingabe war ungültig, bitte geben sie eine korrekte Zahl ein.");
}
} // While !KampfVorbei Schleife endet
if (Spieler.Tot)
{
if (Spieler.Entkommen>=ZufallsZahl.nextInt(100))
{
// Gibt dem Spieler die Chance bei einer Niederlage trotzdem zu überleben, basierend darauf wie gut seine "Entkommen" Werte sind.
// Vorgesehen für ein weiterentwickeltere Version, wo man dann z.B. zum Heiler gehen kann etc.
System.out.println("Da hast du noch einmal Glück gehabt, dein Gegner hat dich nur schwer verletzt und nicht getötet!");
Spieler.HealthPoints=10; // Vorgesehen für ein weiterentwickeltere Version, wo man dann z.B. zum Heiler gehen kann etc.
Spieler.Tot = false; // Wird false gesetzt, da es in der Klasse "Kaempfen" bei weniger als 0 Hp "true" gesetzt wird.
}
else
{
System.out.println("Du bist gestorben! :((("); // :(( MENNO!!! :D
System.exit(0);
}
} // if gewonnen endet hier
else System.out.println("Sie haben gewonnen! WOHOO PARTY YEAAAAH!!");
System.out.println("Willst du nocheinmal spielen?");
System.out.println("Drücke 1 für Ja." );
System.out.println("Gebe eine beliebige Zahl ein um abzubrechen.");
try
{
Nochmal = Integer.parseInt(Eingabe.readLine()); // Nochmal variert weiter unten die Variable "Spiel" die die Schleife bedingt in der sich das abspielt.
}
catch (NumberFormatException e)
{
System.out.println("Die eingegeben Zahl enstpricht nicht einem Integer.");
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
if (Nochmal == 1) Start();
else Spiel = false;
} // While Spiel Schleife endet
}
public static void Start()
{
// Setzt alle Variablen wieder auf den Anfangswert zurück
KlassenWahlFalsch = false; // Wird benutzt um festzustellen ob eine Klasse gewählt wurde.
Gerettet = false; // Wird benutzt um festzustellen ob der Spieler sich nach einer Niederlage retten konnte oder nicht.
Gewonnen = false; // Wird benutzt um festzustellen, ob der Spieler Gewonnen hat oder nicht. Durch Spieler.Tot ersetzbar?
Spiel=true; // Wird benutzt um festzustellen ob der Spieler weiterspielen will (While)
KampfVorbei = false;
Gegner.Tot=false;
Spieler.Tot=false;
Spiel();
}
}
Hier ist die neue Kampf Klasse:
Code:
import java.io.IOException;
public class Kaempfen extends Spiel {
static boolean Player = ZufallsZahl.nextBoolean(); // Entscheidet ob der Gegner oder der Spieler die erste Runde hat.
static boolean Weiter = true; // Wird benötigt um das Spiel abzubrechen.
public static boolean Fliehen ()
{
// Methode um dem Spieler zu ermöglichen zu fliehen, noch in Arbeit.
if (ZufallsZahl.nextBoolean()) return true; // FIXME Eigentlich abhängig von Fluchtgeschickt
else {
KampfrundeGegner(); // Wenn man versucht zu fliehen und scheitert ist der Gegner automatisch dran.
return false; // FIXME s. return true
}
}
public static void GegnerDaten()
{
// Erstellt den Gegner und besorg dessen Daten.
if (ZufallsZahl.nextBoolean()) Gegner.Dieb(); // Entscheidet ob der Gegner ein Dieb oder ein Krieger ist.
else Gegner.Krieger();
System.out.println("Ihr Gegner ist ein "+ Gegner.Klasse + " Und besitzen folgenden Attribute: ");
System.out.println(Gegner.Staerke + " Staerke ");
System.out.println(Gegner.Geschick + " Geschick");
System.out.println(Gegner.HealthPoints + " Lebenspunkte");
Kampf();
KampfVorbei = true;// Die Methode Kampf gibt laut Planung dann einen Wert wieder, der aussagt ob man gewonnen hat oder verloren.
}
public static boolean Kampf ()
{
while (!Spieler.Tot && !Gegner.Tot) // Solang beide Einheiten leben wird der Kampf durchgeführt.
{ System.out.println(""+Gegner.Tot);
System.out.println(""+Spieler.Tot);
System.out.println("Willst du die Runde beginnen?");
System.out.println("1==Ja");
System.out.println("Gebe eine beliebige Zahl ein um aufzuhören");
try
{
switch (Integer.parseInt(Eingabe.readLine()))
{
case 1: Player=!Player;
break; // Wenn der Gegner dran war ist jetzt der Spieler dran und umgekehrt.
default: System.out.println("Bye Bye");
System.exit(0); // Beendet das Spiel falls man JEMALS keine Lust mehr haben sollte ;P
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
if (Player) KampfrundeSpieler(); // Der Spieler schlägt zu
else KampfrundeGegner(); // Der Gegner schlägt zu
}// Ende !Spieler.Tot || Gegner.Tot While Schleife des Kampfes
return Gegner.Tot; // überlebt oder nicht s. return bei GegnerDaten ()
}
public static void KampfrundeGegner () // Der Gegner ist am Zug ...
{
System.out.println("Dein Gegner ist am Zug.");
if (Spieler.Geschick>ZufallsZahl.nextInt(100)) // Entscheidet ob der Gegner trifft oder nicht, abhängig vom Wert Geschick.
{
System.out.println("Dein Gegner holt aus.");
if (Gegner.StaerkeWahr>ZufallsZahl.nextInt(100)) // Entscheidet ob der Gegner einen Stärkebonus erhält oder nicht, abhängig vom Wert StaerkeWahr.
{
System.out.println("Und trifft dich mit einem leichten Schlag und verursacht " + (Gegner.Staerke*Gegner.Schaden)/10 +" Schaden.");
Spieler.HealthPoints = Spieler.HealthPoints-Gegner.Schaden/10; // Der Gegner bekommt keinen Stärkebonus und trifft nur mit seinem Standardschaden/10
}
else // Der Gegner bekommt einen Stärkebonus
{
System.out.println("Und trifft dich mit einem harten Schlag und verursacht "+(Gegner.Staerke*Gegner.Schaden)/10+" Schaden.");
Spieler.HealthPoints = Spieler.HealthPoints-(Gegner.Staerke*Gegner.Schaden)/10; // Der Staerkebonus wird mit dem Standardschaden Mal genommen und ergibt den gesamt Schaden.
}
}
else System.out.println("Dein Gegner schlägt zu, doch du kannst ihm geschickt ausweichen."); // Die Zufallszahl reichte nicht aus.
if (Spieler.HealthPoints<1)
{
Spieler.Tot=true; // Der Spieler ist tot, danach soll die While Schleife in Kampf unterbrochen werden. FIXME
Spieler.HealthPoints = 0; // Falls es negativ wird
}
System.out.println("Du hast "+Spieler.HealthPoints+" Lebenspunkte. Dein Gegner hat noch "+Gegner.HealthPoints+" Lebenspunkte.");
}
public static void KampfrundeSpieler ()
{
// Selbes Prinzip wie bei KampfrundeGegner. Möglich durch eine Klasse mit Variablen zu ersetzen?
System.out.println("Du bist am Zug.");
if (Spieler.Geschick>ZufallsZahl.nextInt(100))
{
System.out.println("Du holst aus.");
if (Spieler.StaerkeWahr>ZufallsZahl.nextInt(100))
{
System.out.println("Und trifft deinen Gegner mit einem leichten Schlag und verursachst "+Spieler.Schaden/10+" Schaden.");
Gegner.HealthPoints = Spieler.HealthPoints-Spieler.Schaden/10;
}
else
{
System.out.println("Und trifft deinen Gegner mit einem harten Schlag und verursachst "+(Spieler.Staerke*Spieler.Schaden)/10 +" Schaden.");
Gegner.HealthPoints = Gegner.HealthPoints-(Spieler.Staerke*Spieler.Schaden)/10;
}
}
else System.out.println("Du schlägst zu doch dein Gegner weicht dir geschickt aus.");
if (Gegner.HealthPoints<=0)
{
Gegner.HealthPoints = 0;
Gegner.Tot=true;
}
System.out.println("Du hast "+Spieler.HealthPoints+" Lebenspunkte. Dein Gegner hat noch "+Gegner.HealthPoints+" Lebenspunkte.");
}
}
MfG Erinaceus