SHIROのIchigoJam日記

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

じゃんけんボード

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です。

遊び方

  • プログラムを起動すると、LEDでグー・チョキ・パーが高速でランダムに表示されます。
  • 自分が出したい手を決めて、基板下の「GU」「CHOKI」「PA」のどれかのボタンを押します。
  • IchigoJamも手を表示して、勝負します。プレイヤーが勝つとIchigoJamのLEDが常時点灯、負けると消灯、あいこだと点滅します。
  • 「GU」ボタン、またはIchigoJamのボタンを押すとリプレイします。

プログラムリスト

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