(4)キー入力で跳返る

キー入力のあった時点で跳ね返る

このページの課題は maru04.bas として、マイドキュメントの basic フォルダに保存すること。( .bas は自動的につきます)

好きなところで跳ね返るようにする

好きなところで跳ね返るようにしましょう。

キーボードから"/"を入力すると反対に進むようにします。やり方はいくつかありますが、d の値を -d にすれば、進む向きは逆になります。これがいちばん簡単でしょう。

maru04.bas

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
   IF s$="/" THEN  d = -d

   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

跳ね返ったら縦に動く

キー入力で跳ね返るとき縦に動くようにします。"/"の向きから考えて、右に動いていたときは上に、左に動いていたときは下に跳ね返るようにします。

これもやり方はいろいろありますが、d を dx と dy の2つにして、"/" の入力で、dx の値を dy に代入すれば、右に動いていたときは上に、左に動いていたときは下にいかせることができます。代入したあとは 0 にしておきます。

上下にも動かすので、かなりいろいろ変えなければならなくなります。d を dx と dy に分けます。ox に対して oy もつくります。

maru04.bas

SET WINDOW 0,500,0,500
SET AREA COLOR 2

LET  x=50
LET  y=300
LET  dx=1
LET  dy=0

DO
   CHARACTER INPUT NOWAIT:s$
   IF s$="e" THEN  EXIT DO
   IF s$="/" THEN
     dy = dx
     dx = 0
   END IF

   LET  ox = x
   LET  oy = y

   LET  x = x + dx
   LET  y = y + dy
   IF x > 500 THEN 
      LET  dx=-1
   END IF
   IF x < 0 THEN 
      LET  dx=1
   END IF
   
   SET AREA COLOR 0
   DRAW disk WITH SCALE(10)*SHIFT(ox,oy)
   SET AREA COLOR 2
   DRAW disk WITH SCALE(10)*SHIFT(x,y)
   WAIT DELAY 0.01
LOOP
END

上下も端で跳ね返る

上下に動くときも端で跳ね返るようにします。

maru04.bas

SET WINDOW 0,500,0,500
SET AREA COLOR 2

LET  x=50
LET  y=300
LET  dx=1
LET  dy=0

DO
   CHARACTER INPUT NOWAIT:s$
   IF s$="e" THEN  EXIT DO
   IF s$="/" THEN
      LET  tmp=dy
      LET  dy=dx
      LET  dx=tmp
   END IF

   LET  ox = x
   LET  oy = y

   LET  x = x + dx
   LET  y = y + dy
   IF x > 500 THEN 
      LET  dx=-1
   END IF
   IF x < 0 THEN 
      LET  dx=1
   END IF
   IF y > 500 THEN 
      LET  dy=-1
   END IF
   IF y < 0 THEN 
      LET  dy=1
   END IF
   
   SET AREA COLOR 0
   DRAW disk WITH SCALE(10)*SHIFT(ox,oy)
   SET AREA COLOR 2
   DRAW disk WITH SCALE(10)*SHIFT(x,y)
   WAIT DELAY 0.01
LOOP
END

青色部分も変えました。dx と dy を交換するようにしています。これをしないと、2度目に"/"を押すと止まってしまいます。こうすることで、上に動いているときに"/"を押すと右に動くようになります。


聖愛高等学校
http://www.seiai.ed.jp/