MixJuiceで無線通信するプログラムの応用で、リーチゲーム(ビンゴゲームの一種)を作ってみました。
以前に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の数字を書いて、互いに数字を言って○×を書けばいいです。
友達とやってみてください。