Minecraftとタートルと僕スマートフォン用の表示で見るMinecraftとタートルと僕PCゲームMinecraftのMOD「ComputerCraft」の情報を集めたニッチなブログです。こちらのページは更新が滞っており、情報が古くなりつつあります。新しいCC情報サイトをはじめましたので、もしよければご参照ください。今後ともよろしくお願い申し上げます。Minecraftはじめに「whileループにはsleep()を入れること」CCプログラマなら誰でも知っているこのルール。そもそもsleep()って何をやっているんだろう。そのような疑問を持った僕が調べた結果、その副産物によって、これからの記事を書く予定です。これからの記事を読むことで、CCのイベントとは何かイベントはどう取り扱えば良いのかイベントを利用してインタラクティブなプログラムを組むにはどうすればよいのかこのようなことを学べるはずです。モニターをクリックすることでプログラムを再起動したり、タートル君の画面上で上下キーを押して選択肢を選んだりできるようになると、面白いプログラムが組めそうですよね。このテーマのネタ元はほとんどがCC公式(英語)であることも明記しておきます。sleep()はどのように定義されているのかまずは、sleep()がどこで定義されているのか実際に見てみましょう。ゲーム起動中に書き換えるとゲームが止まる可能性がある危険なファイルなので、ゲームとはまた別に「ComputerCraft1.53.zip」ファイルを展開してから中を覗いてください。「ComputerCraft1.53/lua/bios.lua」というファイルです。このファイルには、今回のsleepに関する以外にも、興味深い内容が多く含まれているので、実際に中を読むことをお勧めします。以下に、sleepに関連する部分2か所をファイルから抜粋しました。)endsleep()関数がまず定義されていて、os.sleep()はその別名関数となっています。これ見るまでは逆だと思ってました。シンプルな関数定義ですね。この内容を理解するために、以下のことを前提知識として知っておく必要があります。?タイマー(timer)って?そもそもイベント(Event)って何?os.pullEvent()ってようするに何しているの?まずは、一番説明が簡単な「repeat」から説明しましょう。条件式」ループについて簡単に説明しましょう。end」ループの亜種です。1回実行してから条件式を調べるつまりrepeatは、基本的にループを続ける方針なのだけど「条件式が偽でない」ことがわかったらループをやめるというループ文です。「偽かどうか」で分岐するの?「真(true)か偽(false)か」じゃなくて?この疑問をもっと正確に言い換えるならば、「Luaの条件式はboolean型以外も受け付けるの?」でしょうか。これはプログラミング初心者だけでなく他のプログラム言語(特に型の区別が厳格な言語)に慣れ親しんだ人も誤解しやすいところなのですが、Luaの制御構造は、「真か偽か」ではなく「偽か、そうでないか」で分岐します。正確にはそのように定められているわけではないのですが、実際にはそう覚えた方が理解しやすいです。Lua5.1のリファレンスマニュアルから、定義部分を抜粋しましょう。制御構造の条件式は任意の値をとれる。(特に、数値の0や空文字列は真であることに注意)。偽として扱う上記以外すべて(数値0や空白スペースも真)だから次のようなプログラムは正常に動きます。print('error')endこれに関連して余談(読み飛ばし可)制御構造の条件式書式スタイルについて、個人的な好みをまとめてみました。「ふーん、そうなんだ。程度に理解してもらえればOKです。某匿名掲示板で次のようなのを見ました(若干アレンジしてます)。したらわかりやすさのため、わざとかもしれませんが。色々なスタイルの人がいますね。個人のブログだし、フリーダムな舵取りしても問題ないよね:P次回は、イベントについて説明しましょう。はてなブログPro「Minecraft」「ComputerCraft」について知りたいならば「お勧めコンテンツ」の『ComputerCraftとは』をご覧下さい。