IchigoJam でゴルトンボード (上から玉を落とし、ランダムな2択の分岐を繰り返すと、落ちる場所の分布が二項分布になるやつ) を作ってみた。
※IchigoJamはjig.jpの登録商標です
玉の位置の表現の考察
玉の位置は、それぞれの段における位置の候補のうち、左から何番目かで表す。
すると、この「左から何番目か」は、イコール「これまで右に何回行ったか」となる。
プログラム
10 ' ゴルトンボード
20 R=7
30 W=3
40 CLS:FOR I=0 TO R-1:[I]=0:NEXT
50 POKE#700,#10,#38,#10,0,#10,#38,#10,0,0,0,0,0,#10,#38,#10,0
60 FOR I=0 TO R-2
70 FOR J=0 TO I
80 LOCATE 16-I+J*2,I+1:?"o";
90 NEXT:NEXT
100 P=0:LOCATE 16,0:?CHR$(#E1);:WAIT W:LOCATE 16,0:?" ";
110 FOR I=1 TO R-1
120 P=P+RND(2)
130 LOCATE 16-I+P*2,I:?CHR$(#E1);
140 WAIT W
150 LOCATE 16-I+P*2,I:?" ";
160 NEXT
170 X=17-R+P*2:E=23-[P]/2
180 IF R<E FOR Y=R TO E-1:LOCATE X,Y:?CHR$(#E1);:WAIT W:LOCATE X, Y:?" ";:NEXT
190 LOCATE X,E
200 [P]=[P]+1:?CHR$(#E0+[P]%2);
210 LOCATE0,0:IF[P]<(24-R)*2GOTO100
実行結果例
ポイント
設定
10 ' ゴルトンボード
20 R=7
30 W=3
プログラムを書き換えることで、以下の設定が可能である。
-
R:最終的に玉が落ちる位置の候補の数 -
W:玉が1段落ちるごとに入れるウェイトの時間
初期化
40 CLS:FOR I=0 TO R-1:[I]=0:NEXT
画面をクリアし、それぞれの位置に玉が落ちた回数のカウントをリセットする。
50 POKE#700,#10,#38,#10,0,#10,#38,#10,0,0,0,0,0,#10,#38,#10,0
玉を表すキャラクターパターンを用意する。
#E0 が玉が縦に2個並んだパターン、#E1 が玉が1個のパターンである。
60 FOR I=0 TO R-2
70 FOR J=0 TO I
80 LOCATE 16-I+J*2,I+1:?"o";
90 NEXT:NEXT
玉が当たる釘を表現した装飾を描画する。
最初の落ちる位置の候補は1個で、1回分岐すると1個落ちる位置の候補が増え、最終的に R 個の落ちる位置の候補があるので、分岐の回数は R-1 である。
ループを 0 から始めるで、終了値はさらに 1 を引いた R-2 となる。
玉を落とす
100 P=0:LOCATE 16,0:?CHR$(#E1);:WAIT W:LOCATE 16,0:?" ";
110 FOR I=1 TO R-1
120 P=P+RND(2)
130 LOCATE 16-I+P*2,I:?CHR$(#E1);
140 WAIT W
150 LOCATE 16-I+P*2,I:?" ";
160 NEXT
最初に、一番上にある玉を描画する。
その後、規定の回数、分岐と新しい位置の描画を繰り返す。
玉が落ちた位置を記録する
170 X=17-R+P*2:E=23-[P]/2
最終的な玉の位置 (右に行った回数) P をもとに、今回落ちた玉を描画する横位置 X と求める。
また、これまでにそこに玉が落ちた回数 [P] をもとに、今回落ちた玉を描画する縦位置 E を求める。
180 IF R<E FOR Y=R TO E-1:LOCATE X,Y:?CHR$(#E1);:WAIT W:LOCATE X, Y:?" ";:NEXT
玉が急に飛ぶと見にくいので、分岐エリアの下から玉が溜まる場所の上までアニメーションで玉を落とす。
190 LOCATE X,E
200 [P]=[P]+1:?CHR$(#E0+[P]%2);
最終的な場所に落ちた玉を描画する。
この場所に落ちた玉が偶数個か奇数個かで、描画するキャラクターパターンを切り替える。
210 LOCATE0,0:IF[P]<(24-R)*2GOTO100
今回玉が落ちたことにより玉が落ちる場所が上まで埋まったら、処理を終了する。
埋まっていなかったら、次の玉を落とす。
おわりに
IchigoJam で、玉を落として2択の分岐を繰り返し、最終的に落ちた位置の分布をみる実験ができた。
数回繰り返してみると、分布はきれいな形になることもならないこともあった。
