JeuWeb - Crée ton jeu par navigateur
Eviter de définir les coûts - 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 : Eviter de définir les coûts (/showthread.php?tid=3489)



Eviter de définir les coûts - Reaven - 29-12-2008

Bonjour,

Suite à l'absence de mon collaborateur, je m'ennuie car j'attend son retour pour continuer mon projet Wink. C'est pourquoi j'ai décidé de m'occuper en écrivant un petit script pour éviter de définir des coûts pour chaque niveau de bâtiments, de troupes ou autre.

Vous allez peut-être dire "Il y a déjà un tuto la dessus!". Eh bien je sais ^^. Je voulais juste vous faire part de ma façon de traiter le problème.

Donc sans plus tarder passons au tuto.

Conception de la BDD

Pour ce point ci rien de bien compliqué. Vous allez créer un table "members" dans votre BDD.

Ajoutez-y les champs suivants:
  • member_id INT PRIMARY
  • member_level_scierie SMALLINT NOT NULL

Ca parait petit mais c'est suffisant pour ce tuto. Par après vous pourrez rajouter des champs comme bon vous semble. Le but n'est pas ici de vous expliquer comment créer un table "members" complète mais de vous expliquer comment définir des coûts autrement qu'en encodant tout pour chaque niveau.

Passons à la suite Wink !

Création du script

Comme normalement ce code devrait se trouver dans un espace membre, il est bon de commencer par ouvrir une session et de se connecter à la BDD.

Code PHP :
<?php
session_start
();
mysql_connect("localhost","root","");
mysql_select_db("Votre BDD");

Voilà une bonne chose de faite. Pour continuer il va nous falloir aller chercher nos données dans la BDD.

Petite précision tout de même, ma variable $_SESSION à moi contient l'id du joueur. Libre à vous de changer Wink .

Code PHP :
<?php 
$niveau_scierie
= mysql_query("SELECT member_level_scierie FROM members WHERE member_id='".$_SESSION['id']."'")or die(mysql_error());
$retour= mysql_fetch_array($niveau_scierie);

Pour la partie du code qui suit j'ai tout simplement créer une condition qui vérifie si on a cliqué sur le lien construire ou nom. Si c'est le cas, on met à jours la BDD. Dans le cas contraire, on ne fait rien.

Cette partie vous semblera plus claire à la fin du tuto Wink

Code PHP :
<?php 
if(isset($_GET['construire'])){
$niveau_atteint= $retour['member_level_scierie'] + 1;
mysql_query("UPDATE members SET member_level_scierie='".$niveau_atteint."' WHERE member_nickname='Valkan'")or die(mysql_error());
}

Ce que l'on va faire maintenant se sera créer les variables que l'on va utiliser par la suite ainsi qu'un tableau qui contiendra les coûts pour chaque niveau.

Ah j'allais oublier, pour le tuto je n'est utilisé qu'une seule ressource qui est le bois. Mais le tuto marche avec plusieurs ressources. Ca je vous laisse y réfléchir Wink .

C'est parti pour la création de nos variable et de notre tableau !

Code PHP :
<?php 
$niveau_actuel
= $retour['member_level_scierie'];
$niveau_suivant= $niveau_actuel + 1;

$cout_level_1_bois=33;
$coef_cout_bois=1.55;
$niveau_max= 30;

$cout_level_bois= array();

Quelques petites explications sont nécessaires je pense pour cette partie du code surtout au niveau du bloc des 3 variables au centre.

La variable $cout_level_1_bois est simplement une variable que j'ai créer pour avoir un point de départ pour les coûts. Vous pouvez changer comme vous le souhaitez la valeur de cette variable.

La variable qui suit, $coef_cout_bois est un coefficient que j'ai utilisé pour faire le calcul qui va suivre. Pour les moins doués en math ou les moins avancés, je vous propose de ne pas essayer de conprendre le calcul qui suivra surtout si vous ne connaissez pas les suites géométriques Smile .

Enfin la troisième variable me sert simplement à mettre une limite au nombre de niveaux. J'ai choisis 30 mais vous pouvez en créer autant que vous voulez Wink .

Allez on continue avec la dernière partie du code.

Code PHP :
<?php 
for($i=1; $i<=$niveau_max; $i++) {
$cout_level_bois[$i]= ceil($cout_level_1_bois*pow ($coef_cout_bois,($i-1)));
}

echo
'Votre scierie est au niveau '.$niveau_actuel.'.<br>
Cout niveau '
.$niveau_suivant.': '.$cout_level_bois[$niveau_suivant].' unités de bois<br><br>
<a href="test-suite-geo.php?construire=batiment">Construire</a>'
;

?>

Vous aurez peut-être remarqué que mon tableau que j'ai créée tout à l'heure était vide. Et bien c'est grâce à ma boucle que je vais le remplir. Je vais calculer par une formule tirée de mon cours de math chaque coûts en bois de chaque niveau.

Ensuite la fin du code n'est pas très compliquée, je fais un echo pour afficher mon texte avec mes données et un lien avec un $_GET "construire" qui va me servir à vérifier si je dois modifier le niveau actuel de la scierie ou non.

Voilà c'est la fin de ce tuto à mon avis pas trop compliqué. Je suis ouvert à toute critique constructive.

Cordialement,
Dark Angels


RE: Eviter de définir les coûts - wild-D - 29-12-2008

pour la critique constructive (on dira ça comme ça Big Grin)

Tu pouvais pousser le raisonnement jusqu'au bout.

tu garde le principe; mais au lieu de ce tableau; tu crées une bêbête fonction.
genre:

function scierie_cout_construction($niveau){
$cout_level_1_bois=33;
$coef_cout_bois=1.55;

return ceil($cout_level_1_bois*pow ($coef_cout_bois,($niveau-1)));
}

c'est quand même bien mieux.


après pour les critique p-e un peu moins constructive Confusediffle:

quitte à vouloir donner un exemple pratique; autant donner un exemple qui tienne un peu mieux la route.

y a un truc qui me hérisse un peu le poil : vérifier, valider, vérifier, valider...
-> j'aime bcp le bout de code qui envoie la requête sql qui balance la construction sans prendre en compte le niveau max que tu fixe à 30 dans ton exemple (je parle même pas que dans la réalité d'autre paramètre à prendre en compte comme la présence de ressources nécessaire à la construction... ben oui on calcul un coût; mais on fait même pas la vérif de la disponibilité du blé avant de construire -_-')
-> et dans la même logique; une fois le niveau max atteint je parle pas du dérapage de ton echo avec un tableau qui ne contiendra pas l'indice demandé.

bref, un exemple soit c'est un bon exemple (ou tu montre l'exemple) soit ... basta.


RE: Eviter de définir les coûts - Reaven - 30-12-2008

Le but de mon tuto n'est pas de DONNER un script pour un système de construction mais d'expliquer comment éviter de définir des couts. Bien sûr mon script n'est pas complet et c'est voulu.

C'est une base pour un code de construction où on peut rajouter des améliorations, points que j'ai hésité à traiter. Ensuite tu dis qu'il faudrait refaire certaines partie de mon code, là encore j'ai précisé que celui-ci pouvait être modifier à volonté. Encore une fois c'est un script de base pour débutant en quête de connaissances qui pourraient s'entrainer à l'améliorer et à le modifier à leur manière.

Cordialement,
Dark Angels