Domanda:
Angry Birds è deterministico?
Thomas Bonini
2011-12-29 22:30:31 UTC
view on stackexchange narkive permalink

Mentre cercavo di ottenere 3 stelle nei livelli più complessi (quelli con molte entità distruttibili) ho notato che anche dopo aver giocato lo stesso livello più di 50 volte, facendo sempre la stessa cosa, non ho mai visto la stessa cosa risultato finale. Qualcosa va sempre diversamente.

Lo stesso input produce sempre lo stesso output o c'è un fattore casuale lì dentro?

Come puoi essere sicuro che l'input che stai dando sia identico al 100%?
L'input perfetto può essere fornito tramite l'emulazione di un telefono, programmi speciali o, semplicemente, la versione desktop del gioco con il mouse, come ha fatto agent86.
Cinque risposte:
agent86
2011-12-29 22:47:10 UTC
view on stackexchange narkive permalink

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.

Un pixel * può * facilmente significare una grande differenza di punteggio. Questa non è una risposta al fatto che sia deterministica o meno; devi essere certo che il tuo input sia identico.
Anche in scenari deterministici, una minuscola differenza nello stato iniziale può comportare un'enorme differenza nello stato finale. Si chiama [teoria del caos] (http://en.wikipedia.org/wiki/Chaos_theory).
@MyrddinEmrys, come ho detto che stavo progettando di fare, ho rieseguito l'esperimento fino alla precisione dei pixel. Ho scoperto che il danno fatto era lo stesso, se ero così preciso. Direi che per qualsiasi scopo pratico di gioco, i controlli sono così precisi che ci si può aspettare che il comportamento finale del sistema sia effettivamente non deterministico per qualsiasi scenario di utilizzo dell'input umano "normale". Il gioco stesso è tuttavia deterministico.
Solo per notare, a causa di semplici contrazioni costanti nella mano è effettivamente impossibile per un essere umano generare lo stesso esatto input tattile. La realtà è il fattore casuale, non Angry Birds, come hai scoperto.
Angry Birds: un gioco millimetrico su un dispositivo centimetrico. Esasperante.
Se vuoi provare questo esperimento, puoi [install my userscript] (https://gist.github.com/raw/1536489/angrierbird.user.js). Aggiunge caselle che tracciano la posizione esatta del cursore nella pagina Angry Birds. Un'anteprima dello script è disponibile [qui] (https://gist.github.com/1536489).
@splatteredbits questa è più o meno la mia impressione di esso
Caro agente86, hai scritto "Ho ottenuto punteggi sparando al primo uccello che variava tra 8.000 e 11.000 punti." È possibile eseguire il test con la versione corrente e vedere se i punteggi sono sistematicamente più alti?
@GilKalai Non è possibile confrontare diversi livelli in questo modo, dipende interamente da dove è stato mirato il test.
Ora la domanda è ... su livelli con entità semi-dinamiche (come cannoni laser e piattaforme mobili su * Angry Birds Star Wars *), in che modo è deterministico?
Questa risposta è al limite di un esperimento scientifico.
Aspetta, hai fatto tutto questo per Arquade ?!+342!
Credo che la natura del gioco sia caotica.Un sistema caotico è deterministico, ma piccoli cambiamenti nelle condizioni iniziali hanno enormi cambiamenti nel risultato.
Pubby
2011-12-30 01:32:07 UTC
view on stackexchange narkive permalink

Angry Birds utilizza la libreria Box2D per la fisica.

Box2D è deterministico? Per lo stesso input e lo stesso binario, Box2D riprodurrà qualsiasi simulazione. Box2D non utilizza numeri casuali né basa alcun calcolo su eventi casuali (come timer, ecc.).

Tuttavia, le persone spesso vogliono un determinismo più rigoroso. Le persone spesso vogliono sapere se Box2D può produrre risultati identici su diversi binari e su diverse piattaforme. La risposta è no. La ragione di questa risposta ha a che fare con il modo in cui la matematica in virgola mobile è implementata in molti compilatori e processori. Consiglio di leggere questo articolo se sei curioso: 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

Questo è fantastico (grazie per aver effettivamente verificato con la fonte); per completezza, hai un riferimento che Angry Birds usa Box2D? E da dove hai tratto questa citazione?
@MarkTrapp http: // www.geek.com / articles / mobile / box2d-creator-chiede-rovio-for-angry-birds-credit-at-gdc-2011032 / e http://en.wikipedia.org/wiki/Box2D
E scommetto che anche gli FPS fisici variano, a causa di numerosi fattori (CPU insufficiente, surriscaldamento, errori di pagina, ecc.), Che influiscono sulla "precisione" della simulazione. :)
La seconda affermazione è piuttosto ambigua; quello che presumo è che se esegui la stessa simulazione su più architetture potresti non ottenere esattamente lo stesso risultato, ma per piattaforma ogni simulazione verrà eseguita allo stesso modo ogni volta.
@muntoo questo non è necessariamente vero, poiché gli sviluppatori possono far eseguire al gioco lo stesso numero di passaggi di simulazione anche a frame rate inferiori. Per quanto riguarda gli errori effettivi del processore, questa possibilità viene solitamente ignorata nei giochi poiché è così rara. Se sei interessato all'argomento delle simulazioni deterministiche puoi leggere di più su [gamesfromwithin blog] (http://gamesfromwithin.com/casey-and-the-clearly-deterministic-contraptions) o semplicemente google. :)
@agent86 Vorrei cambiare la tua formulazione in "[...] ma per piattaforma e ** versione per Box2D ** ogni simulazione verrà eseguita allo stesso modo ogni volta". (quella parte "stessa binaria" nel primo paragrafo sembra indicarlo).
@JoãoPortela, buon punto. Stavo assumendo che "release" non fosse una variabile autorizzata a cambiare in questo caso.
Non capisco il primo paragrafo del qoute. Quindi Box2D è deterministico o no?
@Jake Sì, è deterministico ma con le limitazioni menzionate nel secondo paragrafo.
Ancora confuso. Perché dice "Box2D riprodurrà QUALSIASI simulazione" invece di "STESSA" simulazione? Sto scrivendo una simulazione lockstep del client server e l'esecuzione di 2 dello stesso client.exe fornisce la stessa simulazione solo se non ci sono collisioni.
@Jake Non ne sono sicuro, forse prova Stack Overflow.
Matthew Read
2011-12-30 00:26:43 UTC
view on stackexchange narkive permalink

Alcuni livelli sono soggetti a esplosioni casuali subito dopo l'inizio del livello e alcuni mattoni possono cadere da soli prima che tu abbia mai lanciato un uccello. Questi eventi si verificano raramente, ma quando avrai tre stelle in ogni livello in ogni gioco probabilmente lo avrai visto un paio di volte, come ho fatto io.

Mi aspetto che ciò accada a causa del tempismo problemi, possibilmente legati al threading. Sono abbastanza sicuro che se facessi un test in cui caricassi ogni livello una dozzina di volte e aspettassi trenta secondi, ti ritroveresti con un punteggio diverso da zero almeno una volta. Alla luce della risposta di Pubby posso solo presumere che l'app Angry Birds non fornisce sempre lo stesso input alle funzioni Box2D all'inizio di un livello.

Joseph KaraokeGuy Holtzinger
2014-12-22 02:26:47 UTC
view on stackexchange narkive permalink

Ho giocato su Facebook utilizzando un registratore di macro. Ho avviato il registratore, sono andato alla finestra degli uccelli arrabbiati, quindi ho ridotto lo zoom e ho riprodotto i primi due uccelli. Quindi ho fermato il registratore. OGNI volta, il mouse è andato ai pixel esatti e rilasciato con la stessa identica potenza, ecc. Doveva, perché il movimento del mouse registrato fa la stessa cosa ogni volta, pixel per pixel. Ogni volta ottenevo un punteggio diverso, e non ogni volta lo stesso numero di maiali uccisi ecc. Questo gioco È incoerente

Myrddin Emrys
2011-12-29 23:08:26 UTC
view on stackexchange narkive permalink

Ho fatto 10 test, arrivando ogni volta allo stesso punto (anche Chrome Angry Birds, livello 1, come nei test di agent86).

Red Crosshair of test spot

Non ho mai ricevuto lo stesso punteggio due volte, nonostante stia attento a tirare esattamente nello stesso punto e lo fai non appena dall'inizio del livello. Credo che Angry Birds non sia molto deterministico.

Questo è piuttosto facile da spiegare: è stato progettato per funzionare su piccoli touch screen. Se fosse deterministico, gli utenti potrebbero facilmente ripetere le mosse a causa della limitata precisione del dispositivo di input. Questo potrebbe essere un male, in quanto il loro dispositivo potrebbe letteralmente non avere la precisione necessaria per mirare all'angolo e alla potenza esatti desiderati. Facendo oscillare leggermente i risultati e grazie all'input di un "dito", gli utenti non noterebbero la mancanza di precisione e non sarebbero frustrati dal non essere mai in grado di effettuare lo scatto desiderato.

Il test aggiuntivo di agent86 indica che potrei sbagliarmi. Farò un nuovo test quando torno a casa, perché ero abbastanza certo di aver posizionato il cursore con precisione.
Penso che ti sbagli. Il touch screen in realtà rende estremamente difficile ottenere ogni volta lo stesso input. Ad esempio, l'iPhone ha 614400 pixel. Ciascuno di questi produrrebbe un output diverso.
@Daenyth: sei sicuro che la precisione della risoluzione in ingresso sia di 1 pixel? Può essere, ma quello che sto dicendo è che non lo è necessariamente.
@Daenyth non necessariamente _ogni_ di loro. Una volta superata la distanza massima, potrebbe esserci un insieme di pixel allo stesso angolo dal centro che si potrebbe ragionevolmente presumere che causi lo stesso
@AndreasBonini, Ulteriori test sembrano indicare che è così preciso che un singolo pixel può causare differenze nei risultati, anche su distanze folli - guarda le ultime modifiche alla mia risposta.
Questo è un esempio di caos (piccoli cambiamenti nell'input che portano a enormi cambiamenti nei risultati) piuttosto che non determinismo


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...