JeuWeb - Crée ton jeu par navigateur
Structure du jeu - 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 : Structure du jeu (/showthread.php?tid=2363)

Pages : 1 2 3


Structure du jeu - comg - 05-02-2008

Bonjour à tous.
Je voulais savoir quel est d'apres vous la meilleure structure (rapidité, ergonomie, evolutivité) pour le site de jeu. Si je suis trop abstrait je vais vous donner ma methode et éspère que vous pourriez m'aider à m'ameliorer dans ce domaine (parceque franchement ça me semble bordelique Wink)

Alors voila :
Les liens se font en
Code :
monsite.com/?do=maison:dormir
par exemple.
L'index recupere le $_GET['do'], l'explose par rapport aux ':' et je stocke dans $do :

Code PHP :
<?php 
$do
= explode(':',$_GET['do']);

Ensuite j'ai des if, elseif, else qui verifie la valeur de $do[0] (maison) et fait un include de la bonne page :

Code PHP :
<?php 
if(isset($do[0])
{
if(
$do[0]=='maison') { include('maison.php'); }
elseif(
$do[0]=='magasin') { include('magasin.php'); }
// ... ainsi de suite pour chaque page
else { include('defaut.php'); }
}
else { include(
'defaut.php'); }

Ensuite c'est dans la page inclue que je verifie le $do[1] correspondant generalement à l'action. Par le meme principe de if,elseif,else j'appelle une fonction correspondant a l'action :

Code PHP :
<?php 
if(isset($do[1])
{
if(
$do[1]=='manger') { manger(); }
elseif(
$do[1]=='dormir') { dormir(); }
// ... ainsi de suite pour chaque action possible sur la page
else { rienfaire(); }
}
else { include(
'defaut.php'); }

Enfin je verifie dans la fonction la valeur eventuelle d'autre argument

Code PHP :
<?php 
function manger()
{
if(isset(
$do[3])
{
// On mange l'objet id=3 par exemple, pour simplifier
}
else {
rienfaire(); }
}

Grossomodo voici comment je fonctionne. Ce qui me gene est que les visiteurs ont acces aux valeurs transmises dans la barre d'adresse (comment ils font chez ogame ?)

Voila si vous avez des commentaires, des remarques ou des suggestions à me faire, je suis preneur. Si vous ne comprenez pas tout ce que j'ai voulu dire n'hesitez pas a me le demander.

Merci d'avance de votre aide

ComG aka Chantal

PS : je n'ai rien trouvé concernant la structure du site sur le forum... Ai je mal cherché ? Si oui je m'en excuse.


RE: Structure du jeu - keke - 05-02-2008

privilégie plustot des formulaires html pour envoyer des données.
Tu les récupères sous forme de POST et ça peut t'éviter tout un tas de fraude.

Ensuite, soit tu fais une page par action (comme sur le site Zepirates.com), soit tu fais une page principale (comme sur mon site Magales.com)

Les 2 solutions ont des avantages et des inconvénients. La deuxième solution ne doit pas être retenu sur un portail car elle bloque relativement bien le référencement (à moins de contourner par htaccess)


Par ailleur, tu t'es bien compliqué la tache.
il faut savoir que sur un lien de type : toto.php?var=1&toto=2&tutu=3
Tu récupères les variables de la manière suivante :
echo $_GET['toto'] ; // affiche 1
echo $_GET['var'] ; // affiche 2
echo $_GET['tutu'] ; // affiche 3

Pas besoin d'explode pour cela.

N'hésite pas à lire des tutoriaux avant de continuer ton projet, car sur le coup, il s'agit d'un point souvent mentionner dans nombreux forums, et dont la correction pourra te demander 1/2 de ton temps de coddage si tu dois le corriger après !

Kéké qui est passé par là ... sic !


RE: Structure du jeu - uriak - 05-02-2008

à priori, $_POST n'est pas plus sûr que $_GET, il permet juste d'éviter de s'encombrer de longues adresses.

dans les deux cas, il faut nettoyer les variables qui sont récupérée, et de toute façon revérifier les conditions d'actions.


RE: Structure du jeu - comg - 05-02-2008

Alors pour le toto.php?var=1&toto=2&tutu=3 je le sais bien, mais justement le explode permet de ne travailler qu'avec une seul variable. Je ne sais plus bien pour quoi j'avais privilégié cette manière mais je pense que cela reviens peu ou proue au même. (les utilisateurs savent pas trop à quoi correspondent les chiffres en fait)
Ensuite ce qui me dérange avec les formulaires c'est les boutons, mais c'est vrai que j'avais commencé à le faire comme ça entierement et c'est vrai que c'est transparent... Je vais sans doute y revenir en fait.
Merci de donner ton point de vue kéké.
Je vais faire des tests...

EDIT : Bien noté uriak, merci. Qu'entend tu par 'nettoyer les variables' ?


RE: Structure du jeu - X-ZoD - 05-02-2008

de base :
- j'evite les if
- je ne passe jamais rien en get (ca ne veux pas dire que c'est pas fiable)
- j'utilise des classes poru faire propre et intuitif
- et j'installe le client dans un fauteuille en cuire en utilisant ajax et le js plutot que de faire des rechargement de pages a tout vas

sinon pour ton enchainement de if que tu va faire je suggere un tableau associatif
du coup
Code PHP :
<?php 
if($do[0]=='maison') { include('maison.php'); }
elseif(
$do[0]=='magasin') { include('magasin.php'); }
// ... ainsi de suite pour chaque page
else { include('defaut.php'); }
deviendrait
Code PHP :
<?php 
$tab_do
= array("magasin" => "magasin.php");
include(
$tab_do[$do[0]]);

mais avec ton cas "particulier tu peu carement faire ca
Code PHP :
<?php 
include($do[0].'.php');

mais c'est moins secure deja .. ca depend de ce que tu fais dans tes pages par la suite


RE: Structure du jeu - uriak - 05-02-2008

(oui, pour l'inclusion de fichier, c'est chaud chaud) par contre les tableaux et les switch sont le bien, pour les cas multiples.

Par nettoyer j'entends utiliser les magic_quotes (enfin s'assurer qu'ils y sont), pour éliminer l'injection, de même caster les valeurs numériques (identifiants en particulier) en nombre.
Quelques fonctions simples à faire et à réutiliser.

Ensuite pour les classes, il faut se familiariser avec la programmation orientée objet. A l'arrivée tu appelles des méthodes avec peu d'arguments, car les variables utiles sont déjà membres des classes (un des intérêts de la POO). Et si tu as besoin de changer ta manière de faire, tu n'auras qu'à modifier la classe générée avant les appels de méthodes.


RE: Structure du jeu - X-ZoD - 05-02-2008

voila .. je rejoins uriak


RE: Structure du jeu - Eluox - 05-02-2008

Personnelement, sur mielwar j'utilsie un systeme d'include par $_GET .

C'est pas super secure je pense mais on a pas encore eu de probleme.

Du genre sur l'index

Code PHP :
<?php 
if(isset($_GET['do'])) { $nav = $_GET['nav']; include($nav.'.php');}
else
{
ton index
}



RE: Structure du jeu - Ziliev - 05-02-2008

X-ZoD a écrit :
Code PHP :
<?php 
$tab_do
= array("magasin" => "magasin.php");
include(
$tab_do[$do[0]]);
J'me permet de réagir là dessus, le switch est 2 fois plus rapide que l'array associatif pour ce genre de choses (testé et approuvé par un p'tit script maisonq ue je dosi encore avoir sous la main si ca vous dit ^^). Pi en plus ca permet de définir une valeur par défaut pour les p'tits rigolo qui tentent de pirater en modifiant tes valeurs envoyées.

Après effectivement POST ou GET même combat, simplement je préfère le POST au GET parce qu'une URL fixe ca fait plus joli, pi que pour pirater un POST 'faut s'y connaitre un peu plus que pour un GET (être équipé ou intelligent quoi, pi en plus le joueur est pas tenté en voyant toutes ces belle sinformations dans sa barre d'url Tongue). Quand à include une page dont le nom vient d'un GET, c'est un peu comme jouer à la roulette russe avec un AK47 hein ...

Personellement je suis sur du POST, avec des if( isset( $_POST[ submit de l'action en question ]) ) pour les résolutions et l'affichage ensuite. 'sur qu'AJAX c'est plus classe, mais bon 'faut gérer aussi. J'vais pas me risquer à critiquer hein, perso j'y connais rien Big Grin Juste quelques JS par ci par là pour vérifier les champs entrés (bien que le PHP vérifie aussi après, c'est juste pour le confort du client ca, parce que bon JS dans le genre piratable c'est pas mal non plus).


RE: Structure du jeu - Plume - 05-02-2008

comg a écrit :Ensuite j'ai des if, elseif, else qui verifie la valeur de $do[0] (maison) et fait un include de la bonne page :

Code PHP :
<?php 
if(isset($do[0])
{
if(
$do[0]=='maison') { include('maison.php'); }
elseif(
$do[0]=='magasin') { include('magasin.php'); }
// ... ainsi de suite pour chaque page
else { include('defaut.php'); }
}
else { include(
'defaut.php'); }

X-ZoD a écrit :sinon pour ton enchainement de if que tu va faire je suggere un tableau associatif
du coup
Code PHP :
<?php 
if($do[0]=='maison') { include('maison.php'); }
elseif(
$do[0]=='magasin') { include('magasin.php'); }
// ... ainsi de suite pour chaque page
else { include('defaut.php'); }
deviendrait
Code PHP :
<?php 
$tab_do
= array("magasin" => "magasin.php");
include(
$tab_do[$do[0]]);

mais avec ton cas "particulier tu peu carement faire ca
Code PHP :
<?php 
include($do[0].'.php');

mais c'est moins secure deja .. ca depend de ce que tu fais dans tes pages par la suite

dark vengeur a écrit :Personnelement, sur mielwar j'utilsie un systeme d'include par $_GET .

C'est pas super secure je pense mais on a pas encore eu de probleme.

Du genre sur l'index

Code PHP :
<?php 
if(isset($_GET['do'])) { $nav = $_GET['nav']; include($nav.'.php');}
else
{
ton index
}

Messieurs .. Qu'avez-vous fumé avant de venir ? Vous auriez au moins pu faire partager ! Smile

Vos méthodes sont pas terribles, terribles. Dans la plupart des cas, ça nécessite quand même l'édition du fichier source à chaque nouvelle page ! :wow:

Voilà mon idée [ évidemment pas optimisé, c'est de l'arrache ] :
Code PHP :
<?php
if( isSet( $_GET[ 'page' ] ) AND !empty( $_GET[ 'page' ] ) )
{
$pageSubmitted = $_GET[ 'page' ];
if(
is_file( 'pages/' . $pageSubmited . '.php' ) )
{
include_once(
'pages/' . $pageSubmited . '.php' );
}
else
include_once(
'templates/404.html' );
}
else
include_once(
'pages/homepage.php' );
?>

Voilà grossièrement comment j'vois les choses.

Commentaires s'il vous plait !

L.