・条件分岐
サイコロを使ったかんたんなゲーム、「チンチロリン」を作ってみよう。
まずはサイコロを3個ふる。3個のサイコロはそれぞれ、A、B、Cとする。
A=RND(6)+1
B=RND(6)+1
C=RND(6)+1
PRINT A;" ";B;" "C
これで3個のサイコロの出目が表示される。 つぎにこの出目がどのような役なのかを判定しなければならない。
もっとも単純なのはIF文でゴリ押する方法だろう。たとえば、
IF A=="■" AND B=="■" AND C=="■" THEN ~
という命令文(■には数字がはいる)を6×6×6=186行くりかえせばいい。
あるいは、
D=A*100+B*10+C
と3個の出目を3ケタの数字におきかえて、READ文を使って判定させる方法もあるだろう。だが、もっと楽なやりかたはないだろうか。それが今回のテーマ、「条件分岐」である。
まず、3個の目のでかたのうち、もっとも特殊な「ゾロ目」について判定する。
IF A==B AND A==C THEN PRINT "ゾロメ":END
命令文の最後にENDをつけたのは、これ以降の判定をしないため。GOTO~におきかえてもよい。つぎに3個のうち2個が同じ場合を判定する。
IF A==B THEN PRINT "デメ = ";C:END
IF A==C THEN PRINT "デメ = ";B:END
IF B==C THEN PRINT "デメ = ";A:END
AとBがそろった場合Cが出目、AとCがそろった場合Bが出目、BとCがそろった場合Aが出目になる。たとえば、4、4、2と出た場合、2が出目となる。4、4、4の場合はすでに先の分岐ではじかれているので、この分岐にはこない。4、4、4はゾロ目として判定され、出目4とは判定されない。
つぎに「456」について判定する。これは、2×2×2=8パターンしかないため、力押し、つまりIF文を8行書いてもよいだろう。
だがもっと楽な方法がある。
IF A+B+C==15 THEN PRINT "シゴロ":END
すでに、5、5,5のパターン、6、6、3のパターンは先の分岐ではじかれているため、この分岐にはこない。したがってこの分岐で合計数が15になるのは、4+5+6のパターンしかない。同様に「123」については、
IF A+B+C==6 THEN PRINT "ヒフミ":END
で判定できる。さて、ここまでの分岐ではじかれていない目については「出目なし」と判定することができる。
PRINT "メナシ" :END
これですべての目の出方について判定することができた。ただし、「チンチロリン」は目が出ない場合、3回までサイコロをふることができる。そこでサイコロをふる回数を変数FURUに代し、このようにプログラムを組んでみた
FURU=0
@SAIOFURU
IF FURU==3 THEN PRINT "メナシ":END
A=RND(6)+1
B=RND(6)+1
C=RND(6)+1
PRINT A;" ";B;" "C
IF A==B AND A==C THEN PRINT "ゾロメ":END
IF A==B THEN PRINT "デメ = ";C:END
IF A==C THEN PRINT "デメ = ";B:END
IF B==C THEN PRINT "デメ = ";A:END
IF A+B+C==15 THEN PRINT "シゴロ":END
IF A+B+C==6 THEN PRINT "ヒフミ":END
FURU=FURU+1:GOTO @SAIOFURU
ダイレクトモードにして、
RUN (エンター)
で起動する。2回目からは、十字キー上、Ⓐボタンで起動する。
音は、♪チンチロリンではなく、♪ピコピコだ。
まずはサイコロを3個ふる。3個のサイコロはそれぞれ、A、B、Cとする。
A=RND(6)+1
B=RND(6)+1
C=RND(6)+1
PRINT A;" ";B;" "C
これで3個のサイコロの出目が表示される。 つぎにこの出目がどのような役なのかを判定しなければならない。
もっとも単純なのはIF文でゴリ押する方法だろう。たとえば、
IF A=="■" AND B=="■" AND C=="■" THEN ~
という命令文(■には数字がはいる)を6×6×6=186行くりかえせばいい。
あるいは、
D=A*100+B*10+C
と3個の出目を3ケタの数字におきかえて、READ文を使って判定させる方法もあるだろう。だが、もっと楽なやりかたはないだろうか。それが今回のテーマ、「条件分岐」である。
まず、3個の目のでかたのうち、もっとも特殊な「ゾロ目」について判定する。
IF A==B AND A==C THEN PRINT "ゾロメ":END
命令文の最後にENDをつけたのは、これ以降の判定をしないため。GOTO~におきかえてもよい。つぎに3個のうち2個が同じ場合を判定する。
IF A==B THEN PRINT "デメ = ";C:END
IF A==C THEN PRINT "デメ = ";B:END
IF B==C THEN PRINT "デメ = ";A:END
AとBがそろった場合Cが出目、AとCがそろった場合Bが出目、BとCがそろった場合Aが出目になる。たとえば、4、4、2と出た場合、2が出目となる。4、4、4の場合はすでに先の分岐ではじかれているので、この分岐にはこない。4、4、4はゾロ目として判定され、出目4とは判定されない。
つぎに「456」について判定する。これは、2×2×2=8パターンしかないため、力押し、つまりIF文を8行書いてもよいだろう。
だがもっと楽な方法がある。
IF A+B+C==15 THEN PRINT "シゴロ":END
すでに、5、5,5のパターン、6、6、3のパターンは先の分岐ではじかれているため、この分岐にはこない。したがってこの分岐で合計数が15になるのは、4+5+6のパターンしかない。同様に「123」については、
IF A+B+C==6 THEN PRINT "ヒフミ":END
で判定できる。さて、ここまでの分岐ではじかれていない目については「出目なし」と判定することができる。
PRINT "メナシ" :END
これですべての目の出方について判定することができた。ただし、「チンチロリン」は目が出ない場合、3回までサイコロをふることができる。そこでサイコロをふる回数を変数FURUに代し、このようにプログラムを組んでみた
FURU=0
@SAIOFURU
IF FURU==3 THEN PRINT "メナシ":END
A=RND(6)+1
B=RND(6)+1
C=RND(6)+1
PRINT A;" ";B;" "C
IF A==B AND A==C THEN PRINT "ゾロメ":END
IF A==B THEN PRINT "デメ = ";C:END
IF A==C THEN PRINT "デメ = ";B:END
IF B==C THEN PRINT "デメ = ";A:END
IF A+B+C==15 THEN PRINT "シゴロ":END
IF A+B+C==6 THEN PRINT "ヒフミ":END
FURU=FURU+1:GOTO @SAIOFURU
ダイレクトモードにして、
RUN (エンター)
で起動する。2回目からは、十字キー上、Ⓐボタンで起動する。
音は、♪チンチロリンではなく、♪ピコピコだ。