JeuWeb - Crée ton jeu par navigateur

Version complète : Modules
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Pages : 1 2 3
Bonjour JeuWeb.

Je suis d'en train d'essayer de créer un petit CMS de création de jeu (à la PHP Simul et autres).
J'avance pas mal, je suis sur le framework actuellement (MVC et POO from scratch) et j'aimerai justement que les modules qui constitueront le jeu puissent :
  • Etre indépendants
  • Etre désactivés ou activés sans gêner le fonctionnement des autres modules
  • Intéragir entre eux

Mais sur ce point, je bloque..
Comment prévoir le dialogue entre plusieurs modules sans le prévoir en dur ^^

Par exemple :
J'ai un module qui me permet d'avoir un bâtiment en plus. Ce bâtiment permet de réduire le temps de construction des autres bâtiments (admettons).
Comment prévoir dans les bâtiments une intégration souple sans dépendance d'autres modules ?

J'espère que vous m'avez suivi ^^

Si quelqu'un a déjà été confronté à ce problème ou fait quelque chose de similaire, je suis preneur de toutes idées.

Merci !

PS : Je ne me suis pas présenté, est-ce obligatoire ?
Salut,

pour la présentation, c'est plus sympathique (tiens, je ne savais pas que le terme sympatrique proposé par le correcteur orthographique existait réellement), mais non obligatoire.

Un des bons moyens de les rendre indépendants, à mon sens, est l'utilisation du pattern Command.
Ainsi, le module de bâtiment en plus (MBEP) pourrait ajouter sa propre commande (CMBEP) à la chaine de commandes (CCMCB) du module de construction des bâtiments(MCB), chaîne chargée de calculer le temps de construction des bâtiments. Forcément, le MBEP "réduisant la durée de construction des batiments" requière le module MCB, ce ne sera donc pas 100% indépendant.
Rien n'oblige à coder l'accès à cette CCMCB en dur: le MBEP pourrait recevoir la CCMCB comme un objet externe (un paramètre de méthode et pas un accès en dur dans la méthode à la classe CCMCB ou MCB). Cette CCMCB devrait donc être vue, depuis le MBEP, comme un objet "quelconque", pas forcément comme une liste chaînée de commandes.

S'attaquer seul et directement à un CMS de création de jeu (from scratch) me semble bien ambitieux... Bonne chance quand même Smile
Hello,

Citation :S'attaquer seul et directement à un CMS de création de jeu (from scratch) me semble bien ambitieux... Bonne chance quand même

Surtout qu'en gros tu fabriques une usine à clones type mamafia.fr ... du coup au lieu de faire un bon jeu, tu vas faire X copies d'un jeu moyen. Moyen parce que tu passera beaucoup trop de temps sur le framework au lieu de le passer sur le gameplay.

Mais bref, le pattern command, pourquoi pas.

Citation :Forcément, le MBEP "réduisant la durée de construction des batiments" requière le module MCB, ce ne sera donc pas 100% indépendant.

Il faut bien le construire ce bâtiment ! Viser les 100% c'est inutile Smile

Moi je partirais plutôt sur un système de hooks :

<?php

/**
* MQAUBQRLTDCDB = "Module Qui Ajoute Un Batiment Qui Reduit Le Temps De Construction Des Batiments"
*/
Class MQAUBQRLTDCDB extends GameModule {

// fonction appelée pour tous les modules activés au lancement de l'appli
public function start() {
$this->registerHooks(['getAvailableBuidings','buildingConstructionTimeCalculation']);
}

// fonction appelée quand on affiche la liste des bâtiments qu'il est
// possible de construire
// $list contient la liste des bâtiments constructibles
// $playerState contient l'info du joueur
public function onGetAvailableBuildings($list,$playerState) {
if ($playerState->hasSkill(Skill::getByName('Advanced Building'), $skillLevel=3)) {
$list->add($this->getBuildingInfos());
}
}

// fonction appelée quand on calcule le temps de construction des bâtiments,
// ce qui permet de l'utiliser 1) quand on affiche le bâtiment à construire
// et 2) quand la construction est lancée
public function onBuildingConstructionTimeCalculation($buildingInfo,$playerState) {
if ($playerState->hasBuilding($this->getBuildingInfos()->id)) {
// on choppe le niveau de notre building qui réduit le temps
$batLevel = $playerState->getBuiding($this->getBuildingInfos()->id)->level;
// on calcule un ratio pour le temps de construction. Attention
// c'est un calcul d'exemple ici, si on a niveau 10 c'est instantané
$ratio = 1 - ($batLevel * 0.1);
$buildingInfo['construction_time'] *= $ratio;
}
return $buildingInfo;
}


private function getBuildingInfos() {
//
}

}

ça marche si tu définis une liste de hooks sur lesquels les modules peuvent venir se plugger.

