Minecraftとタートルと僕

PCゲームMinecraftのMOD「ComputerCraft」の情報を集めたニッチなブログです。

こちらのページは更新が滞っており、情報が古くなりつつあります。新しいCC情報サイトをはじめましたので、もしよければご参照ください。今後ともよろしくお願い申し上げます。

「百億のマインクラフトと千億のタートル」(https://hevo2.hatenablog.com/)

「Minecraft × Education 2015」イベントに参加します

イベントに参加します

早稲田大学で2015年8月8-9日に開催される 「Minecraft × Education 2015 〜こどもとおとなのためのMinecraft〜」 というイベントにセミナー講師として参加することになりました。

Minecraft×Education2015 | ~こどもとおとなのためのMinecraft~

Minecraftと教育について興味のある方はぜひご参加ください。 もちろん、Minecraft(あるいはComputerCraft)大好きというだけでも楽しめるイベントだと思います。

私は「ComputerCraftのすすめ」という題名でComputerCraftの紹介と教育への利用について講演する予定です。

セミナー | Minecraft×Education2015

私のセミナーは9日の午後、参加費は無料です。 Webからの申し込みは締め切りましたが、当日申し込みも可能なようなのでお時間のある方はぜひどうぞ。

f:id:hevohevo:20150808074626p:plain:w400

f:id:hevohevo:20150808074641p:plain:w400

それでは、参加される方。会場でお会いしましょう。

書いたコードを他人に見てもらおう(マサカリのすすめ)

はじめに

全国で5000人くらい*1はいると思われるComputerCraftユーザーの皆様こんにちは。

今日はまず、こちらの動画を紹介します(ニコ動です)。

職業プログラマーならばさほど問題ないのですが、僕を含む趣味プログラマは、日々、独自の作法でCCプログラミングをしています。

しかし、そのコードが他人からみて見やすいのか、変な癖がついていないか、そしてよりよいコードにするために何を心がければ良いか。

一人孤独にCCプログラミングしていると不安になりますよね。

「誰かに見てもらえないかなー。チラッチラッ。でも恥ずかしいしなぁ・・・。悩ましい悩ましい」

そこで、この動画です!

なんと、マサカリを投げてくれるCCプログラムのコードレビューをしていただけるとのこと。

すばらしい! この機会を逃す手はありませんよね。

動画でコードレビューの説明を聞き、コードレビューを受けるときの心構えを理解したら、mesさんにTwitterなどでお願いしてみましょう。

コードレビューをお願いする方法

説明されているコード提供方法は2つ。

  1. Gistに自分のコードを貼って、Twitterでmesさんにコードレビュー依頼する。
  2. GitHubにアカウントを持っていてGitを使い慣れているならば、プルリクエストでコード提供。

見やすさと言う点では2.ですし動画ページのコメント欄でも推奨されていますが、Gitわからんという人は1.でも良いのではないかと。なお、Gistというのは、Gitサイトがpastebinを真似したサービスと説明するとおおよそのイメージがつかめるのではないでしょうか。

どちらかの方法でコードを提供する準備ができたら、Twitterでmesさん(twitter: @mes_mc)にお願いしましょう。

マサカリ投げていただきました

僕もコードレビューをお願いしました。

お願いしたコードは以下のとおり。(長いですしあまり良いコードではありませんが><)

そしてプルリク経由でコードレビューお願いして、いただいたコメントは以下のとおり。

たくさんレビューコメントをいただいたのですが、簡単にまとめると、以下の4つが中心になります。

  1. 誤解をまねく関数名がある
  2. loadAPI()を使ったほうがよい
  3. 改行を入れてもっと見やすく
  4. 植林部分のコードについて改善案

1.の関数名については、つい手を抜きがちなところなので、今後も気をつけたいところです。

2.のloadAPIは、できるだけファイル1つだけのプログラムにしようと手持ちのAPIから関数を無理やりコピペしたのですが、そのコピペという手抜きバレバレだったようです。申し訳ないw

3.の改行について。これは僕の悪い癖です。おそらく今回のレビューで一番気をつけないといけない部分。

空行を入れないというのは、ブログにコードを掲載することを前提とした悪癖なんですよね。レビューをお願いしたコードは210行程度ですが、改行入れて見やすくすることを考えるとおそらく250行近く行くはずです。

250行のコードをブログに掲載しても大丈夫かな? ドン引きしません? むしろ見やすくするために空行入れたほうがいい? このあたりぜひ皆さんのご意見を聞きたいところ。

とはいえ、コードレビューしていただくなら、ブログ掲載用にコードを密集させたものではなくより見やすく改行をいれたコードを送るべきでした。このあたり、一般的な常識と外れていたんだなと反省しきり。

4.の植林部分のコードついては、松の巨木の生長パターンと関連していろいろ試行錯誤した結果なのですが、改善案をいただいて、より工夫ができそうなことに気づきました。

これらコメントにより自分の癖を自覚でき、また色々な発見もあり大変有意義な機会でした。

つまり、mesさんの投げたマサカリが僕の頭に綺麗に刺さって、いろいろと目が覚めたわけですね*2

ありがとうございました。

僕ももっと勉強して、成長して、色々な方と互いにマサカリを投げ合えるくらいにまでなりたいものです。

もう一つ重要なコメント

上記の4つのコメント以外にも、重要なコメントがありました。

[IMO] Turtleの仕様上の問題などもありますが、関数名の方向だけが違うものが結構多いので、メタプログラミングとかで重複部分をまとめてあげたいですね。 実際にやろうとするとかなり面倒ではありますが...

これね・・・。本当にそう思います。新しい関数を定義するときに、正面/上/下と必ず三方向の関数を作らないといけないのは面倒ですよね。なんとかうまい方法ないものか。

やるとしたらTurtleAPI自体を拡張しないといけないでしょうね・・・。今後の課題です。

おわりに

まとめ。

  • 自分ひとりでCCプログラミングしている人はぜひ他人に見てもらいましょう。
  • 他人に見せることを意識したコードを書くというのはとても良い経験になります。
  • 実際に見ていただくことで、自分だけの視点では気づかない発見があるかも。
  • 自分の悪癖にも気づくかも。無くて七癖と言いますよねw
  • 今なら、mesさんがレビューしてくれるそうですよ!ぜひお願いしてみよう。
  • mesさん素敵。抱いて!

*1:てきとー

*2:変な性癖に目覚めたわけではありませんw

クリエイティブモードを強烈にクリエイティブにするComputerCraft1.7 がリリースされました

はじめに

2月16日にComputerCraft1.7がリリースされました。

さあ、ダウンロードしてインストールしましょう。

なお、Minecraft1.7.10用ですのでご注意を!

ComputerCraft | Programmable Computers for Minecraft f:id:hevohevo:20150221201311j:plain:w400

なにが新しいの?

念のためWhat's Newを適当和訳しておきますね。「」内は僕のコメントです。

  • コマンドコンピュータ(Command Computer)を追加
    • 「使えるのはクリエイティブモードだけです」
  • 新しいAPIを追加: commands
    • 「コマンドコンピュータだけが使えるAPIです」
  • 新しいプログラムを追加: commands, exec
    • 「commandsプログラムは、使えるコマンド一覧を表示します」
    • 「execプログラムは、引数でコマンドを与えたら実行します」
      • 「例)コンソール画面で> exec time set 700
  • textutils.seriaizeJSON( Table )関数を追加
    • 「JSON!JSON! テーブル→JSON形式に変換の模様。コマンドでJSON使うよね」
    • 「マイクラのオプションとして認識されるには、シリアライズ化したJSON文字列から「"」を削らないといけないかもしれません。string.gsub(json_str, "\"", "")のように」(こちらについては現在試行錯誤中)
  • ILuaContext.executeMainThreadTask() 周辺機器開発者向けに追加
    • 「CCの周辺機器を開発しているmodder向け」
  • 金床でディスクドライブとプリンターの名前変更をできるように
  • HD texture packsの問題を解決
    • 「高解像度のテクスチャで不具合起こしていたのかな?」
  • いろんなバグを修正
  • ゲーム内ヘルプシステムに全ての新しい機能をドキュメント化した
    • 「コンソール画面でhelpコマンドを使ってみよう」

