見出し画像

マリオメーカープログラミング入門(1)

はじめに

 この記事は、Nintendo Switchソフト『スーパーマリオメーカー 2』でプログラミングを行うための入門書を目指して書かれたものです。

 マリオメーカーは自分で好きなようにブロックを並べてコースを作るゲームですが、そんなマリオメーカーでプログラミングするってどういうことでしょうか? まずはこちらをご覧ください。

マリオメーカーAI作ってみた https://youtu.be/QAmRUDuaQjI

 この動画は旧作『スーパーマリオメーカー』(Wii U専用ソフト)でマルバツゲームの後手を指すソフトウェア(コース)を制作し解説動画としてまとめたものです。"マリオメーカーでプログラミングする"ことがどのようなものか、雰囲気だけでも感じ取っていただけたのではないでしょうか。

動画内では プログラミング・回路設計・AI開発 などの用語をごちゃまぜに使用しています。この連載においてもこれらの用語は学術的定義によらずおおらかに使用していくことになりそうです。何卒ご了承下さい。

 この動画は2017年に作ったものなのですが、その後2019年にマリオメーカー2が発売され、作ったコースのほぼ全てが動作しないことが分かりました。実は、マリオメーカーとマリオメーカー2の動作には軽微な違いがあったのです。(その後、自分の仕事に忙殺される日々が続いたこともあって、マリオメーカープログラミングから離れる時期が長く続きました…)

 そこで、この記事(この連載?)では、マリオメーカープログラミング技術のアップデートを目標として、マリオメーカー2のプログラミング解説記事を執筆しながら、マリオメーカープログラミング技術のマリオメーカー2への移管も行うことにしました。マリオメーカー2での動作を確認しながらの執筆となるため、更新は遅くなるかもしれないですが、マリオメーカー2で動作するマルバツゲームソフトウェアの完成を目指し、記事執筆もプログラミングも同時並行で進めていこうと思います!

連載記事の内容は下記のようなものになる予定です。
・AND回路(★今回の記事)
・OR回路・NOT回路
・NOR回路・NAND回路:ブール論理
・いろんな論理回路を作る:主加法標準形
・足し算①:半加算器
・足し算②:全加算器
・足し算③:多bitの加算器
・引き算:減算器
・いろいろな回路:デコーダ
・7セグメント表示機:ルックアップテーブル
・マルバツゲーム

「足し算①」以降はほとんど作れてないのですが、なんとかなると思い込み解説記事を書きながらコースづくりもしていきます!

* * *

論理回路

 それでは本題に入りましょう。この記事では、プログラミングを学ぶ上で一番基本的な概念である「論理」について学びながら、マリオメーカー上で論理演算を行う回路を作っていきます。

 全てのデジタル機器は、情報を処理したり記憶したりする回路からできています。その主たる構成要素は、論理回路です。この記事では、基本的な論理回路であるAND論理、OR論理からはじめ、様々な種類の回路を作っていきます。これからマリオメーカープログラミングを学ぶことで、複雑な論理であっても、基本的な論理回路を組み合わせてつくれるということが理解できでしょう。

 また、この記事はマリオメーカーをプレイしなくとも理解できように書いているつもりですが、可能であればぜひ実際にマリオメーカーで回路を作り、動作を確認することをおすすめします。本書を読み、マリオメーカーで遊んでみることにより、論理回路を深く理解できるようになります。

AND回路

回路の基本
 まずは、代表的な論理回路であるAND論理から始めましょう。下記に、AND論理の真理値表を示します。この論理は、2つの入力がともに「1」であるときだけ「1」を出力する論理です。

画像4

 このAND論理をマリオメーカーで作ったのがこちらになります。一見してもどんな動作をするのかわからないので、順を追って学んでいきましょう。

画像5

(訂正)図のブラックパックンは普通のパックンフラワーに置き換えてください

操作方法
 図のハテナブロックA, Bが入力装置です。入力は「ブロックを叩くかどうか」で表現します。叩くとき「1」叩かないとき「0」と定義します。

 この回路は、入力のあと、動作開始の操作をする必要があります。 入力完了後、動作開始用のハテナブロックSを叩いてください。ハテナブロックからスーパーキノコが出現し、演算開始となります。

 出力部は、音符ブロックから「ファイヤーフラワーが出現するかどうか」で表現します。ファイヤーフラワーが出現するとき「1」、しないとき「0」を表します。

操作方法まとめ
入力の定義
・ハテナブロックを叩く =「1」
・ハテナブロックを叩かない =「0」
動作開始の操作
・入力完了後、動作開始用のブロックを叩く
出力の定義
・ファイヤーフラワーあり =「1」
・ファイヤーフラワーなし =「0」

回路の動作と真理値表
 それでは、この回路の動作を確認しましょう。1つのハテナブロックに対して 叩く・叩かないの2通りの状態があり、そのハテナブロックが2つあるので、入力の組み合わせは全部で2×2 = 4通り存在します。
 下記に全ての入力パターンの回路動作を示します。

画像6

 各入力の組み合わせに対する動作は以下のとおりです。

(a) ハテナブロックが叩かれないとき
入力が両方とも「0」のときには、動作開始ハテナブロックSからでたスーパーキノコはパックンフラワーに遮られ、右端の音符ブロックに届きません。そのため、出力は「0」です。

(b)(c) ハテナブロックの一方が叩かれたとき
ハテナブロック上にあるパックンフラワーは、「1」を入力した際の衝撃を受けて倒れます。しかし、もう一方のパックンフラワーの位置は変わらず遮られたままのため、スーパーキノコは右の音符ブロックに届きません。そのためこの場合も出力は「0」です。

(d) 両方のハテナブロックが叩かれたとき
入力が両方とも「1」のとき、2つのパックンフラワーが倒されるため遮るものがなくなり、スーパーキノコは右端の音符ブロックを叩くことができます。そのため、ファイヤーフラワーが出現し、出力は「1」となります。

 この動作をまとめると、下のようになります。

画像7

 入力はハテナブロックを叩くとき「1」、出力はファイヤーフラワーが出現するとき「1」という定義でした。ということは、この真理値表は、AND論理の真理値表と全く同じですね。よって、「このコースはAND論理を演算する」といえることになります。

 こうしてみると、意外と単純なコースで理解するのも簡単だったのではないでしょうか? 今後の記事でも、このようにコースを作って行きます。

この記事が気に入ったらサポートをしてみませんか?