13日目「IchigoJamでズンドコキヨシ」、印象的な「キ・ヨ・シ」の大きな文字を遊んでみます。
4倍角にしたイチゴが画面内をランダムに表示!
IchigoJam ver 1.4 の新命令。DRAWを使ってこの大きな文字を1行で描くプログラム
5 C=ASC("A"):X=15:Y=12 10 FORI=0TO7:FORJ=0TO7:DRAWX*2+J,Y*2+I,PEEK(C*8+I)>>(7-J)&1:NEXT:NEXT
Cで表示したい文字、XとYで座標を指定
もう1ループ追加すれば、文字列を表示もOK!
5 S="15Jam":X=15:Y=12 10 FORK=0TOLEN(S)-1:C=ASC(S+K):FORI=0TO7:FORJ=0TO7:DRAWX*2+J+K*8,Y*2+I,PEEK(C*8+I)>>(7-J)&1:NEXT:NEXT:NEXT
まだ ver 1.4 にしていない方でも大丈夫!
5 C=ASC("A"):X=2:Y=12 10 FORI=0TO15:N=#80:FORJ=0TO3:N=N+PEEK(C*8+I/4*2+J/2)>>(7-I%4*2-J%2)&1<<J:NEXT:LCX+I%4,Y+I/4:?CHR$(N);:NEXT
DRAWの中身は#80〜#8Fのセミグラフィクスを使っているだけなので、座標を指定して表示すればOK!(文字列も!)
5 S="15Jam":X=15:Y=12 10 FORK=0TOLEN(S)-1:C=ASC(S+K):FORI=0TO15:N=#80:FORJ=0TO3:N=N+PEEK(C*8+I/4*2+J/2)>>(7-I%4*2-J%2)&1<<J:NEXT:LCX+K*4+I%4,Y+I/4:?CHR$(N);:NEXT:NEXT
テンポが大事なこちら「IchigoJamでズンドコキヨシ」のキヨシ表示。
LODAINGと表示しながら、先に計算しておくテクニックが使われています。
配列のメモリ#800を1文字につき16byte使えば、保存しておけますね。まずは画像メモリ#900への直接表示バージョン
5 C=ASC("A"):X=2:Y=12 10 FORI=0TO15:N=#80:FORJ=0TO3:N=N+PEEK(C*8+I/4*2+J/2)>>(7-I%4*2-J%2)&1<<J:NEXT:POKE#900+X+I%4+(Y+I/4)*32,N:NEXT
LCX,Y:?CHR$(C); は、POKEX+Y*32,C とほぼ同じ動きとなります(カーソルの移動が伴わない点が違う。これを応用して、まずは変数用のメモリの配列部分#800に書き込んでおいて、あとで#900へ4文字ずつコピーすることで高速化!
5 C=ASC("A"):X=2:Y=12 10 FORI=0TO15:N=#80:FORJ=0TO3:N=N+PEEK(C*8+I/4*2+J/2)>>(7-I%4*2-J%2)&1<<J:NEXT:POKE#800+I,N:NEXT 20 FORI=0TO3:COPY#900+X+(Y+I)*32,#800+I*4,4:NEXT
速くなりました!
こちら冒頭紹介した、ランダムにイチゴを表示するプログラム
5 C=255 6 ?"WAIT A MOMENT" 10 FORI=0TO15:N=#80:FORJ=0TO3:N=N+PEEK(C*8+I/4*2+J/2)>>(7-I%4*2-J%2)&1<<J:NEXT:POKE#800+I,N:NEXT 15 X=RND(32-4):Y=RND(24-4) 20 FORI=0TO3:COPY#900+X+(Y+I)*32,#800+I*4,4:NEXT 30 GOTO 15
計算力と記憶力が抜群なコンピューター。
とはいえ、無限に速いわけでも、無限に記憶できるわけでもありません。
どう計算され、どう記憶されるかイメージしながら作ってみると、普段接するプログラムの中身が想像できるようになりますよ!
* ズンドコキヨシ問題(ズンドコキヨシ、ズンドコチェック、キヨシチェック、とも)
「ランダムに出るズンとドコ。ズンが4回続いてドコが来たら、キヨシと表示して終わるプログラムを作りなさい」という問題。
「きよしのズンドコ節」にて「ズン・ズンズンズンドコ」と来たら「キヨシ」と観客が声を掛ける様から。
IchigoJamで遊んでみよう!
10 Z=0 20 N=RND(2) 30 IF N=0 ?"ズン ";:Z=Z+1:GOTO20 40 ?"ドコ ";:IF Z<4 Z=0:GOTO20 50 ?"キヨシ"
ズンの数を数えて、4回目ならループせずキヨシ!
RUNするたびに変わる長さ、数えてみよう
15 C=0 21 C=C+1 60 ?C
平均の長さがどのくらいになるか計算してみて、検証してみるのもおもしろそう。
ズンとドコは確率1/2、じゃんけんに4回連続勝つ確率と一緒です。
ちょっといたずらして、絶対終わらないように操作してみよう。
25 IF Z=4 N=0
4回ズンが続いたら強制的にズンにしてしまうことで、エンドレス。
さすがにイカサマがバレてしまうので、下のようにして1/10の確率で1にしてあげよう
25 IF Z=4 IF RND(10)=0 N=1 ELSE N=0
ズンとドコのでる確率を偏らせてみたり、WAITでリズムを取ったり、音をMIDIで豪華にしたり、算数的にも音楽的にも楽しめる。 世界的に有名な FizzBuzz とは違った味わいがありますね。
氷川きよしさんによる「きよしのズンドコ節 (2020)」の元をたどると、原曲は1937年と歴史が長い。
1978年生まれ的には、ドリフのズンドコ節が一番聞き馴染みある。フランス語バージョンもあったとは!
(ズンドコ節 - Wikipedia)