Command Computer !!

1.6系統から1.7系統へとメジャーバージョンアップしたわけですが、その目玉は、クリエイティブモードのときだけ作成できるCommand Computerです。

クリエイティブモードでは、(チート的に便利な)様々なコマンドを使うことができますが、Command ComputerはそのコマンドをLuaプログラムを使って実行できます。

どんなことができるのかは、この動画を見たほうが早いかも。雰囲気はつかめるはずです。

Command Computer: Command Blocks ComputerCraft Style - YouTube

動画中で紹介されたSummon(サモン、召喚)プログラムは面白いですね。

モニターを右クリックしたら、コマンドを使って鉄柵を四方に設置し、ゾンビを召還しています。

もう一度右クリックしたら、柵だけ消し去っているようですね。ギャー!ゾンビーキター!

Commands API

Command Computerでは、用意されたcommands APIを使って、各種コマンドを実行することができます。

たとえば、以下のようなバニラのコマンドに対応するのは、

/time set 700

以下のような関数です。

-- Lua Program
commands.time("set", 700)

commands APIにtime()関数が用意されているので、引数"set"700を与えて実行しているわけですね。

え? 引数が文字列か数字かをいちいち区別するのが面倒だって?  これまで培ってきた、溜め込んできた「コマンド群」資産をできるだけそのまま利用したいだって?

もう仕方ないなぁのび太くんは。

次のように手抜きしてプログラム書いてもいいのよ?

-- Lua Program
commands.exec("time set 700")

commands.exec()関数は与えた引数文字列をそのままコマンドとして解釈してくれるみたいですね。すばらしい。これだけあれば他の関数いらないんじゃないかな。引数はstring.format()で連結すればいいし。

こんなプログラム組んでみた

想像が広がりんぐ

これまで、マインクラフトのコマンドはシンプルすぎてそれを組み合わせるのに非常に苦労していました。

コマンドブロックを使うにしても、覚えさせておくことができるコマンドは1ブロックあたり1つだけなので、複雑な作業をさせるために、複数のコマンドブロックを用意し複雑なレッドストーン回路を組んでロジックを組み立てていました。

今回のCommand Computerの実装によって、1台のCommand Computerと1つのLuaプログラムだけでそれらが代替できるようになります。

便利すぎて味気ない? ええ、その気持ちは良くわかります。でもクリエイティブモード限定ですし! 住み分け、住み分けw

このように、今回のバージョンアップはメジャー番号を上げるにふさわしい意義深いバージョンアップだったと思います。

クリエイティブモードをより創造的にできるCC1.7を、僕は歓迎します!