I følge Wikipedia-siden for Pac-Man er høyest mulig poengsum 3333360 poeng. Det kalles et perfekt spill, og det ble allerede oppnådd av 3 forskjellige personer.
Det jeg vil vite er: HVORFOR er det nøyaktig 3333360 poeng? Det må være en teknisk begrensning, men dette tallet gir ingen mening etter min mening.
Jeg vet at spillet har 255 nivåer. 255 er 11111111
i binær og nivå 256 (som ser ut til å eksistere mystisk) bringer 8-bits siffer til et overløp, som ender i et krasj i spillet.
Men, 3333360 bare virker så tilfeldig.
Kommentarer
Svar
Pacman Museum har en artikkel om å få 3 333 360 Poeng. Og her «sa video av en eller annen fyr som gjør nivå 255 og 256 , med viktig informasjon angående nivå 256.
Nivå 1 til 255
Spise prikker : Det er 240 vanlige prikker per nivå, verdt 10 poeng hver, Netting 2400 poeng per nivå Hvis du spiser de fire energizer-punktene, verdt 50 poeng hver, gir du deg ytterligere 200 poeng.
⇒ 255 × 2600 = 663000
Spise «frukt» : Det er ett spiselig objekt per nivå som bare vises for en viss mengde tid, to ganger per nivå. Avhengig av type frukt, som igjen avhenger av nivået du spiller, får du en annen mengde poeng. Totalt får du
⇒ 2 × (100 + 300 + 2 × 500 + 2 × 700 + 2 × 1000 + 2 × 2000 + 2 × 3000 + 243 × 5000) = 2459600
Spise spøkelser : Å spise et spøkelse i samme energizer-periode gir deg 200 poeng, og doble det for hvert ekstra spøkelse du spiser (400, 800 og 1600 for henholdsvis 2. til 4. spøkelse).Du kan gjøre dette 4 ganger per nivå, men bare opp til nivå 16, og på nivå 18, siden spøkelsene ikke blinker i nivå 17 og 19+ ⇒ 4 × 3000 × 17 = 204000
Legger til disse tall gir 3326600 , bare 6760 poeng som ikke er perfekt.
Nivå 256
Dette oddetallet kan fås i det utglittede nivået 256.
Synlige prikker : Som du ser, mangler litt mer enn halvparten av skjermen, noe som betyr at du bare kan få 112 normale og 2 energizer-punkter.
⇒ 1220
Enkelt frukt : Due til glitc hed-skjerm, du kan bare få nøkkelen («frukten») en gang
⇒ 5000
Glitched Dots : Det er 9 normale prikker i det glitched out-området som dukker opp igjen hver gang du dør. Ved fem ekstra liv kan du få dem 6 ganger
⇒ 6 × 90 = 540
Grand Totalt
(663000 + 1220 + 540 (prikker)) + (2459600 + 5000 (frukt)) + (204000 (spøkelser)) = 3333360
Kommentarer
- Jeg begynte å skrive inn svaret, og trodde at tallene ville slå seg helt fint, og de gjorde ikke ‘ t. Tok litt tid å finne ut om det rare som er poengene i nivå 256.
- 256 er ganske viktig.
- @Howdy_McGee Spesielt på en 8-biters prosessor …
- Er 256. nivå feil med vilje – eller er det noe som er en faktisk feil?
- @ RPi_Awesomeness det ‘ er en faktisk feil, som har å gjøre med tall som ruller over i binær. 256 er 100000000 i binær, men tallet støtter ikke ‘ t mer enn 8 binære sifre, og kutter dermed 1, noe som gjør det til 00000000, som er 0. For noen ikke egentlig relaterte problemer , dette forårsaker feil, i stedet for å sette deg i nivå 0 igjen.
Svar
Poengsummen er begrenset fordi det oppstår en feil på nivå 256 som overskriver halvparten av skjermen med søppel. Spillet lar ikke en spiller gå videre fra et brett til det neste uten å spise 244 prikker og energizer, men feilen overskriver mange av prikkene. Dette vil gjøre at spilleren ikke kan spise 244 prikker og energizer, og dermed ikke kan forlate Hvis du lurer på hvorfor feilen oppstår, ligner maskinkoden i Pac-Man å tegne fruktene 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);
Merk at i motsetning til mange maskiner bruker Pac Man et ganske nysgjerrig skjermminnelayout som plasserer påfølgende byte horisontalt på toppen og bunnen av skjermen, og vertikalt i midten. Dette ble mest sannsynlig gjort for å gjøre det slik at når du tegner hoveddelen av skjermen, vil minneadressene økes med en kraft på to av åtte skannelinjer (merk at «toppen» av skjermen er på høyre side av bilde). I hovedsak konverterte kretser rad- / kolonneindekser til minneadresser med en tilordning som ligner på:
//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 implementert i kretser i stedet for kode. Dette tillot at skjermadresser kan beregnes ved hjelp av et par tellere og et kretsløp for å velge en av to permutasjoner av disse tellerbitene. Maskinvaren som kreves for å ha minneadresse øker med 36 for hver rad i stedet for 32 ville ha vært mer komplisert av sammenligning.
Kommentarer
- @Kevin: Den oppgitte poengsummen er den maksimale mulige i Pac Man fordi feilen vist ovenfor (i C-kode som er funksjonelt ligner Z80-koden i selve spillet) skriver ubrukelig søppel over mye av skjermen, og overskriver prikkene spilleren skal spise. Det andre svaret sier hva som synlig skjer for å begrense poengsummen, men det ovennevnte indikerer (for teknisk innstilt lesere) hvorfor det skjer (og antyder at begrensningen på 256 nivå sannsynligvis ikke var ‘ t bevisst, men i stedet oppstår på grunn av et tilsyn).
- Begge svarene utfyller spørsmålet svært godt.
100000000
i binær) lagres i minnet som bare er tildelt til å inneholde 8 biter. Den første skrives derfor inn i minnet som er tildelt noe annet, noe som egentlig ødelegger hele spillet.