Christoph: Spiel-Programmierung

Hallo,

ich hätte da eine Frage bezüglich der Speicherung von Daten innerhalb des Scripts (Javascript).

Ich bin gerade dabei ein Spiel("Der fliegende Astronaut") zu programmieren, was änlich wie "Super Mario" Funktioniert:
Ich habe 35 Bilder (40x40 Pixel), mit denen ich darstellen kann, das der Astronaut läuft springt etwas einsammelt etc.

Und hier der Programmablauf:
Wird die "k"-Taste gedrückt("k" steht für laufen), so wird bestimmt, ob sich unter ihm, vor ihm oder schräg vor ihm Boden befindet. Dies findet das Programm mittels 35 Textfelder heraus (Unsichtbar; Breite:1; höhe:1;).
In denen steh dann sowas wie "Frei", "belegt" usw.

Aber wie ich mich kenne, hab ich bestimmt den umständlichsten aller möglichen Wege genommen.

Geht das auch einfacher ?

  1. Grüße,
    habe Null ahnung aber wie wäre es damit -
    -zu jedem vertikalen abschnitt des bildschirms/spielfelds (ich geh von seitenansicht aus) gehört vermutlich eine begrenzte anzahl an "stützflächen" die zudem aus tiles aufgebaut sind
    -du könntest einfach nur jedem tile-abschnitt des bodens einen höhenwert zuweisen und in einem array speichern.
    -die array werte werden von der x-bewegeung der figur ausgehend abgefragt und mit dem entpsrechendem wert der figur verglichen.

    MFG
    bleicher

    --
    __________________________-
    Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
    Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
    Boccaccio
    1. Es liegt nicht an dir ...
      Aber irgendwie versteh ich das nicht mit dem titel-Dings was du meinst...

      --
      Wo die Sprache aufhört, fängt die Musik an...
  2. Hi,

    deine Problembeschreibung ist etwas schwer zu verstehen, da sie etwas knapp ausfällt. Die 35 Bilder haben AFAIK nichts mit dem Problem zu tun.

    Gibt es einen Bezug dieser 35 Bilder zu den 35 Textfeldern?

    Was ist "Boden"? Also wie sieht das auf der Oberfläche aus ("div" elemente?) und wie in deinem Code.

    Wie baust du dir die Landschaft zusammen?

    Ich hab sowas ähnliches mal in OpenGL programmiert. Da hatten wir einen CollisionManager, der alle Objekte mit denen mal kollidieren kann (in deinem Fall "Boden") verwaltet, und die Abstände zum beweglichen Objekt "Astronaut" ermittelt. Wenn der Abstand zu klein war, konnte man nicht weiter.

    So was wäre hier vielleicht auch sinnig. Aber wie gesagt, es mangelt mir an Vorstellung von deinem Programm.

    Gruß!

    1. Die Landschaft besteht aus einer Tabelle(7x5), in der die Bilder angeordnet sind.

      Also die Textfelder haben in der Art eine Beziehung zu den Bildern, das sie den Status der Bilder "speichern".
      Zum Beispiel Textfeld1 speichert den Zustand von Bild1,Textfeld2 speichert den Zustand von Bild2 usw.

      Mit "Boden" meine ich den Untergrund, auf den der Astronaut "läuft"

      Kurz zur Lauf-Funktion:
      Wird die K-Taste gedrückt, so wird für (zum Beispiel) Bild2 (das den Astronauten darstellt) eine neue Adresse bestimmt (Auf diesem Bild hebt der Astronaut den Fuß).
      Nach einem weiteren setTimeout() wird das Bild wieder gewechselt (Jetzt ist der Astronaut auf dem Bild daneben)
      usw. bis der Astronaut wieder ordentlich steht.

      P.S.: Ich kann die die (bis jetzt 6 Level) auch mal zuschicken (falls du das dann besser verstehst)...

      --
      Wo die Sprache aufhört, fängt die Musik an...
  3. Hi!

    Alle Spiele, die ich bisher gebaut habe benutzen Arrays zur Speicherung der Spielfelder. Ob nun Pacman, nen Adventure, ... Solange man sich immer Feldweise bewegt, schaut man in dem (mehrdimensionalen) Array ob irgendwas in Bewegungsrichtung die Bewegung verhindert.

    Dann benoetigst Du Eine Routine, die das Array sichtbar macht. Ob du nun das Spielfeld um die Spielfigur bewegst oder die Spielfigur aufm Spielfeld ist dabei Jacke wie Hose. Im grunde ist die Spielfigur nur eine Koordinate in diesem Array. Kollisionsabfragen sind unnoetig, weil auf dem naechsten Feld eben etwas ist, oder nicht. Erst, wenn sich nicht alles in gleichfoermien Blocken abspielt braucht man ein paar ausgekluegltere Technicken.

    Textfelder sind zwar nutzbar, aber ich halte Arrays fuer besser. Du kannst natuerlich auch direkt in HTML Elementen, die mit Grafiken versehen sind herumlaufen und diese auch als Arrayersatz hernehmen.

    1. Naja im Grunde genommen gibt es keine Spielfigur oder ähnliches...
      Es sind nur 35 Bilder, die in einer Tabelle angeordnet sind.

      Dass heisst im Klartext, das bei jeder einzelnen Funktion nur die entsprechenden Bilder entsprechend getauscht werden und die entsprechenden Informationen in den Textfeldern wieder gespeichert werden.

      --
      Wo die Sprache aufhört, fängt die Musik an...
      1. Hi!

        Der Astronaut, mit den 35 Bewegungsanimationen ist also keine Spielfigur, sondern was?

        Nochmal: Ein Array sollte beliebige Spielfeldinformationen aufnehmen koennen, ohne irgendwelche HTMLelemente zu benoetigen.

        Eine nette Bytereihenfolge von "1,1,1,1,1,1,1,1,0,1,0,0,0,1,1,0,0,0,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,1"
        koennte z.B. dieses Spielfeld ergeben.

        #######

        #   #

        #   ###

        #   #

        #######

        Ein eher Super Mario typisches Feld koennte so aussehen:

        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,

        ###
           #
        ######     ####

        Mit Gegnern und Objekten:

        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,

        *   ###
           #         8
        ######     ####

        Hier gerne auch aufgeteilt in mehrere Arrays; fuer jede Ebene eines.

        Ein Freund von mir nimmt kleine Grafiken, wo jeder Pixel eine Feldeinheit ist und jede Farbe eine Bedeutung hat. Der Zeiger fuer die Spielfigur bewegt sich dann ueber die Grafik. So realisiert er kleine 3D Egoshooter. Das duerfte bei JS aber wegfallen und Arrays wieder ins Boot holen.

        1. Der Astronaut, mit den 35 Bewegungsanimationen ist also keine Spielfigur, sondern was?

          Nee, so mein ich das nicht. Die Bilder sind nur angeordnet. Der Astronaut ist da ncht irgendwie extra. der Ist direkt mit im Bild (also eines von den 35) drin.

          --
          Wo die Sprache aufhört, fängt die Musik an...
          1. Was am Prinzip aber ja nichts aendert. Es ist doch voellig wurst, wie die Spielfigur dargestellt wird.

            Deine Frage war, ob es sinnig ist, Das Spielfeld in Textfeldern zu speichern. Meine Antwort war. Kann man machen, aber ich halte Arrays fuer besser.

            Deine Antwort zeigt mir, dass deine Spielfigur sich auch blockweise bewegt. Deshalb ist ein einfaches Array, ohne irgendwelche komplizierten Kollisionsberechnungen, eine brauchbare Wahl:
            Spieler ist auf Feld X und will auf Feld X+1.
            Was ist auf Feld X+1?

            • Hindernis? Spieler bleibt auf Feld X
            • Gegner? Spieler geht auf Feld X+1 und verliert Leben.
            • Gegenstand? Spieler geht auf Feld X+1 und irgendwas passiert.
              ...

            Musst Du nicht so machen. Kannst auch bei deinem Konzept bleiben. Aber frag nicht, wenn Du keine Antworten willst. ;)

            1. Musst Du nicht so machen. Kannst auch bei deinem Konzept bleiben. Aber frag nicht, wenn Du keine Antworten willst. ;)

              Ich hab nich gesagt das ich keine Antworten will ... ich wollte ja nur wissen ob das einfacher geht --> und das mit den Arrays probier ich (sobald ich zeit hab...)

              Falls es klappt:          Danke !
              Falls es nicht klappt:    trotzdem Danke !

              --
              Wo die Sprache aufhört, fängt die Musik an...