連載
» 2014年11月18日 15時18分 UPDATE

カウントダウン企画……あと2回:日刊!プチコン3号――そりゃあ、まあ、考えますよね「通信機能」

配信までいよいよあと「1日」! ワイヤレス通信機能を紹介。

[瓜生聖,ITmedia]

連載:日刊プチコン3号

そりゃあ、まあ、考えますよね「通信機能」

 プチコン3号ではスマイルブーム運営の専用サーバを利用してプログラムを公開する。サーバを経由せず、たとえばニンテンドー3DS間でプログラムをやりとりすることは想定されていない。

 話は変わるが、プチコン3号ではワイヤレス通信がサポートされた。接続できる台数は最大4台で、1台が親機、その他が子機という扱いになる。ただし、機能としては親機・子機の違いはなく、ワイヤレス通信開始時に決定する。扱いは非常に簡単で、「MPSTART」でセッションを開始した後はブロードキャストで行われる通信を2系統の命令でやりとりする。

 1つはデバイス入力関数そのもの。ボタン入力の「BUTTON」、タッチパネルの「TOUCH」、スライドパッドの「STICK」、拡張スライドパッドの「STICKEX」は端末IDを引数としてとることができる。プログラムの先頭にセッション開始の命令を追加し、すべての「BUTTON」命令を一括置換するだけで別のニンテンドー3DSから操作できるようになる手軽さだ(意味があるかどうかはさておき)。

 なお、デバイス入力関数では端末IDを省略した場合と、自端末IDをセットした場合はどちらも自端末の入力情報を取得するが、内部処理が異なる。端末IDを省略するとデバイスから直接取得するのに対し、自端末IDをセットすると通信データとして取得する。対戦など自端末/他端末の両方から入力を受け付ける場合は、通信データとして取得しないと他端末側とタイミングがずれるので注意しよう。

 もう1つの命令系統は明示的にデータの送受信を行う「MPSEND/MPRECV」だ。最大256バイトまでの文字列を送受信することができる。MPRECVは明示的に相手先を指定して受信するのではなく、受信したデータの1つとして送信元の端末IDが返ってくる。プロミスキャスモードのイメージに近いかもしれないが、自分自身がMPSENDで送ったデータもMPRECVで受けてしまうということには注意が必要だ。

og_puticom15_001.jpg MPSTART命令を実行すると通信開始。親機になるか子機になるかはユーザー判断

og_puticom15_002.jpg 子機になると親機を選択する

og_puticom15_003.jpg 親機になると自機含め接続してきた子機のリストが表示される。実行ボタンで参加締め切り。ここまでがMPSTART命令

サンプル

関係する命令

MPSTART 最大接続ユーザー数, "通信識別子文字列"

 説明

  ワイヤレス通信セッションの開始

  ・セッションはMPSTARTのパラメータが同じプログラム間でのみ接続可能

  ・セッションが構築できたかどうかはRESULTシステム変数で取得

  ※スリープモードに入ると通信は切断されます

 引数

  最大接続ユーザー数

   2〜4:同時に接続するユーザーの数

  通信識別文字列

   認証用の任意の文字列

MPSEND "送信文字列"

 説明

  ワイヤレス通信のセッション参加者全員へデータを送信

  ・送信データは確実に配送されるが、遅延が発生する

  ・短時間に大量のMPSENDを呼ぶと、Communication buffer overflowエラーが発生する

  ※スリープモードに入ると通信は切断されます

 引数

  送信文字列

   最大256バイトまでの文字列

MPRECV OUT 送信元ID,受信用文字列変数

 説明

  MPSENDからのデータを受信

  ・受信データがない場合は送信元IDに-1が入る

  ※スリープモードに入ると通信は切断されます

 引数

  送信元ID

   0〜3:文字列を送信する接続先番号

  受信用文字列変数

   受信されたデータを受け取る文字列変数

変数=MPSTAT([端末ID])

 説明

  ワイヤレス通信の指定端末の接続状況を取得

  ※スリープモードに入ると通信は切断されます

 引数

  端末ID

   0〜3:ワイヤレス通信による他の端末ID(省略時:セッション全体)

 戻り

  0:未接続 1:接続

