Enligt Wikipedia-sidan för Pac-Man är högsta möjliga poäng 3333360 poäng. Det kallas ett perfekt spel och det uppnåddes redan av tre olika personer.
Vad jag vill veta är: VARFÖR är det exakt 3333360 poäng? Det måste vara en teknisk begränsning, men det här numret är ingen mening enligt min mening.
Jag vet att spelet har 255 nivåer. 255 är 11111111
i binär och nivå 256 (som verkar existera mystiskt) ger 8-bitarsiffran ett överflöd, vilket slutar i en krasch av spelet.
Men, 3333360 bara verkar så slumpmässig.
Kommentarer
Svar
Pacman Museum har en artikel om att få 3 333 360 Poäng. Och här ”sa video av någon kille som gör nivå 255 och 256 , med viktig information angående nivå 256.
Nivå 1 till 255
Äta prickar : Det finns 240 vanliga prickar per nivå, värda 10 poäng vardera, Netting 2400 poäng per nivå Dessutom får du ytterligare 200 poäng genom att äta de fyra energiseringspunkterna, värda 50 poäng vardera.
⇒ 255 × 2600 = 663000
Äta ”frukt” : Det finns ett ätbart objekt per nivå som bara visas för en viss tid, två gånger per nivå. Beroende på vilken typ av frukt som i sin tur beror på nivån du spelar får du olika poäng. Totalt får du
⇒ 2 × (100 + 300 + 2 × 500 + 2 × 700 + 2 × 1000 + 2 × 2000 + 2 × 3000 + 243 × 5000) = 2459600
Äta spöken : Att äta ett spöke under samma energiseringsperiod ger dig 200 poäng och dubbelt så mycket för varje ytterligare spöke du äter (400, 800 och 1600 för 2: a till 4: e spöket, respektive).Du kan göra detta fyra gånger per nivå, men bara upp till nivå 16, och på nivå 18, eftersom spöken inte blinkar i nivå 17 och 19+ ⇒ 4 × 3000 × 17 = 204000
Lägga till dessa siffror ger 3326600 , bara 6760 poäng som är perfekta.
Nivå 256
Detta udda tal kan fås i den utglättade nivån 256.
Synliga punkter : Som du kan se saknas lite mer än hälften av skärmen, vilket innebär att du bara kan få 112 normala och två energiseringspunkter.
⇒ 1220
Enkel frukt : Due till glitc hed-skärm, du kan bara få nyckeln (”frukten”) en gång
⇒ 5000
Glitched Dots : Det finns nio normala prickar i det glitched out-området som visas igen varje gång du dör. Vid fem extra liv kan du få dem 6 gånger
⇒ 6 × 90 = 540
Grand Totalt
(663000 + 1220 + 540 (punkter)) + (2459600 + 5000 (frukt)) + (204000 (spöken)) = 3333360
Kommentarer
- Jag började skriva svaret och tänkte att siffrorna skulle lägga sig bra och de gjorde inte ’ t. Det tog ganska lång tid att ta reda på det konstiga som är poängen i nivå 256.
- 256 är ett ganska viktigt nummer.
- @Howdy_McGee Speciellt på en 8-bitars processor …
- Är 256: e nivåfel avsiktligt – eller är det något som är en faktisk fel?
- @ RPi_Awesomeness det ’ är en faktisk fel, som har att göra med siffror som rullar över i binär. 256 är 100000000 i binär, men numret stöder inte ’ t mer än åtta binära siffror, vilket minskar 1, vilket gör det till 00000000, vilket är 0. För vissa inte riktigt relaterade problem , detta orsakar problem, snarare än att sätta dig i nivå 0 igen.
Svar
Poängen är begränsad eftersom en fel uppstår på nivå 256 som skriver över halva skärmen med skräp. Spelet kommer inte att låta en spelare avancera från ett bräde till ett annat utan att äta 244 prickar och energizer, men glitchen skriver över många av prickarna. Detta gör att spelaren inte kan äta 244 prickar och energizer, och därmed inte kan lämna Om du undrar över varför fel uppstår, liknar maskinkoden i Pac-Man för att rita frukten C-koden:
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);
Observera att till skillnad från många maskiner använder Pac Man en ganska nyfiken skärmminneslayout som placerar på varandra följande byte horisontellt på toppen och botten av skärmen och vertikalt i mitten. Detta gjordes troligen för att göra det så att minnesadresserna ökades med en effekt på två var åtta skanningsrader när du ritar den huvudsakliga delen av skärmen (notera att skärmens ”övre” är på höger sida av bild). I huvudsak konverterade kretsar rad / kolumnindex till minnesadresser med en mappning som liknar:
//Using column values in the range 30 to 1, wrapping after 63... address = (column & 32) ? (row << 5) | (column & 31) : ((28 | (column & 3)) << 5) | row);
men implementeras i kretsar snarare än kod. Detta gjorde det möjligt att beräkna skärmadresser med hjälp av ett par räknare och en krets för att välja en av två permutationer av dessa räknarbitar. Hårdvaran som krävs för att ha minnesadressen ökar med 36 för varje rad snarare än 32 skulle ha varit mer komplicerat av jämförelse.
Kommentarer
- @Kevin: Den angivna poängen är det högsta möjliga i Pac Man eftersom felet som visas ovan (i C-kod som är funktionellt liknande Z80-koden i själva spelet) skriver värdelös skräp över mycket av skärmen och skriver över de punkter som spelaren ska äta. Det andra svaret anger vad som synligt händer för att begränsa poängen, men ovanstående indikerar (för tekniskt sinnade läsare) varför det händer (och föreslår att begränsningen på 256 nivåer troligen inte var ’ t avsiktlig utan istället sker på grund av en tillsyn).
- Båda svaren kompletterar frågan mycket bra.
100000000
i binärt format) lagras i minnet som bara har tilldelats för att innehålla 8 bitar. Den första skrivs därför i minnet som tilldelas något annat, vilket i grund och botten förstör hela spelet.