先日公開した「潜水艦ゲーム」の通信対戦バージョンです。
IchigoJam×2台で通信して遊びます。
写真ではMixJuiceを載せたIchigoJam×2台でプレイしています。
こちらにあるように、片方のIchigoJamをサーバー、もう片方をクライアントとして、TCPプロトコルで通信できるようにしておいてください。
なおMixJuiceが無い場合は、2台のIchigoJamのTXD・RXD端子を有線でクロス接続しても遊べます。
IchigoJam① | IchigoJam② | |
---|---|---|
TXD | - | RXD |
RXD | - | TXD |
GND | - | GND |
遊び方
- 5×5の海域内で、自分の潜水艦「S」を操作して、海中に潜む相手の潜水艦を撃破します。相手の潜水艦は見えません。
- 海域マップの下に、ソナーで探知した相手潜水艦との距離(縦座標の差+横座標の差)が表示されます。この数字を頼りに行動してください。
- サーバー機が先手、クライアント機が後手です。上下左右のカーソルキーで潜水艦を移動してください。2個同時押しで斜め移動もできます。
- スペースキーを押しながらカーソルキーを押すと、その方向の隣りの海域に攻撃します。(魚雷か爆雷だと思ってください)
- 相手の潜水艦に攻撃が当たった場合、または自分から相手の潜水艦に当たった場合(体当たり攻撃)は、あなたの勝ちです。
- 反対に、相手の潜水艦から攻撃を当てられた場合、または相手の潜水艦から体当たりされた場合は、あなたの負けです。
プログラム
サーバー機
1 'SUBMARIN-S 2 CLV:VIDEO 3:UART 0,0 3 X=0:Y=0:[X+Y*5]=1 4 A=4:B=4:[A+B*5]=2 5 GSB 46 6 LC 0,8:?"COMMAND?" 7 WAIT 6:T=BTN(32) 8 U=X-BTN(28)*(X>0)+BTN(29)*(X<4) 9 V=Y-BTN(30)*(Y>0)+BTN(31)*(Y<4) 10 IF U=X AND V=Y GOTO 7 11 Z=X+Y*5:W=U+V*5 12 IF T GSB 43 ELSE GSB 34 13 UART 9,0 14 ?CHR$(32+W+T*32) 15 UART 0,0 16 IF [W]&3+T=3 GOTO 30 17 WAIT 100 18 GSB 46 19 CLK:UART 0,1 20 K=INKEY():IF !K CONT 21 UART 0,0:C=INKEY() 22 K=K-32 23 T=K/32:W=K-T*32 24 V=W/5:U=W%5 25 Z=A+B*5 26 IF T GSB 43 ELSE GSB 38 27 IF [W]&3+T*2=3 GOTO 32 28 WAIT 100 29 GOTO 5 30 LC 0,9:?"YOU WIN!" 31 CLK:END 32 LC 0,9:?"YOU LOSE" 33 CLK:END 34 [Z]=[Z]&#FFFE 35 X=U:Y=V:[W]=[W]|1 36 GSB 46 37 RTN 38 LC 0,8:?"ENEMY MOVE..." 39 [Z]=[Z]&#FFFD 40 A=U:B=V:[W]=[W]|2:GSB 53 41 IF [W]=3 GSB 43 42 RTN 43 LC U,V:?CHR$(244) 44 BEEP 30,10:WAIT 30 45 RTN 46 CLS:C=0 47 FOR I=0 TO 4 48 FOR J=0 TO 4 49 IF [C]&1 ?"S"; ELSE ?"."; 50 C=C+1 51 NEXT:? 52 NEXT 53 D=ABS(X-A)+ABS(Y-B) 54 LC 0,6:?D 55 RTN
クライアント機
1 'SUBMARIN-C 2 CLV:VIDEO 3:UART 0,0 3 X=4:Y=4:[X+Y*5]=1 4 A=0:B=0:[A+B*5]=2 5 GSB 46 6 CLK:UART 0,1 7 K=INKEY():IF !K CONT 8 UART 0,0:C=INKEY() 9 K=K-32 10 T=K/32:W=K-T*32 11 V=W/5:U=W%5 12 Z=A+B*5 13 IF T GSB 43 ELSE GSB 38 14 IF [W]&3+T*2=3 GOTO 32 15 WAIT 100 16 GSB 46 17 LC 0,8:?"COMMAND?":CLK 18 WAIT 6:T=BTN(32) 19 U=X-BTN(28)*(X>0)+BTN(29)*(X<4) 20 V=Y-BTN(30)*(Y>0)+BTN(31)*(Y<4) 21 IF U=X AND V=Y GOTO 18 22 Z=X+Y*5:W=U+V*5 23 IF T GSB 43 ELSE GSB 34 24 UART 9,0 25 ?CHR$(32+W+T*32) 26 UART 0,0 27 IF [W]&3+T=3 GOTO 30 28 WAIT 100 29 GOTO 5 30 LC 0,9:?"YOU WIN!" 31 CLK:END 32 LC 0,9:?"YOU LOSE" 33 CLK:END 34 [Z]=[Z]&#FFFE 35 X=U:Y=V:[W]=[W]|1 36 GSB 46 37 RTN 38 LC 0,8:?"ENEMY MOVE..." 39 [Z]=[Z]&#FFFD 40 A=U:B=V:[W]=[W]|2:GSB 53 41 IF [W]=3 GSB 43 42 RTN 43 LC U,V:?CHR$(244) 44 BEEP 30,10:WAIT 30 45 RTN 46 CLS:C=0 47 FOR I=0 TO 4 48 FOR J=0 TO 4 49 IF [C]&1 ?"S"; ELSE ?"."; 50 C=C+1 51 NEXT:? 52 NEXT 53 D=ABS(X-A)+ABS(Y-B) 54 LC 0,6:?D 55 RTN