Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen?

Hallot Leute, ich muss euch ein zweites mal belästigen ^^ Um mir die Basics und das logische Verständniss für das Programmieren anzueignen, bastel ich derzeit einen Textadventure zusammen. Ich arbeite mit mehreren Klassen, Methode etc. Mein Problem ist wie folgt: Ich habe meine Klasse Dialoge, wo ich eben alle Dialoge die im Verlauf des Spiels geschehen sollen als Methode schreibe, um diese dann in der Main dann nur als Methode aufrufen zu müssen. Der Spieler soll eine Gabe der Feenkönigin erhalten, jedoch kann der Spieler dieses event auch skippen. Nun möchte ich einen boolean am ende des Dialogs einbauen welcher dann, da die Gabe Angriffsboni hat, in der Kampf klasse per if abfrage eben bei wahr mit und bei false eben nicht mit eingerechnet wird.

Ich habe nun seit 3 Stunden herum gelesen und in den meisten fällen ist die Lösung getter und setter, wie ich gelesen habe. Jedoch kann ich nun keine Methode in einer Methode einbauen, oder?
Ich bin nun erstmal traurig schlafen xD und ich danke schonmal für jede Hilfe von euch! :)

Hier mal der Code von der Dialog und Kampf Klasse:

[CODE lang="java" title="Der Dialog"]if(choice == 1) {

System.out.println("Held: Das würdet ihr für mich tun, "+fairy.fairyname+"? Ich werde eure Gabe nicht verschwenden!");

scanner.nextLine();

System.out.println("Fee: Kniet euch hin werter Held der Menschen. Ich werde euch nun die Gabe der Königin der Feen verleihen. Auf dass ihr sie weise nutzt.");

scanner.nextLine();

System.out.println("Die Fee fängt an auf einer Sprache zu singen welche ihr nicht versteht. Die Luft ist vor Magie nur so am knistern, man kann es richtig spüren.");

scanner.nextLine();

System.out.println("Ihr spürt wie die vorher noch in der Luft merkbare Magie nun in euren Körper strömt. Es fühlt sich unglaublich an!");

scanner.nextLine();

System.out.println("Fee: "+spieler.name+", das Ritual ist beendet. Erhebt euer Haupt, Held, ihr seid nun ein Verbündeter der Feen. Auf eine gute Zusammenarbeit.");

scanner.nextLine();

System.out.println("Ihr erhaltet: "+gabe.gabe+" Euer Schaden wird erhöht und der erlittene Schaden wird verringert.");

scanner.nextLine();

System.out.println("Fee: Diese Gabe wird euch bei eurem Kampf gegen den Drachen sehr unterstützen. Nun geht, "+spieler.name+", ihr müsst eure Aufgabe erfüllen. Viel Glück!");

scanner.nextLine();

System.out.println("Nachdem "+fairy.fairyname+" dich mit einem Lächeln und einer Winkenden Hand verabschiedete, verschwand sie im Garten");

}[/CODE]

[CODE lang="java" title="Methode fürs ausrechnen vom Schaden"]public void Kampf() { //Bei den Parametern in den If Anweisungen nichts bei denken, war nur am herumexperimentieren ^^

if(amuletErhalten(true) && gabeErhalten(true)) {

spieler.schaden = spieler.schaden + items.amuletdamage + items.angriffGabe;

spieler.absorb = spieler.absorb + schild.schildAbsorb + gabe.angriffGabe + items.amuletdefence;

}

else if(amuletErhalten(true) && gabeErhalten(false)) {

spieler.schaden = spieler.schaden + items.amuletdamage;

spieler.absorb = spieler.absorb + schild.schildAbsorb + items.amuletdefence;

}

else if(amuletErhalten(false) && gabeErhalten(true)) {

spieler.schaden = spieler.schaden + items.angriffGabe;

spieler.absorb = spieler.absorb + schild.schildAbsorb + gabe.angriffGabe;

}

else {

spieler.schaden = spieler.schaden + items.schwertDamage;

spieler.absorb = spieler.absorb + items.schildAbsorb;

}

}[/CODE]
 

JensXF

Mitglied
Du könntest auch in deiner SpielerKlasse eine, oder mehrere Methoden schreiben der du als Parameter erhaltene Gaben, gefundene Waffen und Items übergibst spieler.addGabe(neueGabe); und in einer Liste speicherst. In einer weiteren Methode kannst du dann den Angriffswert aller deiner Gegenstände/Fähigkeiten berechnen. Dann noch in deinem Getter aufrufen und schon hast du deinen aktuellen Angriffs- bzw. Verteidigungswert.

