386 votes

Angry Birds est-il déterministe ?

En essayant d'obtenir 3 étoiles sur les niveaux les plus complexes (ceux avec beaucoup d'entités destructibles), j'ai remarqué que même après avoir joué le même niveau plus de 50 fois, en faisant toujours la même chose, je n'ai jamais vu le même résultat final. Quelque chose se passe toujours différemment.

Est-ce que la même entrée donne toujours le même résultat, ou y a-t-il un facteur aléatoire ?

156 votes

Comment pouvez-vous être sûr que l'entrée que vous donnez est 100% identique ?

6 votes

Une entrée parfaite peut être donnée via l'émulation d'un téléphone, des programmes spéciaux ou, tout simplement, la version de bureau du jeu avec la souris, comme l'a fait agent86.

482voto

agent86 Points 117964

El algorithme est déterministe, mais on peut soutenir que le résultat global du lancement d'un oiseau est effectivement non déterministe parce qu'il repose sur la saisie (extraordinairement sensible) de l'utilisateur.

Pour tester l'algorithme et l'effet de l'entrée de l'utilisateur sur celui-ci, j'ai utilisé la procédure suivante :

  • Chargez la version Google Chrome de Angry Birds
  • Niveau de charge 1-1
  • Ramenez la souris sur une coordonnée X-Y spécifique. (C'était après le point de "dessin complet" pour l'oiseau).
  • Relâchez l'oiseau, et attendez que le jeu atteigne un état stable.

Pour mesurer mes coordonnées X-Y, j'ai ouvert une fenêtre Chrome en arrière-plan, et j'ai navigué jusqu'à l'adresse suivante cette page . J'ai aligné les deux fenêtres de façon à pouvoir voir les positions X et Y de la souris tout en étant capable de provoquer quelque chose lorsque je relâche l'oiseau. J'ai aligné le curseur de ma souris avec le coin inférieur gauche de la boîte autour de ces deux chiffres, puis j'ai relâché. J'ai alors noté la position du curseur de ma souris (car l'affichage ne se met à jour que lorsque la souris n'est pas relâchée et que le curseur est au-dessus de cette fenêtre), puis j'ai noté le score obtenu dans Angry Birds. Si vous avez des problèmes avec le positionnement exact de la souris, vous pouvez essayer une option d'accessibilité offerte par votre système d'exploitation, par exemple, Touches de la souris sur Windows.

J'ai obtenu le même résultat, tant que mon curseur se trouvait dans le champ exactement au même endroit comme c'était le cas sur les itérations précédentes.

Avant de mettre au point un banc d'essai amélioré me permettant de mesurer la position de mon curseur au pixel près, j'ai réalisé cette expérience une dizaine de fois, en utilisant un point de référence dans l'image de fond du jeu. J'ai obtenu des scores en tirant le premier oiseau qui variaient entre 8 000 et 11 000 points. En utilisant la stratégie de test améliorée, si je me trompais d'un seul pixel, je pouvais m'attendre à des différences de score allant de 150 à 500 points.

Je noterai que le curseur était au-delà du bord de l'aire de jeu en dehors de la fenêtre du navigateur, bien au-delà de la distance maximale à laquelle l'oiseau peut être reculé, et j'ai quand même remarqué des différences en déplaçant mon curseur même un seul pixel.

De plus, j'ai pris des captures d'écran pour un cas extrême où mon curseur se trouvait sur un écran différent que la fenêtre de jeu, et j'ai fait plusieurs itérations où j'ai gardé mon curseur au même endroit, ou je l'ai légèrement déplacé. D'après mes calculs (basés sur la mesure de la distance à partir de captures d'écran), le jeu a pu créer un résultat différent (score 32960 contre 31520) sur la base d'une différence de hauteur d'un pixel (544 contre 545 pixels) sur une distance d'environ 1 284 pixels de largeur. Cela correspond à une différence angulaire de 0,03 degré.

Je dirais qu'à toutes fins utiles, vous pouvez vous attendre à employer la même stratégie générale sur le même niveau à plusieurs reprises et à obtenir des résultats très différents. Le niveau de sensibilité des commandes est si extrême qu'il n'y a aucun moyen pratique de faire faire la même chose deux fois. Ceci est exacerbé par le fait que si vous jouez sur un écran tactile, il serait extraordinairement difficile de reproduire les mêmes mouvements au pixel près.

6 votes

Si vous voulez tenter cette expérience, vous pouvez installer mon userscript . Il ajoute des cases qui suivent la position exacte du curseur sur la page Angry Birds. Un aperçu du script est disponible aquí .

0 votes

Cher agent86, vous avez écrit "J'ai obtenu des scores en tirant le premier oiseau qui variaient entre 8000 et 11000 points." Est-il possible de faire le test avec la version actuelle et de voir si les scores sont systématiquement plus élevés ?

1 votes

@GilKalai Vous ne pouvez pas comparer différents niveaux comme ça, cela dépend entièrement de l'endroit où le test a été visé.

207voto

Nate Points 1373

Angry Birds utilise Box2D bibliothèque pour la physique.

Box2D est-il déterministe ? Pour la même entrée, et le même binaire, Box2D reproduira n'importe quelle simulation. Box2D n'utilise pas de nombres aléatoires et ne base aucun calcul sur des événements aléatoires (tels que des minuteries, etc.).

Cependant, les gens souhaitent souvent un déterminisme plus rigoureux. Les gens veulent souvent savoir si Box2D peut produire des résultats identiques sur différents binaires et sur différentes plateformes. La réponse est non. La raison de cette réponse est liée à la façon dont les mathématiques en virgule flottante sont implémentées dans de nombreux compilateurs et processeurs. Je vous recommande de lire cet article si vous êtes curieux : http://www.yosefk.com/blog/consistency-how-to-defeat-the-purpose-of-ieee-floating-point.html

http://code.google.com/p/box2d/wiki/FAQ#Determinism

7 votes

C'est génial (merci d'avoir vérifié la source) ; pour être complet, avez-vous une référence indiquant qu'Angry Birds utilise Box2D ? Et d'où vient cette citation ?

6 votes

1 votes

Et je parie que les FPS de la physique varient également, en raison de nombreux facteurs (pas assez de CPU, surchauffe, défauts de page, etc.), ce qui affecte la "précision" de la simulation.)

38voto

Matthew Read Points 19148

Certains niveaux sont sujets à des explosions aléatoires peu après le début du niveau, et certaines briques peuvent tomber toutes seules avant même que vous n'ayez lancé un oiseau. Ces événements se produisent rarement, mais lorsque vous aurez obtenu trois étoiles pour tous les niveaux de tous les jeux, vous les aurez probablement vus plusieurs fois, comme moi.

Je pense que cela est dû à des problèmes de timing, peut-être liés au threading. Je suis certain que si vous faites un test où vous chargez chaque niveau une douzaine de fois et que vous attendez trente secondes, vous obtiendrez au moins une fois un score non nul. À la lumière de la réponse de Pubby, je ne peux que supposer que l'application Angry Birds ne fournit pas toujours la même entrée aux fonctions Box2D au début d'un niveau.

14voto

J'ai joué sur Facebook en utilisant un enregistreur macro. J'ai démarré l'enregistreur, je suis allé dans la fenêtre des oiseaux en colère, puis j'ai fait un zoom arrière et j'ai joué les deux premiers oiseaux. J'ai ensuite arrêté l'enregistreur. À CHAQUE fois, la souris est allée sur les pixels exacts et les a relâchés avec exactement la même puissance, etc. Il le fallait, car le mouvement de la souris enregistré fait la même chose à chaque fois, pixel par pixel. À chaque fois, j'ai obtenu un score différent, et pas à chaque fois le même nombre de cochons tués, etc. Ce jeu est incohérent.

-5voto

Myrddin Emrys Points 1229

J'ai fait 10 tests, en tirant au même point à chaque fois (également Chrome Angry Birds, niveau 1, comme dans les tests de l'agent86).

Red Crosshair of test spot

Je n'ai jamais obtenu deux fois le même score, même si je faisais attention à tirer exactement au même endroit, et que je le faisais à peu près aussitôt après le début du niveau. Je crois qu'Angry Birds n'est pas du tout déterministe.

Cela s'explique assez facilement : il a été conçu pour fonctionner sur de petits écrans tactiles. S'il était déterministe, les utilisateurs pourraient facilement répéter les mouvements en raison de la précision limitée du dispositif d'entrée. Cela pourrait être mauvais, dans la mesure où leur dispositif pourrait littéralement ne pas avoir la précision nécessaire pour viser l'angle et la puissance exacts qu'ils souhaitent. En faisant légèrement osciller les résultats, et grâce à l'entrée d'un "doigt", les utilisateurs ne remarqueraient pas le manque de précision, et ils ne seraient pas non plus frustrés de ne jamais pouvoir effectuer le tir souhaité.

0 votes

Le test supplémentaire de l'agent86 indique que je pourrais bien avoir tort. Je referai le test en rentrant chez moi, car j'étais tout à fait certain d'avoir placé mon curseur avec précision.

21 votes

Je pense que vous avez tort. L'écran tactile fait qu'il est extrêmement difficile d'avoir la même entrée à chaque fois. Par exemple, l'iphone a 614400 pixels. Chacun d'entre eux produira une sortie différente.

1 votes

@Daenyth : êtes-vous sûr que la précision de la résolution d'entrée est de 1 pixel ? C'est possible, mais ce que je dis, c'est que ce n'est pas nécessairement le cas.

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X