物体にぶつかったとき、反射するプログラムを書いているのですが、複数の物だとうまくいかなくって困っています。
「配列0個目の四角と、配列0個目の丸」
「配列1個目の四角と、配列1個目の丸」
上記の場合はうまくいくのですが。
「配列0個目の四角と、配列1個目の丸」
「配列1個目の四角と、配列0個目の丸」
上記の場合は変な挙動をおこします。
原因は、「0個同士」「1個同士」でしか見れてないのが原因だと思うのですが、
後ひと押しの処理がどうしても思いつかないのです。
いつもならなんとかなってたのですが、どうも何も思いつかなくって困っています。
それではよろしくお願いします(。´Д⊂)
screen 0,500,480 ;*************情報**************** ;■ SIKAKU_MAX = 2 dim SIKAKU_x,SIKAKU_MAX ;X dim SIKAKU_y,SIKAKU_MAX ;Y ;● MARU_MAX = 2 dim MARU_f,MARU_MAX ;フラグ dim MARU_x,MARU_MAX ;X dim MARU_y,MARU_MAX ;Y dim MARU_IDO_x,MARU_MAX ;移動X dim MARU_IDO_y,MARU_MAX ;移動Y ;*************座標**************** ;■ SIKAKU_x = 150,100 SIKAKU_y = 200,50 ;● MARU_x = 250,250 MARU_y = 50,200 ;200,50だとちゃんと反射する ;***********メインループ********** *メイン redraw 0 : color : boxf ;************カウンター*********** color ,255 pos 420,100 : mes "hit " + hit ;********************************* gosub *処理 gosub *四角VS丸 ;******************************* ;■ repeat SIKAKU_MAX ;最大数(2) pos SIKAKU_x(cnt),SIKAKU_y(cnt) : mes "■"+(cnt) loop ;● color 255 repeat MARU_MAX;最大数(2) pos MARU_x(cnt),MARU_y(cnt) :mes "●"+(cnt) loop redraw : await 15 goto *メイン ;**************処理************ *処理 repeat MARU_MAX ;最大数(2) if MARU_f(cnt) = 0 { MARU_f(cnt) = 1 ;フラグを「立てる」 MARU_IDO_x(cnt) = 1 ;移動X } ;画面端にぶつかったら反射する if MARU_x(cnt)!limit(MARU_x(cnt), 42,412-24) : MARU_IDO_x(cnt)* = -1 MARU_x(cnt) + MARU_IDO_x(cnt) * 4 ;スピード loop return ;***********四角VS丸**************** *四角VS丸 repeat MARU_MAX ;最大数(2) MARU_xx = MARU_x(cnt) MARU_yy = MARU_y(cnt) repeat SIKAKU_MAX ;最大数(2) if (SIKAKU_x(cnt) < MARU_xx+10) AND (SIKAKU_x(cnt)+10 > MARU_xx) AND (SIKAKU_y(cnt) < MARU_yy+10) AND (SIKAKU_y(cnt)+10 > MARU_yy) { hit += 1 // repeat MARU_MAX ;最大数(2) // (0)→(1)で判定しようと思ったけど、これもダメだった MARU_IDO_x(cnt)=-MARU_IDO_x(cnt);四角にぶつかったら、移動をマイナスする // loop }loop loop return