JeuWeb - Crée ton jeu par navigateur
Problème codage jeu php - 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 : Problème codage jeu php (/showthread.php?tid=1195)

Pages : 1 2 3


Problème codage jeu php - draknight - 19-05-2007

Bonjour j'ai deux truc pour mon jeu en php que je ne vois pas comment faire.
Tout d'abord je ne vois pas comment faire pour que par exemple on ne peut avoir plus de cent ressource. J'ai cherché dans ma tête et sur le net mais rien.
Sinon j'ai fais un système pour engager des troupes mais il ne marche pas. Comment fonctionne le votre? Avez vous des exemples?


RE: Je sais pas comment faire. - Reaven - 20-05-2007

slt,

je suis débutant en php mais je peux essayer de répondre à ta première question:

draknight a écrit :Tout d'abord je ne vois pas comment faire pour que par exemple on ne peut avoir plus de cent ressource.

Essaye ajoutant cette condition :

Citation :if ($donnees['ressources']==100)
{
echo '<p>Vous avez le maximum de ressources possible!</p>'
}

Voilà essaye ça si tu l'as pas déjà fait normalement quand ton joueurs aura atteint 100 ressources, ça affichera "Vous avez le maximum de ressources possible!"

J'espère que je t'ai un peu aidé sinon attend peut-être que quelqu'un de plus expérimenté te réponde.

++


RE: Je sais pas comment faire. - draknight - 20-05-2007

Oui mais après ça n'empechera pas les ressources de montés non?


RE: Je sais pas comment faire. - Harparine - 20-05-2007

Y a de l'idée, mais il ne faut pas seulement prévenir le joueur : il faut aussi limiter vraiment ses ressources. Donc le test ressemblerait plus à :
Code PHP :
<?php 
if ($ressources > 100) {
$ressources = 100;
}
... Ce qui signifie tout simplement, "si $ ressources est supérieur à 100, alors $ressources vaut 100 (le max)".

Pour engager des troupes, le mieux est d'utiliser 3 tables (mon truc est peut-être pas ce qu'il y a de plus pro, mais les "vrais" développeurs corrigeront. Moi je ferais ça comme ça :

- 1 table joueurs. (tu y accèdes peu et tu récupères les infos principales dans la superglobale de session)
- 1 table profil_troupes. (on y accède peu si c'est possible, il peut être intéressant de mettre ces infos directement dans un fichier XML ou un page php appelée depuis le script principal, pour limiter les accès à la base de données.)
- 1 table troupes_joueurs.

Ca ressemblerait à ça, en gros :

[Image: sanstitre5lc4.png]

Et dans le code, c'est un truc comme ça :

Code PHP :
<?php 
//On récupère les infos importantes sur le joueur
if (isset($_SESSION['id'])) {
$idJoueur = $_SESSION['id'];
$nom = $_SESSION['nom'];
$argent = $_SESSION['argent'];
$niveau = $_SESSION['niveau'];
}
else {
//Sinon, on affiche un message d'erreur et on arrête le script...
}

//On récupère les caractéristiques de la troupe demandée.
//on considère que le joueur a envoyé ces infos par formulaire, depuis une page de recrutement
if (isset($_POST['id_troupe'])) {
//On fait normalement d'autres vérifs
$idTroupe = $_POST['id_troupe']; //le type de troupes demandées
$nbTroupe = $_POST['nb_troupe'];

//On récupère les infos dans la table profil_troupes
// ----Connexion BDD----
$requete = mysql_query("SELECT cout FROM profil_troupes WHERE id='".$idTroupe."'")
// Ici, on a besoin que du cout, mais on pourrait récupérer plus
$troupe = mysql_fetch_array ($requete);
$coutTotal = $troupe['coup'] * $nbTroupe;
if (
$coutTotal <= $argent) {
echo
"Vous n\'avez pas assez d'argent !";
// Arrêt du script
}
// ... requête à la table joueur pour retirer du pognon ...
// ... mais je ne vais pas le faire

//On initialise les autres valeurs
$blessure = 0;
$moral = 100;
$xp = 0;

// ... on enregistre les donnees dans la table troupes_joueurs
// avec un simple INSERT.
mysql_query("INSERT INTO troupes_joueurs VALUES('', '".$idJoueur."', '".$idTroupe."', '".$nbTroupe."', '".$blessure."', '".$xp."', '".$moral."')");

// ----Deconnexion BDD----
}

Voilà, c'est déjà une piste pour un début. Avec cette méthode, les troupes sont uniques mais on peut faire une table troupes_joueurs beaucoup plus légère...

Enfin, là, c'est incomplet, il faudrait faire des tas d'autres tests pour avoir quelque chose de correct. Les gens meilleurs que moi corrigeront sans doute quelques trucs Wink

@+


RE: Je sais pas comment faire. - draknight - 20-05-2007

Bon je vais bien lire tout ce que tu ma dit et je redit si j'ai des problème, merci à vous deux.

Edit:
Pour le moment mon script que j'ai réussi à corrigé partielement marche mais ne met pas a jour la bdd et je ne vois pas pourquoi. Voici le script:
Code PHP :
<?php 
if (isset($_POST['ref_ouvrier']))
{
//Verification Si POST existe
if ($_POST['ref_ouvrier'] != NULL AND $_POST['ref_ouvrier'] != 0)
{
//Verification Si POST différent de NULL
$ref_ouvrier = $_POST['ref_ouvrier'];

$query_1 = 'SELECT * FROM ouvrier WHERE id='.$ref_ouvrier.'';

$requete_1 = mysql_query($query_1);

$resultat_1 = mysql_fetch_array($requete_1);

$ancien_nombre_ouvrier = $resultat_1['nombre_ouvrier'];
$engagement_ouvrier = 1;
$nouveau_nombre_ouvrier = $ancien_nombre_ouvrier + $engagement_ouvrier;
mysql_query("UDAPTE ouvrier SET nombre_ouvrier='".$nouveau_nombre_ouvrier."' WHERE ref_ouvrier='".$ref_ouvrier."'");

//mysql_query('UDAPTE ressource SET nombre_ressource='.$nouveau_nombre_ressource.' WHERE nom_ressource='Céréales'');
echo $_POST['ref_ouvrier']; // Qui affiche 1
echo $ancien_nombre_ouvrier; // Qui affiche 1
echo $engagement_ouvrier; // Qui affiche 1
echo $nouveau_nombre_ouvrier; // Qui affiche 2
}
//Si POST est égal à NULL
else
{
echo
'Aucune troupes achetés : <a href="engagement.php">Retour</a>';
}
}
//Si POST n'existe pas
else
{
echo
'Aucune troupes achetés : <a href="engagement.php">Retour</a>';
echo
$_POST['id'];
}



RE: Je sais pas comment faire. - Plume - 20-05-2007

Bonjour ^^

Tout d'abord, j'aimerais que tu trouves un titre plus cohérent à ton topic. Merci Smile

Ensuite, j'vois que Harparine se met aux schémas, tableaux itout itout Big Grin

______________________________________________________

Harparine, l'id dans ta troisième table est indispensable ?

Je crois que tu t'es trompé dans la condition suivante :
Code PHP :
<? if ($coutTotal <= $argent) ?>
Tu ne voulais pas faire plutôt l'inverse ?

Le commentaire suivant est faux :
Code PHP :
<? 
// ----Connexion BDD----
$requete = mysql_query("SELECT cout FROM profil_troupes WHERE id='".$idTroupe."'")
?>
Je crois comprendre que ce code a été taper à la va vite juste pour l'exemple ^^ Parce que sinon, je te conseille de rajouter un ';' à la fin Smile
Dans cette requète d'ailleurs, n'encadre pas $idTroupe par des apostrophes, ce n'est pas une chaine de caractères, mais un entier.

______________________________________________________

Draknight, je ne sais pas si le code que tu as mis es complet car il ne figure pas la connexion à la base de données. J'espère que tu l'as faite plus haut ^^

Je crois qu'il y a une incohérence entre tes deux requètes :
Code PHP :
<?
$query_1
= 'SELECT * FROM ouvrier WHERE id='.$ref_ouvrier.'';
[..]
mysql_query("UDAPTE ouvrier SET nombre_ouvrier='".$nouveau_nombre_ouvrier."' WHERE ref_ouvrier='".$ref_ouvrier."'");
?>
Dans l'une tu prends en référence l'id, dans l'autre un attribut appelé `ref_ouvrier`.

Et même remarque que pour Harparine concernant les entiers Smile

@ tchaOo°


RE: Je sais pas comment faire. - draknight - 20-05-2007

La connexion est comprise dans un include. Donc oui je l'ai fais. Et pour la requête deux j'ai oublié d'enlevé les "" mais ça marche pas non plus, je l'ai avais rajouté pour voir si ça marche. Mais rien aucune mise à jour.

Code PHP :
<?php 
mysql_query
('UDAPTE ouvrier SET nombre_ouvrier='.$nouveau_nombre_ouvrier.' WHERE ref_ouvrier='.$ref_ouvrier.'');



RE: Je sais pas comment faire. - Mysterarts - 20-05-2007

Toujours le même débat pour l'id de troupes_joueurs ^^
Sinon, je pense que ce que voulais dire Harpa par : // ----Connexion BDD---- signifie justement qu'ici, il faut mettre la connection, et non pas que ce qui suit désigne la connection...
Si tu n'as aucune erreur mysql, alors il y a des chances que tu es effectivement oublié la connection ^^ Sinon, penser à mettre un
or die(mysql_error())
avant le point virgule des requêtes qui ne fonctionne pas...

Au passage, pas mal du tout tes images Harpa !

Mysterarts,


RE: Je sais pas comment faire. - draknight - 20-05-2007

J'ai fais ce que tu ma dit et effectivement il y à une erreur: voici ce qu'il affiche :
Erreur de syntaxe près de 'UDAPTE ouvrier SET nombre_ouvrier=2 WHERE ref_ouvrier=2' à la ligne 1


Par la voix du saint esprit le code décide enfin de fonctionner, je remercie tout ceux qui m'ont aidés.


RE: Je sais pas comment faire. - draknight - 20-05-2007

J'ai trouvé une nouvelle erreur, je pensse qu'elle viens de ce script :

Code PHP :
<?php
include('include/mysql.php');
?>

<?php
$production_base
= 0.005;
$query_1 = 'SELECT * FROM ressource LEFT JOIN ouvrier ON ressource.ref_ressource = ouvrier.ref_ouvrier ';

$requete_1 = mysql_query($query_1);

while (
$resultat_1 = mysql_fetch_array($requete_1))
{
$calcul_ressource = ((time() - $resultat_1['timestamp']) * $resultat_1['nombre_ouvrier'] * $production_base) + $resultat_1['nombre_resource'];

if (
$calcul_ressource > 500)
{
$calcul_ressource = 500;
}
mysql_query('UPDATE ressource SET timestamp='.time().', nombre_resource='.$calcul_ressource.'')or die(mysql_error());

$affiche_ressource = floor($calcul_ressource);

echo
' |<b> ' ,$resultat_1['nom_ressource'], ' : </b>'.$affiche_ressource;

}

mysql_close();
?>
Le problème est que même après modification du nombre de ressource pour mes céréales par exemple, si j'ai disons :
Bois : 18 | Pierre : 18 | Céréales : 158 | Argile : 18
Après actuatlisation de la page, les céréales retomberont directement au nombre de ressource identique au autre. Il ne peut jamais avoir de différence et je ne vois pas pourquoi, avez vous une solution?