はじめに
これから、ComputerCraft(以下、CC)の無線通信についてチュートリアルをはじめます。
CCの無線通信システムの概要と、Rednet APIの具体的な使い方について、サンプルとなるコードを示しつつできるだけ丁寧に紹介していくつもりです。
無線通信の概要
無線通信には、送信側と受信側の両方に、ワイヤレスモデム(Wireless Modem)というパーツをつけたCCコンピュータやタートルを用意する必要があります。
Wireless Modemの機能により、電波の届く範囲であれば好きなチャンネルにメッセージ(必ず文字列でなければいけません)を送信し放題、好きなチャンネルを聞き放題となります。
つまり、現実の無線通信のように通信内容の暗号化とか盗聴防止とかは全く考えられていないのでご注意ください。特にマルチプレイヤー環境では要注意です。
Wireless Modemのクラフト
- エンダーパール1個を焼石8個で囲んでクラフト → Wireless Modem
Wireless Modemを装着
右手側の装着スペースが空いている○○タートルとWireless Modemをクラフト → ワイヤレス○○タートル
コンピュータを設置して、好きな面にWireless Modemを装着 → コンピュータがWirelessModemを周辺機器として利用できる
(上にモデム装着)
(全面モデムw 特に意味はありませんw)
電波が届く範囲
電波が届く範囲は、そのコンピュータ(タートル)を設置した高度(Y座標)によって決まっています。
- Y=1~96は、範囲64(晴れた日)
- 雷雨の日は、範囲16
- Y座標が大きく(高く)なるほど範囲は広がり
- Y=256が最大範囲で、384となる。
- 雷雨の日は、範囲96
細かい数値はともかくとして、以下のように覚えておけば問題ないでしょう。
- 一般的な高度では64ブロック(メートル)離れたところまで届く。
- 雷雨の日は16ブロック(メートル)になるので注意。
- 高度がおよそ100を超えると、高ければ高いほど遠くまで届くようになる。
無線通信で使うチャンネル
無線通信のチャンネルは1-65535まで存在しており、どのチャンネルでも使おうと思えば自由に使うことができます。
ただしRednet APIの仕様として、自分のIDと同じチャンネルを自分専用の受信チャンネルとして使うことになっています。 そのため、ComputerIDが1のコンピュータにメッセージを送るときには、チャンネル1を使います。
またBROADCAST(ブロードキャスト、全CCコンピュータへの一斉同時通信)用のチャンネルとして、65535が予約されていますし、GPS APIによってGPS通信用に65534も予約されています。これらは特殊な用途で使うので、それ以外の時には使わないようにしましょう。
つまりまとめると、以下のようになります。
- Computer IDと同じ番号のチャンネルがそのコンピュータの受信用チャンネル。
- チャンネル65535にメッセージを流すとブロードキャスト(全コンピュータに同時通信)
- チャンネル65534は、GPS専用なので使わないこと。
なお、コンピュータやタートルのIDを調べるには以下のようにします(もちろん、saveフォルダ開いて、「labels.txt」ファイルからそのコンピュータのIDを調べてもいいんですけどね)。
# コンピュータのターミナル画面で、以下のプログラムを利用 > id
-- プログラムの中で、自分のIDを調べるなら以下のように。変数myIdに代入しています。 local myId = os.getComputerID()
無線通信を利用するためのAPI
無線通信するためのAPIは、Rednet APIと、Peripheral APIがあります。
- Rednet API: 有線・無線問わず通信系を司るAPIで、たいていのことはこちらを使えば問題ありません。今回の連載ではこちらを説明します。ちなみに、MFR2のRedNet-Cableとは一切関係ありません。
- Peripheral APIを使ってWireless Modemを直接操作: 直接操作するのでとても高機能です。メッセージを送受信するチャンネルを自由に選ぶことができ、他のチャンネルを盗聴することも可能です。こちらの方法については説明しません。
基本的に、Rednet APIの使い方を覚えるだけで大丈夫です。 次回はこのAPIの使い方を紹介しましょう。
補足)CCのチャンネルの使い方についてたとえ話
船や潜水艦の映画などで伝声管が使われるシーンを見ることがありますよね。CCの無線通信システムはそのイメージに近いように思われます。
コンピュータ(ID1)の目の前には65535本の伝声管が並んでいます(多いw)。 タートル(ID2)の目の前にも65535本の伝声管が並んでいます。 伝声管にはそれぞれIDが割り振られており、コンピュータもタートルもこれらを自由に使って、メッセージのやり取りができます。
ただし、あまりにもフリーダムに使われると困るのでいくつかのルールをお互いの合意の元に定めています。
- メッセージを送信するときには、送信先IDと同じIDの伝声管(チャンネル)を使う。
- ID1→ID2ならば、チャンネル2を使うこと。
- 受信側は、必ずしもそのチャンネルを聞く態勢になっているとは限らない。
- 聞く態勢になっていないときは、送られたメッセージはそのままスルーされて消える。
- 聞くときには、自分のIDと同じIDのチャンネルを優先して聞く。
これらルールは、RednetAPIの仕様により暗黙的に定められています。言い方を変えれば、RednetAPIを使えば、自然とこれらルールに従うことになります。 もっと柔軟な使い方をしたいならば、自分で新しいAPIをつくりましょう:P
例: アマチュア無線みたく、チャンネル1つだけを使って互いにメッセージのやり取りを行うために、「こちらからの送信終わり」「問題なく受信できました」などのような符号を定義しておいてやり取りするなど。