ちゃるまが!Charmaga!

アニメ&ゲーム、情報系記事書いています!

スーパーマリオで学ぶ情報学!①

 今回は3日連続投稿の2日目!プログラムってどうなってるの?情報学って?という方に向けて簡単に!ざっくりと!楽しく!紹介するコーナーです!それでは早速Let's-a GO!

スーパーマリオブラザーズとは?

本題に入る前に、念のためお話します。本作は1985年にファミリーコンピュータ(以下、ファミコン)用ソフトとして発売した横スクロールアクションゲームです。(当時のジャンル名はファンタスティックアドベンチャーゲーム
 大魔王クッパにさらわれたキノコ王国のピーチ姫を救うべく主人公であるマリオと双子の弟ルイージが陸海空を巡り、あらゆるアイテムを駆使しながら冒険に出るというストーリーです。

あの裏ワザ、実は…

本作をプレイしたことがある方ならチャレンジしたことのある「無限1UP

 無限1UPとは、一度も着地せずに連続で敵を踏み続けるとスコアが加算され、次第に残機が1ずつ増えていくという仕組みです。
 作者の任天堂・宮本 茂さん曰く当時バグ(不具合)でそうなったそうです。現在では仕様に至りましたが、初代マリオはバグのため、128回以上残機を増やした後に1度でもミスをすると即ゲームオーバーになってしまいます。

 今回は何故、無限1UPで128回以上してミスをすると即ゲームオーバーになってしまうのか?前回の復習も兼ねて学んでいきましょう!

コンピュータってなあに?

 「コンピュータ」とは、計算や入ってきた情報を処理する機械です。

 私たちが普段日常的に扱う数字は1, 2, 3, 4, 5, 6, 7, 8, 9, 0の10種類を使います。
これを数学用語で「10進数(10進法)」といいます。
一方、コンピュータ内部では計算処理を行う際に0, 1の2種類しか使いません。
これを数学用語では「2進数(2進法)」と習います。(高校の数学Aなど)

表しかた

 0と1は10進数も2進数も同じです。では、2以降は2進数でどう表現するのかといいますと…

「『10』(イチゼロ)!」※ジュウではありません!

要は足し算と値の繰り返しです。

  • 10進数の3=10と1を足して11。
  • 10進数の4=11と1を足して繰り上げて100。
  • 10進数の5=100と1を足して101…

というふうに計算していきます。

両手でわかる2進数

 2進数なんて知らない!orもう覚えてない!といった方でも大丈夫です!この指で表す方法を学べば定期テストの得点にもつながりますので覚えててくださいね。

 これはマリオたちも登場する「大乱闘スマッシュブラザーズSPECIAL」というゲームでディレクターを務めている有限会社ソラ・桜井 政博さんキャラクターを紹介した際に紹介していたものです。

数え方はいくつかありますが、今回は桜井さんの方法で図に表しました。

ビットってなあに?

 前回もお話しした内容ですが改めて、ファミコンスーパーファミコンといったゲーム機でよく聞く8ビット16ビットというものは、処理の桁数のことです。

 先程の5の2進数である「101」は3桁=3ビットです。このつまり8ビットは00000000のような8桁でコンピュータが処理されます。

2進数はスイッチのON/OFFで捉えるとわかりやすいかもです。その数値に先ほど折り曲げた指が「ON = 1」ですので、その折り曲げた数値の数字を足せば前項の通りになります。うっそだーと思うかもしれませんが、1ずつ足してみてください。なるんです!

【本題】8ビットの制約

 さて、本題です。128回以上無限1UPして1度でもミスをすると即ゲームオーバーになる仕組みを学んでいくわけですが、そのうえで欠かせないのはファミコンの処理性能です。ファミコンの処理性能は8ビット=8桁の0、1で処理を行います。早速様子を見てみましょう。

マリオの残機が127まで増え続けました!もう1踏み!

01111111(127)+ 00000001(1)=

もうお分かりですね?1を足すと繰り上がっていくので、10000000になります!ということは、10進数では128になりま…

せん!!(…は?)

ビットの裏に潜む闇

 実はビットの一番左先頭には重要な役割を担っています。改めて、2進数は0と1でしか表せません。つまり符号という概念がないんです。
 しかし、私たちは電卓やコンピュータで「-(以下、マイナス)」という記号を目にします。では、マイナスを表現するとき、コンピュータはどう表現するかといいますと、ビットの一番先頭(左)でプラス(先頭が0)マイナス(先頭が1)を表現しています。

 つまり、1000000は10進数における128ではなく-128になります。この、左先頭のビットのことを「符号ビット」といいます。

 ちなみに-1を8ビットの2進数で表すと「11111111」になります。そこに1を足せば「00000000 = 0」に戻ると。電卓は実際こうやって動いているんですね。

結論

 スーパーマリオブラザーズ無限1UPで128以上1UPしてミスするとゲームオーバーになるのは「先頭の符号ビットによる符号変換」が原因!私たちが操作しているその裏側では、「3, 4, 5…126, 127, -128, -127, -126…」となっていってるんですね。

余談

 128回以上1UPをしたことがある方ならわかりますが、この後クリアすると残機が数字ではなくオブジェクトになっていますよね。

 では、次世代機・スーパーファミコン向けに作った場合どうなるのかといいますと、スーパーファミコンはCPUが16ビットなので「0000000010000000」となり、符号ビットに触れることがなくなります。なお、符号ビットがなくなったわけではなく先頭のビットに1が来ればその式はマイナスになります。

まとめ

  • コンピュータ:計算や入ってきた情報を処理する機械
  • 10進数(10進法):私たちが普段扱う数字1, 2, 3, 4, 5, 6, 7, 8, 9, 0の10種類
  • 2進数(2進法):コンピュータ上で計算処理を行う際に使う0, 1の2種類の数字
  • ビット:処理の桁数(例:101=3桁=3ビット)
  • 符号ビット:左先頭にある、符号を表すビット

 コメントでは感想や質問などのコメント受付も行っていますので、お待ちしております。では、今回は以上です。ご覧くださいましてありがとうございました!

←前回の内容はこちら! 次の内容はこちら→