はじめに
本記事は,LoGeek (https://x.com/nu_chs_logeek) のLT会向けに作成した記事となります.
今回使用する教育版マインクラフト (https://education.minecraft.net/ja-jp) にはMakeCodeというプログラミングの機能があり,ビジュアルプログラミングの他,Python,Java Scriptを使用してコーディングすることができます.
Pythonが使える?ということは…
AtCoderの問題,マイクラ上で解けるんじゃね?
て,ことでやってみた.
AtCoderの問題解いてみよ
今回はこちらのA問題を使用.
チャット欄にテキスト出力するだけじゃつまらないよな…
そこで見つけたのがこちら.
英数字記号をマイクラ上のブロックで出力する関数.
Pythonで書くならこんな感じ.
blocks.print("文字列", ブロックの種類, pos(プレイヤーからの距離), 出力する方角)
じゃぁまずは先ほどのA問題をPythonで普通に解いてみましょう.
n = int(input())
if n % 2 == 0:
l = n // 2 - 1
m = 2
else:
l = n // 2
m = 1
for _ in range(l):
print('-', end='')
for _ in range(m):
print('=', end='')
for _ in range(l):
print('-', end='')
まぁさすがにAC.
マイクラ上で書いてみよ
じゃぁここからマイクラ上で書いてみる.
とりあえず,そのままコピペしてみよう.
input()が使えない!!
じゃぁ,諦めてさっきのこれをPythonに変換します.
そしたらこんな感じでした.
def on_on_chat():
blocks.print("HELLO", GRASS, pos(0, 0, 0), WEST)
player.on_chat("jump", on_on_chat)
以下の関数で特定の文字列をチャット欄に入力すると,関数を呼び出すことができるらしいです.
player.on_chat("文字列", 呼び出す関数)
じゃぁ,関数呼び出しのときに引数として'N'与えてあげればいいかぁ.
完成
def on_on_chat(n):
xPos = 0
if n % 2 == 0:
l = n // 2 - 1
m = 2
else:
l = n // 2
m = 1
for _ in range(l):
blocks.print("-", GOLD_BLOCK, pos(xPos, 0, 0), WEST)
xPos -= 6
for _ in range(m):
blocks.print("=", GOLD_BLOCK, pos(xPos, 0, 0), WEST)
xPos -= 6
for _ in range(l):
blocks.print("-", GOLD_BLOCK, pos(xPos, 0, 0), WEST)
xPos -= 6
player.on_chat("run", on_on_chat)
1文字5ブロック,空白1ブロックだったので,xPosを6ずつずらしてブロック出力してみました.
ちなみに
さっきのコードをビジュアルプログラムに変換してみると,プログラムが壊れました.
なので,初手からPythonを書くのには向いていないのかも...?
所感
ブロックでのprintでは,日本語が使えなかったよ.
input()とかlist()とかmap()が使えなかった.オワリ\(^o^)/
今後に向けて
- print()は別に独自の関数作れば実装できるくない?
- list(),map()はどうだろ?ライブラリかなんか追加できれば使えるようになるんだろうか?調べてみる
その他
大学やその他学校でMicrosoftアカウントを配布されている方は,教育版マインクラフトを無料でプレイできる可能性があります.統合版と同じように遊ぶこともできますし,通常のMinecraftにはないプログラミング機能を使用することもできるので,ぜひ一度試してみてください.





