Pourquoi 3333360 est-il le score maximal dans Pac-Man?

Selon la page Wikipedia pour Pac-Man , le score le plus élevé possible est de 3333360 points. On l'appelle un jeu parfait et il a déjà été réalisé par 3 personnes différentes.

Ce que je veux savoir, c'est: POURQUOI, c'est exactement 3333360 points? Cela doit être une limitation technique, mais ce chiffre n'a aucun sens à mon avis.

Je sais que le jeu a 255 niveaux. 255 est 11111111 en binaire et au niveau 256 (qui semble exister mystiquement) amène le chiffre de 8 bits à un débordement, qui se termine par un crash du jeu.

Mais, 3333360 semble juste aléatoire.

Le musée Pacman a un article sur l'obtention de 3333360 points. Et voici une vidéo d'un gars qui effectue le niveau 255 et 256 , avec des informations importantes concernant le niveau 256.

Niveau 1 à 255

Points de restauration : il y a 240 points réguliers par niveau, en valeur de 10 points chacun, nettes de 2400 points par niveau. De plus, manger les quatre points d'énergie vous donne 200 points de plus.
&Flèche droite; 255 × 2600 = 663000

Manger "fruit" : il existe un objet comestible par niveau qui n'apparaît que pendant un certain temps, deux fois par niveau. Selon le type de fruit, qui dépend du niveau que vous jouez, vous obtenez une quantité différente de points. Au total, vous obtenez
&Flèche droite; 2 × (100 + 300 + 2 × 500 + 2 × 700 + 2 × 1000 + 2 × 2000 + 2 × 3000 + 244 × 5000) = 2459600

Manger des fantômes : Manger un fantôme dans la même période d'énergie vous donne 200 points, et double pour tous les fantômes supplémentaires que vous mangez (400, 800 et 1600 pour le 2ème au 4ème fantôme, respectivement). Vous pouvez le faire 4 fois par niveau, mais seulement au niveau 16 et au niveau 18, car les fantômes ne clignotent pas au niveau 17 et 19+ et Rightarrow; 4 × 3000 × 17 = 204000

En ajoutant ces chiffres, on obtient 3326600 , seulement 6760 points de moins que parfait.

Niveau 256

Ce nombre impair peut être obtenu dans le niveau 480 effilé.

Capture d'écran d'un niveau Pac-Man normalCapture d'écran d'un niveau Pac-Man glitched

Points visibles : comme vous le voyez, un peu plus de la moitié de l'écran manque, ce qui signifie que vous ne pouvez obtenir que 112 points normaux et 2 points d'énergie.
&Flèche droite; 1220

Fruit unique : en raison de l'écran gluté, vous ne pouvez obtenir la clé (le «fruit») qu'une seule fois
&Flèche droite; 5000

Points dynamisés : il y a 9 points normaux dans la région délimitée qui réapparaît chaque fois que vous mourez. A 5 vies supplémentaires, vous pouvez les obtenir 6 fois
&Flèche droite; 6 × 90 = 540

somme finale

(663000 + 1220 + 540 (points)) + (2459600 + 5000 (fruit)) + (204000 (fantômes)) = 3333360

Le score est limité car un problème survient au niveau 256 qui écrase la moitié de l'écran avec des ordures. Le jeu ne laisse pas un joueur avancer d'une planche à l'autre sans avoir mangé 244 points et énergisants, mais le problème écrase plusieurs points; Cela laissera le joueur incapable de manger 244 points et énergisants, et donc incapable de quitter le niveau. Dans le cas où vous vous demandez pourquoi le problème survient, le code machine dans Pac-Man pour dessiner les fruits est similaire au code 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); 

Notez que contrairement à de nombreuses machines, Pac Man utilise une disposition de la mémoire d'écran plutôt curieuse qui place les octets consécutifs horizontalement en haut et en bas de l'écran, et verticalement au milieu. Ceci a été probablement fait pour le faire de sorte que lorsque vous dessinez la partie principale de l'écran, les adresses de mémoire seraient incrémentées par une puissance de deux lignes de balayage toutes les huit (notez que le "haut" du moniteur se trouve sur le côté droit de la photo). Essentiellement, les indices de lignes / colonnes converties en circuits aux adresses de mémoire avec un mappage similaire à:

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

Mais mis en œuvre dans les circuits plutôt que sur le code. Cela permettait de calculer les adresses d'écran à l'aide d'une paire de compteurs et d'un circuit pour sélectionner l'une des deux permutations des bits de ces compteurs. Le matériel nécessaire pour que l'adresse mémoire augmente de 36 pour chaque ligne plutôt que 32 aurait été plus compliqué par comparaison.