Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/01/2007, 21h51   #1
Invité de passage
 
Inscription : janvier 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 8
Points : 1
Points : 1
Par défaut [Conception] Jeu en ligne (augmenter les ressources automatiquement)

Bonjour,
avec des copains nous nous sommes décidés à faire un jeux en ligne en php (du type ogame ou travian pour ceux qui connaissent).

Mais nos maigres connaissances butent déja pour la mise à jour des ressources à chaque actualisation de la page par l'utilisateur.

Je m'explique, pendant l'inscription les ressources sont définies à 800 (pour les 4 types de ressources), mais nous cherchons à ce que ces ressources augmentent en fonction du temps (et que l'UPDATE se fasse au chargement de la page par l'utilisateur).

Je pense qu'il faudrait utiliser la commande "date" avant et apres et augmenter les ressources en fonction du temps passé entre les deux actualisations , mais ca m'a l'air bien compliqué. Connaissez vous plus simple ?



Merci d'avance
oklama est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 22h02   #2
Membre éprouvé
 
Avatar de Zenol
 
Jérémy Cochoy
Étudiant
Inscription : novembre 2004
Messages : 691
Détails du profil
Informations personnelles :
Nom : Jérémy Cochoy
Âge : 21

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2004
Messages : 691
Points : 483
Points : 483
Citation:
Envoyé par oklama
Bonjour,
avec des copains nous nous sommes décidés à faire un jeux en ligne en php (du type ogame ou travian pour ceux qui connaissent).

Mais nos maigres connaissances butent déja pour la mise à jour des ressources à chaque actualisation de la page par l'utilisateur.

Je m'explique, pendant l'inscription les ressources sont définies à 800 (pour les 4 types de ressources), mais nous cherchons à ce que ces ressources augmentent en fonction du temps (et que l'UPDATE se fasse au chargement de la page par l'utilisateur).

Je pense qu'il faudrait utiliser la commande "date" avant et apres et augmenter les ressources en fonction du temps passé entre les deux actualisations , mais ca m'a l'air bien compliqué. Connaissez vous plus simple ?



Merci d'avance

Soit tu a un programme sur le serveur qui se charge d'actualiser la base de donnée, et fait donc evoluer les resources même quand tu n'est pas connecter (Ex : Ogame)

Soit tu fait apelle à un script qui recalcule les resources à chaque actualisation/Interraction(si les autres joueurs veulent récupèrer des informations sur un autre joueur) avec le compte en vérifiant une diférence de date (On peut dire que c'est actualiser toute les heures?) et si la diférence dépasse une certaine valeur, alors on effectu une mise à jour (et on stoque le moment présent)
Dans ce cas un timestamp est ce qu'il me semble le plus adapter.
Zenol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 22h12   #3
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
Citation:
Envoyé par oklama
commande "date"
la fonction date() n'est utilisé que pour transformer un timestamp, donné par time().

C'est donc beaucoup plus simple pour vous de travailler directement sur la valeur du time() sachant qu'elle s'exprime en seconde.

Bonne chance pour votre projet.
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 22h25   #4
Invité de passage
 
Inscription : janvier 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 8
Points : 1
Points : 1
Merci à vous pour vos réponses rapides et précises.

Je pense que dans ma situation, comme le dit SpiritOfDoc, il serait plus adapté de faire un programme qui se charge d'actualiser ma base de donnée, mais je ne sais pas comment m'y prendre , alors je vais me rabattre vers time().

Je vous tient au courant, merci de votre soutient.
oklama est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 22h34   #5
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
J'ai rien dit de telle :p.

Par contre tu peux très bien utiliser les sessions, ça devrait te permettre de bien gérer les temps sans utiliser (de trop) ta BDD.
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 22h55   #6
Invité de passage
 
Inscription : janvier 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 8
Points : 1
Points : 1


Excuse mon manque de connaissance, mais que veus tu dire par la ? J'utilise les sessions pour transmettre les variables, tu penses qu'il serait préférable de stocker les valeures des ressources dans les variables sessions ? parce que ca me parait plutôt difficile, il faudrait alors que l'UPDATE se fasse quand l'utilisateur appuie sur "deconnecter", ce qui entrainerai pas mal de contrainte au niveau du jeux.
J'ai cherché si il y avait une fonction time() spécifique aux sessions, mais je n'ai pas trouvé.
oklama est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 22h58   #7
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
Les sessions ne sont pas utiliser que pour garder un login en mémoire
Code :
$_SESSION['time'] = time();
Ceci te met en variable session le timestamp.

Et je ne vois pas vraiment le rapport entre le lien déconnexion et les sessions (comme dit plus haut, ça n'a pas d'utilisation spécifique :p).

Bonne soirée.

[EDIT] : Une belle FAQ et des beaux tutoriaux
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 23h05   #8
Invité de passage
 
Inscription : janvier 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 8
Points : 1
Points : 1
J'ai compris, merci de ton aide !!
je vais essayer de faire quelques chose de propre avec les sessions.

Citation:
Et je ne vois pas vraiment le rapport entre le lien déconnexion et les sessions (comme dit plus haut, ça n'a pas d'utilisation spécifique :p).
En fait, je pensais que tu me conseillais de stocker les ressources dans les variables sessions pour économiser ma bdd, et que la mise à jour avec la bdd se ferai lors de la déconnexion de l'utilisateur.

Bonne soirée à toi aussi.
oklama est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 10h22   #9
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 251
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 251
Points : 1 514
Points : 1 514
salut,
je suis pas sur de ce que j'avance :

si j'ai bien compris, tous les changements des stats de ton perso, ressources... sont stocké dans tes variables de session et quand on clique sur "déconnexion", ca met a jour la bdd...
mais si c'est comme ca que tu fais, il y aura un soucy si le user quit la fenetre sans cliquer sur "déconnexion" nan ?
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 13h20   #10
Membre éprouvé
 
Avatar de Zenol
 
Jérémy Cochoy
Étudiant
Inscription : novembre 2004
Messages : 691
Détails du profil
Informations personnelles :
Nom : Jérémy Cochoy
Âge : 21

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2004
Messages : 691
Points : 483
Points : 483
Citation:
Envoyé par DEMMOTTE
salut,
je suis pas sur de ce que j'avance :

si j'ai bien compris, tous les changements des stats de ton perso, ressources... sont stocké dans tes variables de session et quand on clique sur "déconnexion", ca met a jour la bdd...
mais si c'est comme ca que tu fais, il y aura un soucy si le user quit la fenetre sans cliquer sur "déconnexion" nan ?
Non SpiritOfDoc à dit d'utiliser els session pour mémoriser un timestamp et ainssi mêtre à jour les resources en temp voulut.

mais je rajouterait que dans le cas de l'intervention d'un autre utilisateur sur ce compte de cette utilisateur (exemple : vole de resource d'un autre joueur) cette technique pose certains problèmes.

Pour un programme qui met à jour ta base de donnée, c'était de moi l'idée ^^ Seulement bien qu'aillent de meilleures performances, la réalisation peut s'avèrer plus complexe que celle en PHP si tu n'a pas déjà quelques bases en un langage adapter.

Moi ce que je te conseille (Oui je sais je me répète) c'est de créer une fonction prenant le nom d'un compte qui se charge d'actualiser les resources du comtpe en question et ajoute un timestamp du moment de la mise à jour. par la suite tu fera apelle à elle :
A la connection
Toute les N secondes via un le dernier timestamp de mise à jour que tu a récupèrer dans tes sessions à ta conection et que tu modifira à chaque mise à jour
Durant une interaction sur le comtpe d'un autre utilisateur.
Zenol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 14h23   #11
Membre du Club
 
Inscription : juin 2003
Messages : 46
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 46
Points : 43
Points : 43
On m'avait proposé de réaliser une presque copie de Ogame...je me suis pas lancé parce que c'était vraiment trop de la copie.

Pour en revenir à l'automatisation: executer CRON sur le serveur pour qui recalcule les ressources toutes les 10secondes...à voir ... heu prévoir un gros serveur ;-)
__________________
Gaétan
gaetanc15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2007, 18h00   #12
Invité de passage
 
Inscription : janvier 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 4
Points : 1
Points : 1
Bonjour à tous et bienvenue parmis vous !!!
Je me présente, j'ai 15 ans, bientôt 16.
Moi-même, je suis en train de créer un jeu. Je te le dis honnêtement : je ne suis pas un grand programmeur. Voila tt d'abord l'adresse de mon site (qui risque de changer) :
http://samax69.free.fr/site/login.php
Bon... Il semble encore y avoir du travail, mais vu de loin, je pense qu'il devrait être terminé avant les vacances d'été...
Va jeter également un oeil au forum à cette adresse :
http://zellios-empire.forumactif.com

Comment ais-je fait pour les ressources : je t'envoie directement mon script si tu veux (allez, je suis sympa!!!)

Bien sûr, ma solution est loin d'être la meilleure, mais ça semble fonctionner...

<?php

session_start();

$pseudo=$_SESSION['login']; <------ la tu prends le pseudo du joueur qui vient de de logguer
$pass=$_SESSION['password']; <------son mot de passe


?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<title>ZellioS EmpireS</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
</head>


<body>


<div align="center">
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="Champs.php"><img src="select_chps.gif" width="92" height="92" border="0"></a>_ <a href="Nveau-Site.php"><img src="select_city.gif" width="92" height="92" border="0"></a>_ <img src="select_chps.gif" width="92" height="92">_ <img src="select_chps.gif" width="92" height="92"> <br/>
</p>
</div>

<div align="center"></div>
<div align="center"></div>
<div align="center">
<?php


mysql_connect("http://sql.free.fr", "*****", "*****"); // Connexion à MySQL
mysql_select_db("*****"); // Sélection de la base coursphp
$reponse111 = mysql_query("SELECT * FROM $pseudo WHERE id=25"); // Requête SQL
$données111 = mysql_fetch_array($reponse111);
$nivo_bois = $données111['contenu'];

$reponse112 = mysql_query("SELECT * FROM $pseudo WHERE id=26"); // Requête SQL
$données112 = mysql_fetch_array($reponse112);
$nivo_terre = $données112['contenu'];

$reponse113 = mysql_query("SELECT * FROM $pseudo WHERE id=27"); // Requête SQL
$données113 = mysql_fetch_array($reponse113);
$nivo_fer = $données113['contenu'];

$reponse114 = mysql_query("SELECT * FROM $pseudo WHERE id=28"); // Requête SQL
$données114 = mysql_fetch_array($reponse114);
$nivo_céré = $données114['contenu'];

$reponse115 = mysql_query("SELECT * FROM $pseudo WHERE id=29"); // Requête SQL
$données115 = mysql_fetch_array($reponse115);
$time_bdd = $données115['contenu'];

$reponse116 = mysql_query("SELECT * FROM $pseudo WHERE id=1"); // Requête SQL
$données116 = mysql_fetch_array($reponse116);
$bois = $données116['contenu'];

$reponse117 = mysql_query("SELECT * FROM $pseudo WHERE id=2"); // Requête SQL
$données117 = mysql_fetch_array($reponse117);
$terre = $données117['contenu'];

$reponse118 = mysql_query("SELECT * FROM $pseudo WHERE id=3"); // Requête SQL
$données118 = mysql_fetch_array($reponse118);
$fer = $données118['contenu'];

$reponse119 = mysql_query("SELECT * FROM $pseudo WHERE id=4"); // Requête SQL
$données119 = mysql_fetch_array($reponse119);
$céré = $données119['contenu'];

mysql_close();

$bois=$bois/1000000;

$fer=$fer/1000000;

$terre=$terre/1000000;

$céré=$céré/1000000;

$timestamp_actuel=time();

$temps_ecoule = $timestamp_actuel - $time_bdd;

$prod_bois=$nivo_bois*$nivo_bois*$nivo_bois*2;

$prod_terre=$nivo_terre*$nivo_terre*$nivo_terre*2;

$prod_fer=$nivo_fer*$nivo_fer*$nivo_fer*2;

$prod_céré=$nivo_céré*$nivo_céré*$nivo_céré*4;

$bois_produit= $prod_bois / 3600 * $temps_ecoule;

$terre_produit=$prod_terre/3600*$temps_ecoule;

$fer_produit=$prod_fer/3600*$temps_ecoule;

$céré_produit=$prod_céré/3600*$temps_ecoule;

$boisnv=($bois+$bois_produit)*1000000;

$terrenv=($terre+$terre_produit)*1000000;

$fernv=($fer+$fer_produit)*1000000;

$cérénv=($céré+$céré_produit)*1000000;



mysql_connect("http://sql.free.fr", "*****", "*****"); // Connexion à MySQL
mysql_select_db("*****"); // Sélection de la base coursphp
mysql_query("UPDATE $pseudo SET contenu=$boisnv WHERE id=1"); // Requête SQL
mysql_query("UPDATE $pseudo SET contenu=$terrenv WHERE id=2"); // Requête SQL
mysql_query("UPDATE $pseudo SET contenu=$fernv WHERE id=3"); // Requête SQL
mysql_query("UPDATE $pseudo SET contenu=$cérénv WHERE id=4"); // Requête SQL
mysql_query("UPDATE $pseudo SET contenu=$timestamp_actuel WHERE id=29"); // Requête SQL

mysql_close();

mysql_connect("http://sql.free.fr", "*****", "*****"); // Connexion à MySQL
mysql_select_db("*****"); // Sélection de la base coursphp

$reponse196 = mysql_query("SELECT * FROM $pseudo WHERE id=1"); // Requête SQL
$données196 = mysql_fetch_array($reponse196);
$boisnv = $données196['contenu'];

$reponse197 = mysql_query("SELECT * FROM $pseudo WHERE id=2"); // Requête SQL
$données197 = mysql_fetch_array($reponse197);
$terrenv = $données197['contenu'];

$reponse198 = mysql_query("SELECT * FROM $pseudo WHERE id=3"); // Requête SQL
$données198 = mysql_fetch_array($reponse198);
$fernv = $données198['contenu'];

$reponse199 = mysql_query("SELECT * FROM $pseudo WHERE id=4"); // Requête SQL
$données199 = mysql_fetch_array($reponse199);
$cérénv = $données199['contenu'];

mysql_close();

$boisnv=$boisnv/1000000;

$terrenv=$terrenv/1000000;

$fernv=$fernv/1000000;

$cérénv=$cérénv/1000000;

echo "<p align=\"center\"><img src=\"wood.gif\" width=\"29\" height=\"22\"> $boisnv
<img src=\"2.gif\" width=\"25\" height=\"19\"> $terrenv
<img src=\"3.gif\" width=\"26\" height=\"21\"> $fernv
<img src=\"e53.gif\" width=\"34\" height=\"29\"> $cérénv<br/></p>";

?>
<p>&nbsp;</p>
<div id="Layer1" style="position:absolute; width:200px; height:207px; z-index:1; left: -17px; top: 405px;"><a href="Champs.php"><img src="Login.gif" width="146" height="40" border="0" usemap="#Map">
<map name="Map">
<area shape="rect" coords="2,4,143,38" href="login.php" target="_blank">
</map>
<img src="Inscription.gif" width="146" height="40" border="0" usemap="#Map2">
<map name="Map2">
<area shape="rect" coords="1,2,147,42" href="Form_inscr.php">
</map>
<img src="mode-d'emploi.gif" width="146" height="40" border="0" usemap="#Map3">
<map name="Map3">
<area shape="rect" coords="1,2,147,41" href="http://www.zellios-empire.forumactif.com" target="_blank">
</map>
<img src="Forumb.gif" width="146" height="40" border="0" usemap="#Map4">
<map name="Map4">
<area shape="rect" coords="2,2,146,39" href="http://www.zellios-empire.forumactif.com" target="_blank">
</map>
</a></div>

</div>
</body>
</html>


Te pose pas de questions sur tt ce qui est images et autre, mais je t'envoie ce script à titre d'exemple, pour que tu visualises. D'après moi, la bdd c'est ce qu'il y a de mieux : aucun risque d'erreur, de bug ou autre, aucune perte de données, l'utilisateur n'a pas à cliquer sur le lien "déconnection" avant de quitter le jeu...

Tu te créés une page php "ressources.php", par exemple, dans cette page, tu fais tout ce dont il y a besoin au niveau des ressources, et ensuite, sur chacune des pages de ton jeu (enfin... pas pr l'index et tt, tu gères comme un grand), tu inclus cette page ressources avec la balise include().

PS: tu remarqueras que j'ai fait des divisions et multiplications qui pourront te paraître inutiles (genre /1000000000) mais j'ai eu un p'ti pb avec ma base de données. En effet, j'arrivais pas à enregistrer des nombres décimaux (avec la catégorie "float", ds ma bdd, il ne garde que le premier chiffre après la virgule) alors j'ai arrangé ça en mettant des nombres conséquents ds ma bdd, puis en les divisant pour que l'utilisateur aie un nombre résonnable de ressources.

Bon... J'espère que mon aide saura te satisfaire. Sur ce, slt et à bientôt.

Re-PS : Si ça vs intéresse, toi et tes copains pourriez même vous joindre à moi pour la création du jeu : moi-même, je suis nul en programmation, ce jeu me prend à plein temps et je suis seul pour le créer. Pour me contacter, tu peux m'envoyer un MP de le forum de mon jeu (cf l'adresse plus haut).
subversa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2007, 09h41   #13
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 251
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 251
Points : 1 514
Points : 1 514
salut,
les balise CODE auraient été le bienvenue...
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h25.


 
 
 
 
Partenaires

Hébergement Web