Ah tiens Max72, j'en vois un qui fait son jeu avec CodeIgniter (mon nouveau jeu est fait avec)...
Pour ma part, j'ai mis toutes les classes de mon jeu dans un namespace.
Concernant l'instance de mon joueur connecté, j'ai bâti ça autour d'une classe Player. Son rôle est de livrer un singleton de l'instance du joueur, puis de faire un lazyLoad des classes liées au jeu. Mon Player charge donc dynamiquement toutes les classes du joueur.
Ex :
Pour ma part, j'ai mis toutes les classes de mon jeu dans un namespace.
Concernant l'instance de mon joueur connecté, j'ai bâti ça autour d'une classe Player. Son rôle est de livrer un singleton de l'instance du joueur, puis de faire un lazyLoad des classes liées au jeu. Mon Player charge donc dynamiquement toutes les classes du joueur.
Ex :
Code PHP :
<?php
Player::Account->connected(); // charge dynamiquement \Game\Account puis execute la méthode connected()
Player::Ninja->maximum_life; // charge dynamiquement \Game\Ninja puis récupère l'attribut "maximum_life"
Les objets de l'instance sont donc chargés dynamiquement. Le driver SQL met en cache la plupart des requêtes et bien souvent l'objet entier est déjà stocké serializé via Redis.
Pour les interactions entre les joueurs (ou plus généralement entre les entités), j'utilise un service entre les deux.
Ex : X veut transférer de la tune à un autre joueur
Code PHP :
<?php
$trade = new \Game\Trade\PlayerToPlayer(Player, new \Game\Service\Player($receiver_id), $amount);
if ($trade->possible())
{
$trade->commit();
}