トピック
げんや genya0519

写真を見て下さい。この子に壁の当たり判定をつけるにはどうすればいいんですか?

1そうだね
プレイ済み
返信[1]
親投稿
ほしけん Hosiken
PRINTで迷路を表示されているのなら、 CHKCHR(X,Y) でその位置にある文字がわかるので その子を移動させる前に、CHKCHR して 何かあるなら動かない、とさせればOKです。
2そうだね
プレイ済み
返信[2]
親投稿
********** itd12d
(パックマンだー!) ほしけんさんも仰っている通り、CHKCHRで文字を取得できます。 X,YにAの値(後述)を加算した場所に何かあれば動かない、でokです。 ※Aの値? 進行方向によって変化する値です。(Aの値と呼んでいるのは自分だけ) 左→X -1 右→X +1 上→Y -1 下→Y +1
2そうだね
プレイ済み
返信[3]
親投稿
げんや genya0519
ほしけんさん>「何かあるなら動かさない」の処理がよく分かりません。どう書けばいいんですか?IF文??
0そうだね
プレイ済み
返信[4]
親投稿
IF A$==" " THEN 移動処理~ かなぁ?
0そうだね
プレイ済み
返信[5]
親投稿
ほしけん Hosiken
今って直接XとYを足してるじゃないですか。これではうまくいきません。 以下のような感じで、足す前に、一旦、座標の増減だけ別変数で覚えておけば、動く前に行き先の確認ができますよ。 増減X=0:増減Y=0 IF A==1 THEN 増減Y=-1 IF A==2 THEN 増減Y=1 IF A==4 THEN 増減X=-1 IF A==8 THEN 増減X=1 CH=CHKCHR(X+増減X,Y+増減Y) ' 空白の部分は0か32 IF CH==0 OR CH==32 THEN  LOCATE X,Y:PRINT " "  X=X+増減X:Y=Y+増減Y  LOCATE X,Y:PRINT "(・_・)" ENDIF
1そうだね
プレイ済み
返信[6]
親投稿
ほしけん Hosiken
おっとすいません。 IF CH==0 OR CH==32 THEN じゃなくて IF (CH==0) OR (CH==32) THEN か IF CH==0 || CH==32 THEN じゃないとダメかもです。
0そうだね
プレイ済み
返信[7]
親投稿
げんや genya0519
うぐ…動きません。
0そうだね
プレイ済み
返信[8]
親投稿
ほしけん Hosiken
書き換えてる途中で入力をやめたようにしか見えないのですが…
1そうだね
プレイ済み
返信[9]
親投稿
げんや genya0519
??? すいません、よく分かりません。
0そうだね
プレイ済み
返信[10]
親投稿
これで参考になりませんかね?
0そうだね
プレイ済み
返信[11]
親投稿
ほしけん Hosiken
37行目で急にプログラムが途切れています。X=X+増減X:Y=Y+増減Y がないので動きません。 36行目の IF もわざわざ 「:」 を書いてエラー回避されていますが、これだと判定するだけで THEN (IFで判定をしてOKだったときの処理) がからっぽのため何もしていません。 IF ~ THEN : ←これだと何もしない IF ~ THEN ←これはOK  ~ 条件が合うときに  ~ THEN と ENDIF の間が実行される ENDIF さらに、以前のプログラムが後ろにくっついたままの中途半端な状態で、結局39行目の@SOUSA~GOTO @SOUSAを繰り返すだけとなり、書き換えた部分が全く意味をなしていません。というのが今の状態です。 動かすには、例示を参考に正確に書き換えていただきたいのです>< できれば1行ずつ意味を理解してゆっくり進めたほうがよいと思います。
0そうだね
プレイ済み
返信[12]
親投稿
ほしけん Hosiken
×の行を見なおしてください。○はそのままでいいです。 28行目から   PRINT ~ × @SOUSA 【←追加】 ○ AX=0:AY=0 × A=BUTTON() 【←追加】 ○ IF A==1 THEN AY=-1 ○ IF A==2 THEN AY=1 ○ IF A==4 THEN AX=-1 ○ IF A==8 THEN AX=1 ○ CH=CHKCHR(X+AX,Y+AY) 行数オーバーのため続きます。
0そうだね
プレイ済み
返信[13]
親投稿
ほしけん Hosiken
× IF (CH==0) OR (CH==32) THEN 【「:」を削除】 ×  LOCATE X,Y:PRINT " " 【←追加】 ×  X=X+AX:Y=Y+AY 【←追加】 ○  LOCATE X,Y:PRINT "(・_・)" × ENDIF 【←追加】 × VSYNC 5 【←追加】 × GOTO @SOUSA 【←追加】 これより以下の行は不要なので消してください。
0そうだね
プレイ済み
返信[14]
親投稿
げんや genya0519
ありがとうございます!火曜日の祝日に、じっくり直したいと思います。
1そうだね
プレイ済み
返信[15]
親投稿
げんや genya0519
直したんですが…これだとまずニコチャンを動かせないです。何度もすいません。
0そうだね
プレイ済み
返信[16]
親投稿
ほしけん Hosiken
あっ…最初あった「X=10:Y=15」という行なくなってますよね? 左上にいて動けないなら、その行が抜けているせいです。 (XとYを初期化していないから、ずっとその子が X=0,Y=0→ 左上にいる) それを @SOUSA の前の行に書いてください。
0そうだね
プレイ済み
返信[17]
親投稿
ほしけん Hosiken
追記: 万が一それでも動けなければ、こちらで動かしてみたいので、公開キーを発行して見せてください。
0そうだね
プレイ済み
返信[18]
親投稿
げんや genya0519
うまく動きませんでした。公開キーは4DEX53です。
0そうだね
プレイ済み
返信[19]
親投稿
ほしけん Hosiken
見てみました。 1. AX=0:AY=0 は @SOUSA の上に移動してはダメなので、@SOUSA の下に戻してください。AXとAYには、押したボタンに応じてどこの方向に移動すれるかを入れます。@SOUSAに戻るたびに0を入れないと、ナナメに動いたりぐちゃぐちゃに動いてしまいます。 2. CH=CHKCHR(X+AX,Y+AY) の AY が YX になっています。AX と AY にこれから移動したい方向が入っているので、打ち間違えると当たり判定がうまくいきません。 3. LOCATE X,Y:PRINT "" の " と " の間にスペースをひとつ入れてください。これはその子が移動するときに前いた位置にスペースを上書きして消す処理なので、今のままだとその子が移動すると残像が残ってしまいます。
0そうだね
プレイ済み
返信[20]
親投稿
ほしけん Hosiken
1.について詳しく書きます X=10:Y=22:AX=0:AY=0 @SOUSA を X=10:Y=22 @SOUSA AX=0:AY=0 にしてください。
0そうだね
プレイ済み
返信[21]
親投稿
げんや genya0519
おおお、ついにできました!ありがとうございます!! ついでに、ステージを真ん中に寄せてみました。
1そうだね
プレイ済み
返信[22]
親投稿
ほしけん Hosiken
うまくいってよかったです!
1そうだね
プレイ済み