M'enfin, moi sur mon jeu si j'ai bien compris quelque chose c'est de ne surtout pas créer un framework. Il faut vraiment créer un jeu, un prototype rapidement au lieu de partir dans l'abstraction stratosphérique.
Merci pour ces réponses très complètes et détaillées, j'en ferai bon usage.

Petit détail que j'ai oublié est que je code en PHP (mais vous aurez deviné Smile ).
D'après ce que je comprend, le pattern command est comme une interface pour les classes (les fonctions constituants cette interface sont obligatoirement codées dans la classe).
Je pense que je vais devoir m'orienter vers ça, mais que j'aurai également besoin des hooks pour certaines utilisations.

Citation :Il faut bien le construire ce bâtiment ! Viser les 100% c'est inutile

En effet, le système ne peut-être à 100% indépendant mais ce n'est pas un problème, il faut bien un minimum dans le noyau. Par exemple pour les utilisateurs.. Que serait un jeu sans joueur ? Smile
_________________________________________________________________________________

J'irai faire un tour par la case présentation alors.

_________________________________________________________________________________

Citation :S'attaquer seul et directement à un CMS de création de jeu (from scratch) me semble bien ambitieux... Bonne chance quand même
En effet c'est un gros projet, mais je souhaite me lancer dans cette aventure tout doucement, quitte à sortir les premières versions avec très peu de fonctionnalités.

Citation :Surtout qu'en gros tu fabriques une usine à clones type mamafia.fr ... du coup au lieu de faire un bon jeu, tu vas faire X copies d'un jeu moyen. Moyen parce que tu passera beaucoup trop de temps sur le framework au lieu de le passer sur le gameplay.
C'est vrai. Mais même si j'ai les compétences pour coder un jeu, je n'ai malheureusement pas les idées qui vont avec. Aussi même si je fais un jeu, il sera lui-même une copie de quelque chose, car je n'ai pas d'idées originales...
A l'inverse, beaucoup de gens ne sachant pas coder ont beaucoup d'idées..
C'est pour cela que je souhaite faire un CMS qui soit le plus simple à personnaliser possible, afin que les futurs utilisateurs puissent modifier leurs jeux et qu'ils ne se ressemblent pas.

Citation :M'enfin, moi sur mon jeu si j'ai bien compris quelque chose c'est de ne surtout pas créer un framework. Il faut vraiment créer un jeu, un prototype rapidement au lieu de partir dans l'abstraction stratosphérique.
Justement, si (dans mon cas). Etant donné que ce n'est pas un jeu classique (dans le sens où c'est un CMS), j'essaye de construire dès maintenant l'environnement afin que le développement futur soit le plus simple possible, pour moi mais aussi ceux qui souhaiteront créer leur propre module.
J'aimerais bien savoir quel genre de jeu on peut créer à partir d'un CMS ... Le seul exemple qui me vient à l'esprit c'est Jcray, et c'est vraiment pas terrible. Ce qui fait généralement un bon jeu c'est un bon gameplay, et ce qui fait un bon gameplay ce sont des interactions franches subtiles entre toutes les parties du jeu, organisées autour d'une idée centrale. Dans un jeu, tout est couplé, l'indépendance des parties avoisine les 0%.

Du coup, à faire un framework je ferais plutot des composants qu'un CMS. Par exemple des librairies pour un inventaire, pour les websockets, pour un groupe de bâtiments. Des composants avec une opinon tranchée, spécialisés dans la création de jeux web en PHP.

Alors en plus partir from scratch ...

Enfin, j'espère que je me trompe et que tu vas nous faire un truc sympa, ou du moins te faire plaisir. C'est le principal.
N'as-tu jamais testé PHP Simul, Xnova, ...... ?
Tu peux créer des jeux à la Ogame en gros..
Jcray je ne connais pas du tout, je testerai.

Citation :Dans un jeu, tout est couplé, l'indépendance des parties avoisine les 0%
C'est pour cela que j'aimerai que les modules communiquent entre eux, mais gardent une indépendance.
Si je n'y arrive pas correctement, ça ne sera pas au détriment du game play : Je suis conscient que tous les éléments doivent communiquer (ex : un système d'alliance, s'il n'est pas utilisé au moins dans les combats ou dans les ressources n'a aucune utilité).

J'espère également pouvoir arriver à un résultat sympa Wink

Merci.
Je suis curieux de voir le résultat final Smile

Y-aura-t-il moyen de suivre ton projet dans le futur ?
Dès qu'une version 'à peu près montrable' sera prête, je mettrai le code sur github.
Projet à destination Open source, sûrement en GPL 3.
Ben XNova c'est bien beau, tu peux changer les noms et les images mais ce n'est pas une plateforme de création de jeu.

Si je fais un échiquier avec des cases rouges au lieu des noires, ça reste les échecs.
S'il fait quelque chose de facilement extensible, ça resterait jouable pour des développeurs.

RPG Maker avec sa possibilité de développer en ruby offre de belles opportunités de création.
Pages : 1 2 3