MPSET 内部管理番号,数値

 説明

  ワイヤレス通信のユーザー定義データへの書き込み

  ※スリープモードに入ると通信は切断されます

 引数

  内部管理番号

   0〜8:対象となるデータの管理番号

  数値

   登録する数値(整数値のみ受け付け)

 (著者注:MPSETは自端末に対して書き込みを行う)

変数=MPGET(端末ID,内部管理番号)

 説明

  ワイヤレス通信の指定端末のユーザー定義データを取得

  ※スリープモードに入ると通信は切断されます

 引数

  端末ID

   0〜3:ワイヤレス通信による他の端末ID

  内部管理番号

   0〜8:対象となるデータの管理番号

 戻り

  指定されたデータの数値(整数値)

 (著者注:MPSETによって各端末が書き込んだ情報を取得する)

MPEND

 説明

  ワイヤレス通信セッションを終了

  ・参加者全員が同期して終了するための待ち合わせ用ダイアログが表示される

 変数=BUTTON([機能ID[,端末ID]])

説明

  ハードウェアボタンの状態取得

 引数

  機能ID

   0:押され続けている状態

   1:押された瞬間(リピート機能付き)

   2:押された瞬間(リピート機能なし)

   3:放された瞬間

  端末ID(0〜3)

   ワイヤレス通信で他の端末のボタンを取得する場合に指定

 戻り

  bit0〜bit12に各ボタンが対応し、押されたbitが1となる

   bit0:十字ボタン上

   bit1:十字ボタン下

   bit2:十字ボタン左

   bit3:十字ボタン右

   bit4:Aボタン

   bit5:Bボタン

   bit6:Xボタン

   bit7:Yボタン

   bit8:Lボタン

   bit9:Rボタン

   bit10:未使用

   bit11:ZRボタン

   bit12:ZLボタン

   ※ZRボタン、ZLボタンは拡張スライドパッド使用時

  各ボタンが単独で押された場合の10進数戻り値は以下のとおり

   1:十字ボタン上

   2:十字ボタン下

   4:十字ボタン左

   8:十字ボタン右

   16:Aボタン

   32:Bボタン

   64:Xボタン

   128:Yボタン

   256:Lボタン

   512:Rボタン

   1024:未使用

   2048:ZRボタン

   4096:ZLボタン

TOUCH [端末ID] OUT STTM, TX,TY

 説明

  タッチ情報取得

 引数

  端末ID(0〜3)

   ワイヤレス通信で他の端末の情報を取得する際に指定

  STTM

   タッチされた時間を受け取る変数(0=タッチなし)

  TX,TY

   タッチされたドット座標を受け取る変数(TX:0〜399、TY:0〜239)

STICK [端末ID] OUT X,Y

 説明

  スライドパッドの情報取得

 引数

  端末ID(0〜3)

   ワイヤレス通信で他の端末の情報を取得する際に指定

  X,Y

   変化量を受け取る変数(X:±1.0、Y:±1.0)

   ※実際に返る値は±約0.86ぐらい

STICKEX [端末ID] OUT X,Y

 説明

  拡張スライドパッドのスティック情報取得

  ・事前にXON EXPADで拡張スライドパッドを有効にする必要がある

   (有効にしない場合、X,Yは常に0となる)

 引数

  端末ID(0〜3)

   ワイヤレス通信で他の端末の情報を取得する際に指定

  X,Y

   変化量を受け取る変数(X:±1.0、Y:±1.0)

関連するシステム変数

MPCOUNT

 説明

  ワイヤレス通信時のセッション参加人数

MPHOST

 説明

  ワイヤレス通信時の親機の端末ID

MPLOCAL

 説明

  ワイヤレス通信時の自分の端末ID


 次回はライブラリの構築、利用に便利な仕組みを紹介する。

※本稿の内容は開発中のものです。製品版配信時には仕様が変更される場合があります。


Copyright© 2016 ITmedia, Inc. All Rights Reserved.