Pour la petite histoire, nodejs c'est un serveur ( à la place d'apache ) sur lequel tu mets ton code qui est en javascript à la place de PHP.
Tu as 1 thread pour toute les requête au lieu de 1 thread par get/post mais ça te permet bien de gérer du GET et du POST
La principale différence c'est que c'est bien plus facile de gérer des websocket ( possible mais pas facile en PHP ) et surtout de déclencher facilement des actions coté serveur.
*fin de la parenthèse*
Pour en revenir au sujet de base ( à savoir un framework de jeu en PHP ).
Quels sont les fonctionnalités qu'ont tout les jeux par navigateur ( de stratégie gestion d'après ton exemple ) ?
- connexion
- forum
- système de guilde
- carte
- échange de ressource
- unité
- bâtiment
- ressource
- évènement
- administration
Pour moi, ton système doit être une collection des interfaces de ces 10 éléments.
Je considère que "class Batiment implements IBatiment" gérera l'ensemble des batiment du joueur qui aura fait l'appel au serveur.
Sinon on peut aller plus loin avec IBatimentCollection et IBatiment
tu parles du temps de construction donc reprenons ton exemple.
Qu'est ce qui peux influer sur la construction d'un bâtiment ?
- les ressources
- les unités
- les batiments
on peu d'après moi partir sur le principe suivant :
- coté client une construction c'est : un requète avec un id batiment et un nombre
- récupérer que le client a le droit de construire
- coté serveur, il faut d'abord vérifier si c'est possible
- si possible : calculer le temps et les cout temoraire et définitif
- soustraire le cout
- enregistrer la construction dans les évènements
- à la fin de l'evement : ajouter les constructions
- puis ajouter le cout temporaire
ce qui donne dans les interfaces par exemple :
Iconnection :
- peuConstruire( idBat, nbBat)
Ibatiment :
- peuConstruire(idBat, nbBat)
- getCouts( idBat, nbBat)
- ajouter(idBat, nb)
IUnite :
- peuConstruire( idBat, nbBat)
- getReductionCouts(couts)
- soustraire(idUnit, nb )
- ajouter(idUnit, nb)
Iressource :
- peuConstruire( idBat, nbBat)
- getReductionCouts(couts)
- soustraire(idRessource, nb )
- ajouter(idRessource, nb)
IEvenement :
- enregistrerEvent(callback,param)
Et c'est donc le travaille de ton framework d'appeler chacune de ces fonctions dans le bon ordre avec les bons paramètres. La classe Batiment qui implement IBatiment elle ne connait rien des ressources ni du reste, tu as donc ton principe de module interchangeable
ça en fait pas mal pour une "simple" construction d'un batiment.
Je pense que faire une roadmap et un versionnement des Interfaces serait efficace. Si dans la V1 on ne peut pas réduire le couts, libérer la population d'ouvrier ou ce genre de chose, ça ne me choque pas du tout. Au contraire
Tu as 1 thread pour toute les requête au lieu de 1 thread par get/post mais ça te permet bien de gérer du GET et du POST
La principale différence c'est que c'est bien plus facile de gérer des websocket ( possible mais pas facile en PHP ) et surtout de déclencher facilement des actions coté serveur.
*fin de la parenthèse*
Pour en revenir au sujet de base ( à savoir un framework de jeu en PHP ).
Quels sont les fonctionnalités qu'ont tout les jeux par navigateur ( de stratégie gestion d'après ton exemple ) ?
- connexion
- forum
- système de guilde
- carte
- échange de ressource
- unité
- bâtiment
- ressource
- évènement
- administration
Pour moi, ton système doit être une collection des interfaces de ces 10 éléments.
Je considère que "class Batiment implements IBatiment" gérera l'ensemble des batiment du joueur qui aura fait l'appel au serveur.
Sinon on peut aller plus loin avec IBatimentCollection et IBatiment
tu parles du temps de construction donc reprenons ton exemple.
Qu'est ce qui peux influer sur la construction d'un bâtiment ?
- les ressources
- les unités
- les batiments
on peu d'après moi partir sur le principe suivant :
- coté client une construction c'est : un requète avec un id batiment et un nombre
- récupérer que le client a le droit de construire
- coté serveur, il faut d'abord vérifier si c'est possible
- si possible : calculer le temps et les cout temoraire et définitif
- soustraire le cout
- enregistrer la construction dans les évènements
- à la fin de l'evement : ajouter les constructions
- puis ajouter le cout temporaire
ce qui donne dans les interfaces par exemple :
Iconnection :
- peuConstruire( idBat, nbBat)
Ibatiment :
- peuConstruire(idBat, nbBat)
- getCouts( idBat, nbBat)
- ajouter(idBat, nb)
IUnite :
- peuConstruire( idBat, nbBat)
- getReductionCouts(couts)
- soustraire(idUnit, nb )
- ajouter(idUnit, nb)
Iressource :
- peuConstruire( idBat, nbBat)
- getReductionCouts(couts)
- soustraire(idRessource, nb )
- ajouter(idRessource, nb)
IEvenement :
- enregistrerEvent(callback,param)
Et c'est donc le travaille de ton framework d'appeler chacune de ces fonctions dans le bon ordre avec les bons paramètres. La classe Batiment qui implement IBatiment elle ne connait rien des ressources ni du reste, tu as donc ton principe de module interchangeable
ça en fait pas mal pour une "simple" construction d'un batiment.
Je pense que faire une roadmap et un versionnement des Interfaces serait efficace. Si dans la V1 on ne peut pas réduire le couts, libérer la population d'ouvrier ou ce genre de chose, ça ne me choque pas du tout. Au contraire