Ergebnis 1 bis 18 von 18

Thema: Wofür braucht man...

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #15
    Zitat Zitat von R.D. Beitrag anzeigen
    maybe, anyone?
    R.D. es bringt ihm nicht sehr viel wenn du nochmal diesselbe Erklärung postest von der er schon sagte er versteht sie nicht.

    Versuchen wir es mal so:

    Stell dir vor du hast in deinem Spiel 8 Helden. Jeder von ihnen hat 4 Werte die zu ihm gehören. HP , maximale HP , MP und maximale MP. Das heisst also du hast ingesamt 32 Werte. Soweit, so gut.

    Nun stell dir vor du willst eine Schadensberechnung schreiben.
    Die sieht simpel so aus:

    Code:
    Held1_HP = Held1_HP - 100
    Sehr schön. Es wird also von der HP von Held1 die Zahl 100 abgezogen. Das ist nun die neue Helden HP. Nur...was ist wenn wir nun wollen das die HP von Held2 um 100 gesenkt wird, da das Monster ihn getroffen hat. Hm, nur wie das im Code umsetzen? Wohl so:

    Code:
    IF(HeldAuswahl == 1){
    Held1_HP = Held1_HP - 100
    }ELSE IF(HeldAuswahl == 2){
    Held2_HP = Held2_HP - 100
    ]ELSE IF(HeldAuswahl == 3){
    Held3_HP = Held3_HP - 100
    } [usw]
    Das ist nur der Code für 3 Helden. Damit das da klappen kann, müssen wir uns eine Variable schnappen. Die HeldAuswahl. Die Nummer die darin steht ist die Nummer des Heldens von dem wir die HP abziehen wollen. Das ist wie man sieht ziemlich umständlich. Stell dir vor allem mal vor man muss das mit 10 Helden machen. Und dann fehlt ja noch etwas was die MP abzieht wenn Zauber genutzt werden. Wie zuviel Aufwand.

    Und eben für diesen Zweck gibt es Pointer. Jede Variable hat eine eigene Adresse. Wie du jedes Haus eine eigene Hausnummer hat.
    Gehen wir also nun davon aus das die Variablen unserer Helden so liegen:

    Code:
    0001 - 0004: Variablen von Held1
    0005 - 0008: Variablen von Held2
    0009 - 0012: Variablen von Held3
    0013 - 0016: Variablen von Held4
    [usw]
    Die HP Variable der Helden liegt immer am Anfang ihrer Bereiches.
    Die HP Variable von Held1 liegt also auf Adresse 0001, die von Held2 auf 0005 usw.
    Gut. Nun wollen wir wieder die HP abziehen.
    Wir müssen uns die Adresse des Pointers errechnen. Das machen wir wie folgt:
    Code:
    Pointer = NummerDesHelden * AnzahlDerVariablen - (AnzahlDerVariable - 1)
    
    NummerDesHelden = Unsere Helden haben Nummern. Held1,Held2 usw.
    AnzahlDerVariablen = Wieviele Variablen der Held hat. In unserem Beispiel sind es 4 Stück.
    
    Beispielrechnung:
    NummerDesHelden = 1; // Der erste Held soll es sein
    AnzahlDerVariablen = 4; // Unsere Helden haben 4 Variablen
    
    Pointer = 1 * 4 - (4 - 1);
    Pointer = 1 * 4 - 3
    Pointer = 4 - 3
    Pointer = 1
    
    Richtig ! Auf Variable 1(dasselbe wie 0001) liegt die HP Variable von Held1.

    Also machen wir simpel:

    Code:
    HeldAuswahl = 1; //Hier drin steht die Nummer des Helden um den es uns geht
    //HeldAuswahl * 4 - 3 = unser Pointer
    HeldAuswahl = 4 * HeldAuswahl;
    HeldAuswahl = HeldAuswahl - 3;
    /* In HeldenAuswahl steht nut die "Adresse" der Variable, die wir verändern 
    wollen. Sprich der HP Variable von unserem Helden, dessen Nummer wir am Anfang in HeldenAuswahl reingeschrieben haben */
    
    [HeldenAuswahl] = [HeldenAuswahl] - 100; /* Hier greifen wir nun per Adresse
    auf die Heldenvariable zu, die wir manipulieren wollen. Heisst also die Zahl in der Variable HeldenAuswahl ist nun die Adresse , bei der wir etwas verändern wollen.*/
    Und ohne Erklärungen ist das:
    Code:
    HeldenAuswahl = 1;
    HeldAuswahl = 4 * HeldAuswahl;
    HeldAuswahl = HeldAuswahl - 3;
    [HeldenAuswahl] = [HeldenAuswahl] - 100;
    Wie du siehst, viel weniger als mit der Methode vorher. Und vorallem klappt das egal wieviele Helden man nun benutzen würde.

    Geändert von makenshi (20.01.2009 um 18:16 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •