25-06-2013, 07:04 PM
Salut,
pour ce genre de problème, je considère la réduction du paquet d'onde.
En d'autres mots, appliqué à un jeu PHP, je ne considère pas que le jeu doit avoir simulé le combat pile poil à une date donnée. En revanche, je considère que si un élément (joueur, IA, ou autre) accède à une information, celle-ci est à jour.
En termes pratiques, cela revient à dire que, dans ma BDD, j'ai le timestamp du moment où le combat a lieu. Mais lorsque ce timestamp est atteint, je ne fais rien (à quoi ca servirait de simuler un combat, si aucun joueur n'est en ligne?).
En revanche, dès qu'un joueur se connecte/visite une page, je regarde la BDD, et je simule tout combat dont le timestamp est dépassé ou atteint. Ainsi, le joueur a des données à jour, mais je n'ai pas besoin de réaliser le combat au moment "exact" où il a lieu: je ne le réalise qu'une fois qu'un joueur accède à une page qui peut être influencée, directement ou indirectement, par ce combat.
Donc, finalement, si je reprend mon analogie avec la physique quantique (analogie grossière mais bon): tant que mon système (le serveur) n'est pas observé (un joueur vient sur une page), il est dans un état "superposé" (je n'ai aucune idée de quels combats sont censés avoir déjà eu lieu). Mais dès qu'un observateur (joueur) mesure (se connecte à une page) mon système (et voit le jeu), alors je simule tout ce qui aurait dut être simulé auparavant.
Donc le joueur a "besoin" d'être connecté (0 joueur connecté = 0 simulation), mais pas forcément pile au moment du timestamp.
Dans le cas d'ECLERD, j'ai appliqué ce principe, mais j'ai fauté: j'ai considéré qu'il y aurait surement 1 joueur par heure, ou au moins, par jour, de connecté. C'est pas vraiment le cas, et la simulation dégénère, mais cela, ça vient de mes algorithmes, pas du principe de la simulation (en termes plus mathématiques, mon problème vient du fait que j'approxime une fonction par la méthode d'Euler, mais avec un pas trop petit et ducoup, l'approximation est mauvaise comme on le voit sur le graphique).
pour ce genre de problème, je considère la réduction du paquet d'onde.
Citation :La réduction du paquet d'onde est un concept de la mécanique quantique selon lequel, après une mesure, un système physique voit son état entièrement réduit à celui qui a été mesuré.
En d'autres mots, appliqué à un jeu PHP, je ne considère pas que le jeu doit avoir simulé le combat pile poil à une date donnée. En revanche, je considère que si un élément (joueur, IA, ou autre) accède à une information, celle-ci est à jour.
En termes pratiques, cela revient à dire que, dans ma BDD, j'ai le timestamp du moment où le combat a lieu. Mais lorsque ce timestamp est atteint, je ne fais rien (à quoi ca servirait de simuler un combat, si aucun joueur n'est en ligne?).
En revanche, dès qu'un joueur se connecte/visite une page, je regarde la BDD, et je simule tout combat dont le timestamp est dépassé ou atteint. Ainsi, le joueur a des données à jour, mais je n'ai pas besoin de réaliser le combat au moment "exact" où il a lieu: je ne le réalise qu'une fois qu'un joueur accède à une page qui peut être influencée, directement ou indirectement, par ce combat.
Donc, finalement, si je reprend mon analogie avec la physique quantique (analogie grossière mais bon): tant que mon système (le serveur) n'est pas observé (un joueur vient sur une page), il est dans un état "superposé" (je n'ai aucune idée de quels combats sont censés avoir déjà eu lieu). Mais dès qu'un observateur (joueur) mesure (se connecte à une page) mon système (et voit le jeu), alors je simule tout ce qui aurait dut être simulé auparavant.
Donc le joueur a "besoin" d'être connecté (0 joueur connecté = 0 simulation), mais pas forcément pile au moment du timestamp.
Dans le cas d'ECLERD, j'ai appliqué ce principe, mais j'ai fauté: j'ai considéré qu'il y aurait surement 1 joueur par heure, ou au moins, par jour, de connecté. C'est pas vraiment le cas, et la simulation dégénère, mais cela, ça vient de mes algorithmes, pas du principe de la simulation (en termes plus mathématiques, mon problème vient du fait que j'approxime une fonction par la méthode d'Euler, mais avec un pas trop petit et ducoup, l'approximation est mauvaise comme on le voit sur le graphique).