JeuWeb - Crée ton jeu par navigateur
CODE ATTAQUE CRITIQUE - 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 : CODE ATTAQUE CRITIQUE (/showthread.php?tid=1919)

Pages : 1 2


RE: CODE ATTAQUE CRITIQUE - Sephi-Chan - 23-10-2007

Ça commence à devenir une habitude. C'est malheureusement pas le seul assisté. Sad


RE: CODE ATTAQUE CRITIQUE - jldbaro - 24-10-2007

Sephi-Chan a écrit :Ça commence à devenir une habitude. C'est malheureusement pas le seul assisté. Sad

Serieux ne prenez même pas la peine d'écrire. Et Passé vos chemins pour dire des bétises.


RE: CODE ATTAQUE CRITIQUE - jldbaro - 24-10-2007

naholyr a écrit :Je voudrais pas être méchant, mais un copier-coller de 565 lignes, je veux bien compter les lignes mais faire une critique constructive sur le code ça me parait tendu Smile

Vite fait comme ça tu as regardé le source de la page générée ? Tu as des affichages batards en plein milieu, puis d'un coup un <html> qui vient se poser là genre «faites comme si j'étais là depuis le début, vous inquiétez pas». Sinon ça part d'un bon sentiment le mysql_close() avant <html>, mais dans ce cas ça ne sert à rien Wink Plus généralement, une fonction ne devrait jamais utiliser "echo", mais uniquement générer des chaines de caractère avant de les retourner. Le "echo" doit être réservé à la partie présentation de ton script (entre <body> et </body>...).

Ah oui et les variables globales, saylemal, une ou deux comme ça pourquoi pas, mais cette flopée de globales est un nid à bugs.


Merci pour ces remarques. J'avais pas été voir mon code.

Pour utiliser les variables dans une fonction il ne faut pas les définir en global avant?


RE: CODE ATTAQUE CRITIQUE - pascal - 24-10-2007

jldbaro a écrit :Merci pour ces remarques. J'avais pas été voir mon code.

Pour utiliser les variables dans une fonction il ne faut pas les définir en global avant?

oui c'est long...

bref :
tu peux utiliser aussi le tableau $GLOBALS .
il y a aussi une sorte de convention implicite pra rapport aux variables :
_ pour les variables générales, de la configuration... => $GLOBALS
_ pour les variables dépendant directement du script ( points de force du joueur, position sur une carte ...) => variables en paramètre de la fonction

A+

Pascal


RE: CODE ATTAQUE CRITIQUE - NicoMSEvent - 24-10-2007

Citation :Pour utiliser les variables dans une fonction il ne faut pas les définir en global avant?
A quoi servent les parametres des fonctions? et les valeurs de retour?


RE: CODE ATTAQUE CRITIQUE - Zamentur - 24-10-2007

Code PHP :
<?php 
$reponse
= mysql_query("SELECT * FROM unites where login='test'");
$donnees = mysql_fetch_array($reponse);
$rangersatt=$donnees['rangers'];
$marinesatt=$donnees['marines'];
$snipersatt=$donnees['snipers'];

$Troupes_attaquantes=($rangersatt+$marinesatt+$snipersatt);

$reponse = mysql_query("SELECT * FROM unites where login='jldbaro'");//installer le def
$donnees = mysql_fetch_array($reponse);
$rangersdef=$donnees['rangers'];
$marinesdef=$donnees['marines'];
$snipersdef=$donnees['snipers'];

$Troupes_défendantes=($rangersdef+$marinesdef+$snipersdef);
echo
"total: $Troupes_défendantes<br /> <br /> ";
$rangersvie=1000;
$marinesvie=1300;
$snipersvie=700;

$rangersdegats1=15;
$marinesdegats1=20;
$snipersdegats1=40;

$rangersdegats2=25;
$marinesdegats2=32;
$snipersdegats2=67;

$rangersvietotaldef=($rangersvie*$rangersdef);
$marinesvietotaldef=($marinesvie*$marinesdef);
$snipersvietotaldef=($snipersvie*$snipersdef);
$rangersvietotalatt=($rangersvie*$rangersatt);
$marinesvietotalatt=($marinesvie*$marinesatt);
$snipersvietotalatt=($snipersvie*$snipersatt);

$snipers_def_temp=true;
$snipers_att_temp=true;
$marines_def_temp=true;
$marines_att_temp=true;
Ben perso là dans ce cas précis j'aurais creer un array, je trouve que tes variables se repetent beaucoup et presentent des similitudes
Avec un array il est possible de faire des traitement avec foreach alors que sinon il faut utilisé $$text_mavar (avec $text_mavar='marinesvietotalatt' par exemple)

donc j'aurrais fais ceci(enfin plus comme çà):
Code PHP :
<?php 
$reponse
= mysql_query("SELECT marines,rangers,snipers FROM unites where login='test' LIMIT 1");
$att = mysql_fetch_array($reponse);

$reponse = mysql_query("SELECT marines,rangers,snipers FROM unites where login='jldbaro' LIMIT 1");
$def = mysql_fetch_array($reponse);

//On calcul le nombre d'unités dans chaque camps
$troupes_attaquantes=array_sum($att);
$troupes_défendantes=array_sum($def);

echo
"total: $troupes_défendantes<br /> <br /> ";

//On charge les variables de config
/*
dans l'absolue je regroupe ce type de variable dans un autre fichier que j'inclue.
La raison est simple si tu as besoin de ces varaible dans un autre script,
il faut eviter de faire un copier coller car quand tu voudras faire un reglage,
il faudra changer sur les 2 script (si c'est pas 20 scripts :) )
Alors que l'include de ton fichier de config te permet de modifier çà une fois
Bref attention à la centralisation des données
*/
$vie=array(
'rangers'=>1000,
'rangers'=>1300,
'snipers'=>700
);

$degats=array(
'rangers'=>array(1=>15,25),
'rangers'=>array(1=>20,32),
'snipers'=>array(1=>40,67)
);

//Calcul de la vie total des 2 camps
/*Bon je trouve que la foreach raccourcie le code
et là encore pour ajouter une unité les donnée sont plus centraliser
(mais pas encore assez à mon sens...
Le & sert à transmettre la varaiable par reference et non en la clonnant.
Je le met juste pour le fun :)
*/
foreach($vie as &$unite=>&$vie_unite) {
$vietotaldef[$unite]=($vie_unite*$def[$unite]);
$vietotalatt[$unite]=($vie_unite*$att[$unite]);
$att_temp[$unite]=true;
$def_temp[$unite]=true;
}

/*Là tu remarques qu'avec ce systeme,
il te sera beaucoup plus simple de passer tes variables en parametre
et non en varaible global (et meme avec les variables global,
çà raccourcie enormement le script visuelement)*/

Sinon j'ai remarqué une faute grave en passant:
Code PHP :
<?php 
header
('Location: index.php');
Tu vas me dire que çà marche trés bien, mais moi je repond que çà marche sur ta config serveur/navigateur et pas forcement sur les autres config!
Il m'ai arrivé une fois il ya longtemps de mettre une url relative dans le header comme çà et la redirection ne se faisait pas sur Firefox (ou IE je sais plus) . J'ai cherché durant 5h...
de3.php.net a écrit :Note: HTTP/1.1 demande une URI absolue comme argument de » Location:,
y compris le protocole, hôte et chemin absolu.
Mais certains navigateurs acceptent les URI relatives. Vous pouvez généralement utiliser les variables globales $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] et
dirname() pour construire vous-même une URI absolue :

Exemple 1740. Redirection à l'aide de header()
Code PHP :
<?php
header
("Location: http://" . $_SERVER['HTTP_HOST']
.
rtrim(dirname($_SERVER['PHP_SELF']), '/\\')
.
"/" . $relative_url);
?>

Pour les fonction je pense pareil que les autres, il faut utiliser les parametre et les return !

Et aussi pour les echo qui se produisent avant le <html>
Il est possible de pallier à ce probleme soit avec les valeur de retour des fonction, soit avec http://de3.php.net/manual/fr/function.ob-start.php
et http://de3.php.net/manual/fr/function.ob-get-flush.php

D'ailleurs tant qu'on parle des textes, je te conseil de centraliser tes textes dans un fichier de config!
avec un array par exemple
Citation :Pourquoi?
Pour pouvoir corriger/modifier les textes sans se casser la tete à parcourir tout un code
Et en plus un jour tu pourras traduire ton site de cette façon... (en incluant un fichier de config different selon la langue)

Citation :Et si je veux mettre une varaible dans mon texte?
Je te conseil de regarder là...
http://de3.php.net/manual/fr/function.sprintf.php



et ton body il est ou?
Code PHP :
<?php 
<html>
<
head>
<
title>Espace Jeu WAR FACTORY</title>
</
head>

<
p align="center">




Sinon pour le calcul du temps de generation je te conseil de te creer une fonction dans un fichier de fonction à part que tu inclueras dans chacune de tes pages... Je supposes que tu n'affiches pas le temps generé que pour l'attaque...
Ainsi il te suffira de faire un lancement de ta fonction au debut de ton script
et un arret à la fin
Pour ce cas précis l'utilisation des classes peut etre utiles pour que les 2 fonction ai accés à la valeur temps Smile
donc à la fin il faudrait arriver à un trucs
Code PHP :
<?php 
require_once('time_generated.class.php');
$temps=new time_generated();
$temps->lancer_compteur();

//Ton script ...

$temps->arreter_compteur();
echo
$temps->compteur;
Ce systeme te permetrait en plus de pouvoir optimiser tes scripts au niveau de leur temps de generatuion en regardant ce qui prend le plus de temps Smile(et oui rien ne t'empeche de deplacer $temps->lancer_compteur(); et $temps->arreter_compteur(); ou meme d'en creer de nouveau)

En tout cas bravo pour la tentative de separation de la vue, des données et de l'action du script. (en dehors des echo des fonctions c'est en bonne voie)
Et l'utilisation des fonctions c'est bien sauf que dans ce cas précis et avec toutes tes variables global tes fonctions sont inutile... ( dsl )
L'interet des fonction c'est quand meme de les utiliser plusieurs fois et dans plusieurs endroit, là avec toutes ces variables global c'est pas possible!
Et c'est pour çà que les fonctions doivent etre le plus independante possible d'un script (en dehors des parametres). Et c'est aussi pour çà qu'il vaut mieux les mettre dans un fichier de fonction

Bon voilà, bon faut dire que j'ai pas regarder le code meme, j'ai pas eu le courage, j'ai donc fait des remarques uniquement sur la structure et pas sur l'action reel du code...