JeuWeb - Crée ton jeu par navigateur
[PHP] Conserver des objets de page en page - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PHP] Conserver des objets de page en page (/showthread.php?tid=5669)



[PHP] Conserver des objets de page en page - chaton2cam - 29-08-2011

Bonjour,

J'ai besoin d'un conseil svp (Je débute, donc ma question va peut-être sembler bête :$)

Je veux faire un rpg tactical en php pour lequel on change de page à chaque tour. Chacun de mes personnages est un objet, dans lequel est mémorisé ses stats (points de vie, etc).
Je dois donc sauvegarder les stats de chaque perso de page en page.

J'aurais pu simplement sauvegarder les stats actuelles en base de données, mais j'ai voulu essayé la sérialisation. A l'heure actuelle cela fonctionne, mais cela me crée un fichier par objet. (à raison de 20 personnages par Map, cela fait beaucoup de fichier générés)

- Est-il possible de sauvegarder mes objets dans un seul fichier de "serialisation"?
- Peut-on paramétrer la suppression automatique de ce fichier au bout de X minute d'inactivité ?
- Devrais-je plutôt sauvegarder les stats en bdd, puis recréer mes objets à chaque chargement de page ?

Merci à celui/ceux qui voudra m'aider Smile


RE: Conserver objets de page en page - Viciousity - 29-08-2011

{perso1:{life: 10,atk: 12}, perso2:{life: 13; atk: 56}}


RE: Conserver objets de page en page - Kassak - 29-08-2011

Pas compris ton système déjà...


RE: Conserver objets de page en page - christouphe - 29-08-2011

1) Est-il possible de sauvegarder mes objets dans un seul fichier de "serialisation"?
cf Viciousity

2) Peut-on paramétrer la suppression automatique de ce fichier au bout de X minute d'inactivité ?
oui via la bdd, si tu t'en sers.

3) Devrais-je plutôt sauvegarder les stats en bdd, puis recréer mes objets à chaque chargement de page ?
Pourquoi ne pas utiliser les session ??


RE: Conserver objets de page en page - chaton2cam - 29-08-2011

Un petit bout de code parlera mieux je pense...

Serialisation
Code :
foreach ($personnage as $cle=>$valeur)
{
  $a=new Commandant($valeur[nom],$valeur[hp],$valeur[mp]);
  $s = serialize($a);
  $le_heros="heros_".$valeur[id];
  file_put_contents("$le_heros", $s);
}

Deserialisation
Code :
foreach ($personnage as $cle=>$value)
{
  $le_perso=$value[genre]."_".$value[id];
  $s = file_get_contents($le_perso);
  $perso[$le_perso] = unserialize($s);
  print $perso[$le_perso]->Nom()." - ".$perso[$le_perso]->Genre()." (".$perso[$le_perso]->Hp().")<br>";
}

Avec cette méthode je récupère mes objets personnage.
Mais cela me crée autant de fichiers qu'il y a d'objets, donc je voulais savoir comment faire pour stocker mes objets dans un seul fichier


RE: Conserver objets de page en page - niahoo - 29-08-2011

Hello,

Ce n'est pas grave d'avoir plein de fichiers. Je ne vois pas où est le problème si tes fichiers sont correctement nommés.


(29-08-2011, 12:57 PM)chaton2cam a écrit : - Est-il possible de sauvegarder mes objets dans un seul fichier de "serialisation"?

Oui mais tu devras toujours tout désérialiser même pour consulter un seul personnage.

(29-08-2011, 12:57 PM)chaton2cam a écrit : - Peut-on paramétrer la suppression automatique de ce fichier au bout de X minute d'inactivité ?

Avec un CRON c'est possible par exemple.

(29-08-2011, 12:57 PM)chaton2cam a écrit : - Devrais-je plutôt sauvegarder les stats en bdd, puis recréer mes objets à chaque chargement de page ?

C'est la méthode classique. Note que tu peux stocker ton JSON en base de données.
Tu peux également regarder un systeme de cache type APC pour stocker des objets


RE: Conserver objets de page en page - chaton2cam - 29-08-2011

Je vois, merci à vous tous, c'est très clair et j'ai de quoi avancer !

Je vais surement passer à une méthode plus classique avec ma bdd. Mais je vais quand même voir comment faire marcher ma serialisation avec la méthode de Viciousity


RE: Conserver objets de page en page - php_addict - 29-08-2011

mieux vaut tout mettre en base de donnée, par exemple si le site plante, ou que tu doive restaurer ta base de donnée avec une ancienne sauvegarde

à la rigueur tu peut utiliser ta serialisation pour utilisation cache de tes données, avec memcache ou APC par exemple...


RE: Conserver objets de page en page - Viciousity - 29-08-2011

Partir sur des méthodes de sérialisation tel que JSON ou BSON ont des avantages comme pouvoir en récupérer les valeurs en utilisant des $player[:life] et surtout de pouvoir facilement manipuler les données.

Utiliser des sessions pour stocker des valeurs qui seront ensuite utilisées pour le jeu n'est pas fiable a cause des failles de manipulation de cookies et sessions.

Et mettre au point un cache est relativement judicieux dans l'optique ou si tu n'as qu'un seul fichier qui sera donc plus volumineux, celui-ci étant utilisé pour stocker toutes les données tu te heurteras quand même à un problème en terme de performance si tu dois modifier en simultané des centaines de joueurs en un court instant (sauf si tu mets au point un système de queue)