8
votes

Essayer de modéliser avec JavaScript orienté objet

Je suis assez nouveau à tout le paradigme orienté objet.

J'essaie de modéliser un personnage dans un certain jeu, vous avez des niveaux différents, des classes et de nombreux choix d'équipement etc. < P> Mon objectif en fin de compte serait de créer une "commode" d'une sorte d'une sorte où les joueurs pouvaient ouvrir le site, essayer certains équipes et voir comment cela influencent leurs paramètres, combien cela coûterait, etc.

J'ai déjà les parties principales programmées ( ici ), mais c'était mon premier travail de travail avec HTML, CSS et JavaScript et c'est tout simplement un grand désordre pour le moment. Je veux démarrer correctement cette fois :)


Supposons que j'ai un objet pour le caractère que nous allons simuler: xxx

mon problème est ceci: Un chevalier commence avec 1 défense et 1 moral, différentes factions vous donneront différentes statistiques. Ces valeurs ne peuvent pas être réaffectées. Un joueur gagne également de points de statistiques à dépenser sur différents paramètres lors du nivelage et ceux-ci peuvent être réaffectés.

En outre, un joueur peut équiper des équipements qui donnent des boosts statistiques, et ceux-ci ne peuvent pas être réaffectés également (seulement par sans égipper).

Ce que j'ai fait auparavant, c'est que j'ai créé un tas de matrices entières toutes avec leurs indices correspondant à chacun des paramètres, chaque réseau représentant le boost de la section par défaut de différentes factions, le total STAT BOOST D'EQUIPEMENTS ET LES STATS LE JOUEUR attribué manuellement. Je résume ensuite chacun des indices pour me donner un dernier tableau de paramètres à afficher. Un joueur peut alors ne réaffecter que des points de réaffectation dans la 3ème matrice, et non d'autres tableaux.

Comment devrais-je continuer à implémenter cela à l'aide de la programmation orientée objet?

J'ai lu? Sur certains des concepts fondamentaux (encapsulation, héritage, polymorphisme), mais ils sont plutôt abstraits et quand je me laisse jusqu'à ce que je ne connaisse pas vraiment quoi faire: s

-

-


réponses


Cette webstie est assez difficile à utiliser: o

OK, Je vais essayer de voir ce que je peux obtenir de la réponse de Qternion: xxx

puis sur l'objet du Seigneur, j'aurais xxx


Je chercherai à améliorer ce qui précède avec des prototypes à l'aide de http: //javascript.crockford .com / prototypal.html

Merci à tous pour toutes vos contributions :)


4 commentaires

Un chevalier démarre avec 1 défense - alors définissez ceci sur 1 dans votre objet littéral ... défense: 0, => défense: 1,


Dans l'esprit de vouloir augmenter vos compétences JavaScript OO, vous voudrez peut-être aussi regarder cela de ce type sur les fonctions de prototypage: Stackoverflow.com/Questtions/12238103/...


Depuis que vous êtes absolument nouveau dans la programmation orientée objet, je vous recommande vivement de lire le blog suivant sur la raison pour laquelle les questions de héritage prototypales: aaditmshah.github.io/why-protototypal-Inéritance-Matters


merci pour la ressource :)


3 Réponses :


2
votes

Vous pouvez avoir vos valeurs de statistiques être des méthodes plutôt que des variables de membre. De cette façon, vous pourriez calculer lors de l'appel d'une statistique donnée, pour un chevalier exemple.defense (). À son tour, la méthode défense () de votre classe de caractères pourrait appeler la défense () de la classe de faction, de la défense () de la classe Equipmentet, etc. L'avantage de cela est que vous pouvez ajouter des modificateurs statistiques supplémentaires chaque fois, par exemple si vous décidez si vous décidez. Vous voulez un système de PARK ou quelque chose.

Chaque classe de faction pourrait ensuite remplacer leur fonction de défense () pour leur modificateur.

Je n'appellerais pas cela la plus orientée objet, mais c'est comme ça que je vais D Faites-le moi-même comme programmeur JavaScript.

Addendum: la réponse de Pluto est également la manière dont vous obtenez des "classes" (au lieu d'objets individuels) réutilisables. Comme mentionné, je ferais également une faction une classe au lieu d'une seule chaîne (vous pouvez taper-vérifier avec instanceof): xxx

par exemple.


8 commentaires

Ok, attendez, puisque je vais caler la défense de toute façon avant de le présenter, je peux simplement utiliser la valeur de retour de la méthode de défense au lieu de l'informer, en l'attribuant à la propriété de défense, puis utilisez la propriété elle-même? Je pense que je commence à obtenir cela un peu maintenant: D


Oui c'est ça. Il vous suffit d'attribuer la valeur de retour manuellement si vous souhaitez le mettre en cache pour une raison quelconque (par exemple, vous pourriez avoir des modifications statistiques temporaires et vous souhaitez mettre en cache la défense de base du personnage pour d'autres contrôles).


EMM, je vais éditer bientôt, il est visible dans mon premier post ci-dessus, mais maintenant, j'ai un objet pour chaque faction et que chacun aurait la propriété correspondante pour chaque paramètre. Alors ça obtient un peu maladroit d:


Ahh, oubliez ce qui précède, je viens de comprendre que je peux simplement faire un objet de faction, puis chaque faction individuelle être une instanciation de cet objet! Merci, je pense avoir une prise plus ferme à ce sujet maintenant: D


Ouais, j'ai édité pour expliquer comment vous pouvez utiliser héritage pour le faire, ce qui est au moins plus clair.


Hmm, j'ai toujours besoin de regarder les trucs prototypes: s mais si .Defense à chevalier est également une méthode, elle peut alors potentiellement prendre soin d'autres modificateurs pouvant y ajouter correctement?


Oui, vous pouvez propager des modificateurs où il est plus approprié. Par exemple, si un caractère donné a un modificateur de faction (donné par faction.defense ()) et un modificateur d'équipement et peut-être certains modificateurs d'état temporaire, alors tous ceux qui seraient ajoutés dans la méthode de défense du personnage. Mais si disait que le modificateur d'un faction peut être affecté par un mètre de réputation ou quelque chose, alors vous voudriez que Knight.defense () ne puisse pas simplement renvoyer son modificateur statique, mais le modifier en fonction de sa valeur de réputation.


Laissez-nous Continuer cette discussion en chat



2
votes

Vous pouvez garder vos matrices si vous le souhaitez. La chose la plus importante à propos de la programmation orientée objet est encapsulation forte>, qui se résume à fournir un moyen d'interagir avec votre objet de caractère sans avoir à savoir quoi que ce soit quant à la mise en œuvre de bas niveau. Vous voulez faire face à des objets forts>, pas de tableaux ni de hashtables (même si sous tout cela, c'est comme ça que l'objet est réellement construit!) Ce que vous voulez est d'écrire du code qui ressemble à ceci:

var link = Knight();
link.equip(new MasterSword());
alert(link.getAttackPoints());


1 commentaires

Je ne suis pas tout à fait sûr de ce qu'est-ce que réponse2wiki implique, mais si cela vous aide et moi, alors je vais bien avec ça :)



2
votes

Changer simplement que le Seigneur doit être une fonction (c.-à-d. varceau = fonction () {/ * code de courant * /} ) et définissez ses propriétés avec this.level = 1; / code>. Ensuite, à partir de maintenant, vous pouvez créer autant de seigneurs que vous le souhaitez avec nouveau Lord () comme la plupart des langages de programmation orientés objet.

Un exemple de cela dans la pratique ... xxx


1 commentaires

ok, peut-être que je vais changer à ce que je prévoyais d'utiliser cette notation pour les équipements, etc., et il n'y aura qu'un seul personnage à vous habiller avec donc j'ai utilisé la notation littérale, mais je n'étais pas très familier avec ça