答えようのない質問の仕方をしてしまったんだと、どうか理解してください。
やりかたをおしえてください、では、あなたがいったいどこを「わからない」のか、コッチにも判らないんです。
疑問点が判らない以上、何を答えていいかも判りません。
あんまりダメ出しばかりだと萎えるでしょうしすこしだけサンプル出します。
お望みの機能はまったく満たしていませんが、処理の流れとしてはじゅうぶんなはずです。
仕組みはむずかしくありません。
先に見せていただいたスクリプトを組めるくらいの能力があれば、このサンプルでやっていることを自分のスクリプトへの組み込みも簡単なはずです。
アイテムの出現条件は全然違いますし、アイテムに種類もありませんし、アイテムとパッドとの当たり判定も取っていませんが、それらを追加することも難しくはないと思います。
dim item_x,16:repeat 16:item_x(cnt)=-1:loop
dim item_y,16
ball_x=20:ball_y=40
ball_vx=1:ball_vy=1
screen 0,160,120,0:cls 4
font msgothic,8
//
// ボールを動かしつつ、アイテムを動かすサブルーチンを呼び出す。
// もしボールが(縦方向について)画面の真中を通ったらそこにアイテムを
// 出現させる。
//
repeat
redraw 0
// ボールの移動処理
color 0,0,0
pos ball_x-4,ball_y-4 : mes "●"
ball_x += ball_vx
ball_y += ball_vy
if((ball_x>=ginfo_winx)|(ball_x<=0)):ball_vx*=-1
if((ball_y>=ginfo_winy)|(ball_y<=0)):ball_vy*=-1
color 255,255,255
pos ball_x-4,ball_y-4 : mes "●"
// アイテム出現条件を満たしていればアイテム出現サブルーチンを呼び出す。
if(ball_y=ginfo_winy/2):gosub *put_item
// アイテムの移動サブルーチンを呼び出す。
gosub *move_item
await 1
redraw 1
loop
//
// 16個のアイテムうち、画面内にあるものだけを動かす.
// もしそれが地面に当たっていたら効果発動。
//
*move_item
repeat 16
if(item_x(cnt)>=0) {
color 0,0,0
pos item_x(cnt)-4,item_y(cnt)-4 : mes "□"
item_y(cnt)+=1
if (item_y(cnt)>ginfo_winy){
item_x(cnt)=-1
gosub *drop_item
}
color 0,255,255
pos item_x(cnt)-4,item_y(cnt)-4 : mes "□"
}
loop
return
//
// 16個のアイテムのうち、画面外にあるものを 1 つ
// 画面内(ボールの場所)に持ってくる。
//
*put_item
repeat 16
if(item_x(cnt)<0) {
item_x(cnt) = ball_x
item_y(cnt) = ball_y
break
}
loop
return
//
// ボールのスピードを上げたり下げたりする。
//
*drop_item
if(abs(ball_vx)<4){
ball_vx*=2:
}else{
ball_vx/=2:
}
return