Podle stránky Wikipedie pro Pac-Man je nejvyšší možné skóre 3333360 bodů. Říká se jí dokonalá hra a dosáhli ji už 3 různí lidé.

Chci vědět: PROČ je to přesně 3333360 bodů? Musí to být technické omezení, ale toto číslo podle mého názoru nedává smysl.

Vím, že hra má 255 úrovní. 255 je v binárním formátu a úrovni 256 (zdá se, že existuje mysticky) přináší 8bitovou číslici k přetečení, které končí havárií hry.

Ale pouze 3333360 vypadá tak náhodně.

Komentáře

  • Není to ‚ technický omezení stejně jako skóre, kterého se vám stane, když sníte každou peletu a kousek ovoce na jednom životě v každé úrovni.
  • Problémem není skutečnost, že se pokouší načíst úroveň 0. Problém je v tom, že číslo 256 (100000000 v binárním formátu) je uloženo v paměti, která byla přidělena pouze na 8 bitů. První je proto zapsán do paměti, která je přiřazena něčemu jinému, což v podstatě poškodí celou hru.
  • @LeeWhite: To ‚ s není to úplně problém. Problém je v tom, že kód, který má kreslit plody, začíná předpokládáním, že počet plodů by měl odpovídat počtu úrovní, kontroluje, zda je ‚ s větší než 7, a pokud ano nastaví to na 7. Pak logika vykreslení plodů funguje tak, že opakovaně nakreslíte ovoce, snížíte počet ovoce, které chcete nakreslit, a opakujete smyčky, dokud dekrement nepřinese nulu. Pokud bylo číslo úrovně nula, kód se pokusí nakreslit 256 plodů, přepíše paměť displeje mimo oblast, kde mají plody jít.
  • @LeeWhite To zní velmi nepravděpodobně. Jako softwarový inženýr nevím ‚ žádné CPU, které fungují tímto způsobem. Pokud číslo přeteče, ‚ 1 ‚ nesený nalevo od čísla prostě zmizí (a možná také nastaví příznak přetečení, v závislosti na architektuře.)

