Según la página de Wikipedia para Pac-Man , la puntuación más alta posible es 3333360 puntos. Se llama un juego perfecto y ya lo lograron 3 personas diferentes.

Lo que quiero saber es: ¿POR QUÉ es exactamente 3333360 puntos? Debe ser una limitación técnica, pero este número no tiene sentido en mi opinión.

Sé que el juego tiene 255 niveles. 255 es 11111111 en binario y nivel 256 (que parece existir místicamente) hace que el dígito de 8 bits se desborde, lo que termina en un bloqueo del juego.

Pero, 3333360 solo parece tan aleatorio.

Comentarios

  • No es ‘ un técnico limitación tanto como el puntaje que obtienes si comes cada pellet y pieza de fruta en una vida en cada nivel.
  • El problema no es el hecho de que intenta cargar el nivel 0. El problema es que el número 256 (100000000 en binario) se almacena en una memoria que solo se ha asignado para contener 8 bits. El primer , por lo tanto, se escribe en la memoria que se asigna a otra cosa, que esencialmente corrompe todo el juego.
  • @LeeWhite: Eso ‘ s no es el problema. El problema es que el código que se supone que extrae las frutas comienza asumiendo que la cantidad de frutas debe coincidir con el número de nivel, verifica si ‘ es mayor que 7, y si es así lo establece en 7. Luego, la lógica para producir las frutas funciona extrayendo una fruta repetidamente, disminuyendo el número de frutas a extraer y haciendo un bucle hasta que la disminución arroje cero. Si el número de nivel era cero, el código intenta extraer 256 frutas, sobrescribiendo la memoria de visualización más allá de la región donde se supone que deben ir las frutas.
  • @LeeWhite Eso suena muy poco probable. Como ingeniero de software, no ‘ no conozco ninguna CPU que funcione de esa manera. Si un número se desborda, el ‘ 1 ‘ que se encuentra a la izquierda del número simplemente desaparece (y tal vez también establece un indicador de desbordamiento, dependiendo de la arquitectura.) Yo ‘ no conozco ninguna arquitectura que desborde un número en la siguiente dirección de memoria, especialmente porque las matemáticas no ‘ t generalmente ocurre directamente en los datos en la memoria de todos modos. Las matemáticas generalmente ocurren con datos almacenados en registros y, una vez que se completan, los datos se vuelven a escribir en la memoria si es necesario.
  • @willoller No, no es ‘ t. El desbordamiento de enteros y el desbordamiento de búfer son dos conceptos completamente separados y no relacionados. El desbordamiento del búfer es el resultado de no verificar los límites de la memoria asignada antes de escribir algo en ella (o leer algo de ella, según sea el caso). El desbordamiento de enteros es cuando se realiza una operación aritmética que da como resultado un número mayor (menor ) que el valor máximo (mínimo) admitido por el tipo de datos. El desbordamiento de enteros no provoca un desbordamiento del búfer. Por lo general, solo hace que el entero ‘ se ajuste ‘ al otro extremo de su rango de valores válidos.

Respuesta

El Pacman Museum tiene un artículo sobre cómo obtener 3.333.360 Puntos. Y aquí «sa video de un tipo en el nivel 255 y 256 , con información importante sobre el nivel 256.

Nivel 1 al 255

Puntos para comer : hay 240 puntos regulares por nivel, con un valor de 10 puntos cada uno, lo que genera 2400 puntos por nivel . Además, comer los cuatro puntos energizantes, que valen 50 puntos cada uno, te da otros 200 puntos.
⇒ 255 × 2600 = 663000

Comiendo «fruta» : hay un objeto comestible por nivel que solo aparece en un determinado cantidad de tiempo, dos veces por nivel. Según el tipo de fruta, que a su vez depende del nivel en el que estés jugando, obtienes una cantidad diferente de puntos. En total, obtienes
⇒ 2 × (100 + 300 + 2 × 500 + 2 × 700 + 2 × 1000 + 2 × 2000 + 2 × 3000 + 243 × 5000) = 2459600

Comiendo fantasmas : Comer un fantasma en el mismo período de energía te da 200 puntos, y el doble por cada fantasma adicional que coma (400, 800 y 1600 para el segundo al cuarto fantasma, respectivamente).Puedes hacer esto 4 veces por nivel, pero solo hasta el nivel 16, y en el nivel 18, ya que los fantasmas no parpadean en el nivel 17 y 19+ ⇒ 4 × 3000 × 17 = 204000

Añadiendo estos números produce 3326600 , solo 6760 puntos menos que perfectos.

Nivel 256

Este número impar se puede obtener en el nivel 256 con fallas.

Captura de pantalla de un nivel Pac-Man normal Captura de pantalla de un nivel Pac-Man con fallas

Puntos visibles : Como puede ver, falta un poco más de la mitad de la pantalla, lo que significa que solo puede obtener 112 puntos normales y 2 puntos energizadores.
⇒ 1220

Fruta única : vencimiento a la glitc hed, solo puede obtener la clave (la «fruta») una vez
⇒ 5000

Puntos con fallas : Hay 9 puntos normales en la región con fallas que reaparecen cada vez que mueres. Con 5 vidas adicionales, puedes obtenerlas 6 veces
⇒ 6 × 90 = 540

Grand Total

(663000 + 1220 + 540 (puntos)) + (2459600 + 5000 (fruta)) + (204000 (fantasmas)) = 3333360

Comentarios

  • Empecé a escribir la respuesta, pensando que los números se sumarían bien y no ‘ t. Me tomó bastante tiempo descubrir la rareza de los puntos en el nivel 256.
  • 256 es un número bastante importante.
  • @Howdy_McGee Especialmente en un procesador de 8 bits …
  • ¿Es la falla del nivel 256 a propósito, o es algo que es una falla real?
  • @ RPi_Awesomeness ‘ es un problema técnico real, que tiene que ver con números que se mueven en binario. 256 es 100000000 en binario, pero el número no ‘ t admite más de 8 dígitos binarios, por lo que se corta el 1, lo que lo convierte en 00000000, que es 0. Para algunos problemas no realmente relacionados , esto causa el error, en lugar de ponerlo en el nivel 0 nuevamente.

Respuesta

La puntuación es limitada porque se produce un error en el nivel 256 que sobrescribe la mitad de la pantalla con basura. El juego no permitirá que un jugador avance de un tablero al siguiente sin comerse 244 puntos y energizantes, pero la falla sobrescribe muchos de los puntos; esto dejará al jugador incapaz de comer 244 puntos y energizantes, y por lo tanto no podrá dejar el nivel. En caso de que se esté preguntando por qué ocurre el error, el código de máquina en Pac-Man para dibujar los frutos es similar al código 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); 

Tenga en cuenta que, a diferencia de muchas máquinas, Pac Man utiliza un diseño de memoria de pantalla bastante curioso que coloca bytes consecutivos horizontalmente en la parte superior e inferior de la pantalla y verticalmente en el medio. Lo más probable es que esto se hiciera para que al dibujar la parte principal de la pantalla, las direcciones de memoria se incrementaran en una potencia de dos cada ocho líneas de escaneo (tenga en cuenta que la «parte superior» del monitor está en el lado derecho de la fotografía). Esencialmente, los circuitos convertían índices de filas / columnas en direcciones de memoria con un mapeo similar 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); 

pero implementados en circuitos en lugar de código. Esto permitió que las direcciones de pantalla se calcularan mediante el uso de un par de contadores y un circuito para seleccionar una de las dos permutaciones de los bits de esos contadores. El hardware requerido para que la dirección de memoria aumentara en 36 para cada fila en lugar de 32 habría sido más complicado por comparación.

Comentarios

  • @Kevin: El puntaje indicado es el máximo posible en Pac Man porque el error que se muestra arriba (en código C que es funcionalmente similar al código Z80 en el juego en sí) escribe basura inútil en gran parte de la pantalla, sobreescribiendo los puntos que se supone que el jugador debe comer. La otra respuesta indica qué sucede visiblemente para limitar la puntuación, pero lo anterior indica (para personas con mentalidad técnica lectores) por qué sucede (y sugiere que la limitación de 256 niveles probablemente no fue ‘ t deliberada, sino que ocurre debido a un descuido).
  • Ambas respuestas complementan muy bien la pregunta.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *