Voilà une petite ressource qui gére les ressources ( *smile* )
En gros ça simplifie pas mal la gestion dans les scripts, ça update seulement en cas de besoin etc, bref on économise beaucoup de lignes de codes et un peu de ressource serveur :-)
En gros ça simplifie pas mal la gestion dans les scripts, ça update seulement en cas de besoin etc, bref on économise beaucoup de lignes de codes et un peu de ressource serveur :-)
Code PHP :
<?php
class Ressources {
private static $instance = null;
private $ressource;
private $startRessource;
private $message = array();
private $debugging = array();
private function __construct()
{
$ressourcesExistantes = array('bois', 'metal', 'pierre'); // en principe déjà définit dans la conf...
foreach($ressourcesExistantes as $key => $value)
{
$this->ressource[$value] = $_SESSION['ressources'][$value];
}
$this->startRessource = $this->ressource;
}
public static function getInstance()
{
if(is_null(self::$instance)) self::$instance = new Ressources();
return self::$instance;
}
public function __set($ressource, $value)
{
if(array_key_exists($ressource, $this->ressource))
{
$this->ressource[$ressource] = $value;
}
else $this->debugging[] = 'erreur lors du __set. la ressource '. $ressource .' existe pas';
}
public function __get($ressource)
{
if(array_key_exists($ressource, $this->ressource))
{
return $this->ressource[$ressource];
}
else $this->debugging[] = 'erreur lors du __get. la ressource '. $ressource .' existe pas';
}
public function buy($array) // exemple de l'array: array('wood' => 6, 'stone' => 2)
{
foreach($array as $key => $value)
{
if($this->ressource[$key] < $value)
{
$this->message[] = 'pas assez de '. $key .'. votre achat coute '. $value .' mais vous ne disposez que de '. $this->ressource[$key]; // je vous laisse faire la mise en forme tout seul comme des grands ^^
}
}
if(size_of($this->message > 0))
{
return false;
}
else return true; // ou message genre: achat effectué avec succès
}
public function getMessages()
{
// affichage des messages
}
public function getDebugging()
{
// affichage des messages OU (mieux en prod ^^) enregistrement dans un log file
}
public function __destruct()
{
if($this->startRessource != $this->ressource)
{
// update des valeurs SESSION / MYQSL
}
}
}
?>
J'ai vite tappé le codeà l'instant même, si ça se trouve il reste quelques fautes de frappes! Pas testé donc mais ça doit être fonctionnel (en tout cas l'idée de gérer les ressources comme ça est correct je pense).
Je vais poster des exemples dès que j'ai un moment... si vous utilisez cette classe et l'améliorez pensez à la re-poster :-)
tout commentaires est le bienvenue sur mon code!!
EDIT: l'exemple promis :-)
Code PHP :
<?php
//Dans la conf on aurait donc:
$building['maison']['bois'] = 30;
$building['maison']['fer'] = 10;
$building['maison']['pierre'] = 12;
// et dans le script pour un achat:
Ressources::getInstance()->buy($building['maison']);