Pac-Man 용 Wikipedia 페이지 에 따르면 가능한 최고 점수는 3333360입니다. 포인트들. “완벽한 게임”이라고하며 이미 3 명의 다른 사람이 이룬 게임입니다.

내가 알고 싶은 것은 : 왜 정확히 3333360 점입니까? 기술적 인 제한이있는 것 같지만 제 생각에는이 숫자가 의미가 없습니다.

게임에 255 개의 레벨이 있음을 알고 있습니다. 255는 11111111 바이너리 및 레벨 256 (신비하게도 존재하는 것 같음)에서 8 비트 숫자가 오버플로되어 게임 충돌로 끝납니다.

하지만 3333360은 너무 무작위로 보입니다.

댓글

  • 그것이 ' 기술적 모든 레벨에서 하나의 삶에서 모든 알약과 과일 조각을 먹으면 얻을 수있는 점수만큼 제한됩니다.
  • 문제는 레벨 0을로드하려고한다는 사실이 아닙니다. 문제는 숫자 256 (이진수로 100000000)이 8 비트 만 포함하도록 할당 된 메모리에 저장된다는 것입니다. 첫 번째 는 다른 것에 할당 된 메모리에 기록되어 본질적으로 전체 게임을 손상시킵니다.
  • @LeeWhite : That ' s 문제가 아닙니다. 문제는 과일을 그려야하는 코드가 과일의 수가 레벨 번호와 일치해야한다고 가정하여 시작하여 7보다 큰 '인지 확인하고, 그렇다면 7로 설정합니다. 그런 다음 과일을 렌더링하는 논리는 과일을 반복적으로 그리고 그릴 과일 수를 줄이며 감소가 0이 될 때까지 반복하여 작동합니다. 레벨 번호가 0이면 코드는 256 개의 과일을 그리려고 시도하여 과일이 이동해야하는 영역 너머의 디스플레이 메모리를 덮어 씁니다.
  • @LeeWhite 그럴 것 같지 않습니다. 소프트웨어 엔지니어로서 저는 ' 그 방식으로 작동하는 CPU를 모릅니다. 숫자가 오버플로되면 숫자 왼쪽에있는 ' 1 '가 사라집니다 (또한 오버플로 플래그를 설정하고, 아키텍처에 따라 다름.) ' 다음 메모리 주소로 숫자가 오버플로되는 아키텍처를 알지 못합니다. 특히 수학에서는 그렇지 않습니다. ' t는 일반적으로 어쨌든 메모리의 데이터에서 직접 발생합니다. 수학은 일반적으로 레지스터에 저장된 데이터에서 발생하며 수학이 완료된 후 필요한 경우 데이터가 메모리에 다시 기록됩니다.
  • @willoller 아니요, 아닙니다. ' t. 정수 오버플로와 버퍼 오버플로는 완전히 별개의 관련없는 개념입니다. 버퍼 오버플로는 할당 된 메모리에 무언가를 쓰기 전에 (또는 경우에 따라 무언가를 읽기 전에) 할당 된 메모리의 경계를 확인하지 못한 결과입니다. 정수 오버플로는 숫자가 더 커지는 (더 작은) 산술 연산을 수행 할 때 발생합니다. )는 데이터 유형에서 지원하는 최대 (최소) 값보다 높습니다. 정수 오버플로는 버퍼 오버플로를 일으키지 않습니다. 일반적으로 정수를 ' ' 유효한 값 범위의 다른 끝으로 둘러싸도록합니다.

답변

팩맨 박물관 에는 3,333,360 개를 얻는 것에 대한 기사가 있습니다. 포인트들. 그리고 여기에 “레벨 255와 256을하는 사람의 동영상 이 있으며, 레벨 256에 관한 중요한 정보가 있습니다.

레벨 1에서 255까지

h2>

먹는 점 : 레벨 당 240 개의 일반 도트가 있으며 각 10 포인트의 가치가 있으며 레벨 당 2400 포인트를 상계합니다. . 또한 각각 50 포인트의 가치가있는 네 개의 에너자이저 점을 먹으면 200 포인트가 추가로 제공됩니다.
⇒ 255 × 2600 = 663000

“과일”먹기 : 특정 사람에게만 나타나는 식용 개체가 수준 당 하나씩 있습니다. 레벨 당 두 번의 시간입니다. 플레이하는 레벨에 따라 달라지는 과일의 종류에 따라 점수가 달라집니다. 총점은
⇒ 2 × (100 + 300 + 2 × 500 + 2 × 700 + 2 × 1000 + 2 × 2000 + 2 × 3000 + 243 × 5000) = 2459600

유령을 먹으면 : 같은 에너자이저 기간에 유령을 먹으면 200 점을 얻습니다. 추가로 먹는 모든 유령 (2 번째부터 4 번째 유령에 대해 각각 400, 800 및 1600).레벨 당 4 번 수행 할 수 있지만 레벨 16까지만 가능하며 레벨 18에서는 레벨 17 및 19+에서는 유령이 깜박이지 않기 때문에 ⇒ 4 × 3000 × 17 = 204000

추가 숫자는 3326600 , 단지 6760 포인트는 완벽하지 않습니다.

레벨 256

이 홀수는 글리치 아웃 레벨 256에서 얻을 수 있습니다.

일반 팩맨 레벨 스크린 샷 글리치 된 팩맨 레벨 스크린 샷

Visible Dots : 보시다시피 화면의 절반 이상이 누락되어 일반 도트 112 개와 에너자이저 도트 2 개만 얻을 수 있습니다.
⇒ 1220

단일 과일 : 마감 글릿에 화면에서 키 ( “과일”)는 한 번만 얻을 수 있습니다.
⇒ 5000

글리치 드 도트 : 글리치 아웃 된 영역에는 죽을 때마다 다시 나타나는 9 개의 일반 도트가 있습니다. 5 개의 추가 생명에서 6 번 얻을 수 있습니다.
⇒ 6 × 90 = 540

그랜드 합계

(663000 + 1220 + 540 (점)) + (2459600 + 5000 (과일)) + (204000 (고스트)) = 3333360

댓글

  • 나는 숫자가 합산 될 것이라고 생각하고 답을 입력하기 시작했습니다. ' t. 레벨 256의 포인트 인 이상한 점을 알아내는 데 꽤 많은 시간이 걸렸습니다.
  • 256은 상당히 중요한 숫자입니다.
  • @Howdy_McGee 특히 8 비트 프로세서에서 …
  • 256 번째 레벨 글리치는 의도적으로 발생합니까? 아니면 실제 글리치입니까?
  • @ RPi_Awesomeness는 ' 실제 결함이며 이진수로 롤오버되는 숫자와 관련이 있습니다. 256은 이진수로 100000000이지만 숫자는 ' 8 개 이상의 이진수를 지원하지 않으므로 1을 잘라 00000000, 즉 0이됩니다. 실제로 관련되지 않은 문제의 경우 , 이로 인해 다시 레벨 0에 들어 가지 않고 결함이 발생합니다.

답변

점수가 제한되어 있습니다. 화면의 절반을 쓰레기로 덮어 쓰는 레벨 256에서 글리치가 발생하기 때문입니다. 이 게임은 플레이어가 244 개의 점과 에너자이저를 먹지 않고 한 보드에서 다음 보드로 진행하도록 허용하지 않지만 결함이 많은 점을 덮어 씁니다. 이로 인해 플레이어는 244 개의 점과 에너자이저를 먹지 못해 떠날 수 없게됩니다. 글리치가 발생하는 이유가 궁금하다면 과일을 그리는 Pac-Man의 기계어 코드는 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); 

많은 컴퓨터와 달리 Pac Man은 연속 바이트를 화면 상단과 하단에 수평으로 배치하고 중간에 수직으로 배치하는 다소 흥미로운 화면 메모리 레이아웃을 사용합니다. 이것은 화면의 주요 부분을 그릴 때 메모리 주소가 8 개의 스캔 라인마다 2의 거듭 제곱만큼 증가하도록하기위한 것입니다 (모니터의 “상단”은 화면의 오른쪽에 있습니다. 그림). 기본적으로 회로는 행 / 열 인덱스를 다음과 유사한 매핑을 사용하여 메모리 주소로 변환했지만 코드가 아닌 회로에서 구현되었습니다.

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

이로 인해 한 쌍의 카운터와 회로를 사용하여 해당 카운터의 두 순열 중 하나를 선택하여 화면 주소를 계산할 수있었습니다 “비트. 각 행에 대해 메모리 주소가 32 개가 아닌 36 씩 증가하는 데 필요한 하드웨어는 다음과 같이 더 복잡해졌습니다. 비교.

코멘트

  • @Kevin : 명시된 점수는 위에 표시된 버그 (기능적으로 C 코드에서 게임 자체의 Z80 코드와 유사) 화면의 많은 부분에 쓸모없는 쓰레기를 작성하여 플레이어가 먹어야 할 점을 덮어 씁니다. 다른 답변은 점수를 제한하는 데 눈에 띄게 발생하는 일을 나타내지 만 위의 내용은 기술적으로 독자) 이런 일이 발생하는지 (그리고 256 레벨 제한이 의도적이지 않았으나 감독으로 인해 발생했을 가능성이 있음을 암시합니다. ')
  • 두 답변 모두 질문을 매우 잘 보완합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다