子供のプログラミング学習について
こんにちは、ジュニアプログラミングスクールコードでも
小学生の受講生が増えてきて日々試行錯誤を重ねています。
少し前までは、子供向けのプログラミング学習としてScratch(スクラッチ)
によるブロックプラミングや、レゴ等を利用したロボットなど様々な教材が
ありますが、今回はマインクラフトを利用したプログラミングについて
紹介していきます。
マインクラフトでプログラミング学習
『Minecraft』(マインクラフト)は、Notch(マルクス・ペルソン)
と彼が設立した会社・Mojang ABの社員が開発したサンドボックスゲーム
である。サバイバル生活を楽しんだり、自由にブロックを配置し建築等を
楽しむことができるゲームである。日本では一般的に「マイクラ」と略される。2017年2月の時点で、全てのプラットフォームでの販売が累計1億2200万本を
突破した。
wikipediaから引用(マインクラフト)
PC版は日本で3000円程度で販売されています。
すごく人気があるゲームで、スクールに通っている生徒に
マインクラフトって知ってる?と聞いてみると、
もれなく「知ってる!」という反応が返ってきます。
マインクラフトでプログラミングを学習する方法
ゲームでプログラミングが学べるのか?と疑問に思うかもしれませんが、
かなり本格的に学ぶことができます。
なお、マインクラフトでプログラムを学ぶにあたり、いくつかの方法があります。
- Modを利用する
マインクラフトにmodという機能を追加し、マインクラフトを
プログラムで操作します。
ComputerCraftというlua言語を学ぶものや、8×9 craftという
javascriptを学ぶことができるもの、その他いろいろなmodがあります。
機能が追加できるため、幅広く楽しむことが可能ですが、設定が
若干複雑なものとなります。 - 2.RaspberryPiを利用する。
もう1つの方法はRaspbeeryPiというシングルボードコンピュータを利用する
方法です。もともと学校で基本的なコンピュータ科学の教育を促進することを
意図して製品化されているものです。
価格は安いものはなんと!650円から購入可能なものもあります。
そして教育目的ということから、プログラミング可能なマインクラフト
(Minecraft Pi Edition)を無料で利用することができるため、プログラミング
がすぐ始められるようになっています。
今回の記事ではRaspberryPi3を用いたMinecraftプログラミングを少し紹介
したいと思います。
Minecraft Pi Editionでできることとプログラミング学習
scratch(スクラッチ)でMincraftの世界を動かす
PCに不慣れな方がプログラムの考え方を学べるようにscratchの画面を使って
マインクラフトの世界を操作することができます。
次のような画面です。
スクラッチの画面でブロックを組み立てて、Minecraftの世界に命令処理を
送ることができます。 キーボードの操作に慣れていない方がプログラミングの
雰囲気や流れを掴むには最適かと思います。
pythonコーディングでMinecraftの世界を動かす
scratchでプログラミングになれてきたら、コーディングの世界を体験する
ことも可能です。
今流行りのAIやデータ解析、IoT等で利用されるPythonという言語で
マインクラフトの世界を操作することができます。
プログラミング学習で大事なこと
プログラミングで大切なこと。
コードが書けることはもちろん大切ですが、
プログラムが書けることが目的ではなく、プログラムをどう効果的に適応
していくかという部分が大事なことです。
プログラマの三大美徳は
怠惰、短気、傲慢
と言われています。
プログラマに必要とされる効率・処理速度の追求・品質にかける自尊心を
表したものです。
この3点をプログラミングの学習を通して身に着けてほしいなと日々試行錯誤
の毎日です。
マインクラフトで本格的にコーディングしてみよう
マインクラフトから話がそれました。
今回は、マインクラフト内に「CODE」という文字を書くというミッションを
自分に課して
pythonでコーディングを行いました。
実際作成したものはこちらです。
立方体を敷き詰めて文字を作成しています。
斜めからみるとこんなかんじですね。
あなたならどのようにしてこの文字をパソコンに書かせますか?
これから、この文字を書くまでにどのような流れで行ったか紹介していきます。
マインクラフトで立体図を作るにあたっての設計図
まずは設計図です。
マインクラフトはブロックを積み上げて色々なものを作っていきます。
今回「CODE」という文字を表示するに当たってどのようにブロックをならべれば
よいか図にしました。
これが設計図です。
1つ1つの四角がひとつのブロックを表しています。
単純な話、プログラムで左上から全てのマスに対してここは黒、ここは白
と指示を与えることで実現することもできますが、
これをいかに簡単にそして早く作成するかを考えるのがプログラム作成のポイントです。
いかに効率よく、シンプルに問題を解決するかを考えましょう。
私も考えました、どうやれば楽に書けるかな、どうすれば短いコードで書けるかな?
とジッと設計図を見て閃きました。
この文字を横のラインで見た時、1本以外は同じ線がペアになってない?
と気づきました。
図で表すと次の通りです。
5色の色で塗り分けました。同じ色の列は、同じ並びになっています。
塗り分けのパターンは5パターンしかないのです。
これをもとにしたプログラムがこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
from mcpi import minecraft from mcpi import block mc=minecraft.Minecraft.create() mc.postToChat("minecraft"); y = 1 #赤ラインの色分け、数字が書かれたマスは白色を表す firstLine = [0,7,8,15,16,21,22,23,24,30] #緑ラインの色分け、数字が書かれたマスは白色を表す secondLine = [0,2,3,4,5,6,7,8,10,11,12,13,15,16,18,19,20,22,23,24,26,27,28,29,30] #黄ラインの色分け、数字が書かれたマスは白色を表す ThirdLine = [0,2,3,4,5,6,7,8,10,11,12,13,15,16,18,19,20,21,23,24,26,27,28,29,30] #紫ラインの色分け、数字が書かれたマスは白色を表す FourthLine = [0,2,3,4,5,6,7,8,10,11,12,13,15,16,18,19,20,21,23,24,30] #11回繰り返す(xマスの数:行数) for x in range(11): #31回繰り返す(yマスの数:列数) for z in range(31): #xが1より大きく、9より小さい場合に行う処理 if x>1 and x<9: #xが2又は8の処理 if x==2 or x==8: if z in firstLine: mc.setBlock(x,y,z, block.SNOW_BLOCK) else: mc.setBlock(x,y,z, block.Block(35,15)) #xが3又は7の処理 elif x==3 or x==7: if z in secondLine: mc.setBlock(x,y,z, block.SNOW_BLOCK) else: mc.setBlock(x,y,z, block.Block(35,15)) #xが4又は6の処理 elif x==4 or x==6: if z in ThirdLine: mc.setBlock(x,y,z, block.SNOW_BLOCK) else: mc.setBlock(x,y,z, block.Block(35,15)) #xが5の処理 elif x==5: if z in FourthLine: mc.setBlock(x,y,z, block.SNOW_BLOCK) else: mc.setBlock(x,y,z, block.Block(35,15)) else: #上下2列を白くする処理 else: mc.setBlock(x,y,z, block.SNOW_BLOCK) #mc.setBlock(x,y,z, block.AIR) |
コメントを除けば40行余りで実現できます。
複雑な並びもこんなに簡単にできるので、応用すれば建築物を一気に立てたり
することも簡単にできそうですよね。
マインクラフトは同じネットワークにいる友達とマルチプレイも可能なので、
ゲームの中でお互いにプログラムで作成したものを見せ合うことも楽しいと思います。
マインクラフトでコーディングをする事で物体を作れる
マインクラフトを使ったプログラミングはゲーム内に存在する物体として
プログラムの結果を可視化できるため、とても楽しめるものになっています。
ぜひ、マインクラフトでプログラミングを学んで見てください。