Secondo la pagina di Wikipedia per Pac-Man , il punteggio più alto possibile è 3333360 punti. Si chiama “gioco perfetto” ed è stato già realizzato da 3 persone diverse.

Quello che voglio sapere è: PERCHÉ sono esattamente 3333360 punti? Deve essere una limitazione tecnica, ma questo numero non ha senso secondo me.

So che il gioco ha 255 livelli. 255 è 11111111 in binario e al livello 256 (che sembra esistere misticamente) porta la cifra a 8 bit a un overflow, che termina con un crash del gioco.

Ma, 3333360 solo sembra così casuale.

Commenti

  • ‘ non è un tecnico limitazione tanto quanto il punteggio che ti capita di ottenere se mangi ogni pallina e ogni frutto in una vita in ogni livello.
  • Il problema non è il fatto che cerca di caricare il livello 0. Il problema è che il numero 256 (100000000 in binario) viene archiviato in una memoria che è stata allocata solo per contenere 8 bit. Il primo viene quindi scritto nella memoria assegnata a qualcosaltro, il che essenzialmente corrompe lintero gioco.
  • @LeeWhite: That ‘ s non proprio il problema. Il problema è che il codice che dovrebbe disegnare i frutti inizia assumendo che il numero di frutti corrisponda al numero del livello, controlla se ‘ è maggiore di 7, e se è così lo imposta a 7. Quindi la logica per rendere i frutti funziona estraendo ripetutamente un frutto, diminuendo il numero di frutti da disegnare e ripetendo il ciclo finché il decremento non produce zero. Se il numero di livello era zero, il codice cerca di disegnare 256 frutti, sovrascrivendo la memoria del display oltre la regione in cui dovrebbero andare i frutti.
  • @LeeWhite Sembra molto improbabile. In qualità di ingegnere del software, non ‘ sono a conoscenza di CPU che funzionano in questo modo. Se un numero è in overflow, il ‘ 1 ‘ portato a sinistra del numero scompare (e forse imposta anche un flag di overflow, a seconda dellarchitettura.) ‘ non sono a conoscenza di architetture che potrebbero sovraccaricare un numero nellindirizzo di memoria successivo, soprattutto perché la matematica non ‘ t di solito accade comunque direttamente sui dati in memoria. La matematica generalmente avviene sui dati archiviati nei registri e, una volta completata la matematica, i dati vengono riscritti in memoria se necessario.
  • @willoller No, non è ‘ t. Overflow di numeri interi e overflow del buffer sono due concetti completamente separati e non correlati. Loverflow del buffer è il risultato del mancato controllo dei limiti della memoria allocata prima di scrivere qualcosa (o leggere qualcosa da esso, a seconda dei casi). Loverflow di numeri interi si verifica quando si esegue unoperazione aritmetica che si traduce in un numero più grande (più piccolo ) rispetto al valore massimo (minimo) supportato dal tipo di dati. Loverflow di numeri interi non causa un overflow del buffer. Di solito fa sì che il numero intero ‘ avvolga ‘ allaltra estremità del suo intervallo di valori validi.

Risposta

Il Museo Pacman ha un articolo su come ottenere 3.333.360 Punti. E qui “sa video di un ragazzo che fa il livello 255 e 256 , con informazioni importanti sul livello 256.

Livello 1 fino al 255

Mangiare punti : ci sono 240 punti regolari per livello, del valore di 10 punti ciascuno, con un totale di 2400 punti per livello . Inoltre, mangiando i quattro punti energizzanti, del valore di 50 punti ciascuno, ottieni altri 200 punti.
⇒ 255 × 2600 = 663000

Mangiare “frutta” : cè un oggetto commestibile per livello che appare solo per un determinato quantità di tempo, due volte per livello. A seconda del tipo di frutta, che a sua volta dipende dal livello a cui stai giocando, ottieni un diverso numero di punti. In totale, ottieni
⇒ 2 × (100 + 300 + 2 × 500 + 2 × 700 + 2 × 1000 + 2 × 2000 + 2 × 3000 + 243 × 5000) = 2459600

Mangiare fantasmi : mangiare un fantasma nello stesso periodo di stimolazione ti dà 200 punti, e il doppio per ogni fantasma in più che mangi (400, 800 e 1600 rispettivamente dal 2 ° al 4 ° fantasma).Puoi farlo 4 volte per livello, ma solo fino al livello 16 e al livello 18, poiché i fantasmi non lampeggiano nei livelli 17 e 19+ ⇒ 4 × 3000 × 17 = 204000

Aggiunta di questi numeri restituisce 3326600 , solo 6760 punti a corto di perfetto.

Livello 256

Questo numero dispari può essere ottenuto nel livello 256 non funzionante.

Screenshot di un normale livello di Pac-Man Screenshot di un livello di Pac-Man difettoso

Punti visibili : come puoi vedere, manca poco più della metà dello schermo, il che significa che puoi ottenere solo 112 punti normali e 2 punti energizzanti.
⇒ 1220

Singolo frutto : Scadenza al glitc hed screen, puoi ottenere la chiave (il “frutto”) una sola volta
⇒ 5000

Punti glitch : ci sono 9 punti normali nella regione glitch che riappaiono ogni volta che muori. Con 5 vite extra, puoi ottenerle 6 volte
⇒ 6 × 90 = 540

Grand Totale

(663000 + 1220 + 540 (punti)) + (2459600 + 5000 (frutto)) + (204000 (fantasmi)) = 3333360

Commenti

  • Ho iniziato a digitare la risposta, pensando che i numeri si sarebbero sommati bene e non lhanno fatto ‘ t. Ci è voluto un po di tempo per scoprire la stranezza rappresentata dai punti nel livello 256.
  • 256 è un numero abbastanza importante.
  • @Howdy_McGee Soprattutto su un processore a 8 bit …
  • Il problema tecnico del 256 ° livello è apposta o è qualcosa che è un vero problema tecnico?
  • @ RPi_Awesomeness ‘ è un vero problema tecnico, che ha a che fare con i numeri che si spostano in binario. 256 è 100000000 in binario, ma il numero ‘ t supporta più di 8 cifre binarie, quindi tagliando l1, rendendolo 00000000, che è 0. Per alcuni problemi non proprio correlati , questo causa il glitch, piuttosto che riportarti di nuovo al livello 0.

Risposta

Il punteggio è limitato perché si verifica un problema tecnico al livello 256 che sovrascrive metà dello schermo con spazzatura. Il gioco non consentirà a un giocatore di avanzare da una scacchiera allaltra senza mangiare 244 punti ed energizzanti, ma il glitch sovrascrive molti dei punti; questo lascerà il giocatore incapace di mangiare 244 punti ed energizzanti, e quindi incapace di lasciare Livello. Nel caso ti stia chiedendo perché si verifica il problema tecnico, il codice macchina in Pac-Man per disegnare i frutti è simile al codice C:

unsigned char temp1, temp2; unsigned char *ptr; temp1 = level; if (temp1 > 15) temp1 = 15; temp2 = temp1; if (temp2 > 7) temp2 = 7; ptr = LOWER_RIGHT_ADDRESS; do { *ptr++ = shapes[temp1--]; } while(--temp); 

Notare che a differenza di molte macchine, Pac Man utilizza un layout di memoria dello schermo piuttosto curioso che posiziona byte consecutivi orizzontalmente nella parte superiore e inferiore dello schermo e verticalmente al centro. Questo è stato molto probabilmente fatto per fare in modo che quando si disegna la parte principale dello schermo, gli indirizzi di memoria venissero incrementati di una potenza di due ogni otto linee di scansione (si noti che la “parte superiore” del monitor si trova sul lato destro del immagine). In sostanza, i circuiti hanno convertito gli indici di riga / colonna in indirizzi di memoria con una mappatura simile a:

//Using column values in the range 30 to 1, wrapping after 63... address = (column & 32) ? (row << 5) | (column & 31) : ((28 | (column & 3)) << 5) | row); 

ma implementata nei circuiti piuttosto che nel codice. Ciò consentiva di calcolare gli indirizzi dello schermo utilizzando una coppia di contatori e un circuito per selezionare una delle due permutazioni di quei bit dei contatori. Lhardware richiesto per avere un indirizzo di memoria aumentato di 36 per ogni riga anziché di 32 sarebbe stato più complicato da confronto.

Commenti

  • @Kevin: Il punteggio dichiarato è il massimo possibile in Pac Man perché il bug mostrato sopra (nel codice C che è funzionalmente simile al codice Z80 nel gioco stesso) scrive spazzatura inutile su gran parte dello schermo, sovrascrivendo i punti che il giocatore dovrebbe mangiare. Laltra risposta indica cosa succede visibilmente per limitare il punteggio, ma quanto sopra indica (per tecnicamente lettori) perché accade (e suggerisce che la limitazione a 256 livelli probabilmente non era ‘ intenzionale ma si verifica invece a causa di una svista).
  • Entrambe le risposte completano la domanda estremamente bene.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *