Pac-Manin wikipedia-sivun mukaan korkein mahdollinen pistemäärä on 3333360. pistettä. Sitä kutsutaan täydelliseksi peliksi ja sen saavuttivat jo 3 erilaista ihmistä.

Haluan tietää: MIKSI se on täsmälleen 3333360 pistettä? Sen on oltava tekninen rajoitus, mutta mielestäni tällä numerolla ei ole mitään järkeä.

Tiedän, että pelillä on 255 tasoa. 255 on 11111111 binääritasolla ja tasolla 256 (joka näyttää olevan mystisesti) tuo 8-bittisen numeron ylivuotoon, joka päättyy pelin kaatumiseen.

Mutta, 3333360 vain vaikuttaa niin satunnaiselta.

Kommentit

  • Se ’ ei ole tekninen rajoitus niin paljon kuin pistemäärä, jonka satut saamaan, jos syöt jokaisen pelletin ja hedelmäpalan yhdessä elämässä kaikilla tasoilla.
  • Ongelmana ei ole se, että se yrittää ladata tason 0. Ongelmana on, että numero 256 (100000000 binaarissa) tallennetaan muistiin, joka on varattu sisältämään vain 8 bittiä. Ensimmäinen on siis kirjoitettu muistiin, joka on osoitettu jollekin muulle, mikä turmelee olennaisesti koko pelin.
  • @LeeWhite: Se ’ s ei aivan asia. Ongelmana on, että hedelmien piirtämiseen tarkoitettu koodi alkaa olettaen, että hedelmien lukumäärän on vastattava tason lukua, tarkistaa onko se ’ suurempi kuin 7 ja jos näin on asettaa sen arvoksi 7. Sitten logiikka hedelmien renderoimiseksi toimii vetämällä toistuvasti hedelmää, vähentämällä piirrettävien hedelmien lukumäärää ja silmukkaamalla, kunnes vähennys tuottaa nollan. Jos tason numero oli nolla, koodi yrittää piirtää 256 hedelmää korvaten näyttömuistin sen alueen ulkopuolella, jonne hedelmien on tarkoitus mennä.
  • @LeeWhite Se kuulostaa hyvin epätodennäköiseltä. Ohjelmistosuunnittelijana en ’ tiedä mitään tällä tavoin toimivia suorittimia. Jos numero ylittyy, numeron vasemmalle puolelle siirretty ’ 1 ’ katoaa (ja ehkä asettaa myös ylivuotolipun, arkkitehtuurista riippuen.) En ’ ole tietoinen mistään arkkitehtuureista, jotka ylittävät numeron seuraavaan muistiosoitteeseen, varsinkin kun matematiikka ei ole ’ t tapahtuu yleensä suoraan muistissa olevista tiedoista. Matematiikka tapahtuu yleensä rekistereihin tallennetuista tiedoista, ja matematiikan päätyttyä tiedot kirjoitetaan tarvittaessa takaisin muistiin.
  • @willoller Ei, se ei ole ’ t. Kokonaisluku ja puskurin ylivuoto ovat kaksi täysin erillistä, toisistaan riippumatonta käsitettä. Puskurin ylivuoto on seurausta siitä, että allokoidun muistin rajoja ei ole tarkistettu ennen kuin kirjoitat jotain sille (tai luet jotain siitä, tapauksesta riippuen.) Kokonaisluvun ylivuoto on, kun suoritat aritmeettisen operaation, jonka tuloksena on luku suurempi (pienempi ) kuin tietotyypin tukema suurin (pienin) arvo. Kokonaisluvun ylivuoto ei aiheuta puskurin ylivuotoa. Yleensä se vain saa kokonaisluvun ’ kiertymään ’ ympärille kelvollisten arvojensa toiseen päähän.

vastaus

Pacman-museossa on artikkeli 3333 360 hankkimisesta Pisteet. Ja tässä ”sa video joku kaveri, joka tekee tasoja 255 ja 256 , tärkeitä tietoja tasosta 256.

Tasot 1 – 255

Pisteiden syöminen : Tasoa kohti on 240 säännöllistä pistettä, jokaisen arvo on 10 pistettä, nettoutus 2400 pistettä per taso . Lisäksi neljän 50 pisteen arvoisen energizer-pisteen syöminen antaa sinulle vielä 200 pistettä.
⇒ 255 × 2600 = 663000

Hedelmien syöminen : Tasoa kohti on yksi syötävä esine, joka näkyy vain tietyllä aika, kahdesti tasoa kohden. Hedelmätyypistä riippuen, mikä puolestaan riippuu pelaamastasi tasosta, saat eri määrän pisteitä. Yhteensä saat
⇒ 2 × (100 + 300 + 2 × 500 + 2 × 700 + 2 × 1000 + 2 × 2000 + 2 × 3000 + 243 × 5000) = 2459600

