Warum ist 3333360 die maximale Punktzahl in Pac-Man?

Laut der Wikipedia-Seite für Pac-Man ist die höchstmögliche Punktzahl 3333360 Punkte. Es heißt ein perfektes Spiel und es wurde schon von 3 verschiedenen Leuten erreicht.

Was ich wissen möchte, ist: WARUM ist es genau 3333360 Punkte? Es muss eine technische Begrenzung sein, aber diese Zahl macht meiner Meinung nach keinen Sinn.

Ich weiß, das Spiel hat 255 Levels. 255 ist 11111111 in binärer und Level 256 (das scheint mystisch zu sein) bringt die 8-Bit-Ziffer zu einem Überlauf, der in einem Absturz des Spiels endet.

Aber, 3333360 scheint einfach so zufällig.

Das Pacman Museum hat einen Artikel über immer 3333360 Punkte. Und hier ist ein Video von einem Mann, der Level 255 und 256 macht , mit wichtigen Informationen über Level 256.

Stufe 1 bis 255

Essen Punkte : Es gibt 240 reguläre Punkte pro Level, jeweils 10 Punkte, Netting 2400 Punkte pro Level. Zusätzlich gibt das Essen der vier Energizer Punkte noch 200 Punkte.
&Rechter Pfeil; 255 × 2600 = 663000

Essen "Frucht" : Es gibt ein essbares Objekt pro Ebene, das nur für eine gewisse Zeit, zweimal pro Ebene erscheint. Je nach Art der Frucht, die wiederum von der Ebene abhängt, die Sie spielen, erhalten Sie eine andere Anzahl von Punkten. Insgesamt bekommst du
&Rechter Pfeil; 2 × (100 + 300 + 2 × 500 + 2 × 700 + 2 × 1000 + 2 × 2000 + 2 × 3000 + 244 × 5000) = 2459600

Eat Ghosts : Eating ein Geist in der gleichen Energizer Zeitraum gibt Ihnen 200 Punkte, und doppelt so für jeden zusätzlichen Geist, den Sie essen (400, 800 und 1600 für die 2. bis 4. Ghost). Du kannst das 4 mal pro Level machen, aber nur bis Level 16 und auf Level 18, da die Geister nicht in Level 17 und 19+ & Rightarrow blinzeln ; 4 × 3000 × 17 = 204000

Hinzufügen dieser Zahlen ergibt 3326600 , nur 6760 Punkte kurz von perfekt.

Stufe 256

Diese ungerade Zahl kann in der ausgeglichenen Stufe 256 bekommen werden.

Screenshot einer normalen Pac-Man-EbeneScreenshot einer glitched Pac-Man Ebene

Sichtbare Punkte : Wie Sie sehen können, fehlt ein bisschen mehr als die Hälfte des Bildschirms, was bedeutet, dass Sie nur 112 normale und 2 Energizer Punkte bekommen können.
&Rechter Pfeil; 1220

Single Fruit : Wegen des glitched Schirmes können Sie nur den Schlüssel (die "Frucht") einmal erhalten
&Rechter Pfeil; 5000

Glitched Dots : Es gibt 9 normale Punkte in der glitched out Region, die jedes Mal wieder auftauchen, wenn du stirbst. Bei 5 extra Leben kannst du sie 6 mal bekommen
&Rechter Pfeil; 6 × 90 = 540

Gesamtsumme

(663000 + 1220 + 540 (Punkte)) + (2459600 + 5000 (Frucht)) + (204000 (Geister)) = 3333360

Die Punktzahl ist begrenzt, weil eine Störung auf Stufe 256 auftritt, die den halben Bildschirm mit Müll überschreibt. Das Spiel wird nicht zulassen, dass ein Spieler von einem Brett zum nächsten vorangeht, ohne 244 Punkte und Energizer zu essen, aber der Glitch überschreibt viele der Punkte; Dadurch wird der Spieler nicht in der Lage, 244 Punkte und Energizer zu essen und somit nicht in der Lage, das Level zu verlassen. Wenn Sie sich fragen, warum die Störung auftritt, ist der Maschinencode in Pac-Man, um die Früchte zu zeichnen, ähnlich dem C-Code:

 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); 

Beachten Sie, dass im Gegensatz zu vielen Maschinen, Pac Man verwendet eine eher neugierige Bildschirm Speicher-Layout, das aufeinanderfolgende Bytes horizontal auf der Oberseite und Unterseite des Bildschirms und vertikal in der Mitte. Dies wurde am ehesten getan, um es so zu machen, dass beim Zeichnen des Hauptteils des Bildschirms die Speicheradressen um eine Leistung von zwei alle acht Abtastzeilen erhöht werden (beachten Sie, dass die "Oberseite" des Monitors auf der rechten Seite des Bildschirms liegt Bild). Im Wesentlichen konvertiert die Zeilen- / Spaltenindizes in Speicheradressen mit einer Zuordnung ähnlich wie:

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

Aber in Schaltkreise statt Code implementiert. Diese erlaubten Bildschirmadressen werden berechnet, indem ein Paar von Zählern und eine Schaltungsanordnung verwendet wird, um eine von zwei Permutationen dieser Zählerbits auszuwählen. Die Hardware, die erforderlich ist, um Speicheradresse um 36 für jede Zeile anstatt 32 zu erhöhen, wäre komplizierter durch Vergleich gewesen.