Als Beispiel, damit du weißt wie ich das meine.
[CODE lang="java" title="Klasse Gabe"]
public class Gabe {

private String name;
private int angriffsBonus;
private int verteidigungsBonus;

public Gabe(String name, int angriffsBonus, int verteidigungsBonus) {
this.name = name;
this.angriffsBonus = angriffsBonus;
this.verteidigungsBonus = verteidigungsBonus;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAngriffsBonus() {
return angriffsBonus;
}

public void setAngriffsBonus(int angriffsBonus) {
this.angriffsBonus = angriffsBonus;
}

public int getVerteidigungsBonus() {
return verteidigungsBonus;
}

public void setVerteidigungsBonus(int verteidigungsBonus) {
this.verteidigungsBonus = verteidigungsBonus;
}
}
[/CODE]

[CODE lang="java" title="Klasse Spieler"]import java.util.ArrayList;
import java.util.List;

public class Spieler {

private String name;
private int angriffsWert;
private int verteidigungsWert;
private List<Gabe> listGabe;
private List<Waffen> listWaffen;
private List<Items> listItems;

public Spieler(String name) {
this.name = name;
this.angriffsWert = 12;
this.verteidigungsWert = 8;
listGabe = new ArrayList<>();
listWaffen = new ArrayList<>();
listItems = new ArrayList<>();
}

public void addGabe(Gabe neueGabe) {
this.listGabe.add(neueGabe);
}

public void addWaffen(Waffen neueWaffen) {
this.listWaffen.add(neueWaffen);
}

public void addItems(Items neueItems) {
this.listItems.add(neueItems);
}

public void berechneAngriffsWert() {
for (Gabe gabe : listGabe) {
this.angriffsWert += gabe.getAngriffsBonus();
}
for (Waffen waffen : listWaffen) {
this.angriffsWert += waffen.getAngriffsBonus();
}
for (Items items : listItems) {
this.angriffsWert += items.getAngriffsBonus();
}
}

public void berechneVerteidigungsWert() {
for (Gabe gabe : listGabe) {
this.verteidigungsWert += gabe.getVerteidigungsBonus();
}
for (Waffen waffen : listWaffen) {
this.verteidigungsWert += waffen.getVerteidigungsBonus();
}
for (Items items : listItems) {
this.verteidigungsWert += items.getVerteidigungsBonus();
}
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAngriffsWert() {
berechneAngriffsWert();
return angriffsWert;
}

public void setAngriffsWert(int angriffsWert) {
this.angriffsWert = angriffsWert;
}

public int getVerteidigungsWert() {
berechneVerteidigungsWert();
return verteidigungsWert;
}

public void setVerteidigungsWert(int verteidigungsWert) {
this.verteidigungsWert = verteidigungsWert;
}

public List<Gabe> getListGabe() {
return listGabe;
}

public void setListGabe(List<Gabe> listGabe) {
this.listGabe = listGabe;
}
}
[/CODE]

[CODE lang="java" title="Main"]
public class Main {

public static void main(String[] args) {

Spieler spieler = new Spieler("Jens");

Gabe odinsKraft = new Gabe("Odins Kraft", 10, 5);
Gabe goettlicherWille = new Gabe("Göttlicher Wille", 20, 20);

Waffen langSchwert = new Waffen("Langschwert", 18, 5);

Items schlangenRing = new Items("Schlangen Ring", 5, 10);

spieler.addGabe(odinsKraft);
spieler.addGabe(goettlicherWille);

spieler.addWaffen(langSchwert);

spieler.addItems(schlangenRing);

System.out.println(spieler.getAngriffsWert());
System.out.println(spieler.getVerteidigungsWert());

}

}
[/CODE]
 
Anstatt void als Wiedergabetyp bei deiner Methode zu verwenden könntest du boolean verwenden und dann am ende der Methode true oder false returnen :)
Ich dachte mir schon dass in dem void das Problem liegt, ich wusste nur leider noch nicht dass ich dort auch einen Datentypen nutzen kann. Vielen Dank, wieder etwas gelernt^^
Du könntest auch in deiner SpielerKlasse eine, oder mehrere Methoden schreiben der du als Parameter erhaltene Gaben, gefundene Waffen und Items übergibst spieler.addGabe(neueGabe); und in einer Liste speicherst. In einer weiteren Methode kannst du dann den Angriffswert aller deiner Gegenstände/Fähigkeiten berechnen. Dann noch in deinem Getter aufrufen und schon hast du deinen aktuellen Angriffs- bzw. Verteidigungswert.

Als Beispiel, damit du weißt wie ich das meine.
[CODE lang="java" title="Klasse Gabe"]
public class Gabe {

private String name;
private int angriffsBonus;
private int verteidigungsBonus;

public Gabe(String name, int angriffsBonus, int verteidigungsBonus) {
this.name = name;
this.angriffsBonus = angriffsBonus;
this.verteidigungsBonus = verteidigungsBonus;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAngriffsBonus() {
return angriffsBonus;
}

public void setAngriffsBonus(int angriffsBonus) {
this.angriffsBonus = angriffsBonus;
}

public int getVerteidigungsBonus() {
return verteidigungsBonus;
}

public void setVerteidigungsBonus(int verteidigungsBonus) {
this.verteidigungsBonus = verteidigungsBonus;
}
}
[/CODE]

[CODE lang="java" title="Klasse Spieler"]import java.util.ArrayList;
import java.util.List;

public class Spieler {

private String name;
private int angriffsWert;
private int verteidigungsWert;
private List<Gabe> listGabe;
private List<Waffen> listWaffen;
private List<Items> listItems;

public Spieler(String name) {
this.name = name;
this.angriffsWert = 12;
this.verteidigungsWert = 8;
listGabe = new ArrayList<>();
listWaffen = new ArrayList<>();
listItems = new ArrayList<>();
}

public void addGabe(Gabe neueGabe) {
this.listGabe.add(neueGabe);
}

public void addWaffen(Waffen neueWaffen) {
this.listWaffen.add(neueWaffen);
}

public void addItems(Items neueItems) {
this.listItems.add(neueItems);
}

public void berechneAngriffsWert() {
for (Gabe gabe : listGabe) {
this.angriffsWert += gabe.getAngriffsBonus();
}
for (Waffen waffen : listWaffen) {
this.angriffsWert += waffen.getAngriffsBonus();
}
for (Items items : listItems) {
this.angriffsWert += items.getAngriffsBonus();
}
}

public void berechneVerteidigungsWert() {
for (Gabe gabe : listGabe) {
this.verteidigungsWert += gabe.getVerteidigungsBonus();
}
for (Waffen waffen : listWaffen) {
this.verteidigungsWert += waffen.getVerteidigungsBonus();
}
for (Items items : listItems) {
this.verteidigungsWert += items.getVerteidigungsBonus();
}
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAngriffsWert() {
berechneAngriffsWert();
return angriffsWert;
}

public void setAngriffsWert(int angriffsWert) {
this.angriffsWert = angriffsWert;
}

public int getVerteidigungsWert() {
berechneVerteidigungsWert();
return verteidigungsWert;
}

public void setVerteidigungsWert(int verteidigungsWert) {
this.verteidigungsWert = verteidigungsWert;
}

public List<Gabe> getListGabe() {
return listGabe;
}

public void setListGabe(List<Gabe> listGabe) {
this.listGabe = listGabe;
}
}
[/CODE]

[CODE lang="java" title="Main"]
public class Main {

public static void main(String[] args) {

Spieler spieler = new Spieler("Jens");

Gabe odinsKraft = new Gabe("Odins Kraft", 10, 5);
Gabe goettlicherWille = new Gabe("Göttlicher Wille", 20, 20);

Waffen langSchwert = new Waffen("Langschwert", 18, 5);

Items schlangenRing = new Items("Schlangen Ring", 5, 10);

spieler.addGabe(odinsKraft);
spieler.addGabe(goettlicherWille);

spieler.addWaffen(langSchwert);

spieler.addItems(schlangenRing);

System.out.println(spieler.getAngriffsWert());
System.out.println(spieler.getVerteidigungsWert());

}

}
[/CODE]
Auch dir vielen Dank für die schnelle Hilfe! Das sieht wirklich sehr gut strukturiert aus. Ich werde dies dann so im Programm umschreiben. odinsKraft, geniales Beispiel :p

Nochmals vielen Dank an euch beiden, die Denkblockade ist damit endlich durchbrochen! ^_^
 
Du könntest auch in deiner SpielerKlasse eine, oder mehrere Methoden schreiben der du als Parameter erhaltene Gaben, gefundene Waffen und Items übergibst spieler.addGabe(neueGabe); und in einer Liste speicherst. In einer weiteren Methode kannst du dann den Angriffswert aller deiner Gegenstände/Fähigkeiten berechnen. Dann noch in deinem Getter aufrufen und schon hast du deinen aktuellen Angriffs- bzw. Verteidigungswert.

Als Beispiel, damit du weißt wie ich das meine.
[CODE lang="java" title="Klasse Gabe"]
public class Gabe {

private String name;
private int angriffsBonus;
private int verteidigungsBonus;

public Gabe(String name, int angriffsBonus, int verteidigungsBonus) {
this.name = name;
this.angriffsBonus = angriffsBonus;
this.verteidigungsBonus = verteidigungsBonus;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAngriffsBonus() {
return angriffsBonus;
}

public void setAngriffsBonus(int angriffsBonus) {
this.angriffsBonus = angriffsBonus;
}

public int getVerteidigungsBonus() {
return verteidigungsBonus;
}

public void setVerteidigungsBonus(int verteidigungsBonus) {
this.verteidigungsBonus = verteidigungsBonus;
}
}
[/CODE]

[CODE lang="java" title="Klasse Spieler"]import java.util.ArrayList;
import java.util.List;

public class Spieler {

private String name;
private int angriffsWert;
private int verteidigungsWert;
private List<Gabe> listGabe;
private List<Waffen> listWaffen;
private List<Items> listItems;

public Spieler(String name) {
this.name = name;
this.angriffsWert = 12;
this.verteidigungsWert = 8;
listGabe = new ArrayList<>();
listWaffen = new ArrayList<>();
listItems = new ArrayList<>();
}

public void addGabe(Gabe neueGabe) {
this.listGabe.add(neueGabe);
}

public void addWaffen(Waffen neueWaffen) {
this.listWaffen.add(neueWaffen);
}

public void addItems(Items neueItems) {
this.listItems.add(neueItems);
}

public void berechneAngriffsWert() {
for (Gabe gabe : listGabe) {
this.angriffsWert += gabe.getAngriffsBonus();
}
for (Waffen waffen : listWaffen) {
this.angriffsWert += waffen.getAngriffsBonus();
}
for (Items items : listItems) {
this.angriffsWert += items.getAngriffsBonus();
}
}

public void berechneVerteidigungsWert() {
for (Gabe gabe : listGabe) {
this.verteidigungsWert += gabe.getVerteidigungsBonus();
}
for (Waffen waffen : listWaffen) {
this.verteidigungsWert += waffen.getVerteidigungsBonus();
}
for (Items items : listItems) {
this.verteidigungsWert += items.getVerteidigungsBonus();
}
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAngriffsWert() {
berechneAngriffsWert();
return angriffsWert;
}

public void setAngriffsWert(int angriffsWert) {
this.angriffsWert = angriffsWert;
}

public int getVerteidigungsWert() {
berechneVerteidigungsWert();
return verteidigungsWert;
}

public void setVerteidigungsWert(int verteidigungsWert) {
this.verteidigungsWert = verteidigungsWert;
}

public List<Gabe> getListGabe() {
return listGabe;
}

public void setListGabe(List<Gabe> listGabe) {
this.listGabe = listGabe;
}
}
[/CODE]

[CODE lang="java" title="Main"]
public class Main {

public static void main(String[] args) {

Spieler spieler = new Spieler("Jens");

Gabe odinsKraft = new Gabe("Odins Kraft", 10, 5);
Gabe goettlicherWille = new Gabe("Göttlicher Wille", 20, 20);

Waffen langSchwert = new Waffen("Langschwert", 18, 5);

Items schlangenRing = new Items("Schlangen Ring", 5, 10);

spieler.addGabe(odinsKraft);
spieler.addGabe(goettlicherWille);

spieler.addWaffen(langSchwert);

spieler.addItems(schlangenRing);

System.out.println(spieler.getAngriffsWert());
System.out.println(spieler.getVerteidigungsWert());

}

}
[/CODE]
Guten Abend Jens, entschuldige die erneute Störung. Ich habe ein zweites Projekt erstellt und deinen Code eingetragen. Habe getter und setter in der Waffen Klasse erstellt und es läuft einwandfrei! Jedoch stellen sich mir dar noch 2 Fragen die ich ohne Erklärung noch nicht ganz verstehe.
Ich frage lieber ein zweites Mal bevor ich es falsch verstehe ^^

1. Wenn ich nun eine neue Waffe, Items etc. erstelle und in der Main auch sofort Parameter zuweise, wird die Main doch auf Dauer sehr voll, oder nicht? Weshalb ich Items in einer eigenen Klasse schreiben wollte. Ich frage aus dem Grund da viele Programmierer schreiben/sagen man solle die Main so klein und komprimiert wie möglich halten damit das Programm flüssiger und schneller läuft.

2. Da ich wie beschrieben noch in den Basics stecke, sehe ich diese "List" commands zum ersten Mal. Wo wird diese Liste denn genau gespeichert bzw., kann man diese irgendwie einsehen und auch bearbeiten?

Falls du dir nochmals die Zeit nimmt, danke ich dir nochmals dafür ^^
Lg
DraconicVisage
 

Kirby.exe

Top Contributor
1. Wenn ich nun eine neue Waffe, Items etc. erstelle und in der Main auch sofort Parameter zuweise, wird die Main doch auf Dauer sehr voll, oder nicht? Weshalb ich Items in einer eigenen Klasse schreiben wollte. Ich frage aus dem Grund da viele Programmierer schreiben/sagen man solle die Main so klein und komprimiert wie möglich halten damit das Programm flüssiger und schneller läuft.
Also dabei geht es eher darum, dass der Code gut gekapselt und lesbar sein soll :)

2. Da ich wie beschrieben noch in den Basics stecke, sehe ich diese "List" commands zum ersten Mal. Wo wird diese Liste denn genau gespeichert bzw., kann man diese irgendwie einsehen und auch bearbeiten?
List ist ein Interface und wird zur laufzeit z.B. mit einer Arraylist gefüllt. Das sind Standart Java Datentypen um eben eine Liste an Datentypen zuspeichern. Ebenfalls ist diese Liste dynamisch also nicht wie ein Array :)
 

JensXF

Mitglied
Hallo @DraconicVisage ,

freut mich, dass ich dir mit meinem Vorschlag helfen konnte und das er gut für dein Projekt funktioniert.
Möchte an dieser Stelle aber auch anmerken das ich selber auch noch in den Kinderschuhen, was Java angeht, stecke. Trotzdem möchte ich deine Fragen gerne beantworten (ohne den Anspruch auf 100%tige Richtigkeit)

zu 1. Meine Main diente nur zu Testzwecken. Das mit der Aussage, die Main klein zu halten, habe ich auch schon oft gelesen (alles über 10 Zeilen sei schon zu groß :) ).
Deine Idee eine Klasse zu schreiben nur um in dieser Instanzen einer anderen Klasse zu erzeugen klingt für mich erstmal komisch, sollt aber am besten jemand anders bewerten der mehr Ahnung hat als ich.

zu 2. Im Gegensatz zum Array musst du bei einer ArrayList vorher keine Größe festlegen und kannst Werte mittels add ohne Angabe eines Index hinzufügen. Die Länge einer ArrayList passt sich automatisch an. Es gibt ähnliche Methoden wie beim Array, heißen nur anders. Z.B. arrayList.size(); um die Länge zu erfahren oder arrayList.get(int x); um auf ein bestimmten Index zuzugreifen.
Zusätzlich gibt es noch verschiedene .remove(); Methoden um Werte wieder zu löschen.

Grüße JensXF
 

mihe7

Top Contributor
Deine Idee eine Klasse zu schreiben nur um in dieser Instanzen einer anderen Klasse zu erzeugen klingt für mich erstmal komisch, sollt aber am besten jemand anders bewerten der mehr Ahnung hat als ich.
Die main-Methode ist als Programmeinstiegspunkt die Methode, die sich um den Start der Anwendung kümmert, also um etwas, das sich grundlegend vom Rest der Anwendung unterscheidet. Schon aus dieser Überlegung heraus empfiehlt es sich, eine eigene Klasse dafür zu erstellen.

Hinzu kommt, dass beim Anwendungsstart ggf. verschiedene Klassen benötigt werden. Das ist teilweise selbst in meinen Beispielen im Forum schon so, dass ich für die main-Methode Typen importieren muss, die nichts mit der Beispielklasse zu tun haben. Durch diese Abhängigkeiten führt man eine völlig unnötige Kopplung ein: will ich die Klasse in ein anderes Projekt ziehen, muss ich den ganzen Schlauch mitführen.

Letztlich geht es also - wie immer - um Kopplung und Kohäsion.

Kleines Beispiel:
Java:
public class Person {
    private final String name;
    public Person(String name) { this.name = name; }
    public String toString() { return name; }
}

So, jetzt wollen wir ein Programm, das eine Liste von Personen anhand der Befehlszeile erstellt:
Java:
    public static void main(String[] args) {
        List<Person> persons = new ArrayList<>();
        for (String name : args) {
            persons.add(new Person(name));
        }
        // ...
    }

Wenn ich die main-Methode in Person schiebe (wie ich es hier im Forum mache), gibt es plötzlich eine Abhängigkeit zwischen der Klasse Person und java.util.ArrayList bzw. java.util.List.

Das scheint erstmal harmlos, wenn wir das Beispiel aber etwas ausbauen und vielleicht noch schöne Befehlszeilenargumente haben wollen, dann könnten wir auf die Idee kommen, etwas wie Apache Commons CLI einzusetzen (https://commons.apache.org/proper/commons-cli/usage.html).

Will man jetzt Person woanders verwenden, müsste man auch Commons CLI einbinden, obwohl der interessante Part von Person diese Abhängigkeit gar nicht benötigt.
 
K

kneitzel

Gast
Wenn ich nun eine neue Waffe, Items etc. erstelle und in der Main auch sofort Parameter zuweise, wird die Main doch auf Dauer sehr voll, oder nicht? Weshalb ich Items in einer eigenen Klasse schreiben wollte. Ich frage aus dem Grund da viele Programmierer schreiben/sagen man solle die Main so klein und komprimiert wie möglich halten damit das Programm flüssiger und schneller läuft.
Die Main-Methode ist ja nur ein Startpunkt. Was machst Du denn, wenn Du anfangen willst, ein Spiel zu spielen? Du holst das Spiel aus dem Schrank (Erzeugst also eine Instanz vom Spiel) und dann startest Du das Spielen.

Und da ist dann wichtig: Code immer da platzieren, wo er hingehört!
- Der Ablauf des Spiels: Der wird doch vom Spiel bestimmt.
- Spielfiguren: die sind im Spiel.
Du merkst also: Das zauberst Du (die Main-Methode) nicht aus Deiner Tasche, sondern das ist Sache vom Spiel.

Damit ist dann wirklich die Main in der Regel sehr klein. Denn es wird nur etwas erstellt und dann gestartet. Bei Grafischen Applikationen wird oft ein Hauptfenster erzeugt und angezeigt. Sowas in der Art wäre also auch bei Dir denkbar:
Java:
public class Main {
    public static void main (String[] args) {
        Adventure adventure = new Adventure();
        adventure.start();
    }
}

Adventure weiß dann, was da alles benötigt wird. Unter anderem evtl. auch ganz viele Gegenstände.
Aber statt die alle im Code zu erzeugen, ist es üblich, sowas aus einer Art Datenbank zu lesen.

Das kann zur Not eine einfache Textdatei sein. Wie die genau aussehen soll, kannst Du Dir überlegen. Es gibt spezielle Formate wie JSON, die man dann sehr schön verwenden kann um Objekte mal eben so zu speichern oder zu laden.
==> Dadurch wird dein Code deutlich einfacher und auch kürzer.

Wichtig ist in meinen Augen, dass Du mehr versuchst, auch in Objekten zu denken. Also nicht nur Code auf Klassen aufteilen sondern dabei darauf achten, das da "natürliche Grenzen" eingehalten werden und Du universelle Klassen aufbaust.

Jens hat das schon sehr schön etwas gezeigt. Aber wir können das gerne noch etwas weiter ausbauen:
(ich gehe mal davon aus, dass Du eine Art Adventure bauen willst. Ich habe jetzt z.B. das alte Spiel Nethack etwas vor Augen.):

In dem Spiel hast Du erst einmal Lebewesen. Dies können Spieler und NPCs sein. Das kann man also so erst einmal abbilden in einer Klassenstruktur. Von NPCs können dann auch noch weitere spezielle Klassen abgeleitet werden. NPCs mit speziellem zusätzlichen verhalten oder so ...

Dann gibt es Gegenstände. Diese haben gewisse Eigenschaften (Name, Wert, Können ggf. benutzt oder angelegt werden, ....) Ob man alles in eine Klasse packt oder ob man das unterteilt in mehrere Klassen, das kann man dann sehen.
Wenn ein Gegenstand genutzt wird, dann gibt es einen Effekt, Effekte haben ggf. Bedingungen ("Man muss im Kampf sein, um eine Angriffsrune lesen zu können.", "Man muss verletzt sein, um einen Heiltrank trinken zu können", ...) Und dann haben eine Aktion. Aktionen können Einmalig oder Andauernd sein. Einmalig wäre "Man wird um x geheilt", "Gegner wird für 100 getroffen", ...) Andauernde Effekte wären: "Angriffskraft um 15 erhöht" - Schwert wird halt benutzt ....

Kampf: Ein Kampf findet zwischen zwei Spielern statt (Evtl. hat der Spieler ja einen Hund, der auch für ihn kämpfen kann?) Und dann passieren irgendwelche Dinge, die ich jetzt hier nicht ausbauen möchte. Aber ich will das Nutzen der anderen Klassen hier einmal zeigen:
Im Kampf kommt es zum Schlagabtausch. Dazu gehört dann, dass man z.B. die Gegenstände durchgeht um Effekte auszuwerten. Sprich: Wenn ein Gegenstand in Benutzung ist, dann werden die Effekte mit benutzt.

So kann man sich schon einiges direkt überlegen.

Wenn man das dann umsetzen will, dann überlegt man sich das immer Schritt für Schritt. Was braucht man als erstes? Und dann wird nur das ausgebaut. Erster Schritt ist dann evtl:
- Du hast ein Spielfeld/Raum/wie auch immer du es nennen willst.
- Der Spieler ist da und kann sich bewegen.

Also brauchst du da erst einmal nur sehr wenig Funktionalität. Vieles gibt es noch nicht (Gegenstände, die man nehmen kann oder so).

Zweiter schritt wäre dann evtl. eine Visualisierung: Es soll irgendwie angezeigt werden.

Dritter Schritt: Der Raum bekommt vielleicht erste Hindernisse.

Da kann man dann nach und nach einiges aufbauen. Aber immer langsam erweitern. Das hat den Hintergrund, dass die Änderungen übersichtlich bleiben und auch schnell erledigt sind. Dadurch behält man den Überblick und man hat auch ständig Erfolgserlebnisse.
 
Hallo @DraconicVisage ,

freut mich, dass ich dir mit meinem Vorschlag helfen konnte und das er gut für dein Projekt funktioniert.
Möchte an dieser Stelle aber auch anmerken das ich selber auch noch in den Kinderschuhen, was Java angeht, stecke. Trotzdem möchte ich deine Fragen gerne beantworten (ohne den Anspruch auf 100%tige Richtigkeit)

zu 1. Meine Main diente nur zu Testzwecken. Das mit der Aussage, die Main klein zu halten, habe ich auch schon oft gelesen (alles über 10 Zeilen sei schon zu groß :) ).
Deine Idee eine Klasse zu schreiben nur um in dieser Instanzen einer anderen Klasse zu erzeugen klingt für mich erstmal komisch, sollt aber am besten jemand anders bewerten der mehr Ahnung hat als ich.

zu 2. Im Gegensatz zum Array musst du bei einer ArrayList vorher keine Größe festlegen und kannst Werte mittels add ohne Angabe eines Index hinzufügen. Die Länge einer ArrayList passt sich automatisch an. Es gibt ähnliche Methoden wie beim Array, heißen nur anders. Z.B. arrayList.size(); um die Länge zu erfahren oder arrayList.get(int x); um auf ein bestimmten Index zuzugreifen.
Zusätzlich gibt es noch verschiedene .remove(); Methoden um Werte wieder zu löschen.

Grüße JensXF
Tut mir leid für die späte Danksagung, Kinder, Ehefrau etc daheim. Da hat man wenig Zeit für seine Hobbys ^^ Na wenn du noch in den Kinderschuhen steckst, bin ich noch am krabbeln haha :p
Aber Ich danke dir, dass sind viele Infos zu denen ich mich nun einlesen kann um das Konzept und den aufbau zu verstehen, dafür bin ich sehr dankbar! Ebenfalls läuft es wirklich sehr gut mit den gettern und settern und der arraylist :) Mach dich nicht schlechter als du bist! Mir has du sehr geholfen :)


Die Main-Methode ist ja nur ein Startpunkt. Was machst Du denn, wenn Du anfangen willst, ein Spiel zu spielen? Du holst das Spiel aus dem Schrank (Erzeugst also eine Instanz vom Spiel) und dann startest Du das Spielen.

Und da ist dann wichtig: Code immer da platzieren, wo er hingehört!
- Der Ablauf des Spiels: Der wird doch vom Spiel bestimmt.
- Spielfiguren: die sind im Spiel.
Du merkst also: Das zauberst Du (die Main-Methode) nicht aus Deiner Tasche, sondern das ist Sache vom Spiel.

Damit ist dann wirklich die Main in der Regel sehr klein. Denn es wird nur etwas erstellt und dann gestartet. Bei Grafischen Applikationen wird oft ein Hauptfenster erzeugt und angezeigt. Sowas in der Art wäre also auch bei Dir denkbar:
Java:
public class Main {
    public static void main (String[] args) {
        Adventure adventure = new Adventure();
        adventure.start();
    }
}

Adventure weiß dann, was da alles benötigt wird. Unter anderem evtl. auch ganz viele Gegenstände.
Aber statt die alle im Code zu erzeugen, ist es üblich, sowas aus einer Art Datenbank zu lesen.

Das kann zur Not eine einfache Textdatei sein. Wie die genau aussehen soll, kannst Du Dir überlegen. Es gibt spezielle Formate wie JSON, die man dann sehr schön verwenden kann um Objekte mal eben so zu speichern oder zu laden.
==> Dadurch wird dein Code deutlich einfacher und auch kürzer.

Wichtig ist in meinen Augen, dass Du mehr versuchst, auch in Objekten zu denken. Also nicht nur Code auf Klassen aufteilen sondern dabei darauf achten, das da "natürliche Grenzen" eingehalten werden und Du universelle Klassen aufbaust.

Jens hat das schon sehr schön etwas gezeigt. Aber wir können das gerne noch etwas weiter ausbauen:
(ich gehe mal davon aus, dass Du eine Art Adventure bauen willst. Ich habe jetzt z.B. das alte Spiel Nethack etwas vor Augen.):

In dem Spiel hast Du erst einmal Lebewesen. Dies können Spieler und NPCs sein. Das kann man also so erst einmal abbilden in einer Klassenstruktur. Von NPCs können dann auch noch weitere spezielle Klassen abgeleitet werden. NPCs mit speziellem zusätzlichen verhalten oder so ...

Dann gibt es Gegenstände. Diese haben gewisse Eigenschaften (Name, Wert, Können ggf. benutzt oder angelegt werden, ....) Ob man alles in eine Klasse packt oder ob man das unterteilt in mehrere Klassen, das kann man dann sehen.
Wenn ein Gegenstand genutzt wird, dann gibt es einen Effekt, Effekte haben ggf. Bedingungen ("Man muss im Kampf sein, um eine Angriffsrune lesen zu können.", "Man muss verletzt sein, um einen Heiltrank trinken zu können", ...) Und dann haben eine Aktion. Aktionen können Einmalig oder Andauernd sein. Einmalig wäre "Man wird um x geheilt", "Gegner wird für 100 getroffen", ...) Andauernde Effekte wären: "Angriffskraft um 15 erhöht" - Schwert wird halt benutzt ....

