Conform paginii Wikipedia pentru Pac-Man , cel mai mare scor posibil este 3333360 puncte. Se numește un joc perfect și a fost realizat deja de 3 persoane diferite.

Ce vreau să știu este: DE CE este exact 3333360 puncte? Trebuie să fie o limitare tehnică, dar acest număr nu are sens în opinia mea.

Știu că jocul are 255 de niveluri. 255 este 11111111 în binar și nivelul 256 (care pare să existe în mod mistic) aduce cifra de 8 biți la o revărsare, care se termină printr-o blocare a jocului.

Dar, 3333360 doar pare atât de aleatoriu.

Comentarii

  • Nu ‘ nu este un tehnic limitare la fel de mult ca și scorul pe care îl obțineți dacă mâncați fiecare peletă și bucată de fruct pe o viață la fiecare nivel.
  • Problema nu este faptul că încearcă să încarce nivelul 0. Problema este că numărul 256 (100000000 în binar) este stocat în memorie care a fost alocată doar pentru a conține 8 biți. Primul este, prin urmare, scris în memorie care este atribuită altcuiva, ceea ce în mod esențial corupe întregul joc.
  • @LeeWhite: Acel ‘ s nu chiar problema. Problema este că codul care ar trebui să atragă fructele începe prin presupunerea că numărul fructelor ar trebui să se potrivească cu numărul de nivel, verifică dacă ‘ este mai mare de 7 și dacă da îl setează la 7. Apoi, logica de a reda fructele funcționează desenând în mod repetat un fruct, diminuând numărul de fructe de extras și buclând până când decrementul dă zero. Dacă numărul de nivel a fost zero, codul încearcă să atragă 256 de fructe, suprascriind memoria afișată dincolo de regiunea în care ar trebui să meargă fructele.
  • @LeeWhite Sună foarte puțin probabil. În calitate de inginer software, nu ‘ știu niciun procesor care funcționează în acest fel. Dacă un număr depășește, ‘ 1 ‘ purtat în stânga numărului dispare (și poate, de asemenea, stabilește un semnal de depășire, în funcție de arhitectură.) Nu ‘ nu știu de nicio arhitectură care ar putea revărsa un număr în următoarea adresă de memorie, mai ales că matematica nu ‘ t se întâmplă de obicei direct pe datele din memorie oricum. Matematica se întâmplă în general pe datele stocate în registre și, după terminarea matematicii, datele sunt scrise înapoi în memorie, dacă este necesar.
  • @willoller Nu, nu este ‘ t. Depășirea numerelor întregi și depășirea bufferului sunt două concepte complet separate, fără legătură. Depășirea bufferului este rezultatul eșecului de a verifica limitele memoriei alocate înainte de a scrie ceva (sau de a citi ceva din ea, după caz). Depășirea întregului este atunci când efectuați o operație aritmetică care are ca rezultat un număr mai mare (mai mic ) decât valoarea maximă (minimă) acceptată de tipul de date. Depășirea numărului întreg nu provoacă o depășire a tamponului. De obicei, face ca întregul să ‘ să înfășoare ‘ la celălalt capăt al gamei sale de valori valide.

Răspuns

Muzeul Pacman conține un articol despre obținerea a 3.333.360 Puncte. Și aici „un videoclip al unui tip care face nivelurile 255 și 256 , cu informații importante referitoare la nivelul 256.

Nivelul 1 până la 255

Puncte de mâncare : Există 240 de puncte obișnuite pe nivel, în valoare de 10 puncte fiecare, compensând 2400 de puncte pe nivel . În plus, consumul celor patru puncte energizante, în valoare de 50 de puncte fiecare, vă oferă încă 200 de puncte.
⇒ 255 × 2600 = 663000

Consumul de „fructe” : Există un obiect comestibil pe nivel care apare doar pentru un anumit cantitate de timp, de două ori pe nivel. În funcție de tipul de fructe, care, la rândul său, depinde de nivelul pe care îl jucați, obțineți o cantitate diferită de puncte. În total, primiți
⇒ 2 × (100 + 300 + 2 × 500 + 2 × 700 + 2 × 1000 + 2 × 2000 + 2 × 3000 + 243 × 5000) = 2459600

Eating Ghosts : Consumul unei fantome în aceeași perioadă de energizare vă oferă 200 de puncte și dublu pentru fiecare fantomă suplimentară pe care o mănânci (400, 800 și 1600 pentru fantomele 2-4, respectiv).Puteți face acest lucru de 4 ori pe nivel, dar numai până la nivelul 16 și la nivelul 18, deoarece fantomele nu clipesc la nivelul 17 și 19+ ⇒ 4 × 3000 × 17 = 204000

Adăugarea acestora numerele produc 3326600 , doar 6760 punctele sunt perfecte.

Nivelul 256

Acest număr impar poate fi obținut la nivelul 256 defect.

Captură de ecran a unui nivel Pac-Man normal Captură de ecran a unui nivel Pac-Man defect

Puncte vizibile : După cum puteți vedea, lipsește puțin mai mult de jumătate din ecran, ceea ce înseamnă că puteți obține doar 112 puncte normale și 2 puncte energizante.
⇒ 1220

Fruct unic [div id = „b2255038a5”>

: scadent la glitc ecran ecran, puteți obține cheia („fructul”) o singură dată
⇒ 5000

Puncte cu probleme : Există 9 puncte normale în regiunea cu probleme care reapar de fiecare dată când mori. La 5 vieți suplimentare, le puteți obține de 6 ori
⇒ 6 × 90 = 540

Grand Total

(663000 + 1220 + 540 (puncte)) + (2459600 + 5000 (fruct)) + (204000 (fantome)) = 3333360

Comentarii

  • Am început să tastez răspunsul, gândindu-mă că numerele se vor aduna bine și nu au reușit ‘ t. Am luat destul timp să aflu despre ciudățenia care reprezintă punctele de la nivelul 256.
  • 256 este un număr destul de important.
  • @Howdy_McGee Mai ales pe un procesor pe 8 biți …
  • Problema nivelului 256 este intenționată – sau este ceva care este o problemă reală?
  • @ RPi_Awesomeness ‘ este o problemă reală, care are de-a face cu numerele care se rostogolesc în binar. 256 este 100000000 în binar, dar numărul nu acceptă ‘ t mai mult de 8 cifre binare, decupând astfel 1, ceea ce îl face 00000000, care este 0. Pentru unele probleme care nu au legătură cu adevărat , acest lucru provoacă probleme, mai degrabă decât să te plaseze din nou la nivelul 0.

Răspuns

Scorul este limitat deoarece apare o problemă la nivelul 256 care suprascrie jumătate din ecran cu gunoi. Jocul câștigat nu va lăsa un jucător să avanseze de pe o tablă pe următoarea fără să mănânce 244 de puncte și energizante, dar eroarea suprascrie multe dintre puncte; acest lucru îl va lăsa pe jucător să nu poată mânca 244 de puncte și energizante și, astfel, să nu poată părăsi nivel. În cazul în care vă întrebați de ce apare eroarea, codul mașinii din Pac-Man pentru a desena fructele este similar cu codul 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); 

Rețineți că, spre deosebire de multe mașini, Pac Man folosește un aspect destul de curios de memorie a ecranului, care plasează octeți consecutivi orizontal în partea superioară și inferioară a ecranului și vertical în mijloc. Acest lucru s-a făcut cel mai probabil pentru a face astfel încât atunci când se desenează porțiunea principală a ecranului, adresele de memorie să fie mărite cu o putere de două la fiecare opt linii de scanare (rețineți că „partea de sus” a monitorului se află în partea dreaptă a imagine). În esență, circuitele au convertit indicii de rând / coloană la adrese de memorie cu o mapare similară cu:

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

, dar implementată în circuit, mai degrabă decât în cod. Acest lucru a permis ca adresele de ecran să fie calculate prin utilizarea unei perechi de contoare și a unui circuit pentru a selecta una din cele două permutări ale acelor „biți” ai contoarelor. comparație.

Comentarii

  • @Kevin: Scorul declarat este maximul posibil în Pac Man deoarece bug-ul afișat mai sus (în codul C care este funcțional similar codului Z80 din joc) scrie junk inutile pe o mare parte a ecranului, suprascriind punctele pe care jucătorul ar trebui să le mănânce. Celălalt răspuns afirmă ce se întâmplă vizibil pentru a limita scorul, dar cele de mai sus indică (pentru cititori) de ce se întâmplă (și sugerează că limitarea la 256 de nivele probabil că nu a fost ‘ t deliberată, ci se întâmplă din cauza unei supravegheri).
  • Ambele răspunsuri completează întrebarea extrem de bine.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *