パックマンのウィキペディアページによると、最高スコアは3333360です。ポイント。これはパーフェクトゲームと呼ばれ、すでに3人の異なる人々によって達成されました。
知りたいのは、なぜ正確に3333360ポイントなのですか? 技術的な制限である必要がありますが、この数値は私の意見では意味がありません。
ゲームには255のレベルがあることを知っています。255は11111111
(神秘的に存在しているようです)は、8ビットの数字をオーバーフローさせ、ゲームのクラッシュで終了します。
しかし、3333360だけとてもランダムに見えます。
コメント
回答
パックマン博物館に3,333,360の取得に関する記事がありますポイント。そして、ここに「レベル255と256を実行している人のビデオとレベル256に関する重要な情報があります。
レベル1から255
ドットを食べる:レベルごとに240個の通常のドットがあり、それぞれ10ポイントの価値があり、レベルごとに2400ポイントを獲得します。 。さらに、それぞれ50ポイントの価値がある4つのエナジャイザードットを食べると、さらに200ポイントが得られます。
⇒ 255 × 2600 = 663000
「果物」を食べる:レベルごとに1つの食用オブジェクトがあり、特定の場合にのみ表示されます時間の長さ、レベルごとに2回。フルーツの種類に応じて、つまりプレイしているレベルに応じて、得られるポイントの量が異なります。合計で、
⇒ 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で取得できます。
目に見えるドット:ご覧のとおり、画面の半分より少し多くが欠落しています。つまり、112個の通常のドットと2個のエナジャイザードットしか取得できません。
⇒ 1220
シングルフルーツ:期限glitcに画面では、キー(「フルーツ」)を取得できるのは1回のみです
⇒ 5000
グリッチドット:グリッチアウト領域には、死ぬたびに再表示される9つの通常のドットがあります。 5回の追加ライフで、6回取得できます
⇒ 6 × 90 = 540
グランド合計
(663000 + 1220 + 540(ドット))+(2459600 + 5000(フルーツ))+(204000(ゴースト))= 3333360
コメント
- 数字がうまく加算されると思って答えを入力し始めましたが、 ' t。レベル256のポイントである奇妙さを見つけるのにかなりの時間がかかりました。
- 256は非常に重要な数字です。
- @Howdy_McGee特に8ビットプロセッサの場合…
- 256レベルのグリッチは意図的なものですか?それとも実際のグリッチですか?
- @ RPi_Awesomeness it 'は実際のグリッチであり、数値が2進数でロールオーバーすることに関係しています。 256は2進数で100000000ですが、この数値は8桁を超える2進数をサポートしていないため、1を切り取って00000000、つまり0になります。あまり関係のない問題の場合、これにより、レベル0に戻るのではなく、グリッチが発生します。
回答
スコアは制限されていますレベル256でグリッチが発生し、画面の半分がゴミで上書きされるためです。ゲームでは、244ドットとエナジャイザーを食べずに、プレーヤーが1つのボードから次のボードに進むことはできませんが、グリッチによって多くのドットが上書きされます。これにより、プレーヤーは244ドットとエナジャイザーを食べることができなくなり、レベル。「グリッチが発生する理由がわからない場合は、パックマンでフルーツを描画するためのマシンコードは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);
多くのマシンとは異なり、パックマンはかなり奇妙な画面メモリレイアウトを使用しており、連続するバイトを画面の上部と下部に水平に配置し、中央に垂直に配置します。これは、画面の主要部分を描画するときに、メモリアドレスが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);
ただし、コードではなく回路に実装されています。これにより、カウンターのペアと、それらのカウンターのビットの2つの順列の1つを選択する回路を使用して、画面アドレスを計算できました。メモリアドレスを32ではなく36ずつ増やす必要があるハードウェアは、比較。
コメント
- @Kevin:上記のバグ(機能的にはCコード)のため、記載されているスコアはパックマンで可能な最大値です。ゲーム自体のZ80コードと同様に、画面の大部分に役に立たないジャンクを書き込み、プレーヤーが食べるはずのドットを上書きします。他の回答は、スコアを制限するために目に見える形で何が起こるかを示していますが、上記は(技術的な志向の場合)読者)なぜ発生するのか(そして、256レベルの制限はおそらく意図的ではなく'意図的ではなく、見落としが原因で発生することを示唆しています)。
- どちらの回答も質問を非常によく補完します。
100000000
)が、8ビットを含むように割り当てられたメモリに格納されていることです。最初のは、他の何かに割り当てられたメモリに書き込まれ、ゲーム全体が本質的に破損します。