Amit tudni akarok: MIÉRT pontosan 3333360 pont? Technikai korlátnak kell lennie, de véleményem szerint ennek a számnak nincs értelme.
Tudom, hogy a játéknak 255 szintje van. 255 11111111
bináris és 256-os szinten (ez látszólag misztikusan létezik) a 8 bites számjegyet túlcsorduláshoz juttatja, ami a játék összeomlásával végződik.
De, 3333360 just annyira véletlenszerűnek tűnik.
Megjegyzések
nincs tudomásom egyetlen olyan architektúráról sem, amely túlcsordítana egy számot a következő memória címhez, főleg, hogy a matematika nem ‘ t általában egyébként közvetlenül a memóriában lévő adatokon történik. A matematika általában a regiszterekben tárolt adatokon történik, és a matematika befejezése után az adatokat szükség esetén visszaírják a memóriába.
Válasz
A Pacman Múzeumban van egy cikk arról, hogy szerezzen 3 333 360 Pontok. És itt egy “sa videó egy srácról, aki a 255. és a 256. szintet végzi , fontos információkkal a 256. szintről.
1–255. Szint
Pontok enni : Szintenként 240 szabályos pont van, mindegyik 10 pontot ér, szintenként 2400 pont nettósítva . Ezenkívül a négy, 50 pontot érő energizáló pont elfogyasztása további 200 pontot ad.
⇒ 255 × 2600 = 663000
“gyümölcs” fogyasztása : Szintenként egy ehető objektum van, amely csak egy bizonyosnál jelenik meg időtartam, szintenként kétszer. A gyümölcs típusától függően, amely viszont a játék szintjétől függ, más mennyiségű pontot kap. Összességében
⇒ 2 × (100 + 300 + 2 × 500 + 2 × 700 + 2 × 1000 + 2 × 2000 + 2 × 3000 + 243 × 5000) = 2459600
Szellemek fogyasztása : Ha egy szellemet eszünk ugyanabban az energiaellátó időszakban, 200 pontot kapunk, és ennek a duplája minden további kísértet, amit megeszel (400, 800 és 1600 a 2.-4. szellemért).Megteheti ezt szintenként négyszer, de csak a 16. szintig, a 18. szinten pedig a szintet, mivel a szellemek nem villognak a 17. és a 19+ szinten ⇒ 4 × 3000 × 17 = 204000
Ezek hozzáadása a számokból 3326600 , csak 6760 pontok hiányoznak a tökéletességtől.
256. szint
Ez a páratlan szám megszerezhető a kihagyott 256. szinten.
Látható pontok : Amint láthatja, a képernyő valamivel több mint fele hiányzik, ami azt jelenti, hogy csak 112 normál és 2 energizáló pontot kaphat.
⇒ 1220
Egyetlen gyümölcs : esedékes a gliccre A képernyőn csak egyszer kaphatja meg a kulcsot (a “gyümölcs”)
⇒ 5000
Elcsúszott pontok : Az elcsúszott régióban 9 normális pont található, amelyek minden alkalommal, amikor meghalsz, megjelennek. 5 további életkor 6 alkalommal megkaphatja őket
⇒ 6 × 90 = 540
Grand Összesen
(663000 + 1220 + 540 (pont)) + (2459600 + 5000 (gyümölcs)) + (204000 (szellemek)) = 3333360
Megjegyzések
- Elkezdtem begépelni a választ, arra gondoltam, hogy a számok összeadódnak, és nem sikerült ‘ t. Elég sok időt vett igénybe, hogy megtudja a furcsaságokat, amelyek a 256. szint pontjai.
- 256 elég fontos szám.
- @Howdy_McGee Különösen egy 8 bites processzoron …
- A 256. szintű hiba szándékos – vagy ez valami tényleges hiba?
- @ Az RPi_Awesomeness ‘ egy tényleges hiba, amely a binárisan gördülő számokkal függ össze. A 256 értéke 100000000 bináris formátumban, de a szám nem ‘ t támogat több mint 8 bináris számjeggyel, így az 1-et elvágva 00000000 lesz, ami 0. Néhány nem igazán kapcsolódó probléma esetén , ez okozza a hibákat, ahelyett, hogy ismét a 0. szintre állítaná.
Válasz
A pontszám korlátozott mert a 256. szinten hiba lép fel, amely a képernyő felét szeméttel írja felül. A játék nem engedi, hogy a játékos 244 pont és energizáló elfogyasztása nélkül haladjon az egyik tábláról a másikra, de a hiba felülírja a sok pontot; ezáltal a játékos nem képes enni 244 pontot és energizálót, és így nem hagyhatja el a játékot. Ha kíváncsi arra, miért következik be a hiba, a Pac-Man gépkódja a gyümölcsök levonásához hasonló a C kódhoz:
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);
Ne feledje, hogy sok géppel ellentétben a Pac Man meglehetősen furcsa képernyőmemória-elrendezést használ, amely egymást követő bájtokat vízszintesen helyezi el a képernyő tetején és alján, függőlegesen pedig középen. Ezt nagy valószínűséggel úgy tették meg, hogy a képernyő fő részének megrajzolásakor a memória címek nyolc szkennelési vonalon kettő hatványával növekedjenek (vegye figyelembe, hogy a monitor “felső része” a képernyő jobb oldalán található. kép). Lényegében az áramkörök a sorok / oszlopok indexeit memória címekké alakították át hasonló leképezéssel:
//Using column values in the range 30 to 1, wrapping after 63... address = (column & 32) ? (row << 5) | (column & 31) : ((28 | (column & 3)) << 5) | row);
, de az áramkörökben hajtották végre, nem pedig a kódot. Ez lehetővé tette a képernyő címek kiszámítását egy számláló pár és egy áramkör segítségével, hogy kiválasszuk a számláló bitek két permutációjának egyikét. A memóriacímhez szükséges hardvert minden sorhoz 36 helyett 36-ra kell növelni, nem pedig 32-et. összehasonlítás.
Megjegyzések
- @Kevin: A megadott pontszám a Pac Man-ban a lehető legnagyobb, mert a fent bemutatott hiba (funkcionálisan funkcionális C-kódban hasonlóan a játék Z80 kódjához) használhatatlan szemetet ír a képernyő nagy részébe, felülírva azokat a pontokat, amelyeket a játékosnak eszik. A másik válasz kimondja, hogy mi történik láthatóan a pontszám korlátozására, de a fentiek jelzik (technikailag gondolkodók számára olvasók) miért ez történik (és azt sugallja, hogy a 256-os korlátozás valószínűleg nem szándékos volt, hanem egy felügyelet miatt következett be).
- Mindkét válasz rendkívül jól kiegészíti a kérdést.
100000000
bináris formában) olyan memóriában tárolják, amelyet csak 8 bit tárolására osztottak ki. Az első be van írva a memóriába, amely máshoz van hozzárendelve, ami lényegében megrontja az egész játékot.