J'ai pas tout lu en détail (j'avoue, j'ai la flemme de me faire les 8 pages). Mais ce que j'ai pût lire, ça à l'air d'être une bonne façon d'organiser ton jeu.
En JS, si tu veut faire de la POO, tu a plusieurs façons de procéder.
N°1 : JavaScript Object Notation
C'est pas vraiment un bon moyen de faire de la POO (du moins dans ton cas), ce n'est même pas vraiment de la POO. C'est plutôt une façon de bien ranger ses variables. Exemple :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | // Création
var monObjet = {
maPropriete: 'Je suis un propriété !',
maFonction: function () {
console.log ('Je suis une fonction !');
},
objetDansObjet: {
propiete: 'foo bar !'
}
};
// Utilisation
var x = monObjet.maPropiete;
// x = 'Je suis une propiété'
monObjet.maFonction ();
// Affiche "Je suis une fonction !" dans la console.
console.log(monObjet.objetDansObjet.propriete);
// Affichera "foo bar !" dans la console
|
Mais le problème, c'est que tu ne peux pas instancier des objets suivant une certaine structures autant de fois que tu veux. Tu n'as pas non plus ce qu'on appelle l'héritage. Par contre, ça peut être très utile, par exemple si tu as des fichiers JSON. Tu les récupère via AJAX, tu les transforme en objet comme ceux qu'on vient de voir avec la fonction JSON.parse
et puis tu les lis ou les modifies … bref tu les utilises.
Tu peux par exemple faire ça pour gérer tes différents niveaux, avec des fichiers décrivant tes maps.
N°2 : Prototype
Cette méthode te permettra de créer autant d'objet de ce type que tu veux, d'utiliser l'héritage, mais je la trouve (ce n'est que mon avis) un peu sale.
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | // Cette fonction est le constructeur, qui initialise chaque nouvelle entité
var Entité = function (nom) {
this.nom = nom; // On initialise une propriété utilisable partout dans l'objet
console.log ('Nouvelle entité crée !');
}
// On ajoute une fonction utilisable sur chacune de nos entités
Entité.prototype.saluer = function () {
console.log('Bonjour, je m'appelle ' + 'this.nom + ' !';
}
var monEntité = new Entité ('Joe'); // on crée une nouvelle entité : on appelle le constructeur
console.log(monEntité.nom); // Affiche 'Joe' dans la console
monEntité.saluer (); // Affiche 'Bonjour je m'appele Joe' dans la console.
|
Tu as aussi le Mozilla Developer Network qui explique ça surement mieux que moi. Et puis il montrent des trucs rigolo, comme l'héritage. C'est drôle l'héritage.
N°3 : Les classe ES6 (<3)
Ça c'est ma solution préférée, mais elle est un peu nouvelle, donc elle n'est pas supportée dans les navigateurs (surtout les vieux).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | class Dragon {
constructor (nom) {
this.nom = nom + ' le dragon';
console.log('Un dragon nommé ${this.nom} est né !');
}
voler () {
// TODO : Faire des animations sympa, où le dragon vole et tout.
}
cramerVillageois (nomVillageois) {
console.log (`Bonjour je suis ${this.nom}. Maintenant fait tes prières ${nowVillageois} !`);
}
}
var dragonBleu = new Dragon ('Siméon');
dragonBleu.cramerVillageois ('Jean-Louis-Bernard');
// Affichera : Bonjour je suis Siméon le dragon. Maintenant fait tes prières Jean-Louis-Bernard !
|
Voilà, donc ce que je te conseille de faire c'est d'utiliser la notation JSON pour tes maps, voir tes différents personnages. Ensuite si tu t'en fiche de la compatibilité avec les vieux naviagteurs, prends la solution ES6 (n°3) pour tes classes du style Tuile
. Sinon opte pour les prototypes.
En espérant t'avoir aidé.