JeuWeb - Crée ton jeu par navigateur
systeme de tour - 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 : systeme de tour (/showthread.php?tid=1990)

Pages : 1 2


RE: systeme de tour - Plume - 09-11-2007

Citation :n'offuse
"ne fusse" Chiant le français ^^


RE: systeme de tour - lecodeur - 10-11-2007

c important que ts les comptes soit a jour en meme temps connecter ou pas. je n'utiliserai pas cron mais les timestamps.
mon probleme c'est que je ne comprend pas comment demander au serveur de verif chak membres pour l'attribution des ressources.


RE: systeme de tour - zneman - 12-11-2007

Un systeme de tour pour mettre a jour les données peut être utile si tu dois afficher toutes les ressources en tant réel dans un classement par exemple Wink
Sinon, tu devrais faire en sorte que les ressources d'un joueur se mettent a jour lors de:
- espionnage d'un joueur
- quand un jour se connecte
- quand un joueur clic sur la fiche d'un autre seigneur pour voir ses ressources
- quand un joueur attaque un autre.

Bien sur, ce n'est que des exemples mais je le redis, si tu n'as pas de systeme ou l'on voit les ressources de tous les joueurs en temps réel, un tel script ne sert a rien, tu va "user" le serveur pour rien la Big Grin


RE: systeme de tour - lecodeur - 15-11-2007

je vais faire en sorte que les ressourcesse mettes a jour quand le joueurs concerné se connect se sera plus simple.


RE: systeme de tour - Shidame - 15-11-2007

Citation :Un systeme de tour pour mettre a jour les données peut être utile si tu dois afficher toutes les ressources en tant réel dans un classement par exemple
la encore suffit de les mettre a jour au chargement du classement.


RE: systeme de tour - Zamentur - 15-11-2007

Shidame a écrit :
Citation :Un systeme de tour pour mettre a jour les données peut être utile si tu dois afficher toutes les ressources en tant réel dans un classement par exemple
la encore suffit de les mettre a jour au chargement du classement.
Tout depend de la complexité du script de mise à jour.
Si çà demande beaucoup d'appel (en l'occurence sur ce qui est présenté je pense que c'est possible à faire en un seul et unique appel sans boucle ni rien) ben là tu peux pas faire çà car le classement mettra du temps à s'afficher...

Moi j'ai 2 autres solutions pas cité, l'idée étant de lancer le script sans que le joueur s'en apperçoivent afin de s'afranchir du cron.
Pour faire çà javascript peut etre d'une grande aide, mais une simple iframe caché (je sais c'est pas beau mais pourquoi pas) fais la meme chose...
Mais là aprés quelques tests ,je me rend compte qu'il suffit de placer un header de redirection suivis d'un echo afin d'envoyer le header de redirection, puis d'executer une action:

