新しく発言する EXIT インデックスへ
点と壁

  点と壁 たかし 2005/10/26 22:49:22 
  プログラム@のつづき たかし 2005/10/26 22:50:29 
   └さらに続き たかし 2005/10/26 22:53:08 
    └以上のプログラムについての質問。 たかし 2005/10/26 22:59:30 
     └setdrawmodehiddenの状態のため、内部ビット... 青木太一 2005/10/27 11:08:35 
      └ありがとうございました。なんとか、なりそ... たかし 2005/10/27 21:34:46 

  点と壁 たかし 2005/10/26 22:49:22  ツリーへ

点と壁 返事を書く
たかし 2005/10/26 22:49:22

プログラム@


rem ** 点と壁の初期3.5 迷路5

!!!!文章画面表示!!!
set window 0,1,0,1
set text color 1
plot text ,at 0,0.9 :"迷路5です"
PLOT TEXT ,AT 0,0.85 :"ここで迷路が進化します"
PLOT TEXT ,AT 0,0.8 :"黒い壁が・・・"
PLOT TEXT ,AT 0,0.75 :"赤い出口が・・・"
PLOT TEXT ,AT 0,0.7 :"どうなっているか"
PLOT TEXT ,AT 0,0.65 :"お楽しみに!"
WAIT DELAY 15
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

goto 1
1 randomize
set window 0,1,0,1
LET n=20
dim x(0 to n),y(0 to n) !壁の位置
dim vx(0 to n),vy(0 to n)!壁の速度(velocity) ! 点が進む?

!初期値設定
for i=1 to n
LET x(i)=rnd
LET y(i)=rnd
LET vx(i)=(rnd-0.5)/50
LET vy(i)=(rnd-0.5)/50
next i

let x(0)=0 !点の位置
let y(0)=0
LET x(n)=0.9
LET y(n)=0.9
!!!!!!!!メインループ開始!!!!!!!
LETt=TIME DO
set area color 15
plot area:0,0;0,1;1,1;1,0

let vx(0)=0 !点の速度キーが押されてないとき
let vy(0)=0

! キー操作の設定
WAIT DELAY 0.01 ! 0.01秒待機する
IF GetKeyState(27)<0 THEN EXIT DO ! ESCを押すと終了
IF GetKeyState(37)<0 THEN
LET vx(0)=-0.05
end if
IF GetKeyState(38)<0 THEN
LET vy(0)=+0.05
end if
IF GetKeyState(39)<0 THEN
LET vx(0)=+0.05
end if
IF GetKeyState(40)<0 THEN
let vy(0)=-0.05
end if








  プログラム@のつづき たかし 2005/10/26 22:50:29  ツリーへ

Re: 点と壁 返事を書く
たかし 2005/10/26 22:50:29
プログラム@のつづき

!点と壁の当たり判定 !!!!!!!相対速度?を使う!!!!!!!
LET xx=ABS(x(n)-x(0))
LET yy=ABS(y(n)-y(0))
IF xx<0.025 AND yy<0.2 THEN
CLEAR
WAIT DELAY 1
set window 0,1,0,1
set text color 1
plot text ,at 0,0.9 :"脱出成功 おめでとう"
PLOT TEXT ,AT 0,0.85 :"−−−−−−−−− "
PLOT TEXT ,AT0,0.8 :"//////////////////////////////////"
PLOT TEXT ,AT 0,0.75 :"・・・"
PLOT TEXT ,AT 0,0.7 :"???????????"
PLOT TEXT ,AT 0,0.65 :"!"
WAIT DELAY 15
exit do
!縦壁の幅、高さ
end if
FOR i=1 TO n-1
LET xx=ABS(x(i)-x(0))
LET yy=ABS(y(i)-y(0))
IF xx<0.025 AND yy<0.2 and vx(i)>0.01 and vy(i)>0.01 THEN      !縦壁の幅,高さ !!!!!!壁1との判定!!!!!!
LET vx(0)=vx(i)-vx(0) !!相対速度の概念!!! LET vy(0)=vy(i)-vy(0)
DECLARE EXTERNAL FUNCTION PlaySound1
LET S$="C:\効果音\se02.WAV"
LET q=PlaySound(S$, "", 128)
EXIT FOR !ひとつ見つかれば十分!
END IF
IF xx<0.025 AND yy<0.2 and vx(i)<0.01 and vy(i)<0.01 then
let vx(0)=vx(0)-vx(i)
let vy(0)=vy(0)-vy(i)
DECLARE EXTERNAL FUNCTION PlaySound2
LET S$="C:\効果音\se02.WAV"
LET q=PlaySound(S$, "", 128)
EXIT FOR !ひとつ見つかれば十分!
end if
next i
FOR i=1 TO n-1
LET xxx=ABS(x(i)*i/10 -x(0))
LET yyy=ABS(y(i)*i/10 -y(0))
IF xxx<0.4 and yyy<0.015 and vx(i)>0.01 and vy(i)>0.01 then
LET vx(0)=vx(i)-vx(0) !!!!!壁2との判定!
LET vy(0)=vy(i)-vy(0)
DECLARE EXTERNAL FUNCTION PlaySound3
LET S$="C:\効果音\se02.WAV"
LET q=PlaySound(S$, "", 128)
EXIT FOR !ひとつ見つかれば十分!
end if
ifxxx<0.4 and yyy<0.015 and vx(i)<0.01 and vy(i)<0.01 then
let vx(0)=vx(0)-vx(i)
let vy(0)=vy(0)-vy(i)
DECLARE EXTERNAL FUNCTION PlaySound4
LET S$="C:\効果音\se02.WAV"
LET q=PlaySound(S$, "", 128)
EXIT FOR !ひとつ見つかれば十分!
end if
NEXT i



   └さらに続き たかし 2005/10/26 22:53:08  ツリーへ