Kampf: Ein Kampf findet zwischen zwei Spielern statt (Evtl. hat der Spieler ja einen Hund, der auch für ihn kämpfen kann?) Und dann passieren irgendwelche Dinge, die ich jetzt hier nicht ausbauen möchte. Aber ich will das Nutzen der anderen Klassen hier einmal zeigen:
Im Kampf kommt es zum Schlagabtausch. Dazu gehört dann, dass man z.B. die Gegenstände durchgeht um Effekte auszuwerten. Sprich: Wenn ein Gegenstand in Benutzung ist, dann werden die Effekte mit benutzt.

So kann man sich schon einiges direkt überlegen.

Wenn man das dann umsetzen will, dann überlegt man sich das immer Schritt für Schritt. Was braucht man als erstes? Und dann wird nur das ausgebaut. Erster Schritt ist dann evtl:
- Du hast ein Spielfeld/Raum/wie auch immer du es nennen willst.
- Der Spieler ist da und kann sich bewegen.

Also brauchst du da erst einmal nur sehr wenig Funktionalität. Vieles gibt es noch nicht (Gegenstände, die man nehmen kann oder so).

Zweiter schritt wäre dann evtl. eine Visualisierung: Es soll irgendwie angezeigt werden.

Dritter Schritt: Der Raum bekommt vielleicht erste Hindernisse.

Da kann man dann nach und nach einiges aufbauen. Aber immer langsam erweitern. Das hat den Hintergrund, dass die Änderungen übersichtlich bleiben und auch schnell erledigt sind. Dadurch behält man den Überblick und man hat auch ständig Erfolgserlebnisse.
Uff das ist so viel Information, da muss ich mir Notizen machen ^^ also bei Spielen habe ich mein Kindheitsspiel Runescape vor Augen. Dort z. B. kann man sich Server und Client downloaden, was ich auch getan habe, um mir mal anzusehen wie es in etwa aufgebaut ist. Dort als Beispiel haben sie ganze Item listen mit item IDs. Mein erstes großes Ziel ist es, mich in solch einen Privatserver auszutoben und ihn so zu gestalten wie Meine Kollegen und Ich dann zusammen spaß hätten(alte Zeiten halt :) )

Viele Programmierer sagen man könnte sich mit einem Text Adventure die ersten Erfahrungen holen und diesen dann ausbauen. Mit Graifken, einer KI, Quests, usw. natürlich :)

Mein derzeitiges Ziel ist es ein Text Adventure zu erstellen wo der Spieler wie oben genannt die freie Wahl besitzt, ob er entweder Links oder Rechts geht, ob er kämpft oder nicht und er soll die Möglichkeit haben auch wieder in die vorherigen Abschnitte des Spiels zurückzukehren.