Code PHP :
<?php 
header
("Location: http://www.monsite.com/");
echo
'e';
for (
$i=0;$i<100000;$i++)
$db->query("INSERT INTO test (valeur) VALUES ('$i')");
En tout cas sur mon hebergeur çà marche!
Par contre le "echo 'e';" est utile...
Celà dit çà utilise quand meme le serveur, puisqu'il y a execution d'autre action en meme temps (contrairement à un cron ou on n'en sait rien).
Enfin çà semble quand meme bien marcher

Donc là il suffit de rajouter un test pour que la mise à jour soit faite toute les 4h


Celà dit dans le cas present comme l'on dit les autre c'est inutile de le faire toute les 4h enfin apparement.


RE: systeme de tour - Dradge - 15-11-2007

J'aimerais connaitre les tables de la Bdd qui entrent en jeu pour l'ajout de ressources car il y a peut-etre moyen d'exécuter ton tour en une seule requête SQL.
Il me faudrait aussi ta version de MySQL car je crois que ce que je raconte n'est pas possible depuis longtemps.
Je pars me renseigner.


RE: systeme de tour - Zamentur - 15-11-2007

ben si moi aussi j'avais cette impression là et je crois qu'avec de simple jointure c'est possible...
Enfin aprés çà dependde la construction

Mais c'est pas parce qu'il ya qu'une requete que c'est rapide...(enfin pas forcement dans l'absolue...


RE: systeme de tour - Dradge - 15-11-2007

J'exécute assez souvent des grosses requetes sur JediWar, et les temps d'exécution sont impressionants.

Bon, vu que j'ai le temps maintenant, je vais expliquer comment faire cette maj de ressources en une seule requete.

Donc tout d'abord les tables de la base de données :

ressources(joueur, ress1, ress2, ress3)
production(joueur, prod1, prod2, prod3)
coeffs(coef1, coef2, coef3)

Donc dans ressources on a pour chaque joueur ses ressources actuelles.
Dans production on a le nombre d'unités de production par ressource
Dans coeffs on a la production d'une unité de production par tour.

Donc j'ai choisi de faire du tout SQL. Cependant les coefficients de production peuvent être mis dans un fichier de configuration (je le conseillerai même)

UPDATE ressources, coeffs NATURAL JOIN production SET ress1=ress1 + coef1 * prod1, ress2=ress2 + coef2 * prod2, ress3=ress3 + coef3 * prod3

Dans cette requete MySQL fait une jointure entre ressources et coeffs (sans utiliser de champ commun) puis une jointure naturelle sur production. (Si vous ne comprenez pas la jointure naturelle dites le).

Donc pour chaque joueur ca ajoute à chaque ressource, la quantité produite.

Bien entendu cette requete est à exécuter via une tache cron.
En espèrant avoir été clair Smile


RE: systeme de tour - lecodeur - 13-12-2007

desoler de mon absence, j'etait sur mon script don voici le code:

Code PHP :
<?php


mysql_connect
('localhost', '****', '****');
mysql_select_db('****');

$rep_stamp = mysql_query('SELECT * FROM der_tour') or die(mysql_error());
$serv = mysql_fetch_array($rep_stamp);
//select table member
$rep = mysql_query('SELECT * FROM member');


$stamps = time();



// si il s'est ecouler une heure depuis le dernier tour enregistrer du site(petite maj)
if($stamps - ($serv['nrm_tour'] + 3600) >= 1 && $stamps - ($serv['nrm_tour'] + 3600) < 3600)
{
while(
$serveur2 = mysql_fetch_array($rep))
{
// declaration de toute les variables dues aux calcules
$nbe_carri = $serveur2['carriere'];

$or = $serveur2['meleas'];
$pop = $serveur2['population'];
$bois = $serveur2['bois'];
$nbe_frm = $serveur2['ferme'];
$mine_or = $serveur2['mine_or'];
$zbuch = $serveur2['zone_bucheron'];
$nourriture = $serveur2['nourriture'];
$pierre = $serveur2['pierre'];
$fer = $serveur2['damastrium'];
$charbon = $serveur2['carbonium'];
$pts_attente = $serveur2['pts_attente'];
$points = $serveur2['points'];

//matieres premieres et verifs
$pier_carri = 24;
$boi_buch = 48;
$nour_aj = 10;

$ajout_pierre = $nbe_carri * $pier_carri;
$ajout_bois = $zbuch * $boi_buch;
$ajout_nour = $nbe_frm * $nour_aj;
//verif de bouf
$verif_nour = $ajout_nour - $pop;
// si la soustraction de l'ajout de bouffe moin la pop vaut moin de 0 alors...
if($verif_nour < 0)
{
//on enleve au joueur la somme de la soustraction de la variable $verif_nour de sa reserve de bouf
$verif_nour2 = $nourriture - $verif_nour;
}
//sinon $verif_nour est > a 0 alors on ajoute la somme de cette variable
else
{
$verif_nour2 = $nourriture + $verif_nour;
}

//ajout et calcule du meleas
$mel_aj = 150;
$ajout_mele = $mine_or * $mel_aj;
$add_mele = $or + $ajout_mele;

//maj des donnees joueurs
$req_up2 = mysql_query('UPDATE member SET points="'.$pts_attente.'", pierre="'.$ajout_pierre.'", bois="'.$ajout_bois.'", nourriture="'.$verif_nour2.'", meleas="'.$add_mele.'" WHERE member');

}
// fin de la boucle des verifs on peut passer a la maj de l'heure

//actualisation de l'heure pour la petite maj(nrm_tour)
$req_up1 = mysql_query('UPDATE der_tour SET nrm_tour="'.$stamp.'" ');
}
elseif(
$stamp - ($serv['gros_tour'] + 14400) >= 1 && $stamp - ($serv['gros_tour'] + 14400) < 3600)
{
while(
$serveur2 = mysql_fetch_array($rep))
{
$nbe_carri1 = $serveur3['carriere'];

$pop = $serveur2['population'];
$or = $serveur2['meleas'];
$bois = $serveur2['bois'];
$nbe_frm = $serveur2['ferme'];
$mine_or = $serveur2['mine_or'];
$zbuch = $serveur2['zone_bucheron'];
$nourriture = $serveur2['nourriture'];
$pierre = $serveur2['pierre'];
$fer = $serveur2['damastrium'];
$charbon = $serveur2['carbonium'];
$pts_attente = $serveur2['pts_attente'];
$points = $serveur2['points'];

//matieres premieres et verifs
$pier_carri = 96;
$boi_buch = 192;
$nour_aj = 40;

$ajout_pierre = $nbe_carri * $pier_carri;
$ajout_bois = $zbuch * $boi_buch;
$ajout_nour = $nbe_frm * $nour_aj;
//verif de bouf
$verif_nour = $ajout_nour - $pop;
// si la soustraction de l'ajout de bouffe moin la pop vaut moin de 0 alors...
if($verif_nour < 0)
{
//on enleve au joueur la somme de la soustraction de la variable $verif_nour de sa reserve de bouf
$verif_nour2 = $nourriture - $verif_nour;
}
//sinon $verif_nour est > a 0 alors on ajoute la somme de cette variable
else
{
$verif_nour2 = $nourriture1 + $verif_nour;
}

//ajout et calcule du meleas
$mel_aj = 600;
$ajout_mele = $mine_or1 * $mel_aj;
$add_mele = $or + $ajout_mele;
}
//fin de boucle

//maj de l'heure sur la table des tours du site
$req_up3 = mysql_query('UPDATE der_tour SET nrm_tour="'.$stamp.'", gros_tour="'.$stamp.'" WHERE gros_tour');
//maj des donnees joueurs
$req_up4 = mysql_query('UPDATE member SET points="'.$pts_attente1.'", pierre="'.$ajout_pierre1.'", bois="'.$ajout_bois1.'", nourriture="'.$verif_nour3.'", meleas="'.$add_mele1.'"');
}
//sinon...
else
{
//... rien ne se passe(pas de maj)
}
?>

Mon probleme ce script etant imcomplet(pour le test) $, je ne sais pas comment attribuer les calcul a chaque joueurs(while etant"normalement" là pour sa, non ?).

la base en ce qui concerne les tables dues au script on les noms suivants:
-der_tour (inscription de l'heure du tour du site)
-member(info perso, ressources, liens vers alliances, bats etc...)