Modellieren mit objektorientiertem JavaScript

8

Ich bin ziemlich neu im ganzen objektorientierten Paradigma.

Ich versuche, einen Charakter in einem bestimmten Spiel zu modellieren, Sie haben verschiedene Stufen, Klassen und viele Ausrüstungsoptionen und so.

Mein Ziel wäre es schließlich, einen "Dresser" zu schaffen, auf dem die Spieler die Seite öffnen, einige Ausstattungsgegenstände ausprobieren und sehen können, wie sie ihre Parameter beeinflussen, wie viel sie kosten würden, etc.

>

Ich habe bereits die wichtigsten Teile programmiert ( hier ), aber es war meine erste Arbeit mit html, css und javascript und es ist im Moment nur ein großes Durcheinander. Ich möchte diesmal richtig anfangen:)

Angenommen, ich habe ein Objekt für den Charakter, den wir simulieren werden:

%Vor%

Mein Problem ist das: Ein Ritter beginnt mit 1 Verteidigung und 1 Moral, verschiedene Fraktionen geben Ihnen verschiedene Statistik-Boosts. Diese Werte können nicht neu zugewiesen werden. Ein Spieler erhält auch einige Statpunkte, die er für verschiedene Parameter beim Leveln ausgeben kann und diese können neu zugewiesen werden.

Außerdem kann ein Spieler einige Ausrüstungen ausrüsten, die Statistik-Boosts geben, und diese können auch nicht neu zugewiesen werden (nur durch Unquipe).

Was ich vorher gemacht habe, ist, dass ich eine ganze Reihe von Arrays erstellt habe, deren Indizes jedem der Parameter entsprechen, wobei jedes Array den Standard-Stat-Boost verschiedener Fraktionen, den Gesamtwert der Ausrüstung und die Statistiken repräsentiert Der Spieler wird manuell zugewiesen. Ich summiere dann jeden der Indizes, um mir ein endgültiges Array von anzuzeigenden Parametern zu geben. Ein Spieler kann dann nur Punkte im dritten Array und keine anderen Arrays zuweisen.

Wie soll ich das mit objektorientierter Programmierung umsetzen?

Ich habe einige der grundlegenden Konzepte (Kapselung, Vererbung, Polymorphismus) gelesen, aber sie sind eher abstrakt und wenn ich darauf eingehe, weiß ich nicht wirklich, was ich tun soll: s

-

-

Antworten

Dieser Webstil ist ziemlich schwer zu benutzen: o

Ok, ich werde versuchen zu sehen, was ich von qternions Antwort bekommen kann:

%Vor%

Dann auf dem Lord-Objekt hätte ich

%Vor%

Ich werde versuchen, das oben genannte mit Prototypen zu verbessern, indem ich Ссылка

verwende

Danke an alle für all Ihre Beiträge:)

    
Sylin 22.07.2013, 14:54
quelle

3 Antworten

2

Sie könnten Ihre Statistikwerte als Methoden anstelle von Mitgliedsvariablen haben. Auf diese Weise können Sie während des Aufrufs eine bestimmte Statistik berechnen, zum Beispiel knight.defense (). Im Gegenzug kann die Methode defense () in deiner Charakterklasse defense () von der Fraktionsklasse, defense () von der Klasse equipmentSet usw. aufrufen. Der Vorteil davon ist, dass du zusätzliche Stat-Modifikatoren hinzufügen kannst, wenn du dich entscheidest Sie wollen ein Perk-System oder etwas.

Jede Fraktionsklasse könnte dann ihre defense () -Funktion für ihren Modifikator überschreiben.

Ich würde das nicht den objektorientiertesten Weg nennen, aber so würde ich es selbst als Javascript-Programmierer machen.

Nachtrag: Plutos Antwort ist auch, wie Sie "Klassen" (anstatt einzelner Objekte) bekommen, die wiederverwendbar sind. Wie erwähnt, würde ich Faction auch zu einer Klasse anstatt nur einer Zeichenfolge machen (Sie können type-check mit instanceof):

%Vor%

Zum Beispiel.

    
qternion 22.07.2013, 15:12
quelle
2

Ändere Lord einfach als Funktion (zB var Lord = function() { /* current code */ } ) und setze seine Eigenschaften auf this.Level = 1; . Von nun an können Sie mit new Lord() beliebig viele Lords erstellen, wie die meisten objektorientierten Programmiersprachen.

Ein Beispiel dafür in der Praxis ...

%Vor%     
Pluto 22.07.2013 15:21
quelle
2

Sie können Ihre Arrays behalten, wenn Sie möchten. Das Wichtigste bei der objektorientierten Programmierung ist encapsulation . Dies bedeutet, dass Sie mit Ihrem Character-Objekt interagieren können, ohne etwas über die Low-Level-Implementierung wissen zu müssen. Sie möchten sich mit Objekten befassen, nicht mit Arrays oder Hashtabellen (selbst wenn darunter alles liegt, so ist das Objekt tatsächlich aufgebaut!) Sie möchten Code schreiben, der folgendermaßen aussieht:

%Vor%

Eh, @qternion, schlagt mich irgendwie dazu. Also mache ich diese Antwort zu einem Wiki! Lasst uns die Weisheit von SO auf diesem einen entfesseln.

    
Miklos Aubert 23.07.2013 07:37
quelle

Tags und Links