Kleine Simulation programmieren, denkanstöße erbeten

CT9288

Mitglied
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ß.
 
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.
 
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.
 
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?"
 
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:
Java:
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));
        }
    }
}
 
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 -.-
 
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?
 
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.
 
...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 😉
 
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 😳😕
 
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:
Java:
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());
    }
}
 
Zuletzt bearbeitet:
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.
 
@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
 
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 😉
 
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?
 
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.

Code:
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.
 

Zurück
Oben