Brutus: tote Objekte

Hi,

ich programmiere gerade ein Spielchen. Dabei ist es so, dass verschiedene Instanzen von einem Objekt WESEN in einem Array gehalten werden. Jede dieser Instanzen hat natürlich verschiedene Attribute.

Wesen wesen[0] = new Wesen(2,3,4,1);
Wesen wesen[1] = new Wesen(6,3,2,1);
Wesen wesen[2] = new Wesen(6,3,2,1);
...

der letzte Wert ist der Lebensstatus (1=lebendig,0=tod). Ein Wesen könnte also auch totgeboren werden.

Nun aber zur Frage:
Wenn ein Wesen stirbt, also den Lebensstatus 0 erreicht, ist es dann sinnvoll, den ursprünglichen wesen-Array zu manipulieren und die entsprechende Weseninstanz samt referenzierendem Array-Element zu entfernen (so daß nur noch 2 Wesen in der Welt existieren) oder wäre es besser, man prüft bei allen weiteren Aktionen immen den Lebensstatus und reagiert darauf.

z.b. if(wesen[0].lebensstatus == 1)wesen[0].display();

Gruß
Brutus

  1. hi,

    der letzte Wert ist der Lebensstatus (1=lebendig,0=tod).

    also so richtig OOP ist das nicht. Du hast Indizies und keine sprechenden Attribute. Das war für mich _der_ Grund mein Content-Management objektorientiert zu machen, eben wegen der sprechenden Attribute.

    Nun aber zur Frage:
    Wenn ein Wesen stirbt, also den Lebensstatus 0 erreicht, ist es dann sinnvoll, den ursprünglichen wesen-Array zu manipulieren und die entsprechende Weseninstanz samt referenzierendem Array-Element zu entfernen

    Eine alte Indianerweisheit: Wenn Du merkst, dass Du ein totes Pferd reitest, steig ab.

    Hotti

    1. Hi Hotti,

      der letzte Wert ist der Lebensstatus (1=lebendig,0=tod).

      also so richtig OOP ist das nicht. Du hast Indizies und keine sprechenden Attribute. Das war für mich _der_ Grund mein Content-Management objektorientiert zu machen, eben wegen der sprechenden Attribute.

      Verstehe dich jetzt nicht ganz.... warum soll das nicht objektorientiert sein? Oder nicht richtig objektorientiert? Es ist zwar nur als Beispiel gedacht, eigentlich sieht die Struktur eher so aus:

      objekt.eigenschaften["offensive"] = 25;
      objekt.eigenschaften["defensive"] = 25;
      objekt.eigenschaften["heal"] = true;

      ..

      Wenn ein Wesen stirbt, also den Lebensstatus 0 erreicht, ist es dann sinnvoll, den ursprünglichen wesen-Array zu manipulieren und die entsprechende Weseninstanz samt referenzierendem Array-Element zu entfernen

      Eine alte Indianerweisheit: Wenn Du merkst, dass Du ein totes Pferd reitest, steig ab.

      guter Rat!

      Danke!

      1. moin,

        der letzte Wert ist der Lebensstatus (1=lebendig,0=tod).

        also so richtig OOP ist das nicht. Du hast Indizies und keine sprechenden Attribute. Das war für mich _der_ Grund mein Content-Management objektorientiert zu machen, eben wegen der sprechenden Attribute.

        Verstehe dich jetzt nicht ganz.... warum soll das nicht objektorientiert sein? Oder nicht richtig objektorientiert?

        Nicht konsequent genug ;-)

        Also die Sache mit dem Index für Attribute
        [0] foo
        [1] bar
        [2] foobar
        [3] barfoo
        [4] barfoot

        Schätze mal, bei [3] musst Du schon laufend nachschauen, welches Attribut da stehen muss. Konsequent OOP meine ich: Nenne die Attribute beim Namen.

        obj->{lastname}
        obj->{firstname}
        obj->{health}
        obj->{age}

        und schon sparst Du Dir haufenweise Merker und Kommentarzeilen, weil sich der Code von selbst erklärt.

        Hotti

        --
        Der Code macht schon das, was er soll, aber nicht das, was Du willst.
        1. Hi Hotti,

          Also die Sache mit dem Index für Attribute
          [0] foo
          [1] bar
          [2] foobar
          [3] barfoo
          [4] barfoot

          obj->{lastname}
          obj->{firstname}
          obj->{health}
          obj->{age}

          Ja, so in der Art mache ich das auch. Aber trotzdem danke nochmal für den Hinweis.

          Brutus

  2. Hallo Brutus,

    Wenn ein Wesen stirbt, also den Lebensstatus 0 erreicht, ist es dann sinnvoll, den ursprünglichen wesen-Array zu manipulieren und die entsprechende Weseninstanz samt referenzierendem Array-Element zu entfernen (so daß nur noch 2 Wesen in der Welt existieren) oder wäre es besser, man prüft bei allen weiteren Aktionen immen den Lebensstatus und reagiert darauf.

    es würde mehr Sinn machen, die Leiche zu entfernen. Prinzipiell verfährt so auch ein Betriebssystem mit abgearbeiteten Prozessen (naja, vielleicht sollte man besser von "sollte verfahren" sprechen, wenn man an manche Situationen denkt, wo Zombies verbleiben). Werden es mehr als drei Wesen, müssten entsprechende Funktionen unnötig unter den vielen Wesen filtern, was CPU und Zeit beansprucht. Darin sehe ich den Vorteil.

    Gruß aus Berlin!
    eddi

    1. Hallo Eddi,

      danke, werde ich so umsetzen!

      Gruß
      Brutus

  3. Hi!

    Wenn ein Wesen stirbt, also den Lebensstatus 0 erreicht, ist es dann sinnvoll, den ursprünglichen wesen-Array zu manipulieren und die entsprechende Weseninstanz samt referenzierendem Array-Element zu entfernen (so daß nur noch 2 Wesen in der Welt existieren) oder wäre es besser, man prüft bei allen weiteren Aktionen immen den Lebensstatus und reagiert darauf.

    Die Frage musst du dir selbst beantworten, denn nur du weißt, ob du die Leichen (und Totgeburten) noch benötigst oder nicht. Wenn du sie sowieso nur ungenutzt überspringst, dann kannst du sie auch löschen, wobei du dir Gedanken um das Array machen muss, oder wo auch immer du sie abgelegt hast, inklusive anderenorts abgelegte Verweise auf diese Array-Elemente oder andere, die durch Nachrutschen möglicherweise nicht mehr stimmen.

    Lo!

    1. Hallo,

      Die Frage musst du dir selbst beantworten, denn nur du weißt, ob du die Leichen (und Totgeburten) noch benötigst oder nicht. Wenn du sie sowieso nur ungenutzt überspringst, dann kannst du sie auch löschen, wobei du dir Gedanken um das Array machen muss, oder wo auch immer du sie abgelegt hast, inklusive anderenorts abgelegte Verweise auf diese Array-Elemente oder andere, die durch Nachrutschen möglicherweise nicht mehr stimmen.

      Momentan mache ich das so, dass ich das Array vor jeder Runde in ein temporäres Array umkopiere (Prüfung auf Leben) und wieder zurück. Das ist zwar nicht sehr elegant, aber es funktioniert soweit.

      Brutus

  4. Nun aber zur Frage:
    Wenn ein Wesen stirbt, also den Lebensstatus 0 erreicht, ist es dann sinnvoll, den ursprünglichen wesen-Array zu manipulieren und die entsprechende Weseninstanz samt referenzierendem Array-Element zu entfernen (so daß nur noch 2 Wesen in der Welt existieren) oder wäre es besser, man prüft bei allen weiteren Aktionen immen den Lebensstatus und reagiert darauf.

    z.b. if(wesen[0].lebensstatus == 1)wesen[0].display();

    Ich frage mich, wenn du eine solche Eigenschaft hast, warum machst du dir dann über sowas Gedanken?

    Also entweder hat diese Eigenschaft einen Sinn, dann musst du auch das Objekt behalten oder sie ist nutzlos, dann musst du das Objekt löschen.

    Struppi.