Re: プログラム@のつづき 返事を書く
たかし 2005/10/26 22:53:08
さらに続き

!点と壁が外壁にぶつかったら反射する
for i=0 to n
IF x(i)<0 THEN !外壁にぶつかったら、
LET x(i)=0 !端に位置付ける
LET vx(i)=+0.009 !反射する
DECLARE EXTERNAL FUNCTION PlaySound5
LET S$="C:\効果音\se01.WAV"
LET q=PlaySound(S$, "", 128)
END IF
IF 1<x(i) THEN
LET x(i)=0.95
let vx(i)=-0.009
DECLARE EXTERNAL FUNCTION PlaySound6
LET S$="C:\効果音\se01.WAV"
LET q=PlaySound(S$, "", 128)
END IF
IF y(i)<0 THEN
LET y(i)=0
LET vy(i)=-vy(i)
DECLARE EXTERNAL FUNCTION PlaySound7
LET S$="C:\効果音\se01.WAV"
LET q=PlaySound(S$, "", 128)
END IF
IF 1<y(i) THEN
LET y(i)=0.95
LET vy(i)=-0.009
DECLARE EXTERNAL FUNCTION PlaySound8
LET S$="C:\効果音\se01.WAV"
LET q=PlaySound(S$, "", 128)
END IF
NEXT i
!点と壁を速度によって位置を進める
SET AREA COLOR 1
for i=0 to n
LET x(i)=x(i)+vx(i)
LET y(i)=y(i)+vy(i)
next i

!壁を描く
for i=1 to n
draw kabe1 WITH SHIFT (x(i),y(i))
draw kabe2 with shift (x(i)* i/10 ,y(i)* i/10 )
next i
!点を描いて動かす
SET AREA COLOR 5
DRAW kabe1 WITH SHIFT (x(n),y(n))
set area color 3
DRAW tenn WITH SHIFT(x(0),y(0))
SET TEXT COLOR 14

plot text ,at 0,0:"経過時間"&str$(time-t)&"秒"
!ちらつき防止
set draw mode explicit
set draw mode hidden
clear
draw grid(0.1,0.1)
LOOP
10 END
external picture tenn
plot area :0.015,0.015;-0.015,0.015;-0.015,-0.015;0.015,-0.015
end picture
EXTERNAL PICTURE kabe1
plot area:0.025,0.2;-0.025,0.2;-0.025,-0.2;0.025,-0.2
END picture
external picture kabe2
plot area:-0.3,0;-0.3,-0.015;0.1,-0.015;0.1,0
END picture
EXTERNAL FUNCTION PlaySound(pszSound$, hmod$, fdwSound)
ASSIGN "winmm.dll","PlaySoundA"
END FUNCTION

    └以上のプログラムについての質問。 たかし 2005/10/26 22:59:30  ツリーへ

Re: さらに続き 返事を書く
たかし 2005/10/26 22:59:30
以上のプログラムについての質問。
緑色の点が水色の四角形と重なったらすなわち
LET xx=ABS(x(n)-x(0))
LET yy=ABS(y(n)-y(0))
IF xx<0.025 AND yy<0.2 THEN
が実行されたら、
CLEAR
WAIT DELAY 1
set window 0,1,0,1
set text color 1
plot text ,at 0,0.9 :"脱出成功 おめでとう"
PLOT TEXT ,AT 0,0.85 :"−−−−−− "
PLOT TEXT ,AT 0,0.8 :"//////////////////////////////////"
PLOT TEXT ,AT 0,0.75 :"・・・"
PLOT TEXT ,AT 0,0.7 :"???????????"
PLOT TEXT ,AT 0,0.65 :"!"
WAIT DELAY 15
exit do
end if
とtextを表示してからendさせたいのですがうまくいきません。


     └setdrawmodehiddenの状態のため、内部ビット... 青木太一 2005/10/27 11:08:35  ツリーへ

Re: 以上のプログラムについての質問。 返事を書く
青木太一 2005/10/27 11:08:35
set draw mode hiddenの状態のため、内部ビットマップメモリにしか終了画面が描画されず画面に描画内容が反映されないのが問題ではないでしょうか。

WAIT DELAYの直前に
set draw mode explicit
という行を加えれば、たかしさんの意図するとおりになると思います。

      └ありがとうございました。なんとか、なりそ... たかし 2005/10/27 21:34:46  ツリーへ

Re: setdrawmodehiddenの状態のため、内部ビット... 返事を書く
たかし 2005/10/27 21:34:46
ありがとうございました。なんとか、なりそうです。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。