LazyWolf: JAVA: Neuer Programmabschnitt!

Hallo.

Ich bin gerade als Javaeinsteiger dabei, ein kleines Spiel mit Übungscharakter zu schreiben.

Kurz formuliert:
Zwei Spieler geben ihren Namen an und wählen einen Charakter. Soweit ist das fertig.

Sobald man jetzt auf "START" clickt, soll das Spiel beginnen:
Der Bildschirm wird geleert, der nächte "Programmabschnitt" beginnt.

Wie löse ich das jetzt sinnvoll bei Java?
Kann ich irgendwie eine neue Class beginnen, oder muss ich weiter in meiner alten Hauptklasse rummüllen?

Danke für die zahlreichen Antworten bereits erfahrener JAVA-Programmierer, zu denen ich hinaufschauen kann! :-)

Farewell! :)

  1. hi Wolf,

    Ich bin gerade als Javaeinsteiger dabei, ein kleines Spiel mit Übungscharakter zu schreiben

    ähm ... ja. Als "Einsteiger" solltest du vielleicht nicht gleich damit beginnen, Spiele programmieren zu wollen.

    Kurz formuliert:
    Zwei Spieler geben ihren Namen an und wählen einen Charakter. Soweit ist das fertig.
    Sobald man jetzt auf "START" clickt, soll das Spiel beginnen: Der Bildschirm wird geleert, der nächte "Programmabschnitt" beginnt.

    Sicher, du hast "kurz formuliert". Aber mit dieser Formulierung kann man eben auch leider nix anfangen. Es gibt unendlich viele Möglcihkeiten, deine hier beschriebenen Vorgaben mit JAVA (aber auch mit anderen Programmiersprachen) zu realisieren. Solange du nicht den konkreten Quellcode deines Spielprogramms zur Verfügung stellst (möglichst zum Anschauen auf einer temporären URL) wird dir niemand einen konkreten Hinweis geben können. Wir wissen ja nicht einmal, ob das über ein Applet  -  oder mehrere Aplets  -  realisiert werden soll oder ob du eine Applikation geschrieben hast.

    Kann ich irgendwie eine neue Class beginnen, oder muss ich weiter in meiner alten Hauptklasse rummüllen?

    Du kannst jederzeit eine neue Klasse definieren und einbinden, Hauptsache, sie paßt in dein Gesamtkonzept. Es ist bei größeren Projekten wie zum Beispiel Spielen durchaus sehr sinnvoll, mehrere Klassen resp. Class-Dateien zu erstellen.

    Aber deine Information innerhalb der Frage ist schlicht zu "dünn", um dir Genaueres antworten zu können

    Grüße aus Berlin

    Christoph S.

    1. Hallo Christoph,

      wieso hast du den Themenbereich und das Thema (aka Betreff) geändert?
      Er lag doch damit absolut richtig. Es ging ihm nicht speziell um
      Java, sondern eben mehr um die Programmiertechnik ansich. Auch weiß
      ich nicht, was "verschachtelte Klassen" mit seiner Frage zu tun haben
      sollen. Vielleicht verstehe ich aber auch einfach etwas anderes
      darunter, als du.

      ähm ... ja. Als "Einsteiger" solltest du vielleicht nicht gleich damit beginnen, Spiele programmieren zu wollen.

      Naja, kommt natürlich auf das Spiel an. Z.B. Drei-in-einer Reihe sollte
      man als Java-Anfänger ja schon hinkriegen. Hat jemand Lust? ;-)

      |  |
      --+--+--
        |  |
      --+--+--
        |  |

      Es gibt unendlich viele Möglcihkeiten, deine hier beschriebenen Vorgaben mit JAVA (aber auch mit anderen Programmiersprachen) zu realisieren.

      ACK. Fang doch mal an ein paar zu erklären. ;-)

      Solange du nicht den konkreten Quellcode deines Spielprogramms zur Verfügung stellst [...]

      Ist doch nicht nötig. Eigentlich reicht doch die Info, daß er ein
      Menü hat, und von dort aus dann weiter zum eigentlichen Spiel (oder
      vielleicht auch zu den Optionen usw. will). Er wird ja wohl kein
      Warcraft III machen, für das evtl. eine etwas aufwendigere Programmierung
      notwendig sein würde. ;-)

      Um nicht nur rumzumotzen, will ich mal kurz beschreiben, wie ich das
      für ein so kleines Projekt wohl machen würde. Die perfekte Lösung
      wird es sicherlich nicht sein.

      Ich würde eine Hauptklasse schreiben, die letztendlich nur für die
      Erstellung des Hauptfensters, das Laden von ein paar grundlegenden
      Resourcen usw. zuständig ist. Diese Klasse würde dann eine Methode
      einer anderen Klasse aufrufen, die für die Menüführung verantwortlich
      ist. Als Parameter würde die Zeichenfläche (Graphics2D) übergeben
      werden. (Prinzipiell könnte sich die aufgerufene Methode das Graphics-
      Objekt auch selbst von der aufrufenden Klasse besorgen.)
      Die Menüklasse wäre also für die Menüführung verantwortlich. Wird der
      Menüpunkt zum Starten des Spiels angewählt, würde die Methode
      verlassen werden und die Hauptklasse in irgend einer Form (z.B. über
      Rückgabeparameter) mitgeteilt werden, was ausgewählt wurde.
      Die Hauptklasse könnte dann die eigentliche Spiel-Klasse aufrufen,
      die wiederum die Zeichenfläche und vielleicht ein paar Paramter
      übergeben bekommt.

      Das wäre zumindest das grobe Vorgehen, daß mir ohne groß nachzudenken
      in den Sinn gekommen ist. Einwände werden gerne angenommen. Mich
      interessiert das Thema durchaus auch. :)

      Gruß
      Slyh

      PS: Oh, ich sehe gerade, daß meine Antwort etwas an der ursprünglichen
      Fragestellung vorbeigeht...
      Prinzipiell würde ich das ganze aber ähnlich wie jetzt beschrieben realisieren.
      Ich würde eine Hauptklasse schreiben, die zuerst die Methode zur
      Eingabe des Spielerdaten und dann die Methode des eigentlichen Spiels
      aufruft. Diese würden sinnvollerweise in verschiedenen Klassen liegen.
      (Die Zeichenfläche würde jeweils übergeben.)

      1. hi,

        wieso hast du den Themenbereich und das Thema (aka Betreff) geändert?

        weil der "Themenbereich" eben tatsächlich JAVA ist  -  der "Betreff" hätte nicht geändert werden müssen, nur stand mir die Originalzeile nicht mehr zur Verfügung  -  irgendein Crash, meine Antwort landete in der "Zwischenablage", der SELFServer war kurzzeitig down. Und mein "Betreff ist eigentlich sogar ziemlich unglücklich formuliert

        Naja, kommt natürlich auf das Spiel an. Z.B. Drei-in-einer Reihe sollte
        man als Java-Anfänger ja schon hinkriegen

        Schon gut ;-)

        Es gibt unendlich viele Möglcihkeiten, deine hier beschriebenen Vorgaben mit JAVA (aber auch mit anderen Programmiersprachen) zu realisieren.
        ACK. Fang doch mal an ein paar zu erklären. ;-)

        Mach ich grade, aber ich brauche dazu ungefähr 200 MB Webspace ...

        Solange du nicht den konkreten Quellcode deines Spielprogramms zur Verfügung stellst [...]
        Ist doch nicht nötig. Eigentlich reicht doch die Info, daß er ein
        Menü hat

        Wenns funktioniert und man sich das online anschauen kann, reicht das, richtig. Aber wenns Nachfragen gibt ... du bist doch lange genug im Forum: gerade bei solchen Fragen ist es ungleich effektiver, ein "Problem" am konkreten Beispiel diskutieren zu können. Ganz doofes Beispiel: jemand will ein Applet mit dem Namen "spiel.class" generieren. In seiner Datei "spiel.java" steht aber drin "public class drei_in_einer_Reihe ...", und jetzt wundert er sich, daß ers nicht kompiliert bekommt ... wie willst du ihm das ohne Kenntnis des Quellcodes erklären?

        Mich interessiert das Thema durchaus auch. :)

        Weiß ich ja, daher war dein "Auftauchen" in so einem Thread geradezu vorprogrammiert *g*

        PS: [...] Ich würde eine Hauptklasse schreiben

        Genauer: du würdest das Prinzip der Vererbung nutzen, und da triffst du dich letzten Endes mit meiner Aussage bzw. mit dem, worauf ich hinauswollte

        Grüße aus Berlin

        Christoph S.

        1. Hallo,

          wieso hast du den Themenbereich und das Thema (aka Betreff) geändert?
          weil der "Themenbereich" eben tatsächlich JAVA ist

          Jein. Eigentlich ging es mehr um OOP. Ich denke das Problem läßt
          sich ohne Probleme auf C++, Smalltalk usw. übertragen.
          Aber vielleicht ist das auch Geschmackssache. Mir gefällt hier
          "Programmiertechnik" besser, obwohl ich für jeden Java-Thread dankbar
          bin. :-)

          Wenns funktioniert und man sich das online anschauen kann, reicht das, richtig. Aber wenns Nachfragen gibt ... du bist doch lange genug im Forum: gerade bei solchen Fragen ist es ungleich effektiver, ein "Problem" am konkreten Beispiel diskutieren zu können.

          Bei einem solchen Fall gebe ich dir natürlich uneingeschränkt recht.
          (Siehe auch den Thread etwas weiter oben.)
          Aber hier ging es ja wirklich eher darum, wie er die Lösung seines
          Problems nun eben programmiertechnisch auf die Reihe kriegt.
          Zum Beispiel wäre ich nicht auf die Idee gekommen, ihm jetzt Code
          anzubieten.

          Mich interessiert das Thema durchaus auch. :)
          Weiß ich ja, daher war dein "Auftauchen" in so einem Thread geradezu vorprogrammiert *g*

          Huch, man kennt mich hier. :-)

          PS: [...] Ich würde eine Hauptklasse schreiben
          Genauer: du würdest das Prinzip der Vererbung nutzen, und da triffst du dich letzten Endes mit meiner Aussage bzw. mit dem, worauf ich hinauswollte

          Aah, dir ging es um die Ableitung der Hauptklasse von Applet bzw.
          Frame/JFrame. Verstehe. Da LazyWolf aber ja scheinbar die Eingabe
          der Spielernamen usw. zustande gebracht hat, denke ich, daß er darüber
          hinaus ist. Oder hab ich dich jetzt wieder falsch verstanden?

          Kurz: Ich bleibe dabei, daß es eine Programmiertechnik-Frage ist. :-)

          Gruß
          Slyh

          1. Hoa...

            Ich bin gerade als Javaeinsteiger dabei, ein kleines Spiel mit Übungscharakter zu schreiben

            Ȋhm ... ja. Als "Einsteiger" solltest du vielleicht nicht gleich damit beginnen, Spiele programmieren zu wollen.

            Ich habe bereits schon kompliziertere Systeme in PHP programmiert, von daher traue ich mir das durchaus zu. Es geht mir auch nicht darum, dass das Programm der Hit wird, meinetwegen soll es nie fertig werden. Aber wenn man ein Ziel hat, das etwas umfangreicher gestaltet ist, trifft man beim basteln nach und nach auf unterschiedliche Probleme in unterschiedlcihen bereichen der Sprache und auf ihre eigenarten.

            Kurz: Ich bleibe dabei, daß es eine Programmiertechnik-Frage ist. :-)

            Ich auch! :)

            Aber zurück zum Thema..:
            Es ging mir eher darum, wie es unter JAVAern üblich ist, bzw. wie die Sprache ausgelegt ist.

            Jemand erwähnte was von neue class beginnen, alte verlassen. Meint ihr damit, dass man einfach nur am Ende von der class angekommen ist, oder gibt es einen speziellen Befehl oder ein Vorgehen, mit dem man eine laufende class schließt?
            Ich habe im Moment eine class, die die Abfrage der Spielerdaten leitet, eine class, die zu Beginn die Bilder setzt, die zu Beginn schon eingeblendet werden (quasi Design), eine class, die Player speichert.
            Soviel dazu.

            Also sollte ich jetzt am besten eine neue class beginnen und sie aufrufen, sobald der Button zum starten geclickt wird?

  2. Hallo,

    hm, also in Java sollte man grundsätzlich einen objektorientierten Ansatz wählen. Also solltest Du Dich zuerst auch mal mit "Objektorientiertem Programmdesign" auseinandersetzen. Das klingt jetzt schwer, ist es aber nicht wirklich, und egal in was Du später programmierst bin ich mir ziemlich sicher, wird sich der Aufwand gelohnt haben.
    Kurz zum Verständnis: Bei einem Objektorientiertem Programm, könntest Du z.B. ein Objekt (eine Klasse) Spieler haben, welche die Interaktion mit dem Spielenden Anwender übernimmt, oder auch einen Computergegner simuliert, dann noch irgendwie eine Klasse, die den ganzen Spielablauf kontrolliert, und vielleicht für einzelne Bestandteile Deines Spiels Klassen, z.B. wenn es ein Kartenspiel ist, hast Du eine Klasse für eine Spielkarte...Also im allgmeinen Versucht man reale Dinge auf Programmobjekte Anzuwenden, z.B. eine Klasse Auto hat vielleicht Eigenschaften, Farbe, Motorstärke, Geschwindigkeit, und besitzt Methoden Beschleunigen, Bremsen...
     O.K. das hilft Dir jetzt nicht wirklich weiter, such Dir eine verständliche Einführung in Objektorientierung, in einer Unibiblothek oder so...

    Gruss

    Marko