JeuWeb - Crée ton jeu par navigateur
[PHP] Comment gérer les langues dans un jeu multijoueur ? - 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] Comment gérer les langues dans un jeu multijoueur ? (/showthread.php?tid=3928)

Pages : 1 2 3


RE: [pHp] Comment gérer les langues dans un jeu multijoueur ? - keke - 28-04-2009

(28-04-2009, 02:11 PM)Ter Rowan a écrit : sinon même si ce n'est pas très malin comme technique, pourquoi penses tu que le 'if >1 ==>s' est si catastrophique que cela ?
Citation :- du code du style if ($number>1) $text.="s"; qui alors là est une honte

Et si tu a le texte : une souris, un hibou ...
Ca donnerait : des souriss ^^ des hibous ^^ etc ...

Et comme le souligne Zamentur, ça n'a clairement pas sa place dans une fonction de combat.

Kéké.


RE: [pHp] Comment gérer les langues dans un jeu multijoueur ? - cipic - 02-05-2009

Bon alors après m'être penché sur le sujet j'ai réussi à implémenter le module dans mon code, mais son fonctionnement me reste obscur sur certains points...

quelques explications me seraient fort utiles :

(25-04-2009, 10:55 PM)Zamentur a écrit :
Code PHP :
<?php

function &get_instance($lang=Null) {
static
$instance=array();
global
$conf;

if (
is_Null($lang)) $lang=$conf->__get('general__default_lang');

if (!isset(
$instance[$lang]) || !is_a($instance[$lang],'text'))
if (
is_dir(URI_ROOT.'lang/'.$lang.'/'))
$instance[$lang]=&new text($lang);
return
$instance[$lang];
}


- Pourquoi utiliser cette méthode pour créer un objet plutôt que de l'instancier directement en mettant ce contenu dans le constructeur ?

- à quoi sert le "&" qui référence la méthode ?

(25-04-2009, 10:55 PM)Zamentur a écrit :
Code PHP :
<?php 
function __get($name) {
return
$this->get($name);
}

- à quoi servent ces lignes ?


(25-04-2009, 10:55 PM)Zamentur a écrit :
Code PHP :
<?php 
/**
* Renvoie le texte correspondant à une idée dans la langue de l'objet
* appelant
* @param (string) $name Identifiant permetant de localiser une idée
* dans le systèle de fichier lang
* @param (mixed)[$arg1,[...,[argn : Paramètre tierce de l'idée
* @return (string) Renvoie le texte correspondant à l'idée
*/
function get($name) {
$liste_args = func_get_args();
$sentence = $this->load_text(array_shift($liste_args));

return
vsprintf($sentence,$liste_args);
}

- je ne comprends pas bien le mécanisme ici non plus :'(



(25-04-2009, 10:55 PM)Zamentur a écrit : NB: sinon il y a bon nombre de framework qui propose ce genre de chose, cakephp, etc... Ca permet d'éviter de refaire la roue comme ci dessus Smile

- qu'est-ce qu'un framework ?



En tous cas merci bcp, ça marche nickel ! un souci de moins.
mais j'aimerais bien comprendre un peu mieux quand même... Big Grin


RE: [PHP] Comment gérer les langues dans un jeu multijoueur ? - Zamentur - 02-05-2009

Bon déjà le lien ou j'ai apris comment marche tout çà en php:
http://fr.php.net/manual/fr/language.oop.php
http://fr.php.net/manual/fr/language.oop5.php

Pour les questions:
1)
Citation :Pourquoi utiliser cette méthode pour créer un objet plutôt que de l'instancier directement en mettant ce contenu dans le constructeur ?
En fait cette méthode sert à garantir qu'il n'y aura qu'un objet par langue de créé. Ainsi si l'objet a déjà été créé on peut le récupérer via cette même méthode.

Donc soit elle créé, soit elle récupère l'objet déjà créé.

Pourquoi vouloir éviter ces doublons?
Et bien chaque objet stocke les groupes de variables dans la propriété $text_loaded, afin de ne pas recharger le contenu des fichier langue inutilement. Si on utilise des objet différent le contenue de $text_loaded est différent, ce qui est normal si il ne s'agit pas de la même langue, mais ne l'est pas si c'est la même langue et donc les même textes!

Bref çà garantit qu'un seul et unique objet sera créé et utilisé par langue.

2)
Citation :- à quoi sert le "&" qui référence la méthode ?
Alors comme je l'ai précisé la classe que j'ai filé est à la base faite pour php4.
En php4 on devait mettre un & pour précisé que l'objet était passé par référence. Sinon il aurait été copié.
En php5 les objet sont automatiquement passé par référence donc plus besoin de &

3)
Citation :à quoi servent ces lignes ?
La méthode __get() est une méthode magique en php5
je te renvoie à la doc qui comporte des exemples
http://fr.php.net/manual/fr/language.oop5.overloading.php#language.oop5.overloading.members

Mais en gros __get se lance quand on appelle une propriété non accessible
$this->ma_propriété_inexistante;
La propriété vaudra alors la valeur de retour de la méthode __get()
Ici c'est utilisé pour appeler des texte sans argument (trou), qui ne nécessite donc pas de paramètre $text->hello par exemple

4)
Citation :- je ne comprends pas bien le mécanisme ici non plus
Cette fonction permet d'obtenir un texte complet, identifié par le paramètre $name qui est obligatoire.
Code PHP :
<?php 
$liste_args
= func_get_args();
Là on récupère le tableaux des arguments, si j'appelle $text->get('hello_you','Zamentur'); alors $liste_args vaut array('hello_you','Zamentur')

Code PHP :
<?php 
$sentence
= $this->load_text(array_shift($liste_args));
array_shift renvoie la première valeur d'un tableau et l'enlève de ce dernier
donc on obtient $this->load_text('hello_you') et $liste_args=array('Zamentur');

Code PHP :
<?php 
return vsprintf($sentence,$liste_args);
vsprintf renvoie une phrase ou elle remplace les %s (ou %d cf http://fr.php.net/manual/fr/function.sprintf.php) par les argument passé en paramètres dans le tableau $liste_args.

Ainsi si $sentence vaut Bonjour %s!
on obtiendra
"Bonjour Zamentur!"

Citation :- qu'est-ce qu'un framework ?
Il y a des définition plus ou moins strict de ce termes, mais en gros un framework est un cadre de travail, il regroupe donc:
- des règles cadrant le projet (pour éviter de partir n'importe comment
- des fonctions et des classes qui permettent de faire des choses commune comme par exemple la gestion des textes ici présenté, ou encore l'accessibilité au base de donnée, l'authentification, la séparation de la vue du traitement etc...
- éventuellement des outils de génération automatiques de code
- l'intégration d'outil comme phpunit
- une communauté qui l'utilise
- des modules additionnel développé par la communauté.

Bref un framework permet d'éviter de créé les fondations du projet qui sont souvent commune à tous site.
Un framework comme cakephp permet de faire beaucoup de chose il n'y a que de rare cas ou ces framework ne sont pas adapté et c'est du à des demandes spécifiques .

NB: un jeu est proche de cette limite du trop spécifique, cela dit la plus part sont encore du coté ou le framework ne limite en rien et fait donc gagner beaucoup de temps


RE: [PHP] Comment gérer les langues dans un jeu multijoueur ? - cipic - 02-05-2009

merci !

bon avec tout ça j'ai de quoi faire jusqu'au week-end prochain !!

j'vais étudier tout ça... Big Grin

merci pour tout Wink