# Kleine Simulation programmieren, denkanstöße erbeten



## CT9288 (26. Jun 2018)

Hallo liebe Community. Ich habe folgendes Anliegen: ich würde gerne ein kleines programm erstellen, dass im Grunde aus drei Parametern bestehen soll, die überdies voneinander abhängig sein sollen. Sagen wir mal „pflanzen“ ,“hasen“ und „füchse“. Pflanzen sollen stets generieren, hasen pflanzen verzehren und sich dann vermehren, füchse hasen verzehren und sich vermehren.
Die frage: wie setze ich dass am besten um? Ich weiß wenig über programmiersprachen, glaube aber, dass so ein kleines programm auch für einen neuling mit etwas übung nicht unmöglich sein sollte. Ich hätte dieses programm gerne in java geschrieben, das finde ich nämlich sehr interessant. Die frage ist jetzt aber: ist java für sowas direkt die richtige wahl? Gibt es sinnvollere Programmiersprachen um diese idee zu verwirklichen? Könnt ihr mir stichwörter nennen die mir hierbei hilfreich sein könnten, oder ein gutes tutorial in dieser richtung empfehlen? 
Ansonsten, ist netbeans gut oder empfehlt ihr eine andere kostenfreie entwicklungsumgebung?
Achja, ist screeps eigentlich gut um java zu lernen und zu üben, oder tatsächlich nur für leute gedacht, die bereits programmieren können? Gruß.


----------



## mrBrown (26. Jun 2018)

CT9288 hat gesagt.:


> Achja, ist screeps eigentlich gut um java zu lernen und zu üben, oder tatsächlich nur für leute gedacht, die bereits programmieren können? Gruß.


screeps unterstützt kein Java, von daher ist das zum Java lernen eher ungeeignet


----------



## Javinner (26. Jun 2018)

CT9288 hat gesagt.:
			
		

> Gibt es sinnvollere Programmiersprachen um diese idee zu verwirklichen?


Liste von Spiel-Engines

Ich gehe davon aus, du interessierst dich für Spiele, daher schau dich um, welche Engines es überhaupt gibt und welche Sprachen dabei die Rolle spielen.


----------



## AliasAlreadyTaken (26. Jun 2018)

Solch eine Simulation braucht tatsächlich nicht viel, Java ist dafür genauso geeignet wie (fast) alles andere.

In Screeps arbeiten die nur mit Javascript, soweit ich das verstanden habe. Java ist etwas anderes als Javascript. Für dein Vorhaben sollte beides taugen, aber wenn du es mit Screeps umsetzen willst, brauchst du eben eher Javascript als Java.

Bei Entwicklungsumgebungen wird dir jeder etwas anderes erzählen, da kann man dir nur raten, einfach mal eine zu verwenden und zu wechseln, wenn dir die nicht taugt. Ich benutz Eclipse, aber nicht weil das so mega ist, sondern weil ich ein fauler Hund bin, der sich ungern in ständig neue IDEs einarbeitet. Die großen Drei sind Netbeans, IntelliJ und Eclipse, Java geht bei kleinen Projekten aber auch per Kommandozeile gut.


----------



## L0oNY (27. Jun 2018)

Hi,

das was du vorhast klingt sehr nach Agentenbasierter Modelierung. Wenn du programmieren lernen willst, dann beherzige die anderen Ratschläge. Wenn es dir jedoch um die tatsächliche Simulation geht, dann kannst du fertige Tools wie z.B.: NetLogo (http://ccl.northwestern.edu/netlogo/) benutzen. 
Das ist eine Anwendung, die dafür gedacht ist, solche Probleme zu modellieren. Innerhalb der Anwendung musst du immernoch programmieren, die Komplexität ist aber recht gering und mit Java nicht zu vergleichen.


----------



## CT9288 (27. Jun 2018)

Erstmal vielen Dank für eure zahlreichen Antworten =)
Oje wie peinlich. Jetzt stehe ich da wie die Anfänger, die den Unterschied zwischen Java und Javascript nicht kennen ^^" nein nein, der Unterschied ist mir schon geläufig =) Screeps brachte ich nur zur Sprache, weil ich gemeint hatte, es arbeite mit Java. Das war wohl ein Irrtum.

AliasAlreadyTaken schrieb "Java ist etwas anderes als Javascript. Für dein Vorhaben sollte beides taugen"
Soll heißen, Javascript kann soetwas auch? Ich habe mich nie mit Javascript befasst, da ich es immer so ein bisschen in die Sorte HTML mit einsortiert hatte und mir eher so vorkam, als sei es nutzlos.

Und ja, natürlich interessiere ich mich für Spiele, aber dieses Forum hätte nun nicht noch einen Beitrag gebraucht à la "Yo ich will ne mega geile SpieleApp programmieren, was brauch ich dafür?"


----------



## httpdigest (27. Jun 2018)

