IchigoJamプログラミング入門教室で、画面にランダムに「GU」「CHOKI」「PA」を表示する「じゃんけん」のプログラムをよくやります。
10 A=RND(3) 20 IF A=0 ?"GU" 30 IF A=1 ?"CHOKI" 40 IF A=2 ?"PA"
LEDでグー・チョキ・パーを表示できないか?と考えて、このボードを作ってみました。
基板データ
*この基板ガーバーデータは、CC BYライセンスとします。どうぞご利用ください。
(C) 2018 Shiro Saito (http://d.hatena.ne.jp/shiro0922/)
このファイルをそのままFusion PCBで登録すれば、基板を発注できます。
基板寸法は50×40mmです。
遊び方
プログラムリスト
10 '*Janken 20 CLV 30 OUT 0 40 WAIT 60 50 '@INLOOP 60 IF BTN()=1 THEN K=1 70 IF IN(1)=0 THEN K=2 80 IF IN(2)=0 THEN K=3 90 J=RND(3)+1 100 OUT 0 110 IF J=1 THEN GOSUB 270 120 IF J=2 THEN GOSUB 300 130 IF J=3 THEN GOSUB 350 140 WAIT 10 150 IF K=0 THEN GOTO 50 160 IF K=J-1 OR (K=3 AND J=1) THEN G=2 170 IF K=J THEN G=1 180 BEEP 30-G*10,30 190 '@RLOOP 200 LED G 210 WAIT 15 220 IF BTN()=1 THEN RUN 230 LED G/2 240 WAIT 15 250 IF BTN()=1 THEN RUN 260 GOTO 190 270 '@GU 280 OUT 6,1 290 RETURN 300 '@CHOKI 310 OUT 3,1 320 OUT 4,1 330 OUT 6,1 340 RETURN 350 '@PA 360 OUT 1,1 370 OUT 2,1 380 OUT 3,1 390 OUT 4,1 400 OUT 5,1 410 OUT 6,1 420 RETURN
「子どもにわかりやすく」と考えて、冗長なプログラムになっています。
プレイヤーがボタンで手を入力した後、IchigoJamが手を出していますが、プレイヤーの手を盗み見ての後出しはしていません。
できる人は、IchigoJamが後出しで絶対に勝つ、あるいは絶対に負けるプログラムにしてみましょう。
最初の入門ではここまでやらなくても、「グー・チョキ・パーをランダムにLEDで表示して終了」するだけのプログラムでもいいかもしれません。勝敗判定を考えるのもプログラミング課題としては面白いのですが。
プログラムリスト(通信対戦)
- 2台をケーブルでつないで対戦します。じゃんけんボードのGND同士を接続。TXとRXはクロス(互い違い)に接続します。
- 2台とも電源を入れて、プログラムを起動します。起動音の後に手の入力待ちになるので、グー・チョキ・パーのどれかのボタンを押します。
- 2台とも手を入力すると、対戦して結果を表示します。勝った場合はIchigoJamのLEDが常時点灯、負けた場合は消灯、あいこの場合は点滅します。
- 「GU」またはIchigoJamのボタンを押すとリプレイします。
10 '*Janken Taisen 20 CLV:CLK:OUT 0:UART 1,1 30 IF BTN() THEN CONT 40 WAIT 30 50 GOSUB 510 60 BEEP 10,30 70 WAIT 30 80 OUT 0 90 '@INLOOP 100 IF BTN()=1 THEN K=1 110 IF IN(1)=0 THEN K=2 120 IF IN(2)=0 THEN K=3 130 IF K=0 THEN GOTO 90 140 IF K=1 THEN GOSUB 430 150 IF K=2 THEN GOSUB 460 160 IF K=3 THEN GOSUB 510 170 BEEP 180 '@DATASTART 190 ?"*" 200 S=INKEY() 210 IF S<>42 THEN GOTO 180 220 CLK 230 '@RECEIVE 240 ?K 250 J=INKEY() 260 IF J<49 OR J>51 THEN GOTO 230 270 J=J-48 280 CLK 290 ?K 300 WAIT 60 310 '@JUDGE 320 IF K=J-1 OR (K=3 AND J=1) THEN G=2 330 IF K=J THEN G=1 340 BEEP 30-G*10,30 350 '@RLOOP 360 LED G 370 WAIT 15 380 IF BTN()=1 THEN RUN 390 LED G/2 400 WAIT 15 410 IF BTN()=1 THEN RUN 420 GOTO 350 430 '@GU 440 OUT 6,1 450 RETURN 460 '@CHOKI 470 OUT 3,1 480 OUT 4,1 490 OUT 6,1 500 RETURN 510 '@PA 520 OUT 1,1 530 OUT 2,1 540 OUT 3,1 550 OUT 4,1 560 OUT 5,1 570 OUT 6,1 580 RETURN