Algorytm jest deterministyczny, ale można się spierać, że ogólny wynik wypuszczenia ptaka jest faktycznie niedeterministyczny , ponieważ opiera się na (niezwykle wrażliwym) wejściu użytkownika.
Aby przetestować algorytm i wpływ, jaki ma na niego wejście użytkownika, zastosowałem następującą procedurę:
- Załaduj wersję Angry Birds dla Google Chrome
- Poziom obciążenia 1-1
- Pociągnij mysz z powrotem do określonej współrzędnej XY. (To już minęło punkt „pełnego losowania” ptaka).
- Wypuść ptaka i poczekaj, aż gra się ustabilizuje.
Aby zmierzyć moją współrzędną XY, otworzyłem działające w tle okno przeglądarki Chrome i przeszedłem na tę stronę. Ustawiłem oba okna tak, że mogłem widzieć pozycje X i Y myszy, a jednocześnie mogłem spowodować coś, co się wydarzyło, gdy wypuściłem ptaka. Ustawiłem kursor myszy w lewym dolnym rogu ramki wokół tych dwóch liczb, a następnie puściłem. Zanotowałem wtedy pozycję mojego kursora myszy (ponieważ wyświetlacz aktualizuje się tylko wtedy, gdy mysz nie jest zwolniona, a kursor znajduje się nad tym oknem), a następnie zanotowałem wynikowy wynik w Angry Birds. Jeśli masz problemy z dokładnym pozycjonowaniem myszy, możesz wypróbować opcję ułatwień dostępu oferowaną przez Twój system operacyjny, na przykład klawisze myszy w systemie Windows.
Otrzymałem ten sam wynik, tak długo, jak mój kursor znajdował się w dokładnie tym samym miejscu , co w poprzednich iteracjach.
Przed opracowaniem ulepszonego urządzenia testowego, które pozwoliło mi zmierzyć pozycję mojego kursora do piksel, przeprowadziłem ten eksperyment około 10 razy, używając punktu odniesienia na obrazku tła gry. Otrzymałem wyniki, strzelając pierwszym ptakiem, który wahał się od 8 000 do 11 000 punktów. Korzystając z ulepszonej strategii testowania, gdybym wypadł o jeden piksel, mógłbym spodziewać się różnic w wynikach od 150 do 500 punktów.
Zwracam uwagę, że kursor znajdował się poza krawędzią obszaru gry , poza oknem przeglądarki, daleko poza maksymalną odległością, na jaką można cofnąć ptaka, i nadal zauważyłem różnice podczas przesuwania mojego kursor nawet pojedynczy piksel.
Ponadto zrobiłem zrzuty ekranu z ekstremalnego przypadku, gdy mój kursor znajdował się na innym monitorze niż okno gry, i uruchomiłem kilka iteracji, w których utrzymywałem kursor w tym samym miejscu lub nieznacznie go przesuwałem. Według moich obliczeń (na podstawie pomiaru odległości od zrzutów ekranu) gra była w stanie wygenerować inny wynik (wynik 32960 vs 31520) na podstawie różnicy wysokości jednego piksela (544 vs 545 pikseli) na dystansie około 1284 pikseli szerokości. Okazuje się, że jest to różnica kątowa wynosząca 0,03 stopnia.
Powiedziałbym, że z praktycznych powodów można spodziewać się wielokrotnego stosowania tej samej ogólnej strategii na tym samym poziomie i oczekiwać bardzo różnych wyników. Poziom czułości elementów sterujących jest tak ekstremalny, że nie ma praktycznego sposobu, aby zrobić to samo dwa razy. Sytuację pogarsza fakt, że jeśli grasz na ekranie dotykowym, odtworzenie tych samych ruchów do pojedynczego piksela byłoby niezwykle trudne.