Edited at

HSPで『かえるのがっしょう』の輪唱

More than 1 year has passed since last update.

A『かえるのうたが』

A『きこえてくるよ』B『かえるのうたが』
A『クワ クワ クワ クワ』B『きこえてくるよ』C『かえるのうたが』
A『ケケケケケケケケ』B『クワ クワ クワ クワ』C『きこえてくるよ』
A『クワクワクワ』B『ケケケケケケケケ』C『クワ クワ クワ クワ』
A『』B『クワクワクワ』C『ケケケケケケケケ』
B『』C『クワクワクワ』
C『』

せっかくHSPでコルーチンが使えるのでいいネタはないかなぁと思いついた題材。

なんともくだらないけど、コルーチンオブジェクトを複数独立させてそれっぽいプログラムができた。

HSPなら音源付きでも同じようなことできるかも。

コルーチンとかイテレータ的な性質をフルに生かせている気がして大変満足。

#runtime "hsp3cl"

#cmpopt varinit 1

#module __Caelin co,value,user
#define yieId(%1="") value=%1: newlab co,1: return
#modcfunc ceNextValue
gosub co: return value
#define global Caelin(%1,%2) dimtype %1,5 :newmod %1,__Caelin,%2

#modinit str _user
user=_user
newlab co,1: return
yieId user+"『かえるのうたが』"
yieId user+"『きこえてくるよ』"
yieId user+"『クワ クワ クワ クワ』"
yieId user+"『ケケケケケケケケ』"
yieId user+"『クワクワクワ』"
yieId user+"『』"
value=""
return
#global

#module Program
#deffunc main
Caelin usrA,"A"
Caelin usrB,"B"
Caelin usrC,"C"

repeat 10
lin=ceNextValue(usrA)
if 1<=cnt: lin+=ceNextValue(usrB)
if 2<=cnt: lin+=ceNextValue(usrC)
mes lin
loop
return
#global
main

イテレータならforeach文で回したいなぁとも思うのでマクロでそれっぽいループ文を実装した。

#runtime "hsp3cl"

#cmpopt varinit 1

#module __Caelin co,value,user
#define yieId(%1="") value=%1: newlab co,1: return
#define endCo value=ceNull:return
#modcfunc ceNextValue
gosub co: return value
#define global Caelin(%1,%2) dimtype %1,5 :newmod %1,__Caelin,%2

#define global ceNull "__ceNull__"
#define global ceForCaelin(%1,%2) %tceForeach Caelin %i,%2: ceForeach %1,%o
#define global ceForeach(%1,%2) %tceForeach *%i: %1=ceNextValue(%2): if ceNull=%1:goto*%i
#define global ceBreak %tceForeach goto*%p0
#define global ceContinue %tceForeach goto*%p1
#define global ceLoop %tceForeach goto*%p1: *%o%o0

#modinit str _user
user=_user
newlab co,1: return
yieId user+"『かえるのうたが』"
yieId user+"『きこえてくるよ』"
yieId user+"『クワ クワ クワ クワ』"
yieId user+"『ケケケケケケケケ』"
yieId user+"『クワクワクワ』"
yieId user+"『』"
endCo
#global

#module Program
#deffunc main
Caelin usrA,"A"
ceForeach v,usrA
mes v
ceLoop
mes
ceForCaelin v,"B"
mes v
ceLoop
return
#global
main