点と壁 たかし 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 | |
ありがとうございました。なんとか、なりそうです。 |