読者です 読者をやめる 読者になる 読者になる

プチコンで遊ぼう! (はてなブログ版)

任天堂3DSのプチコンで遊ぼう! [twitter:@eida_s]

はてなダイアリーから移行しました。 はてなダイアリーのURLを開いても自動的にこちらにリダイレクトされますのでご了承ください。

プチコン3号 3DS同士の近距離データ交換

一つ前のエントリーで書いた、3DS同士の近距離データ交換について。

前にも書いたように、ワイアレス通信を使うことで行けるはず。
命令表から考えた妄想のソースコードは以下のとおり。

なお、これはプログラムのテキスト用で、データに関してもこの応用で行けるはず。

・送信用のコード(命令一覧から考えた妄想コード)

MPSTART 1,"SENDFILE"
PRINT "READY TO ANY BUTTON"
WHILE BUTTON()==0: WEND

DIM SLOT%, CURLINE%, PSIZE%, MSG$, OK%
OK% = 1 'MPSTATUSが返す値のうち、通信READY状態の値を定義しておく
SLOT% = 1
CURLINE% = 1
PSIZE% = PRGSIZE(SLOT%)
PRGEDIT SLOT%, CURLINE%

REPEAT
  PRGLINE = CURLINE%
  MSG$ = PRGGET$()
  WHILE MPSTATUS() <> OK%: WEND
  MPSEND MSG$
  INC CURLINE%, 1
UNTIL PSIZE% < CURLINE%

MPEND

発売前の11月1日現在の妄想で書いたコードだけど、mkIIに比べるとかなりモダンなコードになった。
なお、通信開始についてのタイミング等については上記では考慮していないので、発売後に調整することになると思う。
続いて受信側コード。

・受信用のコード(命令一覧から考えた妄想コード)

PRINT "READY TO ANY BUTTON"
WHILE BUTTON()==0: WEND

DIM SLOT%, CURLINE%, PSIZE%, MSG$, COMEND%, COMHOSTID%
COMEND% = -1 'MPSTATUSが返す値のうち、セッション終了の値を定義しておく
COMHOSTID% = 1  '通信ホストの端末ID
SLOT% = 1
CURLINE% = 1
PSIZE% = PRGSIZE(SLOT%)
PRGEDIT SLOT%, CURLINE%

REPEAT
  MPRECV OUT COMHOSTID%, MSG$
  IF MSG$ <> "" THEN
    PRGSET CURLINE%, MSG$
    INC CURLINE%, 1
  END IF
UNTIL MPSTATUS(COMHOSTID%) == COMEND% OR BUTTON() == 1024

受信側はどうやってセッションに参加するのかが命令一覧からだと読み取れないのでかなり当てずっぽう。
受信側はセッションの開始・終了は宣言しないと仮定した。

おおむね、こんな感じで行けると思う。

(2014.11.05 MPRECVの書き方を修正)