Klassen Kleine Übung zum Thema Klassen

Tyor

Mitglied
Ich habe mir in den letzten Tagen mit Hilfe einer Website die Grundlagen von Java beigebracht und wollte nun wissen ob ich grundlegende Fehler oder unnötige Mehrarbeit mache. Vor allem bei der Verwendung von Objekten bin ich mir nicht sicher. Hab mich an einem mini RPG versucht. Ein kurzes Feedback wäre nett.
Java:
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Random rand = new Random();
        Char mainChar = new Char();
        Char enemy = new Char();
        mainChar.setStartHP(100);
        mainChar.setMaxHP(mainChar.getStartHP());
        mainChar.setCurrentHP(mainChar.getMaxHP());
        mainChar.setBaseAttack(10);
        mainChar.setAttack(mainChar.getBaseAttack());
        Fight kampf = new Fight();

        while (mainChar.getCurrentHP() > 0) {
            enemy.setBaseAttack(2 + mainChar.getLvl() * 2); // gegner generieren
            enemy.setAttack(enemy.getBaseAttack());//waffe noch einfügen
            enemy.setMaxHP(mainChar.getLvl() * mainChar.getLvl());
            enemy.setCurrentHP(enemy.getMaxHP());
            enemy.setGold(rand.nextInt(mainChar.getLvl() * 20));
           
            while (enemy.getCurrentHP() > 0 & mainChar.getCurrentHP() > 0)// kampfhandlung
            {
                enemy.setCurrentHP(kampf.kampfhandlung(
                        enemy.getCurrentHP(), mainChar.getAttack() + rand.nextInt(mainChar.getLvl())));
                mainChar.setCurrentHP(kampf.kampfhandlung(
                        mainChar.getCurrentHP(), enemy.getAttack()));
                System.out.println("Dein Leben: " + mainChar.getCurrentHP()
                        + ". \tDas Leben deines Gegners: " + enemy.getCurrentHP());
            }
           
            // belohnung für besiegten gegner
            if (mainChar.getCurrentHP() > 0) {
                mainChar.setLvl(mainChar.getLvl() + 1);
                mainChar.setMaxHP(mainChar.getMaxHP() + rand.nextInt(mainChar.getLvl()));//neues MaxHP
                System.out.println("Level UP! Du bist nun Level "
                        + mainChar.getLvl() + "!");
                mainChar.setGold(enemy.getGold() + mainChar.getGold());
                // heilung
                mainChar.setCurrentHP(mainChar.getCurrentHP()
                        + mainChar.getLvl() * 5);
                if (mainChar.getCurrentHP() > mainChar.getMaxHP())
                    mainChar.setCurrentHP(mainChar.getMaxHP());
                System.out.println("Dein Leben zu Begin des Kampfes beträgt: "
                        + mainChar.getCurrentHP());
            } else
                System.out.println("Dein maximales Level war "
                        + mainChar.getLvl() + " Du hattest "
                        + mainChar.getGold() + " Gold!");
        }

    }
}

 

black swan

Mitglied
Java:
while (enemy.getCurrentHP() > 0 & mainChar.getCurrentHP() > 0)// kampfhandlung
                                ^
Logische Verknüpfungen immer mit && nicht &.

Empfehlung (nicht Muss): Überlade Deinen Konstruktor zum Erzeugen von Charakteren. Beispiel:

Java:
    // Überladener Konstruktor
    public void Char (int hp, int ba,int mxhp, int sthp)  {
    this.hitpoint = hp;
    this.baseattack = ba;
    this.maxhp = mxhp;
    this.starthp = sthp;
    ...
}
Das führt dann von
Java:
    Char mainChar = new Char();      
    mainChar.setStartHP(100);
    mainChar.setMaxHP(mainChar.getStartHP());
    mainChar.setCurrentHP(mainChar.getMaxHP());
    mainChar.setBaseAttack(10);
    mainChar.setAttack(mainChar.getBaseAttack());
