量子ゲーム QiskitBlocksの遊び方

量子コンピューターを学習するゲーム **QiskitBlocks** (https://github.com/JavaFXpert/QiskitBlocks) を紹介します。
ぱっと見、マイクラがないと使えないのでは？と思われる方もいるかもしれませんが、オープンソースの Minetest (http://minetest.net) を使っているので無料で遊べますので、ぜひ遊んでみてください！
<img width="744" alt="quantum_circuits_garden_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/572a4ddd-118f-1fd2-6115-31a8f40d6dba.png">


# はじめに
量子コンピューター関連のゲームはこれまでにもいくつか作られていて、教育目的のものが多いですが、例えば、
- [Hello Quantum](https://helloquantum.mybluemix.net/)：スマホで遊びながら量子ゲートを学べる。詳しい解説は昨年の@Ayumu_walkerさんの[記事](https://qiita.com/Ayumu_walker/items/2308c76cd095faf3d04a)
- [Entanglion](https://entanglion.github.io/)：ボードゲームで遊びながらエンタングルメントを学べる。qiitaにもルールの日本語訳がありましたが、某勉強会による日本語版ルールは[こちら](https://github.com/t-imamichi/entanglion/tree/ja/game-ja)。

などがございました。
その他、こちら[Qiskit Experiments](https://community.qiskit.org/experiments)にも新しいものがいくつか紹介されています。

本日は、遊びながら量子コンピューターのプログラミング言語である[Qiskit](https://qiskit.org/) まで学べてしまう、**QiskitBlocks** を紹介いたします。作者は[James Weaver](https://twitter.com/JavaFXpert)さん。[Qiskit Advocate](https://community.qiskit.org/advocates/)の方です。

# インストール方法
まず、Minetestのインストールが必要です。Minetestのサイト([http://minetest.net](http://minetest.net))からインストールします。MacOSの場合はこちらも参照（https://forum.minetest.net/viewtopic.php?t=9190 または https://www.techspot.com/downloads/5585-minetest.html )(2020/03/13追記修正)。

Minetestを起動したら、「コンテンツ」タブを選択し、「オンラインコンテンツを見る」をクリックします。
<img width="546" alt="install_01.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/8cf98238-7b06-5aac-c6d3-7fd8d1514374.jpeg">
次の画面で「QiskitBlocks」と入力し、「検索」ボタンを押すとQiskitBlocksが見つかりますので、こちらをインストールします。（一度インストールし、コードに更新があると「更新」ボタンになっているので、更新します。）
インストールが終わったら、「メインメニューに戻る」をクリックします。
<img width="644" alt="install_02.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/ab5747c9-4be7-b25b-b0ec-0c508828cf9f.jpeg">
QiskitBlocksは、量子状態を文章で説明している所も多いので、言語を日本語に変更します。（英語のままがよい人はここはスキップしてください。ちなみに、日本語訳は私が担当しました。）
「設定」タブを選択し、「すべての設定」をクリック。
<img width="657" alt="install_03.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/4e327e7e-f95c-160d-5540-880e3b1bad48.jpeg">
「- クライアントとサーバ」→「language」→「編集」をクリックして「ja」を選択し「保存」します。最後に「<設定ページに戻る」をクリックして戻ります。
<img width="607" alt="install_04.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/8512ebc9-df2e-1e25-6202-ffb2882d0b93.jpeg">

言語設定が終わったら、「ゲームスタート」タブをクリックし、ゲームを作ります。
<img width="582" alt="isntall_05.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/862b1c71-b376-0636-16de-a14e2c0cceba.jpeg">
下側のバーから「Qiskit」のアイコンを選択し、「クリエイティブモード」など３つの選択肢が外れていることを確認して「作成」をクリック。
<img width="535" alt="install_06.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/d6e4a440-0fbd-cce6-3fe2-d0a74c524e69.jpeg">
「ワールド名」に好きな名前を入れ、「Seed値」は「0」、「マップジェネレータ」は「flat」にして「作成」をクリック。
<img width="620" alt="install_07.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/c30c1a5e-b410-0b99-0dfb-398a72ce0e62.jpeg">
これで「ゲームプレイ」をクリックして、しばらくするとゲームを開始できます。（ゲームが起動するまでしばらく黒画面だったり暗闇だったりしますが、全て準備が整うと画面は明るいです。）

# 遊び方
各場面において、壁などにある「?」マークを右クリックすると説明やクイズが出てきて、そのクイズのとおりに量子回路を作成するというゲームです。
「?」マークに近づくために以下のキー操作で移動します。
**- W：前進
- S：後退
- A：左
- D：右**

**移動の仕方が分からなくなったら、escキーで確認**できます。
最初の灰色の建物の中の場面では、まずは壁にある「READ 1st:」を見つけて、隣の「?」を右クリックすると、このゲーム全体の説明が読めます。
![play_01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/0d6b16ad-891d-0cca-606c-97b47858f78f.jpeg)

この部屋では、量子ゲートなどのブロックの説明をそれぞれ「?」を右クリックして読むことができますが、とりあえずゲームを始めてみましょう。

この建物の地下にはたくさんのクイズの部屋があります。地下に降りていき、まず一番かんたんなレベル I の1/16の部屋に行きます。
![play_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/6e8f4a6e-f95b-2868-a42c-f93e8f849410.jpeg)
以下の手順で遊んでみましょう。

**基本的な遊び方**
**1) 壁の「?」を右クリックして説明を読む。
2) チェストを右クリックして、中から量子ゲートのブロックをゲットする。（チェストを閉じると、画面下側のホットバーにゲートが格納されます。）
3) マウスのスクロールでホットバーの量子ゲートを選択。
4) 量子回路の点線のブロックをマウスでポイントして、右クリックで量子ゲートを設置。（置いたゲートを削除するには左クリック。）**

作った回路が正解になると**黒の「Q」のブロックが金色に**変わります。
**青い液体ブロック**は、ブロックの前に示されている量子状態の測定される確率を示し、液体が満杯だと100%です。矢印は位相を示しています。
**ブロッホ球**は少し左前に傾いていて、手前に状態があるときは黄緑色、裏側の場合は紫色で表しています。

この部屋ではXゲートをおいて、|0>を|1>にできると完成です。青い液体が|1>の側に移動し、ブロッホ球もポインタが北極から南極に変わりました。
![play_03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/abe0b5c2-a155-f6d8-6eb2-79e6c61a2809.jpeg)

**完成したら、次の部屋につながるドアが開きます。**レベルIには、このような基本的な量子ゲートを学ぶ部屋が16個の部屋があります。

現在、この建物の地下にはレベル I〜IIIまであり、それぞれ以下のような特徴を持っています。それぞれ16個ずつゲームの部屋があります。（まだまだ増えそうです。）
- **地下の部屋-レベルI**：壁にある量子状態になる量子回路を作る。（基本的な量子ゲートの動きが学べます。）
- **地下の部屋-レベルII**：壁にある論理演算を量子回路で作る。（途中から真理値表をノートに書きながら進めました。）
- **地下の部屋-レベルIII**：同じく壁にある論理演算を量子回路で作る。（難易度高めです。）

だんだん難しくなっていきます。いくつか抜き出しますと、
レベルIの14問目：
<img width="465" alt="I_14_q_2.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/248ee868-0580-4e3e-6876-82f4d4d38cdf.jpeg">

レベルIIの5問目：
<img width="465" alt="II_5.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/b6ef962e-0deb-210c-2239-8f11990a191d.jpeg">



レベルIIIの３問目：
<img width="504" alt="III_3_q.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/2df5d84b-2a83-0ff9-57b8-127a4e46362d.jpeg">

2量子ビットゲートなど置き方が難しいものは、再度、壁の「?」をクリックして説明やヒントを確認しながら進めます。（**CNOTゲート**は、先に目的ビット側にXゲートを置いてから、棒状のゲートを持ってXゲートをポイントして左クリックでゲートを置きます。**CCNOTゲート**は、Eキーを使って２こ目の制御ビットにゲートを置きます。制御ビットの位置は、左クリックで一つ上の線に移動、右クリックで一つ下の線に移動できます。12/16追記修正）

## 現在あるゲーム
最初の灰色の建物の外にもゲームが広がっています。現在、確認できるゲームは、
- **灰色の建物の地下の部屋レベルI〜III**（上記説明。それぞれ16個ずつの部屋）
- **量子猫のサンドボックス**：雪の上の黄色の街灯をたどっていくとたどり着きます。不機嫌な猫が|0>、ご機嫌な猫が|1>に対応しています。
<img width="485" alt="quantum_cats_sandbox.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/4eb01a6c-edcf-59f2-5dad-1883ae95a5de.jpeg">



-**量子回路ガーデン**：灰色の建物のすぐ前の壁の向こうにあります。基本的な量子ゲートが学べます。
<img width="454" alt="garden.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/d7f3bb37-c5c7-9e83-77d4-ff377bba7385.jpeg">
- **量子テレポーテーション**：灰色の建物の裏の木の柵の下にあります。
<img width="436" alt="teleportation.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/9df3d0d6-c435-47a3-8f94-c2baca79697d.jpeg">


-**ドイチェのアルゴリズム**：量子テレポーテーションの木の柵よりさらに向こうにある赤い屋根のレンガの建物に入った先にあります。
<img width="475" alt="deutsch.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/615fc914-b44e-a262-2541-f0572ab1fac9.jpeg">




# QASMコードを取り出して、IBM Q Experienceで計算する
Qのマークのブロックを右クリックすると、QASMコードが表示されます。これをコピペして、IBM Q Experience (https://community.qiskit.org/experiments) で量子コンピューターに実際に計算をかけてみることもできます。（私の環境では~~コピペ出来ませんでしたので、手で写しましたが。。~~ → macですが、control+Cでコピー、command+Vでペーストできました。）
![CASM_01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/bd51769d-7647-786c-02f2-f7eeace08d23.jpeg)

[IBM Q Experience](https://community.qiskit.org/experiments)のホーム画面から「Create a circuit」を選んで
<img width="374" alt="CASM_05のコピー.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/5385cd5c-2180-777f-b912-35d5acc5bbb3.jpeg">

「</>」のマークのタブの左側「Circuit editor」の画面にコピーしたCASMコードを添付し、Saveしたあと「Run」で適当な量子デバイスを選んで計算を実行できます。計算はクラウド経由で実行され、混み具合にもよりますが、簡単な実験なら割とすぐ結果が返ってきます。
<img width="561" alt="CASM_06のコピー.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151117/84e99ca6-d090-6310-f9b1-4e58f20e95ee.jpeg">





# 最後に
実は、QiskitBlocksは、新しいゲームを作って、マージしてもらうことが出来ます。（詳細は[こちら](https://github.com/JavaFXpert/QiskitBlocks/blob/master/collaborating/creating_escape_rooms.md)を参照。）
灰色の建物の地下には建設中の部屋がたくさんならんでいるので、Minetestにクリエイティブモードで入って、作りたい部屋を作成していきます。それと同時に該当する部屋番号の q_esc_rooms_level_番号.lua ファイルもインストラクションを見ながら修正していきます。（q_esc_rooms_level_番号.luaファイルは、インストールしたMintestフォルダーの下にあり、私のMac環境では、home/username/ライブラリ/Application Support/minetest/games/qiskitblocks/mods/q_command の下にありました。）

今年11月に行われた、[Qiskit Camp Asia](https://community.qiskit.org/events/asia/)という量子コンピューターのハッカソンでは、2チームが新しい地下の部屋を完成させていました。
Jamesさんによると近々マージされる予定で、地下のレベルIVに**量子フーリエ変換**、レベルVに**グローバーのアルゴリズム**の部屋が拡張される予定だそうです。乞うご期待！ですね。




# 更新履歴
2020/03/13：QASMコードのmacでのコピペの方法を修正追記しました。
2020/03/13：macOS用のMintestダウンロード先を追記しました。