Die Spanne dessen, was man "Simulation" nennen kann, geht natürlich weit auseinander, insbesondere, wenn keine Aussage über die folgenden Aspekte getroffen wird:
- mit User-Interaktion oder ohne?
- mit simpler Konsolenausgabe oder grafischer Ausgabe?
- wie ausgereift soll die grafische Ausgabe sein? (einfach AWT/Swing, Java2D oder OpenGL)
- mit Sound?
Eine Simulation kann dann bereits schon sowas sein:

```
public class Simulation {
    public static void main(String[] args) throws Exception {
        int pflanzen = 10;
        int hasen = 5;
        int fuechse = 2;
        java.util.Random rnd = new java.util.Random();
        float pPflanzeGeneriert = 0.1f;
        float pHaseFrisstPflanze = 0.1f;
        float pFuchsFrisstHase = 0.1f;
        while (true) {
            if (rnd.nextFloat() < pPflanzeGeneriert)
                pflanzen++;
            if (pflanzen > 0 && rnd.nextFloat() < pHaseFrisstPflanze) {
                pflanzen--;
                hasen++;
            }
            if (hasen > 0 && rnd.nextFloat() < pFuchsFrisstHase) {
                hasen--;
                fuechse++;
            }
            Thread.sleep(1000 / 10); // 10Hz
            System.out.println(
                String.format("Pflanzen: %3d, Hasen: %3d, Fuechse: %3d", pflanzen, hasen, fuechse));
        }
    }
}
```


----------



## CT9288 (28. Jun 2018)

Wow, hast du das aus dem FF heraus mal eben geschrieben? Ja tatsächlich soll es nix kompliziertes sein, eine einfache ausgabe als kommandozeile genügt. Ich werde mir mal eclipse ansehen, netbeans kenne ich bereits, und dann werde ich das beispiel von dir benutzen, verändern, und mich daran etwas erproben =)
Java ist toll, aber ich hab echt immer probleme, am Ball zu bleiben -.-


----------



## CT9288 (12. Aug 2018)

ich hätte noch eine frage, jetzt da ich mich etwas in java eingelesen habe. ich hätte gerne eine kleine android app programmiert und mir nun android studio geholt. ich habe jetzt aber das gefühl, dass android studio alles unnötig verkompliziert. kann man eine android app auch freihand programmieren, oder nimmt google die app dann nicht an? oder würdet ihr sagen, wenn android studio mir alles verkompliziert, dann mache ich etwas falsch?


----------



## Robat (12. Aug 2018)

Du kannst theoretisch Apps auch mit jeder anderen IDE + Android SDK programmieren. Android Studio macht allerdings mEn schon vieles richtig und unterstützt einen bei der App-Entwicklung sehr gut.
Ich muss dir allerdings Recht geben, dass es am Anfang etwas verwirrend sein kann, sich mit AS anzufreunden. Das kommt aber mit der Zeit.


----------



## Javinner (12. Aug 2018)

CT9288 hat gesagt.:


> ...ich habe jetzt aber das gefühl, dass android studio alles unnötig verkompliziert...


AndroidStudio bietet einen richtig guten Support, was die Einführung in das System anbetrifft. Es ist meiner Meinung nach sehr durchdacht, was da angeboten wird. Falls du dich mit Android ausführlich beschäftigen möchtest, lege ich dir ans Herz, dich hier  einzulesen, aber auch hier vorbeizuschauen. Alles sehr umfangreich, jedoch sehr lehrreich


----------



## CT9288 (24. Sep 2018)

So Ihr lieben. Ich habe noch nicht aufgegeben. Bin nun kein blutiger Anfänger mehr sondern....Anfänger 
Ich bräuchte wieder eure Hilfe, ich finde es partout nirgends heraus:

Ich habe eine method() laufen, in derer eine Eingabe erfolgt, und diese soll dann den userName returnen.
Das funktioniert auch gut soweit. Jetzt versuche ich aber verzweifelt in einer anderen class diesen userName zu erhalten, aber dabei geht ständig wieder die method() los und will wieder eine Eingabe haben. Kann ich den String irgendwie erhalten, ohne dass die method() wieder läuft?
kurze Visualisierung:

public String Intro(){
userName = eingabe.next(); //das ist mein Scanner
return userName;
}

da ist noch mehr Code, aber nur System.out.printlns die hier weniger relevant sind.
Wie komme ich an den userName ohne dass ich wieder um eine Eingabe gebeten wurde? Und ja, an der Stelle, an der ich den userName aufrufen möchte, wurde die Intro() bereits gerufen und eine Eingabe ist erfolgt. Der String existiert also auch.

Programmieren ist sau anstrengend...aber mega interessant =D
ich hoffe ihr könnt mir helfen. Ich sitz hier nicht umsonst um 02.30 Uhr am PC


----------



## mihe7 (24. Sep 2018)

CT9288 hat gesagt.:


> Wie komme ich an den userName ohne dass ich wieder um eine Eingabe gebeten wurde?


Du musst Dir das Ergebnis einfach an anderer Stelle merken.

Ein ungetestetes Beispiel:

```
public class Test {
    private String username;

    public void askForUsername() {
        System.out.print("Username: ");
        try(Scanner s = new Scanner(System.in)) {
            username = s.nextLine();
        }
    }

    public String getUsername() {
        return username;
    }

    public static void main(String[] args) {
        Test t = new Test();
        t.askForUsername();
        System.out.println(t.getUsername());
        System.out.println(t.getUsername());
        System.out.println(t.getUsername());
    }
}
```


----------



## CT9288 (3. Okt 2018)

So ihr lieben, nächste Frage. Ich habe jetzt ein kleines, wirklich kleines Projekt fertiggestellt (soweit zumindest) und wollte fragen, ob es hier im Forum die Möglichkeit gibt, *.jar Dateien hochzuladen, dass jemand, der Lust hätte, mal drüber gucken könnte, und mir noch ein paar Fragen zu beantworten und mir generell mal mitteilen könnte, ob das so gut aussieht.


----------



## Javinner (3. Okt 2018)

@CT9288 
Ich würde an deiner Stelle ein neuen Thread in "Codeschnipsel und Projekte" eröffnen und dort alle Klassen in Code-Tags posten, die Main-Klasse nicht vergessen. Wenn es einiges zu posten gibt, dann benutze die Spoiler-Tags, so wird es gleich viel übersichtlicher. Eine .jar ist umständlich, wie ich finde


----------



## mrBrown (3. Okt 2018)

Wobei sich bei größeren Projekten durchaus eine Jar (mit .java, nicht class-Dateien) anbietet. Ich zumindest guck mir sowas sowieso in meiner IDE an, direkt die Dateien zu haben macht's da einfacher


----------



## CT9288 (27. Nov 2018)

So. Es scheint, als würde ich nicht mal die Basics hinbekommen. Ich weiß auch nicht wirklich, wie ich genau nach diesem Problem googlen soll, also muss ich hier erneut fragen:
Nehmen wir an, ich habe drei *.java dateien. Spieler.java, A.java und B.java. Nehmen wir an, in Spieler.java ist int SpielerLeben gespeichert. Vielleicht SpielerLeben = 100, oder ähnlich. Wenn ich jetzt von A.java auf Spieler.java zugreife, um z.B. für einen Levelup das SpielerLeben zu erhöhen, wie kann ich es schaffen, dass ich danach, mit B.java ebenfalls auf Spieler.java zugreifen kann, um das neue SpielerLeben abzufragen, und ggf. ebenfalls zu verändern. Ich meine, ich schaffe es, von A.java auf Spieler.java zuzugreifen, aber nur durch rufen eines neuen Objektes von Spieler.java. Wie kann ich denn innerhalb von Spieler.java diese Variable dauerhaft ändern? oder kann ich von B.java das in A.java erschaffene Objekt irgendwie auch aufrufen? Dieses Thema lässt mich nicht los, und ich ärgere mich dermaßen, dass ich es nicht begreife. Ich schaffe es, in Spieler.java getter und setter einzurichten, die mir die Manipulation von variablen ermöglichen. Aber die Variablen so zu ändern, dass sie für alle *.java dateien dauerhaft zugreifbar sind, das begreife ich nicht. Geht denn das überhaupt? Oder muss man mit dem klarkommen, was ich beschrieben habe, und geschickt genug programmieren können? Vielen dank im Voraus...

edit: muss ich dafür die Variablen irgendwie public machen oder so?


----------



## Robat (27. Nov 2018)

CT9288 hat gesagt.:


> und geschickt genug programmieren können


Weniger 'programmieren' sondern eher 'modellieren'. Überleg dir wie die Beziehungen zwischen den Klassen sind und wo du was brauchst . 'Übergeben' kannst du Objekte via Methoden (Getter / Setter) und Konstruktoren


----------



## mihe7 (27. Nov 2018)

Vergiss mal die verschiedenen .java-Dateien, die haben damit nicht zu tun. 

Du hast Objekte, die miteinander kommunizieren. Damit ein Objekt a einem anderen Objekt b etwas mitteilen kann, muss das Objekt a das Objekt b kennen. 

Woher? Entweder Objekt a erzeugt das Objekt b selbst oder aber dem Objekt a wurde das Objekt b irgendwie mitgeteilt.


```
String name = "CT9288";
System.out.println(name);
```

Hier haben wir zwei Objekte:
1. ein Objekt vom Typ String, gespeichert in einer Variablen name
2. ein Objekt vom Typ PrintWriter, gespeichert in einer Variablen System.out.

In dem Code (der ja auch in irgendeiner Klasse steht) wird jetzt eine Nachricht an das PrintWriter-Objekt geschickt. Diese Nachricht besteht einerseits aus dem Namen der Methode (println) und andererseits aus einem Parameter, dem String-Objekt (name). Erst damit kennt das PrintWriter-Objekt das String-Objekt.


----------



## Javinner (28. Nov 2018)

CT9288 hat gesagt.:


> Es scheint, als würde ich nicht mal die Basics hinbekommen


Ich habe das Gefühl, dass dein Wissen deinen Wunschvorstellungen noch nicht genügt. Hier empfehle ich dir die Grundkonzepte erst einmal zu erlernen, bei Imperativen würde ich anfangen. Schnappe dir ein gutes Buch und arbeite es durch.


----------

