ChatGPTと一緒にマインクラフトのコマンドブロックのプログラミングを学ぶ
こんにちは、K研究員です。
先日CoderDojoをやっていたのですが、コマンドブロックがうまく動かないという話を聞いて、「最近私もわからないときはChatGPTに聞いていいるんですよ」なんて言ってみましたが、よく考えてみるとコマンドブロックのプログラムをそんなにちゃんとChatGPTに聞いたことがなかったので、実際やってみようと思います。
コツは難しいことを聞かないこと
ちょっといきなりぶっこんで2秒後に爆発するゾンビを召喚するプログラムを作るように指示してみました。GPT4を使用しています。
GPTありがとう。でも3.でエラーが出てしまいます。
直してくれてエラーはなくなりましたが動きませんでした。
これはちょっと難しすぎた。おそらくそこまで学習データもないのかもしれません。やりたいことを言えばやってくれるというのはまだ難しいようです。
まずは簡単なプログラムを作ってみる
いきなり難しいプログラムを作らせるとあれなのでできそうなところからやっていきます。難しくないマインクラフトのプログラムとは条件が単純ということです。先ほどの「2秒後に」とか「10秒に1回」のような条件は計算が必要になったりするのですが、マインクラフトのコマンドブロックでは計算を行うにはスコアボードの機能を使用するのが一般的なため、どうしても難しいプログラムになってしまいます。
次のようなものから始めるとよいでしょう。
XXブロックに当たるとXXするなどは条件が単純です。
実際にやってみよう
まずは設定でチートをONにします。java版の場合はAllow Cheats: ONというやつです。
次にコマンドでコマンドブロックを出します。これはChatGPTのいう通り
/give @p minecraft:command_blockというコマンドをチャット欄にコピペすることでできます。PCのマイクラの場合は、ctrlキーとcキーの同時押しでコピーし、ctrlキーとvキーの同時押しで貼り付けできます。右クリックで貼り付けることはできないので注意が必要です。
ブロックを置きます。
ChatGPTのCopy Codeというボタンを押してコピーして、コマンドブロックを右クリックすると出てくる画面に貼り付けます。もう一度言いますが貼り付けはctrl + vです。
さらに下のボタンの設定で、常に起こってほしい効果の場合はRepeatに、Needs RedstoneをAlways Activeに変えます。
この状態で砂ブロックを出してぶつかってみてください。即死しましたか?
もう少しいろいろ作ってみる
剣を振ると雷が落ちるようなプログラムを依頼しましたが、剣を振る動作を検知することはできないようです。ダイヤモンドの剣を持っていると雷が落ちるプログラムは作れました。
そこからもうちょっと改良を依頼する
簡単なのができたらそこから、「こういうのはできますか」といった感じで聞いていくとよいです。
例えば下記では周囲5マス以内にという条件を付けています。
実際にやってみると
しかし、プログラムが重すぎて、マインクラフトが動かなくなってしまいました。うーむ失敗失敗。このような重いプログラムの場合はRepeatでAlways Activeは危険のようです。
レッドストーン回路を使い、クロック回路とリピーターを入れて一定間隔で動作させることで重くなることを回避することができます。
さらにGPTから学ぶ
このように簡単なプログラムを動かすことはできました。しかしGPTが出してきたプログラムをコピペするだけではさらに複雑なプログラムを作ろうと思うとうまくいかなくなってしまいます。というのもGPTもミスをしたり、マインクラフトの他の機能と組み合わせないと実現できないことも出てくるからです。
例えばゾンビを2秒後に爆発させるためにはスコアボードの機能を使わなければいけませんでした。そうするとスコアボードの機能はどのようなものなのか改めて調べてみると勉強になります。
スコアボードの機能を使おうとすると一行のプログラムしか使えないコマンドブロックではかなり多くのブロックをつなげていかなければいけませんがこれは難しいです。そこでfunctionを作る機能なども勉強していくとよいでしょう。
しかし、それでもGPTのいう通りには作れないかもしれません。でもそれでいいのかもしれません。スコアボードの存在やfunctionの存在を最速で知ることができたのですから、次にそれを使って何かやろうと思ったときにはすぐに対応できるでしょう。
GPTから学ぶ際は結果だけにこだわらず、どんな知識を学べたかという点も考慮に入れるとよさそうです。