zu
Java:
    Char mainChar = new Char(100, 10, 100, 100); 
    mainChar.setAttack(mainChar.getBaseAttack()); //?
Wobei die letzte Zeile keinen Sinn ergibt: Du erzeugst ein Objekt, und weisst ihm einen Parameter zu, den Du vorher aus dem selbigen ausgelesen hast. Das sieht aus, als könnte es im Konstruktor erledigt werden (zumindest beim initialen Aufruf).

Ansonsten finde ich den Code ok. Bestimmt hat der ein oder andere User noch weitere Vorschläge, ich selbst programmiere Java auch noch nicht zu lange.
 

Tyor

Mitglied
Super vielen Dank! Hab das in meinen Code übernommen. Hab das Programm dementsprechend umgeschrieben. Habe vor allem versucht die main übersichtlich zu halten :)

Java:
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random rand = new Random();
        Char mainChar = new Char();
        Char enemy = new Char();
        mainChar.iniChar(100, 10, 0, 1);
        Fight kampf = new Fight();

        while (mainChar.getCurrentHP() > 0) {
            enemy.iniEnemy(mainChar, rand);

            while (enemy.getCurrentHP() > 0 && mainChar.getCurrentHP() > 0)// kampfhandlung
            {
                kampf.kampfhandlung(mainChar, enemy, rand);
            }

            // belohnung für besiegten Gegner (LevelUP)
            if (mainChar.getCurrentHP() > 0) {
                mainChar.lvlUP(enemy);
                mainChar.healing();
            } else
                System.out.println("Dein maximales Level war "
                        + mainChar.getLvl() + " Du hattest "
                        + mainChar.getGold() + " Gold!");
        }

    }
}
 

Joose

Top Contributor
Hab das in meinen Code übernommen. Hab das Programm dementsprechend umgeschrieben. Habe vor allem versucht die main übersichtlich zu halten

Java:
i
        while (mainChar.getCurrentHP() > 0) {.......

            while (enemy.getCurrentHP() > 0 && mainChar.getCurrentHP() > 0)// kampfhandlung
            {
                kampf.kampfhandlung(mainChar, enemy, rand);
            }
            // belohnung für besiegten Gegner (LevelUP)
            if (mainChar.getCurrentHP() > 0) {
                mainChar.lvlUP(enemy);
                mainChar.healing();
            } else
                System.out.println("Dein maximales Level war "
                        + mainChar.getLvl() + " Du hattest "
                        + mainChar.getGold() + " Gold!");
        }

Kleiner Tipp: Auch wenn es sich beim else Zweig um eine einzeilige Anweisung handelt, verwende am Besten immer Klammern bei Schleife und if/else Anweisungen. Es passieren recht schnell Fehler wo man vergisst die Klammern zu setzen und dann passieren ungewöhnliche Dinge.

Ansonsten habe ich gesehen das du 4x die Überprüfung "getCurrentHP > 0" im Code hast. Hier könnte man in der Klasse Char eine eigene Methode "isAlive()" definieren, welche man dann jeweils aufruft.
Vorteil die Bedingung kann man in Zukunft zentral an einer Stelle bearbeiten, es ist lesbarer.

Von anderen Spielen kenn ich es das beim einem LvlUp der Character automatisch geheilt wird, wenn das auch deine Absicht wäre dann könnte man den Aufruf von "healing()" direkt in der Methode "lvlUp" erledigen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Suche jemanden für kleine Uni-Abgabe/ mit Vergütung Java Basics - Anfänger-Themen 1
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
J Kleine Frage zu OOP Java Basics - Anfänger-Themen 371
L Kleine Hilfe beim Schreiben eines Programmes benötigt :D Java Basics - Anfänger-Themen 40
M Welches Framework für kleine WebApp nutzen? Java Basics - Anfänger-Themen 6
D Kleine Probleme mit Split-Befehlen Java Basics - Anfänger-Themen 5
O Datei in mehrere kleine Dateien umwandeln Java Basics - Anfänger-Themen 47
CptK Interface Kleine Kreise in großem Kreis anordnen Java Basics - Anfänger-Themen 3
CT9288 Kleine Simulation programmieren, denkanstöße erbeten Java Basics - Anfänger-Themen 19
S Kleine Frage zu Threads Java Basics - Anfänger-Themen 3
O Kleine Frage zu Iterator und Iterable Java Basics - Anfänger-Themen 6
O Kleine Frage zu cast Java Basics - Anfänger-Themen 3
U DOM Parser, kleine Frage Java Basics - Anfänger-Themen 29
N BierSpiel von "Kopf bis Fuss" eigener Code...kleine Problemstellung. Java Basics - Anfänger-Themen 11
Anfänger2011 2 kleine Fragen zu ArrayListen Java Basics - Anfänger-Themen 5
TheSorm Kleine Speicher Klasse Java Basics - Anfänger-Themen 24
F Speicherlast mehrere GB durch kleine png files? Java Basics - Anfänger-Themen 1
T Kleine Anfängerfrage :) Java Basics - Anfänger-Themen 4
T Kleine Klausurfragen Java Basics - Anfänger-Themen 17
T viele "kleine" Fragen... Java Basics - Anfänger-Themen 3
Q Vererbung Kleine Hilfe bei einer aufgabe Java Basics - Anfänger-Themen 5
DStrohma Best Practice Hibernate für kleine Anwendung nutzen? Java Basics - Anfänger-Themen 4
O Konsole - Kleine Frage Java Basics - Anfänger-Themen 22
N kleine get-Methode anhand einer Aufgabenstellung Java Basics - Anfänger-Themen 13
D Kleine Rechenregel... ++a Java Basics - Anfänger-Themen 4
ScottGambler Kleine Frage Java Basics - Anfänger-Themen 13
M Erste Schritte 2 Kleine Programme Java Basics - Anfänger-Themen 27
T Kleine Frage Java Basics - Anfänger-Themen 2
B Kleine Erklärung zu einer Codezeile benötigt Java Basics - Anfänger-Themen 5
A Java Flächeninhaltsberechnung kleine Frage Java Basics - Anfänger-Themen 8
H Datei in kleine Stücke teilen und wieder erkennen Java Basics - Anfänger-Themen 10
P eigene kleine Datenverwaltung Java Basics - Anfänger-Themen 5
K Erste Schritte Kleine Verständnisfrage Java Basics - Anfänger-Themen 12
S Erste Schritte Zwei kleine Fragen zu [], int und Konstruktor Java Basics - Anfänger-Themen 3
S Erste Schritte Kleine Problem mit Ausgabe in eine Datei Java Basics - Anfänger-Themen 11
G Kleine Java Programme aus Main Java Programm starten..... Java Basics - Anfänger-Themen 3
R Sehr kleine doubles nicht in Exponentialdarstellung ausgeben Java Basics - Anfänger-Themen 3
H Datenbank suche in kleine Schritte Java Basics - Anfänger-Themen 6
O kleine SwingFrame Java Basics - Anfänger-Themen 3
T Kleine Frage zu Collections Java Basics - Anfänger-Themen 3
J BlueJ! 2 kleine Fragen zum Spiel. Java Basics - Anfänger-Themen 3
J Kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
H Warum funktioniert diese kleine Methode nicht? Java Basics - Anfänger-Themen 8
E Kleine Hilfe für einen Einsteiger Java Basics - Anfänger-Themen 18
Luk10 Dateipfad beim Laden einer Datei + Neue kleine Frage! Java Basics - Anfänger-Themen 11
U actionListener - eine Kleine Frage Java Basics - Anfänger-Themen 7
M kleine Verständisfrage zur Klassenhierarchie, speziel JMenuItem Java Basics - Anfänger-Themen 8
J Kleine Frage zu Methoden & OOP Java Basics - Anfänger-Themen 4
B Paar kleine Grundsatzfragen zu Java Java Basics - Anfänger-Themen 5
M kleine und einfache Verständnisfrage Java Basics - Anfänger-Themen 3
S 2 kleine Methoden negieren und print Java Basics - Anfänger-Themen 8
J if und kleine double Werte Java Basics - Anfänger-Themen 7
H kleine zwischenfrage string Java Basics - Anfänger-Themen 3
ModellbahnerTT Kleine Frage zu doppelten Arrays Java Basics - Anfänger-Themen 3
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
M Kleine Konsole mit Threads + KeyAdapter Java Basics - Anfänger-Themen 6
hdi Kleine Design/Convention Frage zu Konstruktoren Java Basics - Anfänger-Themen 4
hdi kleine Verständnisfrage lokale + Member Variable Java Basics - Anfänger-Themen 10
R Kleine Frage zu Array Java Basics - Anfänger-Themen 2
B kleine Probleme beim auslesen einer m3u Datei Java Basics - Anfänger-Themen 3
G eine kleine verwaltung Java Basics - Anfänger-Themen 2
M Eine kleine Frage bzw kleine Theorie frage String[arg] Java Basics - Anfänger-Themen 6
Povlsen84 Initlialisierung, Vector, serialVersionUID . kleine Fragen Java Basics - Anfänger-Themen 4
M Kleine Anfängerfrage Java Basics - Anfänger-Themen 10
D kleine Passwortabfrage erstellen incl. Method zum verändern Java Basics - Anfänger-Themen 7
G jFTP - kleine Fragen Java Basics - Anfänger-Themen 2
P Eine kleine Frage. Java Basics - Anfänger-Themen 4
M kleine sql abfrage Frage Java Basics - Anfänger-Themen 5
K Kleine Fragen über Arrays Java Basics - Anfänger-Themen 8
Z kleine frage zu: Runtime.getRuntime().exec("cmd /c) Java Basics - Anfänger-Themen 3
M Zufallszahl - kleine Frage Java Basics - Anfänger-Themen 4
K Hallo, Ich suche kleine Java Program-Aufgaben zum üben ? Java Basics - Anfänger-Themen 4
S kleine suche Java Basics - Anfänger-Themen 9
D kleine spielerei mit swing Java Basics - Anfänger-Themen 5
A Kleine Tabelle . Java Basics - Anfänger-Themen 8
U kleine datenbank Java Basics - Anfänger-Themen 86
G kleine Frage Java Basics - Anfänger-Themen 4
Q Wie kann man eine kleine pause im Programm machen? Java Basics - Anfänger-Themen 13
J Kleine Connection Frage Java Basics - Anfänger-Themen 4
J kleine java aufgabe: ausgabe von sternchen Java Basics - Anfänger-Themen 20
P kleine db-aufgabe läuft nur suboptimal Java Basics - Anfänger-Themen 8
S ein paar kleine Fragen Java Basics - Anfänger-Themen 4
M Kleine Frage zu If-Bedingung Java Basics - Anfänger-Themen 4
X Kleine Frage: Split Java Basics - Anfänger-Themen 13
G sehr kleine Dezimalzahlen (BigDecimal) falsch angezeigt Java Basics - Anfänger-Themen 5
G Eigene kleine Sprache entwickeln Java Basics - Anfänger-Themen 6
T Kleine Verständnissfrage Java Basics - Anfänger-Themen 7
J Große *.Text Datei zum verschicken in viele kleine Java Basics - Anfänger-Themen 7
A Noch ne kleine Beanshell Frage Java Basics - Anfänger-Themen 7
B eine kleine leichte aufgabe mit einem stack programmieren Java Basics - Anfänger-Themen 2
A Kleine Anfängerfragen u.a.: Kann man Random "speichern& Java Basics - Anfänger-Themen 6
J Übung Zahlworte Java Basics - Anfänger-Themen 14
M Array - Übung Java Basics - Anfänger-Themen 3
Der Grütz Verständnisfrage zu Übung aus Java Kurs - Schaltjahr bestimmen Java Basics - Anfänger-Themen 2
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
Kawastori Hilfe bei Methoden Übung Java Basics - Anfänger-Themen 6
T OOP Klausur-Übung Öpnv Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben