MakeCode の資料を漁ったりする
MakeCode は MS が開発した Programming Experience Toolkit (pxt) で、主にビジュアルプログラミングを対象としたプログラミング環境の開発ツール。これをうまく使うとマイクラやラズパイなどをビジュアルプログラミングで操作することができ、プログラミング学習として応用することができる。
MakeCode の使い方というよりは
- どうやって MakeCode でオリジナルのサンプルを作るのか
- 作ったチュートリアルを教育版マイクラで動かす方法は?
についての情報がほしい
ちなみに、教育版マイクラにて MakeCode を特定のURLにあるチュートリアルに変更する場合はビヘイビアパックから codebuilder navigate
コマンドを実行して開けば良い。
チュートリアルリンクの作り方は下記を参照
しかし、function から実行してもチュートリアルは表示されなかった。
execute @s ~ ~ ~ codebuilder navigate @s false https://minecraft.makecode.com/[hoge]?ipc=1&inGame=1&noRunOnX=1#tutorial:[huga]
理想はこんな感じかな
僕もfunctionで実行してもうまくいきませんでしたが、
検証した結果、リピートモードのコマンドブロックで一定時間実行してあげるとTutorialが表示できました。
functionでも一度だけでなく何tickか実行してあげるように実装できればうまくいくかもしれません。
ちなみに、作ったファイルは GitHub リポジトリに公開できるらしい
しかしマイクラのMakeCodeには表示されないので詰み of 詰み。でも探せば手動でなんとかできそうかも。
拡張機能の作り方は掲載されているが、個人的にやりたいのは拡張機能からのインポートではなく、NPCに話しかけたり特定の問題をクリアすると MakeCode の内容が自動で更新されてチュートリアルが進んでいく方式。
公開されているサンプル
Tutorial Editor を使えばよかったみたい。
そしてMakeCodeのチュートリアルを差し替えるときは下記でよさそう
codebuilder navigate @p true https://minecraft.makecode.com/#tutorial:hogehoge
ほぉん?MonacoとMakeCodeとで分割されているわけか
もしかして、Runをクリックすると自動でURL発行されて読み込んでいる?
いや、なんかこの部分かな
document.getElementById("run-button").addEventListener("click", function () {
var md = editor.getValue();
sendMessage("importtutorial", md);
});
これパラメータになげればいいんか?
{"header":{"name":"untitled","meta":{},"editor":"blocksprj","pubId":"","pubCurrent":false,"target":"minecraft","targetVersion":"1.6.30","tutorial":{"tutorial":"untitled","tutorialName":"マイプロの世界へようこそ!2","tutorialReportId":"","tutorialStep":0,"tutorialReady":true,"tutorialHintCounter":0,"tutorialStepInfo":[{"title":"チャットコマンドを使おう!","contentMd":"``||player:プレイヤー||``から``||player:チャットコマンドjumpを入力したとき||``のパズルをもってこよう","headerContentMd":"``||player:プレイヤー||``から``||player:チャットコマンドjumpを入力したとき||``のパズルをもってこよう"},{"title":"マネしてみよう!","contentMd":"エージェントを自分のいるところによぶプログラムをつくるよ。``||player:チャットコマンドjumpを入力したとき||``の中に``||agent:エージェントを自分の位置に戻す||``のパズルをはさんでみよう!\n\n","headerContentMd":"エージェントを自分のいるところによぶプログラムをつくるよ。``||player:チャットコマンドjumpを入力したとき||``の中に``||agent:エージェントを自分の位置に戻す||``のパズルをはさんでみよう!\n\n"}],"tutorialActivityInfo":null,"tutorialMd":"#マイプロの世界へようこそ!2\n\n##チャットコマンドを使おう!\n\n``||player:プレイヤー||``から``||player:チャットコマンドjumpを入力したとき||``のパズルをもってこよう\n\n##マネしてみよう!\nエージェントを自分のいるところによぶプログラムをつくるよ。``||player:チャットコマンドjumpを入力したとき||``の中に``||agent:エージェントを自分の位置に戻す||``のパズルをはさんでみよう!\n\n","tutorialCode":[],"tutorialRecipe":false,"autoexpandStep":true,"metadata":{}},"id":"43e59c6f-55d1-4655-6e8d-ba21fb3843d7","recentUse":1684336043,"modificationTime":1684336043,"path":"untitled-2","cloudCurrent":false,"saveId":null,"githubCurrent":false},"text":{"README.md":"","main.blocks":"<xmlxmlns=\"https://developers.google.com/blockly/xml\"><blocktype=\"pxt-on-start\"x=\"20\"y=\"20\"></block><blocktype=\"minecraftOnChat\"x=\"225\"y=\"20\"><mutationxmlns=\"http://www.w3.org/1999/xhtml\"numargs=\"0\"></mutation><valuename=\"command\"><shadowtype=\"text\"><fieldname=\"TEXT\">run</field></shadow></value></block></xml>","main.ts":"player.onChat(\"run\",function(){\n\t\n})\n","pxt.json":"{\n\"name\":\"untitled\",\n\"description\":\"\",\n\"dependencies\":{\n\"core\":\"*\",\n\"builder\":\"*\"\n},\n\"files\":[\n\"main.blocks\",\n\"main.ts\",\n\"README.md\"\n],\n\"preferredEditor\":\"blocksprj\"\n}\n"}}
これはAPI用かな
やっぱRunするたびに値を変えてきてるな
ea9c61b5-44d3-4ff2-6f65-ed8a20157b5f
このパラメータ変えればいけるんだろうか
https://minecraft.makecode.com/?ipc=1&inGame=1&controller=1&<パラメータ>#editor
ということは
https://www.makecode.com/api/scripts/resJSON.shortid
なので、resJSON
に生データ突っ込めばええんか??
サンプルJSON
header[name]=untitled&&header[editor]=blocksprj&header[pubId]=&header[pubCurrent]=false&header[target]=minecraft&header[targetVersion]=1.6.30&header[tutorial][tutorial]=untitled&header[tutorial][tutorialName]=%E3%83%9E%E3%82%A4%E3%83%97%E3%83%AD%E3%81%AE%E4%B8%96%E7%95%8C%E3%81%B8%E3%82%88%E3%81%86%E3%81%93%E3%81%9D%EF%BC%812&header[tutorial][tutorialReportId]=&header[tutorial][tutorialStep]=0&header[tutorial][tutorialReady]=true&header[tutorial][tutorialHintCounter]=0&header[tutorial][tutorialStepInfo][0][title]=%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E4%BD%BF%E3%81%8A%E3%81%86%EF%BC%81&header[tutorial][tutorialStepInfo][0][contentMd]=%E3%81%9F%E3%81%B6%E3%82%93%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92%0A%0A%60%60%7C%7Cplayer%3A%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%7C%7C%60%60%20%E3%81%8B%E3%82%89%20%60%60%7C%7Cplayer%3A%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%20jump%20%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%7C%7C%60%60%20%E3%81%AE%E3%83%91%E3%82%BA%E3%83%AB%E3%82%92%E3%82%82%E3%81%A3%E3%81%A6%E3%81%93%E3%82%88%E3%81%86&header[tutorial][tutorialStepInfo][0][headerContentMd]=%E3%81%9F%E3%81%B6%E3%82%93%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92%0A%0A%60%60%7C%7Cplayer%3A%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%7C%7C%60%60%20%E3%81%8B%E3%82%89%20%60%60%7C%7Cplayer%3A%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%20jump%20%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%7C%7C%60%60%20%E3%81%AE%E3%83%91%E3%82%BA%E3%83%AB%E3%82%92%E3%82%82%E3%81%A3%E3%81%A6%E3%81%93%E3%82%88%E3%81%86&header[tutorial][tutorialStepInfo][1][title]=%E3%83%9E%E3%83%8D%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%EF%BC%81&header[tutorial][tutorialStepInfo][1][contentMd]=%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E8%87%AA%E5%88%86%E3%81%AE%E3%81%84%E3%82%8B%E3%81%A8%E3%81%93%E3%82%8D%E3%81%AB%E3%82%88%E3%81%B6%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B%E3%82%88%E3%80%82%60%60%7C%7Cplayer%3A%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%20jump%20%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%7C%7C%60%60%E3%81%AE%E4%B8%AD%E3%81%AB%60%60%7C%7Cagent%3A%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E8%87%AA%E5%88%86%E3%81%AE%E4%BD%8D%E7%BD%AE%E3%81%AB%E6%88%BB%E3%81%99%7C%7C%60%60%E3%81%AE%E3%83%91%E3%82%BA%E3%83%AB%E3%82%92%E3%81%AF%E3%81%95%E3%82%93%E3%81%A7%E3%81%BF%E3%82%88%E3%81%86%EF%BC%81%0A%0A!%5B%5D(https%3A%2F%2Fstorage.googleapis.com%2Fzenn-user-upload%2Ff3ded8fdba32-20230516.gif)&header[tutorial][tutorialStepInfo][1][headerContentMd]=%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E8%87%AA%E5%88%86%E3%81%AE%E3%81%84%E3%82%8B%E3%81%A8%E3%81%93%E3%82%8D%E3%81%AB%E3%82%88%E3%81%B6%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B%E3%82%88%E3%80%82%60%60%7C%7Cplayer%3A%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%20jump%20%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%7C%7C%60%60%E3%81%AE%E4%B8%AD%E3%81%AB%60%60%7C%7Cagent%3A%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E8%87%AA%E5%88%86%E3%81%AE%E4%BD%8D%E7%BD%AE%E3%81%AB%E6%88%BB%E3%81%99%7C%7C%60%60%E3%81%AE%E3%83%91%E3%82%BA%E3%83%AB%E3%82%92%E3%81%AF%E3%81%95%E3%82%93%E3%81%A7%E3%81%BF%E3%82%88%E3%81%86%EF%BC%81%0A%0A!%5B%5D(https%3A%2F%2Fstorage.googleapis.com%2Fzenn-user-upload%2Ff3ded8fdba32-20230516.gif)&header[tutorial][tutorialActivityInfo]=null&header[tutorial][tutorialMd]=%23%20%E3%83%9E%E3%82%A4%E3%83%97%E3%83%AD%E3%81%AE%E4%B8%96%E7%95%8C%E3%81%B8%E3%82%88%E3%81%86%E3%81%93%E3%81%9D%EF%BC%812%0A%0A%23%23%20%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E4%BD%BF%E3%81%8A%E3%81%86%EF%BC%81%0A%0A%E3%81%9F%E3%81%B6%E3%82%93%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92%0A%0A%60%60%7C%7Cplayer%3A%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%7C%7C%60%60%20%E3%81%8B%E3%82%89%20%60%60%7C%7Cplayer%3A%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%20jump%20%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%7C%7C%60%60%20%E3%81%AE%E3%83%91%E3%82%BA%E3%83%AB%E3%82%92%E3%82%82%E3%81%A3%E3%81%A6%E3%81%93%E3%82%88%E3%81%86%0A%0A%23%23%20%E3%83%9E%E3%83%8D%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%EF%BC%81%0A%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E8%87%AA%E5%88%86%E3%81%AE%E3%81%84%E3%82%8B%E3%81%A8%E3%81%93%E3%82%8D%E3%81%AB%E3%82%88%E3%81%B6%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B%E3%82%88%E3%80%82%60%60%7C%7Cplayer%3A%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%20jump%20%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%7C%7C%60%60%E3%81%AE%E4%B8%AD%E3%81%AB%60%60%7C%7Cagent%3A%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%82%92%E8%87%AA%E5%88%86%E3%81%AE%E4%BD%8D%E7%BD%AE%E3%81%AB%E6%88%BB%E3%81%99%7C%7C%60%60%E3%81%AE%E3%83%91%E3%82%BA%E3%83%AB%E3%82%92%E3%81%AF%E3%81%95%E3%82%93%E3%81%A7%E3%81%BF%E3%82%88%E3%81%86%EF%BC%81%0A%0A!%5B%5D(https%3A%2F%2Fstorage.googleapis.com%2Fzenn-user-upload%2Ff3ded8fdba32-20230516.gif)&&header[tutorial][tutorialRecipe]=false&header[tutorial][autoexpandStep]=true&&header[tutorial][tutorialStepExpanded]=false&header[id]=0106ba19-e680-468b-f37c-45e083a118cd&header[recentUse]=1684344100&header[modificationTime]=1684344100&header[path]=untitled&header[cloudCurrent]=false&header[saveId]=null&header[githubCurrent]=false&text[README.md]=&text[main.blocks]=%3Cxml%20xmlns%3D%22https%3A%2F%2Fdevelopers.google.com%2Fblockly%2Fxml%22%3E%3Cblock%20type%3D%22pxt-on-start%22%20x%3D%2220%22%20y%3D%2220%22%3E%3C%2Fblock%3E%3Cblock%20type%3D%22minecraftOnChat%22%20x%3D%22225%22%20y%3D%2220%22%3E%3Cmutation%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%22%20numargs%3D%220%22%3E%3C%2Fmutation%3E%3Cvalue%20name%3D%22command%22%3E%3Cshadow%20type%3D%22text%22%3E%3Cfield%20name%3D%22TEXT%22%3Erun%3C%2Ffield%3E%3C%2Fshadow%3E%3C%2Fvalue%3E%3C%2Fblock%3E%3C%2Fxml%3E&text[main.ts]=player.onChat(%22run%22%2C%20function%20()%20%7B%0A%09%0A%7D)%0A&text[pxt.json]=%7B%0A%20%20%20%20%22name%22%3A%20%22untitled%22%2C%0A%20%20%20%20%22description%22%3A%20%22%22%2C%0A%20%20%20%20%22dependencies%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%22core%22%3A%20%22*%22%2C%0A%20%20%20%20%20%20%20%20%22builder%22%3A%20%22*%22%0A%20%20%20%20%7D%2C%0A%20%20%20%20%22files%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%22main.blocks%22%2C%0A%20%20%20%20%20%20%20%20%22main.ts%22%2C%0A%20%20%20%20%20%20%20%20%22README.md%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%22preferredEditor%22%3A%20%22blocksprj%22%0A%7D%0A
この形式でリクエストすれば良いのかな???