Wenn ich das dann so weit stehen habe, baue ich ihn via Java Swing/FX(Was ist besser zu lernen?) aus um Grafiken, Chatblasen, Inventar etc. einzufügen.

Ich bin sehr Dankbar, dass es hier so viele freundliche Leute gibt die einen nicht blöd kommen, was häufig passiert. Dafür bin ich euch hier allen wirklich Dankbar! ^^ und auch für die vielen Wege und Möglichkeiten. Ich bin nicht hier um eine Lösung zu erhalten, dass kann jeder. Aber ein Denkanstoß wie ihr es tut, ist einfach perfekt und nimmt nicht den Spaß am Lernen! :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
S Timer vs ExecutorService: jeden Sonntag um 14.00 Uhr einen Task starten..? Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
P Gibt es einen anderen Weg um "{}" in IntelliJ zu schreiben? Java Basics - Anfänger-Themen 5
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
F Hat es noch einen Sinn, alte Versionen zu lernen Java Basics - Anfänger-Themen 45
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
N Kann man einen Iterator nur einmal verwenden Java Basics - Anfänger-Themen 5
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
N Gibt es hierfür einen Shortcut Java Basics - Anfänger-Themen 5
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
K Wie verneine ich einen Regex? Java Basics - Anfänger-Themen 2
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
O Ich ahbe einen char und diesen soll ich bei .matches prüfen, also ob der char in meiner Zeichenkette vorhanden ist, wie mache ich das? Java Basics - Anfänger-Themen 9
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
Poppigescorn Mithilfe einer Arrayliste einen Notenspiegel ausgeben Java Basics - Anfänger-Themen 12
J Eintrag Combobox über einen String auswählen Java Basics - Anfänger-Themen 3
L GUI- wie cancel ich einen Timer? Java Basics - Anfänger-Themen 10
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
Devin Wo kann man einen Java Lehrplan finden? Java Basics - Anfänger-Themen 5
J Ist es möglich einen int Array wirklich leer zu initialisieren oder zu füllen? Java Basics - Anfänger-Themen 21
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
S First Time Mave: Wie ergänze ich einen Source-Folder? Java Basics - Anfänger-Themen 10
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
M Auf einen Array innerhalb eines Objekts zugreifen Java Basics - Anfänger-Themen 5
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
F Hilfe für einen Anfänger! Java Basics - Anfänger-Themen 4
O Ziehen im Array um einen Schritt in eine einzige beliebige Richtung Java Basics - Anfänger-Themen 5
N Wie kann ich einen String wieder zusammensetzen und ausgeben lassen? Java Basics - Anfänger-Themen 9
T Fehlermeldung beim Versuch, einen String einzulesen Java Basics - Anfänger-Themen 4
J Wie kann ich z.B. einem int-Wert einen String-Wert zuweisen? Java Basics - Anfänger-Themen 2
steven789hjk543 Kann man mit Java und Eclipse einen Virus programmieren? Java Basics - Anfänger-Themen 13
D Eingabe einscannen, ohne vorher einen Datentypen anzugeben? Java Basics - Anfänger-Themen 1
T Einen Stern malen Java Basics - Anfänger-Themen 32
T Einen Stern malen Java Basics - Anfänger-Themen 2
L Files verschieben in einen Ordner Java Basics - Anfänger-Themen 87
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
J Mit for Schleife einen String Rückwärts befüllen Java Basics - Anfänger-Themen 9
J Einen Buttonklick in Label anzeigen Java Basics - Anfänger-Themen 6
S Gibt es einen guten kostenlosen Online-kurs Java Basics - Anfänger-Themen 2
W Wie programmiere ich einen Potenzrechner? Java Basics - Anfänger-Themen 5
B ArrayList besitzt einen Wert zu wenig Java Basics - Anfänger-Themen 16
B Prüfen, ob es schon einen Termin gibt in einem Zeitraum Java Basics - Anfänger-Themen 5
B Wie instanzisiert man einen Cursor richtig? Java Basics - Anfänger-Themen 3
S Interface (WindowBuilder) Panels in einen Frame einfügen Java Basics - Anfänger-Themen 10
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
C Wie erstellt man einen Timer/Delay? Java Basics - Anfänger-Themen 1
C Wie kann ich einen User Input mit einer If-Anweisung verbinden? Java Basics - Anfänger-Themen 5
J Guten tag, Ich hoffe ihr habt einen schönen Sonntag und könnt mir helfen Java Basics - Anfänger-Themen 2
D Methoden 2 TextWatcher auf einen EditText Java Basics - Anfänger-Themen 4
I Datentypen input.nextCharAt(0) wirft einen Fehler Java Basics - Anfänger-Themen 3
C In einer Methode einen Array zurückgeben Java Basics - Anfänger-Themen 2
S Bestehendes Java Programm, einen festen Wert ändern Java Basics - Anfänger-Themen 17
F Variablen If else: Einer Variable einen Wert hinzufügen oder so? Java Basics - Anfänger-Themen 6
R Übergeben eines Array Strings an einen Spinner Java Basics - Anfänger-Themen 4
Bluedaishi Einen Betrag X auf X Tage verteilen Java Basics - Anfänger-Themen 14
D Einen Wert unter einen ActionListener weitergeben Java Basics - Anfänger-Themen 1
J In Java einen Ton erzeugen Java Basics - Anfänger-Themen 8
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
V Arrays die einen Termin speichen Java Basics - Anfänger-Themen 5
G Wie gebe ich einen Dateipfad in RandomAccessFile an? Java Basics - Anfänger-Themen 2
R Wie kann ich einen Objekt zu Instanzvariable speichern ? Java Basics - Anfänger-Themen 10
F In LinkedList einen Wert ersetzen oder neu einfügen Java Basics - Anfänger-Themen 7
S Das Anführungszeichen(") Zeichen in einen String setzen Java Basics - Anfänger-Themen 1
P Einen String mittig zeichnen? Java Basics - Anfänger-Themen 1
J Erste Schritte Wie kann ich einen String in eine If einbauen :)? Java Basics - Anfänger-Themen 12
G Wie kann ich einem StringBuilder einen int Wert formatiert hinzufügen? Java Basics - Anfänger-Themen 8
P Einen Ordner mit Dateien hochladen [FTP] Java Basics - Anfänger-Themen 2
OlafHD Einen String an eine Klasse übergeben Java Basics - Anfänger-Themen 2
OlafHD Gibt es einen Laufbalken? Java Basics - Anfänger-Themen 2
Silvascus Inhalt eines externen Textdokuments an einen String übergeben Java Basics - Anfänger-Themen 2
B OOP Über einen AVL-Baum iterieren (NullPointer) Java Basics - Anfänger-Themen 5
G Erste Schritte Wie kann ich einen zurückgegebenen Wert ausgeben Java Basics - Anfänger-Themen 4
W Wie kann man diesen Code in einen Code umwandeln, der folgendes können sollte? Java Basics - Anfänger-Themen 1
J App auf einen Webserver laden Java Basics - Anfänger-Themen 14
E Was ergibt trim() auf einen leeren String Java Basics - Anfänger-Themen 3
B Schleife über einen Container Java Basics - Anfänger-Themen 7
X Quelltext einen Tic Tac Toe Spiels erklären Java Basics - Anfänger-Themen 4
M Panel erstellen, welches ein Control erhält. Ausgabe soll über einen Stream erfolgen. Java Basics - Anfänger-Themen 0
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
B Wer kennt einen Link für vollständiges, leichtverständliches "Game of Life"? Java Basics - Anfänger-Themen 1
A Hat jemand einen ratschlag, wie java beim replaceALL eine geschweifte klammer erkennt ? Java Basics - Anfänger-Themen 5
L Mit rekursiven Aufrufen einen Stack emulieren Java Basics - Anfänger-Themen 1
N Benötige eine Alternative für einen GOTO Befehl Java Basics - Anfänger-Themen 2
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
S Printstream für einen Hashmap Loop Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben