A Pac-Man Wikipédia oldala szerint a lehető legmagasabb pontszám 3333360 pontokat. Tökéletes játéknak hívják, és ezt már 3 különböző ember érte el.

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

  • Ez ‘ nem egy technikai annyi korlátozás, mint amennyi a pontszám, amelyet akkor kapsz, ha minden pelletet és gyümölcsdarabot egy szinten, minden szinten megeszel.
  • A probléma nem az a tény, hogy megpróbálja betölteni a 0. szintet. A probléma az, hogy a 256-os számot (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.
  • @LeeWhite: Ez ‘ s nem egészen a kérdés. A probléma az, hogy az a kód, amely a gyümölcsök megrajzolására szolgál, azzal kezdődik, hogy feltételezzük, hogy a gyümölcsök száma megegyezik a szint számával, ellenőrzi, hogy ‘ nagyobb-e, mint 7, és ha igen 7-re állítja. Ezután a gyümölcs renderelésének logikája úgy működik, hogy többször rajzol egy gyümölcsöt, csökkenti a levonandó gyümölcsök számát, és addig folytat ciklust, amíg a csökkenés nulla eredményt nem hoz. Ha a szint száma nulla volt, a kód 256 gyümölcsöt próbál megrajzolni, felülírva a kijelző memóriát azon a régión túl, ahová a gyümölcsöknek el kell menniük.
  • @LeeWhite Ez nagyon valószínűtlennek hangzik. Mint szoftvermérnök, nem tudok ‘ semmilyen így működő CPU-ról. Ha egy szám túlcsordul, a szám bal oldalán található ‘ 1 ‘ csak elmúlik (és esetleg beállít egy túlcsordulási zászlót is, Az architektúrától függően.)

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.

  • @willoller Nem, nem ‘ t. Az egész és a puffer túlcsordulás két teljesen különálló, egymással nem összefüggő fogalom. A puffertúlcsordulás annak az eredménye, hogy nem ellenőriztük a lefoglalt memória határait, mielőtt valamit írtunk volna neki (vagy adott esetben kiolvastunk volna belőle valamit.) Az egész szám túlcsordulás az, amikor olyan számtani műveletet hajt végre, amelynek eredményeként egy nagyobb szám (kisebb ), mint az adattípus által támogatott maximális (minimum) érték. Az egész szám túlcsordulás nem okoz puffer túlcsordulást. Ez általában csak azt eredményezi, hogy az egész ‘ körbetekerje a ‘ -t az érvényes értéktartomány másik végéig.
  • 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.

    Képernyőkép normál Pac-Man szintről Képernyőkép egy meghibásodott Pac-Man szintről

    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.

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük