0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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択の分岐を繰り返し、最終的に落ちた位置の分布をみる実験ができた。
数回繰り返してみると、分布はきれいな形になることもならないこともあった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?