nevím o žádných architekturách, které by přetekly číslo na další adresu paměti, zejména proto, že matematika ‚ t se obvykle děje přímo na datech v paměti. Matematika se obvykle děje na datech uložených v registrech a po dokončení matematiky se data v případě potřeby zapíší zpět do paměti.

  • @willoller Ne, není to ‚ t. Přetečení celého čísla a přetečení vyrovnávací paměti jsou dva zcela oddělené, nesouvisející pojmy. Přetečení vyrovnávací paměti je výsledkem selhání kontroly mezí přidělené paměti před tím, než do ní něco zapíšete (nebo případně z ní něco načtete.) Přetečení celého čísla je, když provedete aritmetickou operaci, která má za následek číslo větší (menší ) než maximální (minimální) hodnota podporovaná datovým typem. Přetečení celého čísla nezpůsobí přetečení bufferu. Obvykle to způsobí, že se celé číslo ‚ zalomí kolem ‚ na druhý konec rozsahu platných hodnot.
  • Odpověď

    Pacman Museum obsahuje článek o získání 3 333 360 Body. A tady „sa video někoho, kdo dělá úroveň 255 a 256 , s důležitými informacemi o úrovni 256.

    Úroveň 1 až 255

    Pojídání teček : Na úroveň je 240 běžných teček, každá v hodnotě 10 bodů, započtení 2400 bodů na úroveň . Kromě toho vám konzumace čtyř teček energizátoru v hodnotě 50 bodů dává dalších 200 bodů.
    ⇒ 255 × 2600 = 663000

    Jíst „ovoce“ : Na úrovni je jeden jedlý objekt, který se zobrazí pouze pro určitou množství času, dvakrát za úroveň. V závislosti na druhu ovoce, které zase závisí na úrovni, kterou hrajete, získáte různé množství bodů. Celkově získáte
    ⇒ 2 × (100 + 300 + 2 × 500 + 2 × 700 + 2 × 1000 + 2 × 2000 + 2 × 3000 + 243 × 5000) = 2459600

    Jíst duchy : Jíst duchy ve stejném období energizéru vám dá 200 bodů, což je dvojnásobek za každý další duch, kterého sníte (400, 800 a 1600 pro 2. až 4. ducha).Můžete to udělat čtyřikrát na úrovni, ale pouze do úrovně 16 a na úrovni 18 , protože duchové neblikají na úrovni 17 a 19+ ⇒ 4 × 3000 × 17 = 204000

    Přidání čísla dávají 3326600 , stačí 6760 body krátké k dokonalosti.

    Úroveň 256

    Toto liché číslo lze získat na úrovni 256 s odtržením.

    Screenshot z normální úrovně Pac-Man Screenshot ze závadné úrovně Pac-Man

    Viditelné tečky : Jak vidíte, chybí více než polovina obrazovky, což znamená, že můžete získat pouze 112 normálních a 2 energetické body.
    ⇒ 1220

    Single Fruit : splatné na glitc zabezpečená obrazovka, klíč („ovoce“) můžete získat pouze jednou
    ⇒ 5000

    Glitched Dots : V glitched out oblasti je 9 normálních teček, které se znovu objeví pokaždé, když zemřete. Při 5 životech navíc je můžete získat 6krát
    ⇒ 6 × 90 = 540

    Grand Celkem

    (663000 + 1220 + 540 (tečky)) + (2459600 + 5000 (ovoce)) + (204000 (duchové)) = 3333360

    Komentáře

    • Začal jsem psát odpověď a myslel jsem si, že čísla se sčítají dobře a neudělali to ‚ t. Trvalo dost času zjistit informace o podivnosti, kterou jsou body na úrovni 256.
    • 256 je docela důležité číslo.
    • @Howdy_McGee Zejména na 8bitovém procesoru …
    • Je závada na 256. úrovni – nebo je to něco, co je skutečnou závadou?
    • @ RPi_Awesomeness je to ‚ skutečná závada, která souvisí s převrácením čísel v binárním formátu. 256 je 100000000 v binárním formátu, ale číslo nepodporuje ‚ t více než 8 binárních číslic, čímž se odřízne 1, takže je 00000000, což je 0. Pro některé není opravdu související problém , to způsobí závadu, místo aby vás znovu dostalo na úroveň 0.

    Odpověď

    Skóre je omezené protože na úrovni 256 dojde k závadě, která přepíše polovinu obrazovky odpadky. Tato hra nenechá hráče postoupit z jedné desky na druhou, aniž by snědla 244 bodů a energizérů, ale závada přepíše mnoho bodů; hráč tak nebude schopen sníst 244 bodů a energizérů, a nebude tedy moci opustit úroveň. V případě, že vás zajímá, proč k závadě dochází, je strojový kód v Pac-Manu k vykreslení plodů podobný kódu 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); 

    Všimněte si, že na rozdíl od mnoha strojů používá Pac Man poměrně zvláštní rozložení paměti obrazovky, které umisťuje po sobě jdoucí bajty vodorovně na horní a dolní část obrazovky a svisle uprostřed. To bylo s největší pravděpodobností provedeno proto, aby při kreslení hlavní části obrazovky byly adresy paměti zvýšeny o sílu dvou každých osmi řádků skenování (všimněte si, že „horní část“ monitoru je na pravé straně obrazovky obrázek). Obvody v zásadě převáděly indexy řádků / sloupců na adresy paměti s podobným mapováním:

    //Using column values in the range 30 to 1, wrapping after 63... address = (column & 32) ? (row << 5) | (column & 31) : ((28 | (column & 3)) << 5) | row); 

    , ale implementovány spíše do obvodů než do kódu. To umožnilo vypočítat adresy obrazovky pomocí dvojice čítačů a obvodů pro výběr jedné ze dvou permutací bitů těchto čítačů. Hardware vyžadovaný pro zvýšení adresy paměti o 36 pro každý řádek namísto 32 by byl komplikovanější srovnání.

    Komentáře

    • @Kevin: Uvedené skóre je v Pac Manovi maximální možné, protože chyba uvedená výše (v kódu C, který je funkčně podobný kódu Z80 v samotné hře) píše zbytečné haraburdí na velké části obrazovky a přepisuje tečky, které má hráč jíst. Druhá odpověď uvádí, co se viditelně stane, aby se omezilo skóre, ale výše uvedené naznačuje (pro technicky smýšlející čtenáři) proč se to stane (a naznačuje, že omezení na 256 úrovních pravděpodobně nebylo ‚ záměrné, ale místo toho k němu došlo kvůli dohledu).
    • Obě odpovědi otázku mimořádně dobře doplňují.

    Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *