JeuWeb - Crée ton jeu par navigateur
resolution liste d'actions : reinjecter de nouvelles actions? - 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 : resolution liste d'actions : reinjecter de nouvelles actions? (/showthread.php?tid=5282)

Pages : 1 2 3 4 5 6


RE: resolution liste d'actions : reinjecter de nouvelles actions? - Argorate - 25-02-2011

(25-02-2011, 02:43 PM)php_addict a écrit :
(25-02-2011, 12:44 PM)Shidame a écrit : N'y a t'il pas moyen de considérer "attaque" et "retour d'attaque" comme une seule action ? Est ce qu'une attaque engendre toujours un retour d'attaque ?

pas bête...mais pas évident à gérer

C'est exactement ce que je fais dans le cas de l'attaque d'un QG.
Je vois pas le problème?
Tu as une fonction attaque, au lieu de faire attaque(moi sur ennemi) tu fais attaque(moi sur ennemi) et attaque(ennemi sur moi) ^^

Non? Smile


RE: resolution liste d'actions : reinjecter de nouvelles actions? - php_addict - 25-02-2011

(25-02-2011, 02:49 PM)Argorate a écrit : Tu as une fonction attaque, au lieu de faire attaque(moi sur ennemi) tu fais attaque(moi sur ennemi) et attaque(ennemi sur moi) ^^

euh pas certain de comprendre. ta fonction attaque génère donc bien 2 actions finalement

dans mon cas une attaque réussie génère un retour de troupes et une attaque ratée ne génère rien du tout...


RE: resolution liste d'actions : reinjecter de nouvelles actions? - Argorate - 25-02-2011

Il faut décomposer la chose, c'est a dire que tu ne dois pas appelais attaque() mais une fonction plus globale:


function lancerAttaque()
{
attaque($moi, $cible);
attaque($cible, $moi);
}

si tu veux tjs une contre attaque, si ce n'est pas le cas, tu as juste a ajouter les if qui conditionne la chose, non?
Après si ça retourne quelques chose tu le recupères, y a pas de soucis:


function lancerAttaque()
{
$dataAttaque['attaque'] = attaque($moi, $cible);
$dataAttaque['contre-attaque'] = attaque($cible, $moi);
return $dataAttaque;
}

je met des noms comme ça, pour que ce soit explicite, tu peux mettre se que tu veux^^
Fin tu vois se que je veux dire?


RE: resolution liste d'actions : reinjecter de nouvelles actions? - php_addict - 25-02-2011

apres quelques tests:

il semble qu'un SELECT dans une fonction récursive ne pose pas trop de problèmes en terme de temps d'exécution du script...

pour 100 actions résolues en même temps: 0,58 secondes en local.

par contre je n'ai pas pu tester plus de résolutions car:

Fatal error: Maximum function nesting level of '100' reached, aborting!

il semblerais que cela soit un message de Xdebug de zend framework je crois...

j'ai bien tenté d'augmenter cette valeur, mais sans succès (WAMP) et sans succès également en désactivant Xdebug...


RE: resolution liste d'actions : reinjecter de nouvelles actions? - niahoo - 26-02-2011

Je sais pas si c'est vraiment une bonne idée, php n'est pas fait pour de la récursion à l'infini.

Essaie plutot une boucle classique.


RE: resolution liste d'actions : reinjecter de nouvelles actions? - Argorate - 27-02-2011

Il ne faut jamais faire de requêtes dans une boucles (enfin le moins possible).
(HS: attention au temps d'exécution des requêtes, d'une part t'es en local et en plus t'as table n'a pas forcement le bon nombre d'enregistrement par rapport a quand ton jeu sera en service, tu peux avoir des surprises^^)

D'autant plus des select... qu'es ce que tu veux sélectionner? n'y a t-il pas moyen de faire une seul grosse requêtes plutôt?


RE: resolution liste d'actions : reinjecter de nouvelles actions? - niahoo - 27-02-2011

as tu lu le topic ?

on réinjecte des données dans la base au fur et à mesure de l'exécution, on ne peut donc pas faire de "grosse requête" au départ alors que des données viendront s'ajouter ensuite en base de données.


RE: resolution liste d'actions : reinjecter de nouvelles actions? - php_addict - 27-02-2011

je tente de faire le moins d'appel à ma base de données mais pour cela il me faut une fonction de trie de tableau multidimensionnel et là ca coince, j'explique:

je me sert de cette fonction: http://www.php.net/manual/fr/function.sort.php#99700

mais ca coince car le tri sur l'array est bien effectué mais il faudrait un tri sur 2 colonnes et je suis incapable de coder une telle fonction

exemple de tri par la colonne "time"

AVANT:


Array( [2] => Array([id] => 2[time] => 111)
[1] => Array([id] => 1[time] => 111)
[4] => Array([id] => 4[time] => 333)
[3] => Array([id] => 3[time] => 222)
)

APRES:


Array( [2] => Array([id] => 2[time] => 111)
[1] => Array([id] => 1[time] => 111)
[3] => Array([id] => 3[time] => 222)
[4] => Array([id] => 4[time] => 333)
)

l'array est bel et bien trié mais uniquement par "time" et non par "time" et par "id". Auriez vous sur le coude une telle fonction (pour trier un array multidimentionel en fonction de 2 colonne?)

Ce qu'il faudrait c'est l'equivalent de ORDER BY time,id ASC


RE: resolution liste d'actions : reinjecter de nouvelles actions? - srm - 28-02-2011

http://www.php.net/manual/fr/function.usort.php
(25-02-2011, 11:46 PM)php_addict a écrit : Fatal error: Maximum function nesting level of '100' reached, aborting!

Tu as un problème de récursion, car là c'est comme si tu avais 100 profondeurs d'itérations, du genre :

for ($i1 = 0; $i1 < 100; $i1++) {
for ($i2 = 0; $i2 < 100; $i2++) {
for ($i3 = 0; $i3 < 100; $i3++) {
for ($i4 = 0; $i4 < 100; $i4++) {
for ($i5 = 0; $i5 < 100; $i5++) {
etc...
}
}
}
}
}

Donc normal qu'il pète un plomb :]


RE: resolution liste d'actions : reinjecter de nouvelles actions? - php_addict - 28-02-2011

(28-02-2011, 08:11 AM)oxman a écrit : http://www.php.net/manual/fr/function.usort.php
(25-02-2011, 11:46 PM)php_addict a écrit : Fatal error: Maximum function nesting level of '100' reached, aborting!

merci du lien, je pense avoir trouvé une function qui me convient: http://www.php.net/manual/fr/function.usort.php#89977

(28-02-2011, 08:11 AM)oxman a écrit :
(25-02-2011, 11:46 PM)php_addict a écrit : Fatal error: Maximum function nesting level of '100' reached, aborting!

Tu as un problème de récursion, car là c'est comme si tu avais 100 profondeurs d'itérations, du

Donc normal qu'il pète un plomb :]

ok...donc finalement je ne sais plus tres bien comment m'y prendre avec ma resolution d'action...peut etre en n'en prenant 50 dans la BDD, les resoudres, tester si il y en a encore, les resoudres, etc...