Haamujen syöminen : Haamun syöminen samalla jännitejaksolla antaa 200 pistettä ja kaksinkertaistaa sen jokainen ylimääräinen haamu, jonka syöt (400, 800 ja 1600 2.-4. haamulle).Voit tehdä tämän neljä kertaa per taso, mutta vain tasolle 16 asti, ja tasolla 18 , koska haamut eivät vilku tasoilla 17 ja 19+ ⇒ 4 × 3000 × 17 = 204000

Näiden lisääminen numerot antavat 3326600 , vain 6760 ei ole täydellisiä.

Taso 256

Tämän parittoman luvun voi saada poistetulta tasolta 256.

Näyttökuva normaalista Pac-Man-tasosta Näyttökuva häiriintyneestä Pac-Man-tasosta

Näkyvät pisteet : Kuten näette, hieman yli puolet näytöstä puuttuu, mikä tarkoittaa, että saat vain 112 normaalia ja 2 jännitepistettä.
⇒ 1220

Yksi hedelmä : Erääntyy glitc hed-näytössä, voit saada avaimen (”hedelmän”) vain kerran
⇒ 5000

Häiriöpisteet : Häiriöalueella on 9 normaalia pistettä, jotka ilmestyvät joka kerta kun kuolet. Viiden lisäelämän yhteydessä saat ne kuusi kertaa
⇒ 6 × 90 = 540

Grand Yhteensä

(663000 + 1220 + 540 (pistettä)) + (2459600 + 5000 (hedelmä)) + (204000 (haamuja)) = 3333360

Kommentit

  • Aloin kirjoittaa vastausta ajattelemalla, että numerot laskisivat yhteen ja ne eivät ’ t. Kesti jonkin aikaa selvittääksesi oudoista, jotka ovat tason 256 pisteitä.
  • 256 on melko tärkeä numero.
  • @Howdy_McGee Varsinkin 8-bittisessä prosessorissa …
  • Onko 256. tason virhe tarkoituksella – vai onko kyse todellisesta häiriöstä?
  • @ RPi_Awesomeness se on ’ todellinen häiriö, joka liittyy binäärisesti kaatuvien numeroiden kanssa. 256 on 100000000 binaarisena, mutta numero ei tue ’ t yli 8 binaarista numeroa, leikkaamalla siten 1, jolloin se on 00000000, mikä on 0. Joillekin ei liity ongelmaan , tämä aiheuttaa häiriön sen sijaan, että asettaisit sinut taas tasolle 0.

Vastaa

Pisteet ovat rajalliset koska tasolla 256 tapahtuu häiriö, joka korvaa puolet näytöstä roskilla. Peli ei anna pelaajan edetä taululta seuraavalle syömättä 244 pistettä ja energisoijaa, mutta häiriö korvaa monet pisteistä; tämä jättää pelaajan kykenemättömäksi syömään 244 pistettä ja energisoijaa, eikä siten pysty poistumaan Jos mietit miksi häiriö tapahtuu, Pac-Manin koneen koodi hedelmien piirtämiseksi on samanlainen kuin C-koodi:

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); 

Huomaa, että toisin kuin monet koneet, Pac Man käyttää melko utelias näytön muistin asettelua, joka sijoittaa peräkkäiset tavut vaakasuoraan ruudun ylä- ja alaosaan ja pystysuunnassa keskelle. Tämä tehtiin todennäköisesti tekemään niin, että piirrettäessä ruudun pääosaa muistiosoitteita lisätään kahdella kahdeksalla skannausviivalla (huomaa, että näytön ”yläosa” on näytön oikeassa reunassa. kuva). Pohjapiirit muuntivat rivi / sarake-indeksit muistiosoitteiksi vastaavalla kartoituksella kuin:

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

, mutta ne toteutetaan piireissä koodin sijasta. Tämä mahdollisti näyttöosoitteiden laskemisen käyttämällä laskuriparia ja piiriä valitaksesi yhden näiden laskuribittien kahdesta permutaatiosta. Laitteisto, jonka vaaditaan muistiosoitteen kasvavan 36 kullekin riville 32: n sijasta, olisi ollut monimutkaisempaa vertailu.

Kommentit

  • @Kevin: Annettu piste on suurin mahdollinen Pac Manissa, koska yllä esitetty vika (C-koodissa, joka on toiminnallisesti samanlainen kuin itse pelin Z80-koodi) kirjoittaa hyödytön roskapostin suurelle osalle näyttöä, korvaa pisteet, jotka pelaajan on tarkoitus syödä. Toisessa vastauksessa todetaan, mitä tapahtuu näkyvästi pisteiden rajoittamiseksi, mutta yllä oleva osoittaa (teknisesti ajatteleville lukijat) miksi se tapahtuu (ja viittaa siihen, että 256-tason rajoitusta ei luultavasti tarkoitettu ’ tarkoituksella, vaan se johtuu valvonnasta).
  • Molemmat vastaukset täydentävät kysymystä erittäin hyvin.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *