Selon la page Wikipédia de Pac-Man , le score le plus élevé possible est de 3333360 points. Cela sappelle un jeu parfait et il a déjà été réalisé par 3 personnes différentes.

Ce que je veux savoir, cest: POURQUOI est-ce exactement 3333360 points? Ce doit être une limitation technique, mais ce nombre na aucun sens à mon avis.

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

Mais, 3333360 juste semble tellement aléatoire.

Commentaires

  • Ce ‘ nest pas un technique limitation autant que le score que vous obtenez si vous mangez chaque granule et chaque morceau de fruit sur une vie dans chaque niveau.
  • Le problème nest pas le fait quil essaie de charger le niveau 0. Le problème est que le nombre 256 (100000000 en binaire) est stocké dans une mémoire qui na été allouée que pour contenir 8 bits. Le premier est donc écrit en mémoire qui est affectée à autre chose, ce qui corrompt essentiellement tout le jeu.
  • @LeeWhite: That ‘ s pas tout à fait le problème. Le problème est que le code qui est censé dessiner les fruits commence par supposer que le nombre de fruits doit correspondre au numéro de niveau, vérifie si ‘ est supérieur à 7, et si oui le définit à 7. Ensuite, la logique de rendu des fruits fonctionne en dessinant à plusieurs reprises un fruit, en décrémentant le nombre de fruits à dessiner et en bouclant jusquà ce que le décrément donne zéro. Si le numéro de niveau était zéro, le code essaie de dessiner 256 fruits, écrasant la mémoire daffichage au-delà de la région où les fruits sont censés aller.
  • @LeeWhite Cela semble très improbable. En tant quingénieur logiciel, je ne connais ‘ aucun processeur fonctionnant de cette façon. Si un nombre déborde, le ‘ 1 ‘ porté à gauche du nombre disparaît tout simplement (et peut également définir un indicateur de dépassement de capacité, en fonction de l’architecture.) Je ‘ je ne connais pas d’architectures qui déborderaient d’un nombre dans la prochaine adresse mémoire, d’autant plus que les mathématiques ne ‘ t se produisent généralement directement sur les données en mémoire de toute façon. Les mathématiques se produisent généralement sur les données stockées dans les registres et, une fois les calculs terminés, les données sont réécrites en mémoire si nécessaire.
  • @willoller Non, ce nest pas ‘ t. Le débordement dentier et le débordement de tampon sont deux concepts totalement distincts et sans rapport. Le débordement de la mémoire tampon est le résultat de léchec de la vérification des limites de la mémoire allouée avant dy écrire quelque chose (ou den lire quelque chose, selon le cas.) Le débordement dentier est lorsque vous effectuez une opération arithmétique qui entraîne un nombre plus grand (plus petit ) que la valeur maximale (minimale) prise en charge par le type de données. Le débordement dentier ne provoque pas de dépassement de mémoire tampon. En général, cela fait simplement passer lentier à ‘ autour de ‘ à lautre extrémité de sa plage de valeurs valides.

Réponse

Le Pacman Museum contient un article sur lobtention de 3 333 360 Points. Et voici « sa vidéo dun gars faisant le niveau 255 et 256 , avec des informations importantes concernant le niveau 256.

Niveau 1 à 255

Manger des points : il y a 240 points réguliers par niveau, dune valeur de 10 points chacun, rapportant 2400 points par niveau . De plus, manger les quatre points énergisants, dune valeur de 50 points chacun, vous donne 200 points supplémentaires.
⇒ 255 × 2600 = 663000

Manger des « fruits » : Il y a un objet comestible par niveau qui napparaît que pour un certain temps, deux fois par niveau. Selon le type de fruit, qui dépend à son tour du niveau auquel vous jouez, vous obtenez un nombre de points différent. Au total, vous obtenez
⇒ 2 × (100 + 300 + 2 × 500 + 2 × 700 + 2 × 1000 + 2 × 2000 + 2 × 3000 + 243 × 5000) = 2459600

Eating Ghosts : Manger un fantôme pendant la même période énergisante vous donne 200 points, et le double pour chaque fantôme supplémentaire 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 uniquement jusquau niveau 16, et au niveau 18, puisque les fantômes ne clignotent pas aux niveaux 17 et 19+ ⇒ 4 × 3000 × 17 = 204000

Ajout de ces éléments les nombres donnent 3326600 , juste 6760 points de moins que parfait.

Niveau 256

Ce nombre impair peut être obtenu dans le niveau glitched-out 256.

Capture décran dun niveau Pac-Man normal Capture décran dun niveau Pac-Man défectueux

Points visibles : comme vous pouvez le voir, il manque un peu plus de la moitié de lécran, ce qui signifie que vous ne pouvez obtenir que 112 points normaux et 2 points énergisants.
⇒ 1220

Fruit unique : Échéance à la glitc hed, vous ne pouvez obtenir la clé (le « fruit ») quune seule fois
⇒ 5000

Glitched Dots : Il y a 9 points normaux dans la région glitched qui réapparaissent à chaque fois que vous mourez. À 5 vies supplémentaires, vous pouvez les obtenir 6 fois
⇒ 6 × 90 = 540

Grand Total

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

Commentaires

  • Jai commencé à taper la réponse, pensant que les nombres sadditionneraient très bien et ils ne lont pas fait ‘ t. Il a fallu un certain temps pour découvrir létrangeté des points du niveau 256.
  • 256 est un nombre assez important.
  • @Howdy_McGee Surtout sur un processeur 8 bits …
  • Le problème de niveau 256 est-il intentionnel – ou est-ce quelque chose qui est un problème réel?
  • @ RPi_Awesomeness it ‘ est un problème réel, qui a à voir avec les nombres qui se déplacent en binaire. 256 est 100000000 en binaire, mais le nombre ‘ t prend en charge plus de 8 chiffres binaires, coupant ainsi le 1, ce qui en fait 00000000, qui est 0. Pour certains problèmes pas vraiment liés , cela provoque le problème, plutôt que de vous remettre au niveau 0.

Réponse

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 permettra pas à un joueur davancer dun plateau à lautre sans manger 244 points et stimulants, mais le problème écrase de nombreux points; cela laissera le joueur incapable de manger 244 points et énergisants, et donc incapable de quitter le Si vous vous demandez pourquoi le problème se produit, le code machine de 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 mémoire décran assez curieuse qui place des octets consécutifs horizontalement en haut et en bas de lécran, et verticalement au milieu. Cela a probablement été fait pour faire en sorte que lors du dessin de la partie principale de lécran, les adresses mémoire soient incrémentées dune puissance de deux toutes les huit lignes de balayage (notez que le «haut» du moniteur se trouve sur le côté droit du image). Essentiellement, les circuits convertissaient les index de ligne / colonne en adresses 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 implémenté dans des circuits plutôt que dans du code. Cela a permis de calculer les adresses décran en utilisant une paire de compteurs et un circuit pour sélectionner lune des deux permutations de ces bits de compteurs « . Le matériel requis pour augmenter ladresse mémoire de 36 pour chaque ligne au lieu de 32 aurait été plus compliqué par comparaison.

Commentaires

  • @Kevin: Le score indiqué est le maximum possible dans Pac Man car le bug ci-dessus (en code C qui est fonctionnellement similaire au code Z80 dans le jeu lui-même) écrit des fichiers inutiles sur une grande partie de lécran, écrasant les points que le joueur est censé manger. Lautre réponse indique ce qui se passe visiblement pour limiter le score, mais ce qui précède indique (pour les lecteurs) pourquoi cela se produit (et suggère que la limitation à 256 niveaux n’était probablement pas ‘ délibérée mais se produit plutôt en raison d’un oubli).
  • Les deux réponses complètent très bien la question.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *