●このページの課題は maru03.bas として、マイドキュメントの basic フォルダに保存すること。( .bas は自動的につきます)
●まず、x=500でないと止まらないのでなく、好きなところで止められるようにしましょう。
●DO の後ろの WHILE 以下を消してしまいます。これで永遠に動き続けるようになります。(止めるときなは中断ボタン(実行の隣の隣)で中断し、出てくるウインドウで[×中止]を選ぶ)
●そして、赤字の部分を加えてください。CHARACTER INPUT はキーボードから1文字を入力する命令です。NOWAIT は入力がなければ、待たずに次に進むということ。:s$ は入力された文字が s$ に代入されることを意味します。
●つづく、IF s$="e" THEN EXIT DO はキー入力が小文字の e だったらば DO〜LOOP を終了し LOOP の次の命令に進むことを指示しています。この赤字部分でキーボードで小文字の e が押されたらおしまいということを表しています。
SET WINDOW 0,500,0,500 SET AREA COLOR 2 LET x=50 LET y=300 DO CHARACTER INPUT NOWAIT:s$ IF s$="e" THEN EXIT DO SET AREA COLOR 0 DRAW disk WITH SCALE(10)*SHIFT(x,y) LET x = x + 1 SET AREA COLOR 2 DRAW disk WITH SCALE(10)*SHIFT(x,y) WAIT DELAY 0.01 LOOP END
●x=500で跳ね返るようにしましょう。x に1ずつ加えて右に動かしていましたが、これを d として、最初に d=1 としておき、右端までいったら d=-1 にして逆に動かすことにします。
●青字部分は3行一組で x が 500 よりも大きくなったら、d を -1 にするというものです。 x > 500 が成立すれば、IF 〜 THEN の行から、END IF の行までのあいだを実行し、そうでなければ、すぐに END IF の次の行に進むという命令です。
SET WINDOW 0,500,0,500 SET AREA COLOR 2 LET x=50 LET y=300 LET d=1 DO CHARACTER INPUT NOWAIT:s$ IF s$="e" THEN EXIT DO SET AREA COLOR 0 DRAW disk WITH SCALE(10)*SHIFT(x,y) LET x = x + d IF x > 500 THEN LET d=-1 END IF SET AREA COLOR 2 DRAW disk WITH SCALE(10)*SHIFT(x,y) WAIT DELAY 0.01 LOOP END
●さらに青字部分を付け加えました。x が 0 よりもa小さくなったら、d を 1 にするというものです。x < 0 が成立すれば、IF 〜 THEN の行から、END IF の行までのあいだを実行し、そうでなければ、すぐに END IF の次の行に進むという命令です。
SET WINDOW 0,500,0,500
SET AREA COLOR 2
LET x=50
LET y=300
LET d=1
DO
CHARACTER INPUT NOWAIT:s$
IF s$="e" THEN EXIT DO
SET AREA COLOR 0
DRAW disk WITH SCALE(10)*SHIFT(x,y)
LET x = x + d
IF x > 500 THEN
LET d=-1
END IF
IF x < 0 THEN
LET d=1
END IF
SET AREA COLOR 2
DRAW disk WITH SCALE(10)*SHIFT(x,y)
WAIT DELAY 0.01
LOOP
END
●跳ね返るときに、めり込んでいるのですが、ボールがつぶれたと考えてこれでいいことにします。
●一応動きますが、円を消してから次に描くまでは、円が見えない状態にあります。この時間が長いとスムーズに動かずに、点滅して見えます。もちろんコンピュータの速さにもよります。
●そこで、改良を加えます。あたらしい x を計算する前に ox = x として、前の x の位置を記憶しておき、消すときは x の代わりに ox をつかうのです。
SET WINDOW 0,500,0,500 SET AREA COLOR 2 LET x=50 LET y=300 LET d=1 DO CHARACTER INPUT NOWAIT:s$ IF s$="e" THEN EXIT DO LET ox = x LET x = x + d IF x > 500 THEN LET d=-1 END IF IF x < 0 THEN LET d=1 END IF SET AREA COLOR 0 DRAW disk WITH SCALE(10)*SHIFT(ox,y) SET AREA COLOR 2 DRAW disk WITH SCALE(10)*SHIFT(x,y) WAIT DELAY 0.01 LOOP END