SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

無線対戦リーチゲーム

MixJuiceで無線通信するプログラムの応用で、リーチゲーム(ビンゴゲームの一種)を作ってみました。
f:id:shiro0922:20191114135028j:plain
以前にCPU対戦で作ったプログラムの簡易版です。
www.ichigojaman.jp

事前準備

以前の記事で書いたように、事前準備で2セットのIchigoJam+MixJuiceの間で、TCP通信が確立した状態にします。
www.ichigojaman.jp

遊び方

下のプログラムリストにあるプログラムを入力します。サーバー用とクライアント用があります。

  • 起動すると、5×5のマス目に1~25の数字がランダムに表示されます。
  • サーバー側が先手です。どれか消してもいい数字を選んで入力して送信します。自分が言った数字は「--」となり消えます。クライアント側では、サーバーが消した数字は「●●」となります。

  • 次はクライアント側の番です。同様に、どれか消してもいい数字を選んで入力して送信します。
  • 以上を先手・後手でくり返します。
  • 相手が言った数字で「●●」が縦・横・斜めのどれか1列で4個並んだ時は、「リーチ」と宣言して「99」を入力します。その場合、相手はもう一度数字を消さないといけません。
  • 「●●」が縦・横・斜めのどれか1列で5個揃えば「ビンゴ」で勝ちです。「100」を入力して終了します。


★クライアント側を先手にしたい時は、最初にサーバー側で「99」(リーチ)を入力して、クライアントに順番を回してください。

どこの列を捨てて消していくかの判断が難しく、半分は戦略、半分は数字の運です。
リーチルールによる一発大逆転もあり、頭を使いますが楽しいゲームです。

なお、今回は子ども向けに簡単なプログラムにしたので、数字の入力ミスや、リーチ・ビンゴの判断ミスはチェックしていません。
人間の方でちゃんと管理してください。

プログラム

サーバー側プログラム

10 '*REACH-S
20 CLV:UART 0,0:CLS
30 FOR I=0 TO 24:[I]=I+1:NEXT
40 FOR I=1 TO 200
50 A=RND(25):B=RND(25)
60 C=[A]:[A]=[B]:[B]=C
70 NEXT
80 GSB 290
90 INPUT "N(reach:99 win:100)=",N
100 UART 1,0
110 ?CHR$(N+32)
120 UART 0,0
130 IF N=100 ?"WIN":BEEP 10,30:END
140 FOR I=0 TO 24
150 IF [I]=N [I]=0
160 NEXT
170 GSB 290
180 ?"Waiting..."
190 UART 0,1
200 N=INKEY()-32:IF N=-32 CONT
210 UART 0,0
220 IF N=99 ?"REACH":BEEP:GOTO 90
230 IF N=100 ?"LOSE":BEEP 30,30:END
240 FOR I=0 TO 24
250 IF [I]=N [I]=-1
260 NEXT
270 ?N:GSB 290
280 GOTO 90
290 ?:I=0
300 FOR Y=0 TO 4
310 FOR X=0 TO 4
320 IF [I]=0 ?"-- "; ELSE IF [I]=-1 ?"oo "; ELSE ?DEC$([I],2);" ";
330 I=I+1
340 NEXT:?
350 NEXT:?
360 RTN

クライアント側プログラム

10 '*REACH-C
20 CLV:UART 0,0:CLS
30 FOR I=0 TO 24:[I]=I+1:NEXT
40 FOR I=1 TO 200
50 A=RND(25):B=RND(25)
60 C=[A]:[A]=[B]:[B]=C
70 NEXT
80 GSB 290
90 ?"Waiting..."
100 UART 0,1
110 N=INKEY()-32:IF N=-32 CONT
120 UART 0,0
130 IF N=99 ?"REACH":BEEP:GOTO 190
140 IF N=100 ?"LOSE":BEEP 30,30:END
150 FOR I=0 TO 24
160 IF [I]=N [I]=-1
170 NEXT
180 ?N:GSB 290
190 INPUT "N(reach:99 win:100)=",N
200 UART 1,0
210 ?CHR$(N+32)
220 UART 0,0
230 IF N=100 ?"WIN":BEEP 10,30:END
240 FOR I=0 TO 24
250 IF [I]=N [I]=0
260 NEXT
270 GSB 290
280 GOTO 90
290 ?:I=0
300 FOR Y=0 TO 4
310 FOR X=0 TO 4
320 IF [I]=0 ?"-- "; ELSE IF [I]=-1 ?"oo "; ELSE ?DEC$([I],2);" ";
330 I=I+1
340 NEXT:?
350 NEXT:?
360 RTN

サーバーとクライアントのプログラムは、

  • 「手の入力・送信」(サーバー側90~170行・クライアント側190~270行)
  • 「相手の手の受信」(サーバー側180~270行・クライアント側90~180行)

の順番が逆なだけで、基本的に同じプログラムです。
なお、IchigoJam2台でシリアルで通信しているだけなので、MixJuiceが無くても、TX,RXを有線でクロスにつないでも遊べます。
(TX-RX、RX-TX、GND-GND)

コンピュータが無くても、もともとは紙と鉛筆があればできるゲームです。
5×5のます目にランダムに1~25の数字を書いて、互いに数字を言って○×を書けばいいです。
友達とやってみてください。
f:id:shiro0922:20191114230224p:plain