L ' algoritmo è deterministico, ma è discutibile che il risultato complessivo del lancio di un uccello sia effettivamente non deterministico perché si basa sull'input dell'utente (straordinariamente sensibile).
Per testare l'algoritmo e l'effetto dell'input dell'utente su di esso, ho utilizzato la seguente procedura:
- Carica la versione di Google Chrome di Angry Birds
- Carica livello 1-1
- Riporta il mouse su una coordinata XY specifica. (Questo era oltre il punto di "estrazione completa" per l'uccello.)
- Rilascia l'uccello e attendi che il gioco raggiunga uno stato stabile.
Per misurare la mia coordinata XY, ho aperto una finestra di Chrome in background e l'ho spostata in questa pagina. Ho allineato le due finestre in modo da poter vedere le posizioni X e Y del mouse mentre ero ancora in grado di far accadere qualcosa quando ho rilasciato l'uccello. Ho allineato il cursore del mouse con l'angolo inferiore sinistro della casella attorno a questi due numeri, quindi ho rilasciato. Ho annotato la posizione del cursore del mouse (poiché il display si aggiorna solo quando il mouse non viene rilasciato e il cursore si trova su quella finestra) e ho annotato il punteggio risultante in Angry Birds. Se hai problemi con il posizionamento esatto del mouse, potresti provare un'opzione di accessibilità offerta dal tuo sistema operativo, ad esempio Tasti mouse su Windows.
Ho ottenuto lo stesso punteggio, fintanto che il mio cursore si trovava esattamente nello stesso punto delle iterazioni precedenti.
Prima di creare un banco di prova migliorato che mi consentisse di misurare la posizione del mio cursore per pixel, ho eseguito questo esperimento circa 10 volte, utilizzando un punto di riferimento nell'immagine di sfondo del gioco. Ho ottenuto punteggi sparando al primo uccello che variava tra 8.000 e 11.000 punti. Usando la strategia di test avanzata, se fossi fuori di un singolo pixel, potrei aspettarmi differenze di punteggio comprese tra 150 e 500 punti.
Noterò che il cursore si trovava oltre il bordo dell'area di gioco , fuori dalla finestra del browser, ben oltre la distanza massima che può essere trascinata indietro l'uccello, e ho comunque notato differenze spostando il mio cursore anche un singolo pixel.
Inoltre, ho preso screencap per un caso estremo in cui il mio cursore si trovava su un monitor diverso rispetto alla finestra di gioco e ha eseguito diverse iterazioni in cui ho mantenuto il cursore nella stessa posizione o spostato leggermente. Secondo i miei calcoli (basati sulla misurazione della distanza dagli screencaps) il gioco è stato in grado di creare un risultato diverso (punteggio 32960 vs 31520) basato su una differenza di un pixel in altezza (544 vs 545 pixel) su una distanza di circa 1.284 pixel di larghezza. Ciò risulta essere una differenza angolare di 0,03 gradi.
Direi che per qualsiasi scopo pratico, puoi aspettarti di impiegare ripetutamente la stessa strategia generale sullo stesso livello e aspettarti risultati estremamente variabili. Il livello di sensibilità nei controlli è così estremo che non esiste un modo pratico per fargli fare la stessa cosa due volte. Ciò è aggravato dal fatto che se stai giocando su un touchscreen, sarebbe estremamente difficile riprodurre gli stessi movimenti fino al singolo pixel.