マインクラフトでプログラミングさせてみた

# マインクラフトでプログラミングさせてみた
マインクラフト面白いですよね。
子ども(現在小3)と、半年ぐらい前から一緒に遊ぶようになりました。
教育関係の展示会に行くと、マインクラフトを教育目的に使えるらしいので、学校でプログラミング教育が始まる前にプログラミングがどんなものか、体験させてみることにしました。

## 用意したもの
- Minecraft for Windows 10(ストア版)
- Code Connection for Minecraft
- キーボードとマウス

マインクラフトは、タブレットタイプのPCとコントローラーで遊ばせていましたが、Code Connectionを扱うにはマウスが、数字の指定やコマンドの入力にはキーボードが欲しいですね。

## インストール
### マインクラフト
マイクロソフトストアからインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222522/bd2c047b-0912-ca26-d46d-1f1303fb8fbd.png)
「マインクラフト」と入力すれば出てきます。
ストア版のマインクラフトは、Education Editionが内包されているそうなので、これを使います。

### Code Connection for Minecraft
マイクロソフトストアからインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222522/67aa7b02-dc58-6e76-f53c-57e77ede5fce.png)
「code connection」と検索すれば出てきます。

## プログラミングの準備
### Code Connection for Minecraftの起動
起動すると、以下の画面が出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222522/0fd6379e-b214-5ed9-dba6-abf59dcc5280.png)
出てきたコマンドをコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222522/d846eed2-b7ec-a4d8-80a4-a6ffef878acd.png)
ボタンを押せばコピーできるので、Ctrl+cとか教えなくても大丈夫です。

### マインクラフトを起動して、ワールドを作成
マインクラフトを起動します。
「新しく作る」を選択して、「世界を新しく作成」を選択します。
#### ゲームの設定
| 設定項目 | 値 | 備考 |
|:-:|:-:|:--|
| デフォルトゲームモード | クリエイティブ | 実績をオフにしますか？と聞かれるので「続ける」 |
| 世界のタイプ | フラット | まずは、平らな場所で始めた方がいいでしょう |
| チートの実行 | オン | **これを入れないと、プログラミングできません!** |
| 常に昼間 |オン | |
|モブの出現|オフ| モブに邪魔されると面倒なのでオフにします |
|モブによる妨害|オフ| モブに邪魔されると面倒なのでオフにします |
「作成する」でゲームを開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222522/991ee9b8-88aa-075c-9aa4-c2c0ed102c33.png)

### チャットウィンドウでコマンドを入力
先程Code Connection for Minecraftに表示されたコマンドを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222522/c30d1c25-b343-9fe7-b653-b2316961b99f.png)

すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222522/74ab05f3-e9d5-9cae-eaa5-e279f64a50af.png)

というメッセージが表示されるはずです。
### エディタの選択
Alt+Tabでタスクを Code Connection for Minecraft に切り換えると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222522/61a73130-6486-4403-dd2d-75a86383bbe9.png)

「使用するエディター:」という画面になっているはずです。
今回は、「MakeCode」を選択します。
マイプロジェクトで「新しいプロジェクトを作成」を選択すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222522/c6c11c45-f85f-ae0e-b1d1-47335ec8231d.png)

MakeCodeの編集画面になります。

### エージェント君の確認
Alt+Tabでマインクラフトにタスクを切り換えると、エージェント君がこっちを見ているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222522/b22e1988-961d-3daf-30fa-ec5014408ec8.png)


## 試してみる
今回選んだMakeCodeは、ブロックを組み合わせてプログラムを作っていく、プログラミング教材によくあるタイプのものです。
簡単に扱えるので、小学生でも楽に操作できます。
### 使うブロック
エージェント君に仕事させるということを体験するので、以下のグループのブロックを使います。
「プレイヤー」グループ
「エージェント」グループ
「論理」グループ

### 動かしてみる
まずは、エージェントが命令どおりに動くことを確認してもらいます。
![エージェントを前に5ブロック進める](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222522/69754b55-91ad-1441-3214-a67626593a3e.png)

とプログラムして、マインクラフトのチャットで「run」と入力して、エージェントが5歩前進することを確認します。
### 条件の使い方
「論理」グループに所謂条件分岐があるので、これで条件を理解させます。
![もし<エージェントがブロックが前にあるか確認させる>なら](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222522/8f46c8dd-ae2c-0a61-c182-0d83b44da08b.png)

こんな風にプログラムを修正します。
この際、「もし」の菱形に菱形のブロックが入ることを理解してもらいましょう。

このプログラムで、エージェントの前に壁を置くと破壊すること、破壊したあとにもう一度プログラムを実行すると、歩きだすことが理解できるかと思います。
## 目的を与える
ここまで理解できたところで、エージェントに家を作るようにプログラムさせる宿題を与えてみました。
![必死にプログラムを考える子ども](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222522/0dd17c46-0cf2-3682-01bc-4f7d4e2c5349.png)

条件分岐は使わないまま、家の土台を作らせ始めました。
なかなか思い通りにはいかなかったのもの、指示どおりに動くエージェントを必死にコントロールして楽しんでいました。

## これからの目標
### ループを使いこなす
繰り返しが便利であること、二重ループとか、少し頭の痛くなるようなものにもチャレンジさせます。
### 条件分岐に頭を悩ませる
家を作るプログラムが完成したら、ワールドをフラットではないところで動作させます。
地形によって思い通りに動作しないことが分かると、地形を条件として扱ってくれるのではないかと思っています。
### 変数を使わせる
どう使わせたら納得できるか、まだ考えきれていませんが…。

## 終わりに
今回は、まだ始めたばかりなので、高い集中力で楽しんでいますが、続けていけるかどうか、これからのモチベーションの与え方次第かと思っています。
ダレてきて、それを回復させられたら、また記事にしたいと思います。